sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget&/translations/zh_CN/driver-api/hte/htemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/zh_TW/driver-api/hte/htemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/it_IT/driver-api/hte/htemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ja_JP/driver-api/hte/htemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ko_KR/driver-api/hte/htemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/sp_SP/driver-api/hte/htemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh@/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte.rsthKubhsection)}(hhh](htitle)}(h,The Linux Hardware Timestamping Engine (HTE)h]h,The Linux Hardware Timestamping Engine (HTE)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h Dipen Patel h]h paragraph)}(h Dipen Patelh]h Dipen Patel}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK ubh)}(hX~Certain devices have built in hardware timestamping engines which can monitor sets of system signals, lines, buses etc... in realtime for state change; upon detecting the change they can automatically store the timestamp at the moment of occurrence. Such functionality may help achieve better accuracy in obtaining timestamps than using software counterparts i.e. ktime and friends.h]hX~Certain devices have built in hardware timestamping engines which can monitor sets of system signals, lines, buses etc... in realtime for state change; upon detecting the change they can automatically store the timestamp at the moment of occurrence. Such functionality may help achieve better accuracy in obtaining timestamps than using software counterparts i.e. ktime and friends.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj hhubh)}(hThis document describes the API that can be used by hardware timestamping engine provider and consumer drivers that want to use the hardware timestamping engine (HTE) framework. Both consumers and providers must include ``#include ``.h](hThis document describes the API that can be used by hardware timestamping engine provider and consumer drivers that want to use the hardware timestamping engine (HTE) framework. Both consumers and providers must include }(hj*hhhNhNubhliteral)}(h``#include ``h]h#include }(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h(The HTE framework APIs for the providersh]h(The HTE framework APIs for the providers}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlehte_push_ts_ns (C function)c.hte_push_ts_nshNtauh1jehjThhhNhNubhdesc)}(hhh](hdesc_signature)}(hYint hte_push_ts_ns (const struct hte_chip *chip, u32 xlated_id, struct hte_ts_data *data)h]hdesc_signature_line)}(hXint hte_push_ts_ns(const struct hte_chip *chip, u32 xlated_id, struct hte_ts_data *data)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhMubh desc_name)}(hhte_push_ts_nsh]h desc_sig_name)}(hhte_push_ts_nsh]hhte_push_ts_ns}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhMubhdesc_parameterlist)}(hF(const struct hte_chip *chip, u32 xlated_id, struct hte_ts_data *data)h](hdesc_parameter)}(hconst struct hte_chip *chiph](hdesc_sig_keyword)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhte_chiph]hhte_chip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j/ ASTIdentifier)}j*jsbc.hte_push_ts_nsasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjLhhhNhNubah}(h]h ]pah"]h$]h&]uh1jJhjubj)}(hchiph]hchip}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h u32 xlated_idh](h)}(hhh]j)}(hu32h]hu32}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjymodnameN classnameNj.j1)}j4]j8c.hte_push_ts_nsasbuh1hhjpubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(h xlated_idh]h xlated_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct hte_ts_data *datah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_ts_datah]h hte_ts_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j8c.hte_push_ts_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhj}hhhjhMubah}(h]jtah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j{hjhMhjxhhubh desc_content)}(hhh]h)}(h#Push timestamp data in nanoseconds.h]h#Push timestamp data in nanoseconds.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjDhhubah}(h]h ]h"]h$]h&]uh1jBhjxhhhjhMubeh}(h]h ](j(functioneh"]h$]h&]domainj(objtypej_desctypej_noindex noindexentrynocontentsentryuh1jvhhhjThNhNubh container)}(hX**Parameters** ``const struct hte_chip *chip`` The HTE chip, used during the registration. ``u32 xlated_id`` entity id understood by both subsystem and provider, this is obtained from xlate callback during request API. ``struct hte_ts_data *data`` timestamp data. **Description** It is used by the provider to push timestamp data. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]hstrong)}(hjqh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjoubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjkubhdefinition_list)}(hhh](hdefinition_list_item)}(hL``const struct hte_chip *chip`` The HTE chip, used during the registration. h](hterm)}(h``const struct hte_chip *chip``h]j3)}(hjh]hconst struct hte_chip *chip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubh definition)}(hhh]h)}(h+The HTE chip, used during the registration.h]h+The HTE chip, used during the registration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u32 xlated_id`` entity id understood by both subsystem and provider, this is obtained from xlate callback during request API. h](j)}(h``u32 xlated_id``h]j3)}(hjh]h u32 xlated_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(hmentity id understood by both subsystem and provider, this is obtained from xlate callback during request API.h]hmentity id understood by both subsystem and provider, this is obtained from xlate callback during request API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h-``struct hte_ts_data *data`` timestamp data. h](j)}(h``struct hte_ts_data *data``h]j3)}(hj h]hstruct hte_ts_data *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(htimestamp data.h]htimestamp data.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hMhjubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(h**Description**h]jt)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjFubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjkubh)}(h2It is used by the provider to push timestamp data.h]h2It is used by the provider to push timestamp data.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjkubh)}(h **Return**h]jt)}(hjoh]hReturn}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjmubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjkubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjThhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jr#devm_hte_register_chip (C function)c.devm_hte_register_chiphNtauh1jehjThhhNhNubjw)}(hhh](j|)}(h2int devm_hte_register_chip (struct hte_chip *chip)h]j)}(h1int devm_hte_register_chip(struct hte_chip *chip)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hdevm_hte_register_chiph]j)}(hdevm_hte_register_chiph]hdevm_hte_register_chip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubj)}(h(struct hte_chip *chip)h]j)}(hstruct hte_chip *chiph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hhte_chiph]hhte_chip}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jsbc.devm_hte_register_chipasbuh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hj=hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hchiph]hchip}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjhMhjhhubjC)}(hhh]h)}(h*Resource managed API to register HTE chip.h]h*Resource managed API to register HTE chip.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjqhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjThNhNubjj)}(hX&**Parameters** ``struct hte_chip *chip`` the HTE chip to add to subsystem. **Description** It is used by the provider to register itself with the HTE subsystem. The unregistration is done automatically when the provider exits. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubj)}(hhh]j)}(h<``struct hte_chip *chip`` the HTE chip to add to subsystem. h](j)}(h``struct hte_chip *chip``h]j3)}(hjh]hstruct hte_chip *chip}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h!the HTE chip to add to subsystem.h]h!the HTE chip to add to subsystem.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubh)}(hIt is used by the provider to register itself with the HTE subsystem. The unregistration is done automatically when the provider exits.h]hIt is used by the provider to register itself with the HTE subsystem. The unregistration is done automatically when the provider exits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:27: ./drivers/hte/hte.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjThhhNhNubeh}(h](the-hte-framework-apis-for-the-providersah ]h"](the hte framework apis for the providersah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h(The HTE framework APIs for the consumersh]h(The HTE framework APIs for the consumers}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhhhhhKubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_ts_put (C function) c.hte_ts_puthNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(h)int hte_ts_put (struct hte_ts_desc *desc)h]j)}(h(int hte_ts_put(struct hte_ts_desc *desc)h](j)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhhjhKubj)}(h hte_ts_puth]j)}(h hte_ts_puth]h hte_ts_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjqhhhjhKubj)}(h(struct hte_ts_desc *desc)h]j)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jsb c.hte_ts_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdesch]hdesc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjqhhhjhKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjmhhhjhKubah}(h]jhah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjhKhjjhhubjC)}(hhh]h)}(h1Release and disable timestamp for the given desc.h]h1Release and disable timestamp for the given desc.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhj2hhubah}(h]h ]h"]h$]h&]uh1jBhjjhhhjhKubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjMjejMjfjgjhuh1jvhhhjKhNhNubjj)}(h**Parameters** ``struct hte_ts_desc *desc`` timestamp descriptor. **Context** debugfs_remove_recursive() function call may use sleeping locks, not suitable from atomic context. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjUubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjQubj)}(hhh]j)}(h3``struct hte_ts_desc *desc`` timestamp descriptor. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hjvh]hstruct hte_ts_desc *desc}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjtubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjpubj)}(hhh]h)}(htimestamp descriptor.h]htimestamp descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubh)}(h **Context**h]jt)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjQubh)}(hbdebugfs_remove_recursive() function call may use sleeping locks, not suitable from atomic context.h]hbdebugfs_remove_recursive() function call may use sleeping locks, not suitable from atomic context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjQubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjQubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chKhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_disable_ts (C function)c.hte_disable_tshNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(h-int hte_disable_ts (struct hte_ts_desc *desc)h]j)}(h,int hte_disable_ts(struct hte_ts_desc *desc)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM=ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hM=ubj)}(hhte_disable_tsh]j)}(hhte_disable_tsh]hhte_disable_ts}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj+hM=ubj)}(h(struct hte_ts_desc *desc)h]j)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjzmodnameN classnameNj.j1)}j4]j7)}j*j@sbc.hte_disable_tsasbuh1hhjVubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjVubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjRubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj+hM=ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhj+hM=ubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj+hM=hjhhubjC)}(hhh]h)}(h&Disable timestamp on given descriptor.h]h&Disable timestamp on given descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM4hjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj+hM=ubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjKhNhNubjj)}(hX>**Parameters** ``struct hte_ts_desc *desc`` ts descriptor, this is the same as returned by the request API. **Description** The API does not release any resources associated with desc. **Context** Holds mutex lock, not suitable from atomic context. **Return** 0 on success or a negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM8hjubj)}(hhh]j)}(h]``struct hte_ts_desc *desc`` ts descriptor, this is the same as returned by the request API. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hj h]hstruct hte_ts_desc *desc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM8hj ubj)}(hhh]h)}(h?ts descriptor, this is the same as returned by the request API.h]h?ts descriptor, this is the same as returned by the request API.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3 hM8hj4 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj3 hM8hj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjY h]h Description}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjW ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM:hjubh)}(h hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMHhj ubh)}(h **Return**h]jt)}(hjO h]hReturn}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjM ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMJhj ubh)}(h10 on success or a negative error code on failure.h]h10 on success or a negative error code on failure.}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMIhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrof_hte_req_count (C function)c.of_hte_req_counthNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(h)int of_hte_req_count (struct device *dev)h]j)}(h(int of_hte_req_count(struct device *dev)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hof_hte_req_counth]j)}(hof_hte_req_counth]hof_hte_req_count}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hMubj)}(h(struct device *dev)h]j)}(hstruct device *devh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetj modnameN classnameNj.j1)}j4]j7)}j*j sbc.of_hte_req_countasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjK)}(hjNh]h*}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhj ubj)}(hdevh]hdev}(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj hhhj hMubah}(h]j ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj hMhj hhubjC)}(hhh]h)}(h+Return the number of entities to timestamp.h]h+Return the number of entities to timestamp.}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjQ hhubah}(h]h ]h"]h$]h&]uh1jBhj hhhj hMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjl jejl jfjgjhuh1jvhhhjKhNhNubjj)}(hX **Parameters** ``struct device *dev`` The HTE consumer. **Description** The function returns the total count of the requested entities to timestamp by parsing device tree. **Return** Positive number on success, -ENOENT if no entries, -EINVAL for other errors.h](h)}(h**Parameters**h]jt)}(hjv h]h Parameters}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjt ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjp ubj)}(hhh]j)}(h)``struct device *dev`` The HTE consumer. h](j)}(h``struct device *dev``h]j3)}(hj h]hstruct device *dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj ubj)}(hhh]h)}(hThe HTE consumer.h]hThe HTE consumer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjp ubh)}(h**Description**h]jt)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjp ubh)}(hcThe function returns the total count of the requested entities to timestamp by parsing device tree.h]hcThe function returns the total count of the requested entities to timestamp by parsing device tree.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjp ubh)}(h **Return**h]jt)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjp ubh)}(hLPositive number on success, -ENOENT if no entries, -EINVAL for other errors.h]hLPositive number on success, -ENOENT if no entries, -EINVAL for other errors.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjp ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_ts_get (C function) c.hte_ts_gethNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(hHint hte_ts_get (struct device *dev, struct hte_ts_desc *desc, int index)h]j)}(hGint hte_ts_get(struct device *dev, struct hte_ts_desc *desc, int index)h](j)}(hinth]hint}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 hhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM2ubj)}(h h]h }(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 hhhjJ hM2ubj)}(h hte_ts_geth]j)}(h hte_ts_geth]h hte_ts_get}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj8 hhhjJ hM2ubj)}(h9(struct device *dev, struct hte_ts_desc *desc, int index)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetj modnameN classnameNj.j1)}j4]j7)}j*j_ sb c.hte_ts_getasbuh1hhju ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubjK)}(hjNh]h*}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhju ubj)}(hdevh]hdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjq ubj)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetj modnameN classnameNj.j1)}j4]j c.hte_ts_getasbuh1hhj ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjK)}(hjNh]h*}(hj5hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhj ubj)}(hdesch]hdesc}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjq ubj)}(h int indexh](j)}(hinth]hint}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hindexh]hindex}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjq ubeh}(h]h ]h"]h$]h&]hhuh1jhj8 hhhjJ hM2ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj4 hhhjJ hM2ubah}(h]j/ ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjJ hM2hj1 hhubjC)}(hhh]h)}(h/The function to initialize and obtain HTE desc.h]h/The function to initialize and obtain HTE desc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM$hjhhubah}(h]h ]h"]h$]h&]uh1jBhj1 hhhjJ hM2ubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjKhNhNubjj)}(hXt**Parameters** ``struct device *dev`` HTE consumer/client device, used in case of parsing device tree node. ``struct hte_ts_desc *desc`` Pre-allocated timestamp descriptor. ``int index`` The index will be used as an index to parse line_id from the device tree node if node is present. **Description** The function initializes the consumer provided HTE descriptor. If consumer has device tree node, index is used to parse the line id and other details. The function needs to be called before using any request APIs. **Context** Holds mutex lock. **Return** Returns 0 on success or negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM(hjubj)}(hhh](j)}(h]``struct device *dev`` HTE consumer/client device, used in case of parsing device tree node. h](j)}(h``struct device *dev``h]j3)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM*hjubj)}(hhh]h)}(hEHTE consumer/client device, used in case of parsing device tree node.h]hEHTE consumer/client device, used in case of parsing device tree node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(hA``struct hte_ts_desc *desc`` Pre-allocated timestamp descriptor. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hjh]hstruct hte_ts_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM+hjubj)}(hhh]h)}(h#Pre-allocated timestamp descriptor.h]h#Pre-allocated timestamp descriptor.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hM+hj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hM+hjubj)}(hp``int index`` The index will be used as an index to parse line_id from the device tree node if node is present. h](j)}(h ``int index``h]j3)}(hjTh]h int index}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjRubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM-hjNubj)}(hhh]h)}(haThe index will be used as an index to parse line_id from the device tree node if node is present.h]haThe index will be used as an index to parse line_id from the device tree node if node is present.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM,hjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihM-hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM/hjubh)}(hThe function initializes the consumer provided HTE descriptor. If consumer has device tree node, index is used to parse the line id and other details. The function needs to be called before using any request APIs.h]hThe function initializes the consumer provided HTE descriptor. If consumer has device tree node, index is used to parse the line id and other details. The function needs to be called before using any request APIs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM%hjubh)}(h **Context**h]jt)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM)hjubh)}(hHolds mutex lock.h]hHolds mutex lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM/hjubh)}(h **Return**h]jt)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM1hjubh)}(h7Returns 0 on success or negative error code on failure.h]h7Returns 0 on success or negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_request_ts_ns (C function)c.hte_request_ts_nshNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(haint hte_request_ts_ns (struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h]j)}(h`int hte_request_ts_ns(struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj1hMubj)}(hhte_request_ts_nsh]j)}(hhte_request_ts_nsh]hhte_request_ts_ns}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj1hMubj)}(hK(struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h](j)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jFsbc.hte_request_ts_nsasbuh1hhj\ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhj\ubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjXubj)}(hhte_ts_cb_t cbh](h)}(hhh]j)}(h hte_ts_cb_th]h hte_ts_cb_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]jc.hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcbh]hcb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjXubj)}(hhte_ts_sec_cb_t tcbh](h)}(hhh]j)}(hhte_ts_sec_cb_th]hhte_ts_sec_cb_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]jc.hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htcbh]htcb}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjXubj)}(h void *datah](j)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjK)}(hjNh]h*}(hj~hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhj^ubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjXubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj1hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhj1hMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj1hMhjhhubjC)}(hhh]h)}(h@The API to request and enable hardware timestamp in nanoseconds.h]h@The API to request and enable hardware timestamp in nanoseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM|hjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj1hMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjKhNhNubjj)}(hX**Parameters** ``struct hte_ts_desc *desc`` Pre-allocated and initialized timestamp descriptor. ``hte_ts_cb_t cb`` Callback to push the timestamp data to consumer. ``hte_ts_sec_cb_t tcb`` Optional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB. ``void *data`` Client data, used during cb and tcb callbacks. **Description** The entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp. **Context** Holds mutex lock. **Return** Returns 0 on success or negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh](j)}(hQ``struct hte_ts_desc *desc`` Pre-allocated and initialized timestamp descriptor. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hjh]hstruct hte_ts_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h3Pre-allocated and initialized timestamp descriptor.h]h3Pre-allocated and initialized timestamp descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hD``hte_ts_cb_t cb`` Callback to push the timestamp data to consumer. h](j)}(h``hte_ts_cb_t cb``h]j3)}(hj/h]hhte_ts_cb_t cb}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj-ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj)ubj)}(hhh]h)}(h0Callback to push the timestamp data to consumer.h]h0Callback to push the timestamp data to consumer.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjubj)}(h``hte_ts_sec_cb_t tcb`` Optional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB. h](j)}(h``hte_ts_sec_cb_t tcb``h]j3)}(hjhh]hhte_ts_sec_cb_t tcb}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjfubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjbubj)}(hhh]h)}(htOptional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB.h]htOptional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hMhjubj)}(h>``void *data`` Client data, used during cb and tcb callbacks. h](j)}(h``void *data``h]j3)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h.Client data, used during cb and tcb callbacks.h]h.Client data, used during cb and tcb callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(hThe entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp.h]hThe entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chM}hjubh)}(h **Context**h]jt)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(hHolds mutex lock.h]hHolds mutex lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h **Return**h]jt)}(hj+h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj)ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h7Returns 0 on success or negative error code on failure.h]h7Returns 0 on success or negative error code on failure.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jr#devm_hte_request_ts_ns (C function)c.devm_hte_request_ts_nshNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(hzint devm_hte_request_ts_ns (struct device *dev, struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h]j)}(hyint devm_hte_request_ts_ns(struct device *dev, struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h](j)}(hinth]hint}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubj)}(hdevm_hte_request_ts_nsh]j)}(hdevm_hte_request_ts_nsh]hdevm_hte_request_ts_ns}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjlhhhj~hMubj)}(h_(struct device *dev, struct hte_ts_desc *desc, hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data)h](j)}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jsbc.devm_hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetj?modnameN classnameNj.j1)}j4]jc.devm_hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjihhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdesch]hdesc}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hhte_ts_cb_t cbh](h)}(hhh]j)}(h hte_ts_cb_th]h hte_ts_cb_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]jc.devm_hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcbh]hcb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hhte_ts_sec_cb_t tcbh](h)}(hhh]j)}(hhte_ts_sec_cb_th]hhte_ts_sec_cb_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]jc.devm_hte_request_ts_nsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htcbh]htcb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hj;hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdatah]hdata}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjlhhhj~hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhhj~hMubah}(h]jcah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj~hMhjehhubjC)}(hhh]h)}(hMResource managed API to request and enable hardware timestamp in nanoseconds.h]hMResource managed API to request and enable hardware timestamp in nanoseconds.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjohhubah}(h]h ]h"]h$]h&]uh1jBhjehhhj~hMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjKhNhNubjj)}(hX**Parameters** ``struct device *dev`` HTE consumer/client device. ``struct hte_ts_desc *desc`` Pre-allocated and initialized timestamp descriptor. ``hte_ts_cb_t cb`` Callback to push the timestamp data to consumer. ``hte_ts_sec_cb_t tcb`` Optional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB. ``void *data`` Client data, used during cb and tcb callbacks. **Description** The entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp. It deallocates and disables automatically when the consumer exits. **Context** Holds mutex lock. **Return** Returns 0 on success or negative error code on failure.Xh](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh](j)}(h3``struct device *dev`` HTE consumer/client device. h](j)}(h``struct device *dev``h]j3)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(hHTE consumer/client device.h]hHTE consumer/client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hQ``struct hte_ts_desc *desc`` Pre-allocated and initialized timestamp descriptor. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hjh]hstruct hte_ts_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h3Pre-allocated and initialized timestamp descriptor.h]h3Pre-allocated and initialized timestamp descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hD``hte_ts_cb_t cb`` Callback to push the timestamp data to consumer. h](j)}(h``hte_ts_cb_t cb``h]j3)}(hj%h]hhte_ts_cb_t cb}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj#ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h0Callback to push the timestamp data to consumer.h]h0Callback to push the timestamp data to consumer.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hMhjubj)}(h``hte_ts_sec_cb_t tcb`` Optional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB. h](j)}(h``hte_ts_sec_cb_t tcb``h]j3)}(hj^h]hhte_ts_sec_cb_t tcb}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj\ubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjXubj)}(hhh]h)}(htOptional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB.h]htOptional callback. If its provided, subsystem initializes workqueue. It is called when cb returns HTE_RUN_SECOND_CB.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshMhjubj)}(h>``void *data`` Client data, used during cb and tcb callbacks. h](j)}(h``void *data``h]j3)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h.Client data, used during cb and tcb callbacks.h]h.Client data, used during cb and tcb callbacks.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(hThe entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp. It deallocates and disables automatically when the consumer exits.h]hThe entity is provider specific for example, GPIO lines, signals, buses etc...The API allocates necessary resources and enables the timestamp. It deallocates and disables automatically when the consumer exits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h **Context**h]jt)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(hHolds mutex lock.h]hHolds mutex lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h **Return**h]jt)}(hj!h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h7Returns 0 on success or negative error code on failure.h]h7Returns 0 on success or negative error code on failure.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_init_line_attr (C function)c.hte_init_line_attrhNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(hvint hte_init_line_attr (struct hte_ts_desc *desc, u32 line_id, unsigned long edge_flags, const char *name, void *data)h]j)}(huint hte_init_line_attr(struct hte_ts_desc *desc, u32 line_id, unsigned long edge_flags, const char *name, void *data)h](j)}(hinth]hint}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjthMubj)}(hhte_init_line_attrh]j)}(hhte_init_line_attrh]hhte_init_line_attr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjbhhhjthMubj)}(h_(struct hte_ts_desc *desc, u32 line_id, unsigned long edge_flags, const char *name, void *data)h](j)}(hstruct hte_ts_desc *desch](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jsbc.hte_init_line_attrasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h u32 line_idh](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]jc.hte_init_line_attrasbuh1hhjubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hline_idh]hline_id}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hunsigned long edge_flagsh](j)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hlongh]hlong}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h edge_flagsh]h edge_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst char *nameh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hj'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdatah]hdata}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjbhhhjthMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj^hhhjthMubah}(h]jYah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjthMhj[hhubjC)}(hhh]h)}(hInitialize line attributes.h]hInitialize line attributes.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj[hhubah}(h]h ]h"]h$]h&]uh1jBhj[hhhjthMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjvjejvjfjgjhuh1jvhhhjKhNhNubjj)}(hX**Parameters** ``struct hte_ts_desc *desc`` Pre-allocated timestamp descriptor. ``u32 line_id`` line id. ``unsigned long edge_flags`` edge flags related to line_id. ``const char *name`` name of the line. ``void *data`` line data related to line_id. **Description** Zeroes out line attributes and initializes with provided arguments. The function needs to be called before calling any consumer facing functions. **Context** Any. **Return** 0 on success or negative error code for the failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj~ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubj)}(hhh](j)}(hA``struct hte_ts_desc *desc`` Pre-allocated timestamp descriptor. h](j)}(h``struct hte_ts_desc *desc``h]j3)}(hjh]hstruct hte_ts_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h#Pre-allocated timestamp descriptor.h]h#Pre-allocated timestamp descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u32 line_id`` line id. h](j)}(h``u32 line_id``h]j3)}(hjh]h u32 line_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(hline id.h]hline id.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h<``unsigned long edge_flags`` edge flags related to line_id. h](j)}(h``unsigned long edge_flags``h]j3)}(hjh]hunsigned long edge_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj ubj)}(hhh]h)}(hedge flags related to line_id.h]hedge flags related to line_id.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhjubj)}(h'``const char *name`` name of the line. h](j)}(h``const char *name``h]j3)}(hjJh]hconst char *name}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjHubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjDubj)}(hhh]h)}(hname of the line.h]hname of the line.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hMhjubj)}(h-``void *data`` line data related to line_id. h](j)}(h``void *data``h]j3)}(hjh]h void *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhj}ubj)}(hhh]h)}(hline data related to line_id.h]hline data related to line_id.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]jt)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubh)}(hZeroes out line attributes and initializes with provided arguments. The function needs to be called before calling any consumer facing functions.h]hZeroes out line attributes and initializes with provided arguments. The function needs to be called before calling any consumer facing functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubh)}(h **Context**h]jt)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubh)}(hAny.h]hAny.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubh)}(h **Return**h]jt)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubh)}(h40 on success or negative error code for the failure.h]h40 on success or negative error code for the failure.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jr!hte_get_clk_src_info (C function)c.hte_get_clk_src_infohNtauh1jehjKhhhNhNubjw)}(hhh](j|)}(hRint hte_get_clk_src_info (const struct hte_ts_desc *desc, struct hte_clk_info *ci)h]j)}(hQint hte_get_clk_src_info(const struct hte_ts_desc *desc, struct hte_clk_info *ci)h](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj_hMubj)}(hhte_get_clk_src_infoh]j)}(hhte_get_clk_src_infoh]hhte_get_clk_src_info}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ](jjeh"]h$]h&]hhuh1jhjMhhhj_hMubj)}(h9(const struct hte_ts_desc *desc, struct hte_clk_info *ci)h](j)}(hconst struct hte_ts_desc *desch](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_ts_desch]h hte_ts_desc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetjmodnameN classnameNj.j1)}j4]j7)}j*jtsbc.hte_get_clk_src_infoasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hdesch]hdesc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct hte_clk_info *cih](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h hte_clk_infoh]h hte_clk_info}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainj(reftypej* reftargetj;modnameN classnameNj.j1)}j4]jc.hte_get_clk_src_infoasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjK)}(hjNh]h*}(hjehhhNhNubah}(h]h ]jWah"]h$]h&]uh1jJhjubj)}(hcih]hci}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjMhhhj_hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjIhhhj_hMubah}(h]jDah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj_hMhjFhhubjC)}(hhh]h)}(h5Get the clock source information for a ts descriptor.h]h5Get the clock source information for a ts descriptor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjhhubah}(h]h ]h"]h$]h&]uh1jBhjFhhhj_hMubeh}(h]h ](j(functioneh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjKhNhNubjj)}(hX**Parameters** ``const struct hte_ts_desc *desc`` ts descriptor, same as returned from request API. ``struct hte_clk_info *ci`` The API fills this structure with the clock information data. **Context** Any context. **Return** 0 on success else negative error code on failure.h](h)}(h**Parameters**h]jt)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh](j)}(hU``const struct hte_ts_desc *desc`` ts descriptor, same as returned from request API. h](j)}(h"``const struct hte_ts_desc *desc``h]j3)}(hjh]hconst struct hte_ts_desc *desc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h1ts descriptor, same as returned from request API.h]h1ts descriptor, same as returned from request API.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hZ``struct hte_clk_info *ci`` The API fills this structure with the clock information data. h](j)}(h``struct hte_clk_info *ci``h]j3)}(hjh]hstruct hte_clk_info *ci}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubj)}(hhh]h)}(h=The API fills this structure with the clock information data.h]h=The API fills this structure with the clock information data.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Context**h]jt)}(hjQh]hContext}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jshjOubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h Any context.h]h Any context.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h **Return**h]jt)}(hjxh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjvubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubh)}(h10 on success else negative error code on failure.h]h10 on success else negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhT/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:33: ./drivers/hte/hte.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjKhhhNhNubeh}(h](the-hte-framework-apis-for-the-consumersah ]h"](the hte framework apis for the consumersah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h#The HTE framework public structuresh]h#The HTE framework public structures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK%ubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_edge (C enum) c.hte_edgehNtauh1jehjhhhNhNubjw)}(hhh](j|)}(hhte_edgeh]j)}(h enum hte_edgeh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hhte_edgeh]j)}(hjh]hhte_edge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjhKhjhhubjC)}(hhh]h)}(hHTE line edge flags.h]hHTE line edge flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK hjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](j(enumeh"]h$]h&]jcj(jdj1jej1jfjgjhuh1jvhhhjhNhNubjj)}(h**Constants** ``HTE_EDGE_NO_SETUP`` No edge setup. In this case consumer will setup edges, for example during request irq call. ``HTE_RISING_EDGE_TS`` Rising edge. ``HTE_FALLING_EDGE_TS`` Falling edge.h](h)}(h **Constants**h]jt)}(hj;h]h Constants}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj9ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj5ubj)}(hhh](j)}(hr``HTE_EDGE_NO_SETUP`` No edge setup. In this case consumer will setup edges, for example during request irq call. h](j)}(h``HTE_EDGE_NO_SETUP``h]j3)}(hjZh]hHTE_EDGE_NO_SETUP}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjXubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjTubj)}(hhh]h)}(h[No edge setup. In this case consumer will setup edges, for example during request irq call.h]h[No edge setup. In this case consumer will setup edges, for example during request irq call.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjohKhjQubj)}(h$``HTE_RISING_EDGE_TS`` Rising edge. h](j)}(h``HTE_RISING_EDGE_TS``h]j3)}(hjh]hHTE_RISING_EDGE_TS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjubj)}(hhh]h)}(h Rising edge.h]h Rising edge.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjQubj)}(h%``HTE_FALLING_EDGE_TS`` Falling edge.h](j)}(h``HTE_FALLING_EDGE_TS``h]j3)}(hjh]hHTE_FALLING_EDGE_TS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjubj)}(hhh]h)}(h Falling edge.h]h Falling edge.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjQubeh}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_return (C enum) c.hte_returnhNtauh1jehjhhhNhNubjw)}(hhh](j|)}(h hte_returnh]j)}(henum hte_returnh](j)}(hjh]henum}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK!ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj4hK!ubj)}(h hte_returnh]j)}(hj!h]h hte_return}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]hhuh1jhj#hhhj4hK!ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhj4hK!ubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj4hK!hjhhubjC)}(hhh]h)}(h1HTE subsystem return values used during callback.h]h1HTE subsystem return values used during callback.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj4hK!ubeh}(h]h ](j(enumeh"]h$]h&]jcj(jdjjejjfjgjhuh1jvhhhjhNhNubjj)}(h**Constants** ``HTE_CB_HANDLED`` The consumer handled the data. ``HTE_RUN_SECOND_CB`` The consumer needs further processing, in that case HTE subsystem calls secondary callback provided by the consumer where it is allowed to sleep.h](h)}(h **Constants**h]jt)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jshjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK hjubj)}(hhh](j)}(h2``HTE_CB_HANDLED`` The consumer handled the data. h](j)}(h``HTE_CB_HANDLED``h]j3)}(hjh]hHTE_CB_HANDLED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK#hjubj)}(hhh]h)}(hThe consumer handled the data.h]hThe consumer handled the data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK#hjubj)}(h``HTE_RUN_SECOND_CB`` The consumer needs further processing, in that case HTE subsystem calls secondary callback provided by the consumer where it is allowed to sleep.h](j)}(h``HTE_RUN_SECOND_CB``h]j3)}(hjh]hHTE_RUN_SECOND_CB}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK'hjubj)}(hhh]h)}(hThe consumer needs further processing, in that case HTE subsystem calls secondary callback provided by the consumer where it is allowed to sleep.h]hThe consumer needs further processing, in that case HTE subsystem calls secondary callback provided by the consumer where it is allowed to sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_ts_data (C struct) c.hte_ts_datahNtauh1jehjhhhNhNubjw)}(hhh](j|)}(h hte_ts_datah]j)}(hstruct hte_ts_datah](j)}(hjh]hstruct}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK.ubj)}(h h]h }(hjK hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 hhhjJ hK.ubj)}(h hte_ts_datah]j)}(hj7 h]h hte_ts_data}(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj9 hhhjJ hK.ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj5 hhhjJ hK.ubah}(h]j0 ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjJ hK.hj2 hhubjC)}(hhh]h)}(hHTE timestamp data.h]hHTE timestamp data.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK)hj| hhubah}(h]h ]h"]h$]h&]uh1jBhj2 hhhjJ hK.ubeh}(h]h ](j(structeh"]h$]h&]jcj(jdj jej jfjgjhuh1jvhhhjhNhNubjj)}(hX**Definition**:: struct hte_ts_data { u64 tsc; u64 seq; int raw_level; }; **Members** ``tsc`` Timestamp value. ``seq`` Sequence counter of the timestamps. ``raw_level`` Level of the line at the timestamp if provider supports it, -1 otherwise.h](h)}(h**Definition**::h](jt)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK-hj ubh literal_block)}(hDstruct hte_ts_data { u64 tsc; u64 seq; int raw_level; };h]hDstruct hte_ts_data { u64 tsc; u64 seq; int raw_level; };}hj sbah}(h]h ]h"]h$]h&]hhuh1j hV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK/hj ubh)}(h **Members**h]jt)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK5hj ubj)}(hhh](j)}(h``tsc`` Timestamp value. h](j)}(h``tsc``h]j3)}(hj h]htsc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK,hj ubj)}(hhh]h)}(hTimestamp value.h]hTimestamp value.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK,hj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj!hK,hj ubj)}(h,``seq`` Sequence counter of the timestamps. h](j)}(h``seq``h]j3)}(hj'!h]hseq}(hj)!hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj%!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK-hj!!ubj)}(hhh]h)}(h#Sequence counter of the timestamps.h]h#Sequence counter of the timestamps.}(hj@!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj**Typedef**: HTE timestamp data processing secondary callback.h](jt)}(h **Typedef**h]hTypedef}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$ubh3: HTE timestamp data processing secondary callback.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKMhj$hhubah}(h]h ]h"]h$]h&]uh1jBhj[$hhhj}$hKGubeh}(h]h ](j(macroeh"]h$]h&]jcj(jdj$jej$jfjgjhuh1jvhhhjhNhNubh)}(h **Syntax**h]jt)}(hj$h]hSyntax}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKPhjhhubje#)}(h1``enum hte_return hte_ts_sec_cb_t (void *data)`` h]h)}(h0``enum hte_return hte_ts_sec_cb_t (void *data)``h]j3)}(hj$h]h,enum hte_return hte_ts_sec_cb_t (void *data)}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj$ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKRhj$ubah}(h]h ]h"]h$]h&]uh1jd#hj$hKRhjhhubjj)}(h**Parameters** ``void *data`` Client supplied data. **Description** This is used when the client needs further processing where it is allowed to sleep.h](h)}(h**Parameters**h]jt)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKVhj$ubj)}(hhh]j)}(h%``void *data`` Client supplied data. h](j)}(h``void *data``h]j3)}(hj%h]h void *data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKRhj%ubj)}(hhh]h)}(hClient supplied data.h]hClient supplied data.}(hj/%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+%hKRhj,%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj+%hKRhj %ubah}(h]h ]h"]h$]h&]uh1jhj$ubh)}(h**Description**h]jt)}(hjQ%h]h Description}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjO%ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKThj$ubh)}(hSThis is used when the client needs further processing where it is allowed to sleep.h]hSThis is used when the client needs further processing where it is allowed to sleep.}(hjg%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKNhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_line_attr (C struct)c.hte_line_attrhNtauh1jehjhhhNhNubjw)}(hhh](j|)}(h hte_line_attrh]j)}(hstruct hte_line_attrh](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKTubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hKTubj)}(h hte_line_attrh]j)}(hj%h]h hte_line_attr}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj%hhhj%hKTubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj%hhhj%hKTubah}(h]j%ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj%hKThj%hhubjC)}(hhh]h)}(hLine attributes.h]hLine attributes.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKXhj%hhubah}(h]h ]h"]h$]h&]uh1jBhj%hhhj%hKTubeh}(h]h ](j(structeh"]h$]h&]jcj(jdj%jej%jfjgjhuh1jvhhhjhNhNubjj)}(hX**Definition**:: struct hte_line_attr { u32 line_id; void *line_data; unsigned long edge_flags; const char *name; }; **Members** ``line_id`` The logical ID understood by the consumers and providers. ``line_data`` Line data related to line_id. ``edge_flags`` Edge setup flags. ``name`` Descriptive name of the entity that is being monitored for the hardware timestamping. If null, HTE core will construct the name.h](h)}(h**Definition**::h](jt)}(h**Definition**h]h Definition}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj%ubh:}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK\hj%ubj )}(hsstruct hte_line_attr { u32 line_id; void *line_data; unsigned long edge_flags; const char *name; };h]hsstruct hte_line_attr { u32 line_id; void *line_data; unsigned long edge_flags; const char *name; };}hj&sbah}(h]h ]h"]h$]h&]hhuh1j hV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK^hj%ubh)}(h **Members**h]jt)}(hj&&h]hMembers}(hj(&hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj$&ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKehj%ubj)}(hhh](j)}(hF``line_id`` The logical ID understood by the consumers and providers. h](j)}(h ``line_id``h]j3)}(hjE&h]hline_id}(hjG&hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjC&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK[hj?&ubj)}(hhh]h)}(h9The logical ID understood by the consumers and providers.h]h9The logical ID understood by the consumers and providers.}(hj^&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ&hK[hj[&ubah}(h]h ]h"]h$]h&]uh1jhj?&ubeh}(h]h ]h"]h$]h&]uh1jhjZ&hK[hj<&ubj)}(h,``line_data`` Line data related to line_id. h](j)}(h ``line_data``h]j3)}(hj~&h]h line_data}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj|&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK\hjx&ubj)}(hhh]h)}(hLine data related to line_id.h]hLine data related to line_id.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hK\hj&ubah}(h]h ]h"]h$]h&]uh1jhjx&ubeh}(h]h ]h"]h$]h&]uh1jhj&hK\hj<&ubj)}(h!``edge_flags`` Edge setup flags. h](j)}(h``edge_flags``h]j3)}(hj&h]h edge_flags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK]hj&ubj)}(hhh]h)}(hEdge setup flags.h]hEdge setup flags.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hK]hj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hK]hj<&ubj)}(h``name`` Descriptive name of the entity that is being monitored for the hardware timestamping. If null, HTE core will construct the name.h](j)}(h``name``h]j3)}(hj&h]hname}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK^hj&ubj)}(hhh]h)}(hDescriptive name of the entity that is being monitored for the hardware timestamping. If null, HTE core will construct the name.h]hDescriptive name of the entity that is being monitored for the hardware timestamping. If null, HTE core will construct the name.}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hK^hj'ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj'hK^hj<&ubeh}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_ts_desc (C struct) c.hte_ts_deschNtauh1jehjhhhNhNubjw)}(hhh](j|)}(h hte_ts_desch]j)}(hstruct hte_ts_desch](j)}(hjh]hstruct}(hjI'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKeubj)}(h h]h }(hjW'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE'hhhjV'hKeubj)}(h hte_ts_desch]j)}(hjC'h]h hte_ts_desc}(hji'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje'ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjE'hhhjV'hKeubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjA'hhhjV'hKeubah}(h]j<'ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hjV'hKehj>'hhubjC)}(hhh]h)}(hHTE timestamp descriptor.h]hHTE timestamp descriptor.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKihj'hhubah}(h]h ]h"]h$]h&]uh1jBhj>'hhhjV'hKeubeh}(h]h ](j(structeh"]h$]h&]jcj(jdj'jej'jfjgjhuh1jvhhhjhNhNubjj)}(h**Definition**:: struct hte_ts_desc { struct hte_line_attr attr; void *hte_data; }; **Members** ``attr`` The line attributes. ``hte_data`` Subsystem's private data, set by HTE subsystem.h](h)}(h**Definition**::h](jt)}(h**Definition**h]h Definition}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj'ubh:}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKmhj'ubj )}(hJstruct hte_ts_desc { struct hte_line_attr attr; void *hte_data; };h]hJstruct hte_ts_desc { struct hte_line_attr attr; void *hte_data; };}hj'sbah}(h]h ]h"]h$]h&]hhuh1j hV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKohj'ubh)}(h **Members**h]jt)}(hj'h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj'ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKthj'ubj)}(hhh](j)}(h``attr`` The line attributes. h](j)}(h``attr``h]j3)}(hj'h]hattr}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKohj'ubj)}(hhh]h)}(hThe line attributes.h]hThe line attributes.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj (hKohj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj (hKohj'ubj)}(h<``hte_data`` Subsystem's private data, set by HTE subsystem.h](j)}(h ``hte_data``h]j3)}(hj1(h]hhte_data}(hj3(hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKohj+(ubj)}(hhh]h)}(h/Subsystem's private data, set by HTE subsystem.h]h1Subsystem’s private data, set by HTE subsystem.}(hjJ(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKphjG(ubah}(h]h ]h"]h$]h&]uh1jhj+(ubeh}(h]h ]h"]h$]h&]uh1jhjF(hKohj'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubh)}(h**Description**h]jt)}(hjt(h]h Description}(hjv(hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjr(ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKshjhhubh)}(hbThis structure is a communication token between consumers to subsystem and subsystem to providers.h]hbThis structure is a communication token between consumers to subsystem and subsystem to providers.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKjhjhhubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_ops (C struct) c.hte_opshNtauh1jehjhhhNhNubjw)}(hhh](j|)}(hhte_opsh]j)}(hstruct hte_opsh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKpubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hKpubj)}(hhte_opsh]j)}(hj(h]hhte_ops}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj(hhhj(hKpubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj(hhhj(hKpubah}(h]j(ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj(hKphj(hhubjC)}(hhh]h)}(h HTE operations set by providers.h]h HTE operations set by providers.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKwhj(hhubah}(h]h ]h"]h$]h&]uh1jBhj(hhhj(hKpubeh}(h]h ](j(structeh"]h$]h&]jcj(jdj )jej )jfjgjhuh1jvhhhjhNhNubjj)}(hX**Definition**:: struct hte_ops { int (*request)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*release)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*enable)(struct hte_chip *chip, u32 xlated_id); int (*disable)(struct hte_chip *chip, u32 xlated_id); int (*get_clk_src_info)(struct hte_chip *chip, struct hte_clk_info *ci); }; **Members** ``request`` Hook for requesting a HTE timestamp. Returns 0 on success, non-zero for failures. ``release`` Hook for releasing a HTE timestamp. Returns 0 on success, non-zero for failures. ``enable`` Hook to enable the specified timestamp. Returns 0 on success, non-zero for failures. ``disable`` Hook to disable specified timestamp. Returns 0 on success, non-zero for failures. ``get_clk_src_info`` Hook to get the clock information the provider uses to timestamp. Returns 0 for success and negative error code for failure. On success HTE subsystem fills up provided struct hte_clk_info.h](h)}(h**Definition**::h](jt)}(h**Definition**h]h Definition}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj)ubh:}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK{hj)ubj )}(hX{struct hte_ops { int (*request)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*release)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*enable)(struct hte_chip *chip, u32 xlated_id); int (*disable)(struct hte_chip *chip, u32 xlated_id); int (*get_clk_src_info)(struct hte_chip *chip, struct hte_clk_info *ci); };h]hX{struct hte_ops { int (*request)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*release)(struct hte_chip *chip, struct hte_ts_desc *desc, u32 xlated_id); int (*enable)(struct hte_chip *chip, u32 xlated_id); int (*disable)(struct hte_chip *chip, u32 xlated_id); int (*get_clk_src_info)(struct hte_chip *chip, struct hte_clk_info *ci); };}hj1)sbah}(h]h ]h"]h$]h&]hhuh1j hV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK}hj)ubh)}(h **Members**h]jt)}(hjB)h]hMembers}(hjD)hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj@)ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj)ubj)}(hhh](j)}(h^``request`` Hook for requesting a HTE timestamp. Returns 0 on success, non-zero for failures. h](j)}(h ``request``h]j3)}(hja)h]hrequest}(hjc)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj_)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK{hj[)ubj)}(hhh]h)}(hQHook for requesting a HTE timestamp. Returns 0 on success, non-zero for failures.h]hQHook for requesting a HTE timestamp. Returns 0 on success, non-zero for failures.}(hjz)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKzhjw)ubah}(h]h ]h"]h$]h&]uh1jhj[)ubeh}(h]h ]h"]h$]h&]uh1jhjv)hK{hjX)ubj)}(h]``release`` Hook for releasing a HTE timestamp. Returns 0 on success, non-zero for failures. h](j)}(h ``release``h]j3)}(hj)h]hrelease}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK}hj)ubj)}(hhh]h)}(hPHook for releasing a HTE timestamp. Returns 0 on success, non-zero for failures.h]hPHook for releasing a HTE timestamp. Returns 0 on success, non-zero for failures.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK|hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hK}hjX)ubj)}(h```enable`` Hook to enable the specified timestamp. Returns 0 on success, non-zero for failures. _h](j)}(h ``enable``h]j3)}(hj)h]henable}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj)ubj)}(hhh]h)}(hTHook to enable the specified timestamp. Returns 0 on success, non-zero for failures.h]hTHook to enable the specified timestamp. Returns 0 on success, non-zero for failures.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhK~hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhjX)ubj)}(h^``disable`` Hook to disable specified timestamp. Returns 0 on success, non-zero for failures. h](j)}(h ``disable``h]j3)}(hj*h]hdisable}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj *ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj *ubj)}(hhh]h)}(hQHook to disable specified timestamp. Returns 0 on success, non-zero for failures.h]hQHook to disable specified timestamp. Returns 0 on success, non-zero for failures.}(hj(*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj%*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ]h"]h$]h&]uh1jhj$*hKhjX)ubj)}(h``get_clk_src_info`` Hook to get the clock information the provider uses to timestamp. Returns 0 for success and negative error code for failure. On success HTE subsystem fills up provided struct hte_clk_info.h](j)}(h``get_clk_src_info``h]j3)}(hjI*h]hget_clk_src_info}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjG*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjC*ubj)}(hhh]h)}(hHook to get the clock information the provider uses to timestamp. Returns 0 for success and negative error code for failure. On success HTE subsystem fills up provided struct hte_clk_info.h]hHook to get the clock information the provider uses to timestamp. Returns 0 for success and negative error code for failure. On success HTE subsystem fills up provided struct hte_clk_info.}(hjb*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj_*ubah}(h]h ]h"]h$]h&]uh1jhjC*ubeh}(h]h ]h"]h$]h&]uh1jhj^*hKhjX)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubh)}(h**Description**h]jt)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj*ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjhhubh)}(huxlated_id parameter is used to communicate between HTE subsystem and the providers and is translated by the provider.h]huxlated_id parameter is used to communicate between HTE subsystem and the providers and is translated by the provider.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjhhubjf)}(hhh]h}(h]h ]h"]h$]h&]entries](jrhte_chip (C struct) c.hte_chiphNtauh1jehjhhhNhNubjw)}(hhh](j|)}(hhte_chiph]j)}(hstruct hte_chiph](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hKubj)}(hhte_chiph]j)}(hj*h]hhte_chip}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj*hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj*hhhj*hKubah}(h]j*ah ](j:j;eh"]h$]h&]j?j@)jAhuh1j{hj*hKhj*hhubjC)}(hhh]h)}(hAbstract HTE chip.h]hAbstract HTE chip.}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj +hhubah}(h]h ]h"]h$]h&]uh1jBhj*hhhj*hKubeh}(h]h ](j(structeh"]h$]h&]jcj(jdj$+jej$+jfjgjhuh1jvhhhjhNhNubjj)}(hX**Definition**:: struct hte_chip { const char *name; struct device *dev; const struct hte_ops *ops; u32 nlines; int (*xlate_of)(struct hte_chip *gc,const struct of_phandle_args *args, struct hte_ts_desc *desc, u32 *xlated_id); int (*xlate_plat)(struct hte_chip *gc, struct hte_ts_desc *desc, u32 *xlated_id); bool (*match_from_linedata)(const struct hte_chip *chip, const struct hte_ts_desc *hdesc); u8 of_hte_n_cells; struct hte_device *gdev; void *data; }; **Members** ``name`` functional name of the HTE IP block. ``dev`` device providing the HTE. ``ops`` callbacks for this HTE. ``nlines`` number of lines/signals supported by this chip. ``xlate_of`` Callback which translates consumer supplied logical ids to physical ids, return 0 for the success and negative for the failures. It stores (between 0 to **nlines**) in xlated_id parameter for the success. ``xlate_plat`` Same as above but for the consumers with no DT node. ``match_from_linedata`` Match HTE device using the line_data. ``of_hte_n_cells`` Number of cells used to form the HTE specifier. ``gdev`` HTE subsystem abstract device, internal to the HTE subsystem. ``data`` chip specific private data.h](h)}(h**Definition**::h](jt)}(h**Definition**h]h Definition}(hj0+hhhNhNubah}(h]h ]h"]h$]h&]uh1jshj,+ubh:}(hj,+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj(+ubj )}(hXstruct hte_chip { const char *name; struct device *dev; const struct hte_ops *ops; u32 nlines; int (*xlate_of)(struct hte_chip *gc,const struct of_phandle_args *args, struct hte_ts_desc *desc, u32 *xlated_id); int (*xlate_plat)(struct hte_chip *gc, struct hte_ts_desc *desc, u32 *xlated_id); bool (*match_from_linedata)(const struct hte_chip *chip, const struct hte_ts_desc *hdesc); u8 of_hte_n_cells; struct hte_device *gdev; void *data; };h]hXstruct hte_chip { const char *name; struct device *dev; const struct hte_ops *ops; u32 nlines; int (*xlate_of)(struct hte_chip *gc,const struct of_phandle_args *args, struct hte_ts_desc *desc, u32 *xlated_id); int (*xlate_plat)(struct hte_chip *gc, struct hte_ts_desc *desc, u32 *xlated_id); bool (*match_from_linedata)(const struct hte_chip *chip, const struct hte_ts_desc *hdesc); u8 of_hte_n_cells; struct hte_device *gdev; void *data; };}hjI+sbah}(h]h ]h"]h$]h&]hhuh1j hV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj(+ubh)}(h **Members**h]jt)}(hjZ+h]hMembers}(hj\+hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjX+ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj(+ubj)}(hhh](j)}(h.``name`` functional name of the HTE IP block. h](j)}(h``name``h]j3)}(hjy+h]hname}(hj{+hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjw+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjs+ubj)}(hhh]h)}(h$functional name of the HTE IP block.h]h$functional name of the HTE IP block.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjs+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhjp+ubj)}(h"``dev`` device providing the HTE. h](j)}(h``dev``h]j3)}(hj+h]hdev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj+ubj)}(hhh]h)}(hdevice providing the HTE.h]hdevice providing the HTE.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhjp+ubj)}(h ``ops`` callbacks for this HTE. h](j)}(h``ops``h]j3)}(hj+h]hops}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj+ubj)}(hhh]h)}(hcallbacks for this HTE.h]hcallbacks for this HTE.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjp+ubj)}(h;``nlines`` number of lines/signals supported by this chip. h](j)}(h ``nlines``h]j3)}(hj$,h]hnlines}(hj&,hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj",ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj,ubj)}(hhh]h)}(h/number of lines/signals supported by this chip.h]h/number of lines/signals supported by this chip.}(hj=,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9,hKhj:,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj9,hKhjp+ubj)}(h``xlate_of`` Callback which translates consumer supplied logical ids to physical ids, return 0 for the success and negative for the failures. It stores (between 0 to **nlines**) in xlated_id parameter for the success. h](j)}(h ``xlate_of``h]j3)}(hj],h]hxlate_of}(hj_,hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj[,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjW,ubj)}(hhh]h)}(hCallback which translates consumer supplied logical ids to physical ids, return 0 for the success and negative for the failures. It stores (between 0 to **nlines**) in xlated_id parameter for the success.h](hCallback which translates consumer supplied logical ids to physical ids, return 0 for the success and negative for the failures. It stores (between 0 to }(hjv,hhhNhNubjt)}(h **nlines**h]hnlines}(hj~,hhhNhNubah}(h]h ]h"]h$]h&]uh1jshjv,ubh)) in xlated_id parameter for the success.}(hjv,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjs,ubah}(h]h ]h"]h$]h&]uh1jhjW,ubeh}(h]h ]h"]h$]h&]uh1jhjr,hKhjp+ubj)}(hD``xlate_plat`` Same as above but for the consumers with no DT node. h](j)}(h``xlate_plat``h]j3)}(hj,h]h xlate_plat}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj,ubj)}(hhh]h)}(h4Same as above but for the consumers with no DT node.h]h4Same as above but for the consumers with no DT node.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjp+ubj)}(h>``match_from_linedata`` Match HTE device using the line_data. h](j)}(h``match_from_linedata``h]j3)}(hj,h]hmatch_from_linedata}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj,ubj)}(hhh]h)}(h%Match HTE device using the line_data.h]h%Match HTE device using the line_data.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhjp+ubj)}(hC``of_hte_n_cells`` Number of cells used to form the HTE specifier. h](j)}(h``of_hte_n_cells``h]j3)}(hj-h]hof_hte_n_cells}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj-ubj)}(hhh]h)}(h/Number of cells used to form the HTE specifier.h]h/Number of cells used to form the HTE specifier.}(hj4-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0-hKhj1-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj0-hKhjp+ubj)}(hG``gdev`` HTE subsystem abstract device, internal to the HTE subsystem. h](j)}(h``gdev``h]j3)}(hjT-h]hgdev}(hjV-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjR-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhjN-ubj)}(hhh]h)}(h=HTE subsystem abstract device, internal to the HTE subsystem.h]h=HTE subsystem abstract device, internal to the HTE subsystem.}(hjm-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji-hKhjj-ubah}(h]h ]h"]h$]h&]uh1jhjN-ubeh}(h]h ]h"]h$]h&]uh1jhji-hKhjp+ubj)}(h$``data`` chip specific private data.h](j)}(h``data``h]j3)}(hj-h]hdata}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj-ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj-ubj)}(hhh]h)}(hchip specific private data.h]hchip specific private data.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hte/hte:38: ./include/linux/hte.hhKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhjp+ubeh}(h]h ]h"]h$]h&]uh1jhj(+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jihjhhhNhNubeh}(h]#the-hte-framework-public-structuresah ]h"]#the hte framework public structuresah$]h&]uh1hhhhhhhhK%ubh)}(hhh](h)}(hMore on the HTE timestamp datah]hMore on the HTE timestamp data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhK)ubh)}(hThe ``struct hte_ts_data`` is used to pass timestamp details between the consumers and the providers. It expresses timestamp data in nanoseconds in u64. An example of the typical timestamp data life cycle, for the GPIO line is as follows::h](hThe }(hj-hhhNhNubj3)}(h``struct hte_ts_data``h]hstruct hte_ts_data}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj-ubh is used to pass timestamp details between the consumers and the providers. It expresses timestamp data in nanoseconds in u64. An example of the typical timestamp data life cycle, for the GPIO line is as follows:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK*hj-hhubj )}(hX- Monitors GPIO line change. - Detects the state change on GPIO line. - Converts timestamps in nanoseconds. - Stores GPIO raw level in raw_level variable if the provider has that hardware capability. - Pushes this hte_ts_data object to HTE subsystem. - HTE subsystem increments seq counter and invokes consumer provided callback. Based on callback return value, the HTE core invokes secondary callback in the thread context.h]hX- Monitors GPIO line change. - Detects the state change on GPIO line. - Converts timestamps in nanoseconds. - Stores GPIO raw level in raw_level variable if the provider has that hardware capability. - Pushes this hte_ts_data object to HTE subsystem. - HTE subsystem increments seq counter and invokes consumer provided callback. Based on callback return value, the HTE core invokes secondary callback in the thread context.}hj.sbah}(h]h ]h"]h$]h&]hhuh1j hhhK/hj-hhubeh}(h]more-on-the-hte-timestamp-dataah ]h"]more on the hte timestamp dataah$]h&]uh1hhhhhhhhK)ubh)}(hhh](h)}(h HTE subsystem debugfs attributesh]h HTE subsystem debugfs attributes}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhK:ubh)}(hHTE subsystem creates debugfs attributes at ``/sys/kernel/debug/hte/``. It also creates line/signal-related debugfs attributes at ``/sys/kernel/debug/hte//