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/hsimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/zh_TW/driver-api/hsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/it_IT/driver-api/hsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ja_JP/driver-api/hsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ko_KR/driver-api/hsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/pt_BR/driver-api/hsimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/sp_SP/driver-api/hsimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h-High Speed Synchronous Serial Interface (HSI)h]h-High Speed Synchronous Serial Interface (HSI)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh| | | T|------------ CADATA ------------>|R | | X|------------ CAFLAG ------------>|X | | |<----------- ACREADY ------------| | | | | | | | | | | |< - - - - - ACWAKE - - - - - - -| | | R|<----------- ACDATA -------------|T | | X|<----------- ACFLAG -------------|X | | |------------ CAREADY ----------->| | | | | | | | | | +------------+ +---------------+h]hX+------------+ +---------------+ | Cellular | | Application | | Die | | Die | | | - - - - - - CAWAKE - - - - - - >| | | T|------------ CADATA ------------>|R | | X|------------ CAFLAG ------------>|X | | |<----------- ACREADY ------------| | | | | | | | | | | |< - - - - - ACWAKE - - - - - - -| | | R|<----------- ACDATA -------------|T | | X|<----------- ACFLAG -------------|X | | |------------ CAREADY ----------->| | | | | | | | | | +------------+ +---------------+}hj sbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKhhhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHSI Subsystem in Linuxh]hHSI Subsystem in Linux}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hhhhhK)ubh)}(hIn the Linux kernel the hsi subsystem is supposed to be used for HSI devices. The hsi subsystem contains drivers for hsi controllers including support for multi-port controllers and provides a generic API for using the HSI ports.h]hIn the Linux kernel the hsi subsystem is supposed to be used for HSI devices. The hsi subsystem contains drivers for hsi controllers including support for multi-port controllers and provides a generic API for using the HSI ports.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hj"hhubh)}(hIt also contains HSI client drivers, which make use of the generic API to implement a protocol used on the HSI interface. These client drivers can use an arbitrary number of channels.h]hIt also contains HSI client drivers, which make use of the generic API to implement a protocol used on the HSI interface. These client drivers can use an arbitrary number of channels.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hj"hhubeh}(h]hsi-subsystem-in-linuxah ]h"]hsi subsystem in linuxah$]h&]uh1hhhhhhhhK)ubh)}(hhh](h)}(hhsi-char Deviceh]hhsi-char Device}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhhhhhK4ubh)}(hXEach port automatically registers a generic client driver called hsi_char, which provides a character device for userspace representing the HSI port. It can be used to communicate via HSI from userspace. Userspace may configure the hsi_char device using the following ioctl commands:h]hXEach port automatically registers a generic client driver called hsi_char, which provides a character device for userspace representing the HSI port. It can be used to communicate via HSI from userspace. Userspace may configure the hsi_char device using the following ioctl commands:}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjWhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hHSC_RESET flush the HSI port h](hterm)}(h HSC_RESETh]h HSC_RESET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj )}(hJstruct hsi_channel { unsigned int id; const char *name; };h]hJstruct hsi_channel { unsigned int id; const char *name; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK@hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKEhjubjw)}(hhh](j|)}(h``id`` Channel number h](j)}(h``id``h]hliteral)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKh]h{unnamed_union}}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj8ubj)}(hhh]h)}(h anonymoush]h anonymous}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1j{hjShKhjubj|)}(h1``flow`` RX flow type (SYNCHRONIZED or PIPELINE) h](j)}(h``flow``h]j)}(hjwh]hflow}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKKhjqubj)}(hhh]h)}(h'RX flow type (SYNCHRONIZED or PIPELINE)h]h'RX flow type (SYNCHRONIZED or PIPELINE)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1j{hjhKKhjubj|)}(hB``arb_mode`` Arbitration mode for TX frame (Round robin, priority)h](j)}(h ``arb_mode``h]j)}(hjh]harb_mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKKhjubj)}(hhh]h)}(h5Arbitration mode for TX frame (Round robin, priority)h]h5Arbitration mode for TX frame (Round robin, priority)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKKhjubeh}(h]h ]h"]h$]h&]uh1jvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_board_info (C struct)c.hsi_board_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hhsi_board_infoh]j)}(hstruct hsi_board_infoh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKRubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhKRubj/)}(hhsi_board_infoh]j5)}(hjh]hhsi_board_info}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj&ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhKRubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhKRubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhKRhjhhubja)}(hhh]h)}(hHSI client board infoh]hHSI client board info}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKZhjIhhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhKRubeh}(h]h ](j}structeh"]h$]h&]jj}jjdjjdjjjuh1jhhhjhNhNubj)}(hXz**Definition**:: struct hsi_board_info { const char *name; unsigned int hsi_id; unsigned int port; struct hsi_config tx_cfg; struct hsi_config rx_cfg; void *platform_data; struct dev_archdata *archdata; }; **Members** ``name`` Name for the HSI device ``hsi_id`` HSI controller id where the client sits ``port`` Port number in the controller where the client sits ``tx_cfg`` HSI TX configuration ``rx_cfg`` HSI RX configuration ``platform_data`` Platform related data ``archdata`` Architecture-dependent device datah](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh:}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK^hjhubj )}(hX struct hsi_board_info { const char *name; unsigned int hsi_id; unsigned int port; struct hsi_config tx_cfg; struct hsi_config rx_cfg; void *platform_data; struct dev_archdata *archdata; };h]hX struct hsi_board_info { const char *name; unsigned int hsi_id; unsigned int port; struct hsi_config tx_cfg; struct hsi_config rx_cfg; void *platform_data; struct dev_archdata *archdata; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK`hjhubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKjhjhubjw)}(hhh](j|)}(h!``name`` Name for the HSI device h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK\hjubj)}(hhh]h)}(hName for the HSI deviceh]hName for the HSI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK\hjubj|)}(h3``hsi_id`` HSI controller id where the client sits h](j)}(h ``hsi_id``h]j)}(hjh]hhsi_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK]hjubj)}(hhh]h)}(h'HSI controller id where the client sitsh]h'HSI controller id where the client sits}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK]hjubj|)}(h=``port`` Port number in the controller where the client sits h](j)}(h``port``h]j)}(hj+h]hport}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK^hj%ubj)}(hhh]h)}(h3Port number in the controller where the client sitsh]h3Port number in the controller where the client sits}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK^hjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1j{hj@hK^hjubj|)}(h ``tx_cfg`` HSI TX configuration h](j)}(h ``tx_cfg``h]j)}(hjdh]htx_cfg}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK_hj^ubj)}(hhh]h)}(hHSI TX configurationh]hHSI TX configuration}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhK_hjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1j{hjyhK_hjubj|)}(h ``rx_cfg`` HSI RX configuration h](j)}(h ``rx_cfg``h]j)}(hjh]hrx_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK`hjubj)}(hhh]h)}(hHSI RX configurationh]hHSI RX configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK`hjubj|)}(h(``platform_data`` Platform related data h](j)}(h``platform_data``h]j)}(hjh]h platform_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKahjubj)}(hhh]h)}(hPlatform related datah]hPlatform related data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKahjubj|)}(h/``archdata`` Architecture-dependent device datah](j)}(h ``archdata``h]j)}(hj h]harchdata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKahj ubj)}(hhh]h)}(h"Architecture-dependent device datah]h"Architecture-dependent device data}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKbhj% ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj$ hKahjubeh}(h]h ]h"]h$]h&]uh1jvhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_client (C struct) c.hsi_clienthNtauh1jhjhhhNhNubj)}(hhh](j)}(h hsi_clienth]j)}(hstruct hsi_clienth](j )}(hjh]hstruct}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hje hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhubj)}(h h]h }(hjw hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhje hhhjv hKhubj/)}(h hsi_clienth]j5)}(hjc h]h hsi_client}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hje hhhjv hKhubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThja hhhjv hKhubah}(h]j\ ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjv hKhhj^ hhubja)}(hhh]h)}(h"HSI client attached to an HSI porth]h"HSI client attached to an HSI port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKyhj hhubah}(h]h ]h"]h$]h&]uh1j`hj^ hhhjv hKhubeh}(h]h ](j}structeh"]h$]h&]jj}jj jj jjjuh1jhhhjhNhNubj)}(hX)**Definition**:: struct hsi_client { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; }; **Members** ``device`` Driver model representation of the device ``tx_cfg`` HSI TX configuration ``rx_cfg`` HSI RX configurationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK}hj ubj )}(hstruct hsi_client { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; };h]hstruct hsi_client { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; };}hj sbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubjw)}(hhh](j|)}(h5``device`` Driver model representation of the device h](j)}(h ``device``h]j)}(hj h]hdevice}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK{hj ubj)}(hhh]h)}(h)Driver model representation of the deviceh]h)Driver model representation of the device}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hK{hj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj- hK{hj ubj|)}(h ``tx_cfg`` HSI TX configuration h](j)}(h ``tx_cfg``h]j)}(hjQ h]htx_cfg}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK|hjK ubj)}(hhh]h)}(hHSI TX configurationh]hHSI TX configuration}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf hK|hjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1j{hjf hK|hj ubj|)}(h``rx_cfg`` HSI RX configurationh](j)}(h ``rx_cfg``h]j)}(hj h]hrx_cfg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK|hj ubj)}(hhh]h)}(hHSI RX configurationh]hHSI RX configuration}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhK}hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hK|hj ubeh}(h]h ]h"]h$]h&]uh1jvhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_client_driver (C struct)c.hsi_client_driverhNtauh1jhjhhhNhNubj)}(hhh](j)}(hhsi_client_driverh]j)}(hstruct hsi_client_driverh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj hKubj/)}(hhsi_client_driverh]j5)}(hj h]hhsi_client_driver}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj hhhj hKubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj hhhj hKubah}(h]j ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj hKhj hhubja)}(hhh]h)}(h"Driver associated to an HSI clienth]h"Driver associated to an HSI client}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj# hhubah}(h]h ]h"]h$]h&]uh1j`hj hhhj hKubeh}(h]h ](j}structeh"]h$]h&]jj}jj> jj> jjjuh1jhhhjhNhNubj)}(h**Definition**:: struct hsi_client_driver { struct device_driver driver; }; **Members** ``driver`` Driver model representation of the driverh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF ubh:}(hjF hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjB ubj )}(hAstruct hsi_client_driver { struct device_driver driver; };h]hAstruct hsi_client_driver { struct device_driver driver; };}hjc sbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjB ubh)}(h **Members**h]j)}(hjt h]hMembers}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjB ubjw)}(hhh]j|)}(h4``driver`` Driver model representation of the driverh](j)}(h ``driver``h]j)}(hj h]hdriver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(h)Driver model representation of the driverh]h)Driver model representation of the driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hKhj ubah}(h]h ]h"]h$]h&]uh1jvhjB ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_msg (C struct) c.hsi_msghNtauh1jhjhhhNhNubj)}(hhh](j)}(hhsi_msgh]j)}(hstruct hsi_msgh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj hhhj hKubj/)}(hhsi_msgh]j5)}(hj h]hhsi_msg}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj hhhj hKubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj hhhj hKubah}(h]j ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj hKhj hhubja)}(hhh]h)}(hHSI message descriptorh]hHSI message descriptor}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj, hhubah}(h]h ]h"]h$]h&]uh1j`hj hhhj hKubeh}(h]h ](j}structeh"]h$]h&]jj}jjG jjG jjjuh1jhhhjhNhNubj)}(hXM**Definition**:: struct hsi_msg { struct list_head link; struct hsi_client *cl; struct sg_table sgt; void *context; void (*complete)(struct hsi_msg *msg); void (*destructor)(struct hsi_msg *msg); int status; unsigned int actual_len; unsigned int channel; unsigned int ttype:1; unsigned int break_frame:1; }; **Members** ``link`` Free to use by the current descriptor owner ``cl`` HSI device client that issues the transfer ``sgt`` Head of the scatterlist array ``context`` Client context data associated to the transfer ``complete`` Transfer completion callback ``destructor`` Destructor to free resources when flushing ``status`` Status of the transfer when completed ``actual_len`` Actual length of data transferred on completion ``channel`` Channel were to TX/RX the message ``ttype`` Transfer type (TX if set, RX otherwise) ``break_frame`` if true HSI will send/receive a break frame. Data buffers are ignored in the request.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh:}(hjO hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjK ubj )}(hXstruct hsi_msg { struct list_head link; struct hsi_client *cl; struct sg_table sgt; void *context; void (*complete)(struct hsi_msg *msg); void (*destructor)(struct hsi_msg *msg); int status; unsigned int actual_len; unsigned int channel; unsigned int ttype:1; unsigned int break_frame:1; };h]hXstruct hsi_msg { struct list_head link; struct hsi_client *cl; struct sg_table sgt; void *context; void (*complete)(struct hsi_msg *msg); void (*destructor)(struct hsi_msg *msg); int status; unsigned int actual_len; unsigned int channel; unsigned int ttype:1; unsigned int break_frame:1; };}hjl sbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjK ubh)}(h **Members**h]j)}(hj} h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjK ubjw)}(hhh](j|)}(h5``link`` Free to use by the current descriptor owner h](j)}(h``link``h]j)}(hj h]hlink}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(h+Free to use by the current descriptor ownerh]h+Free to use by the current descriptor owner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hKhj ubj|)}(h2``cl`` HSI device client that issues the transfer h](j)}(h``cl``h]j)}(hj h]hcl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(h*HSI device client that issues the transferh]h*HSI device client that issues the transfer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hKhj ubj|)}(h&``sgt`` Head of the scatterlist array h](j)}(h``sgt``h]j)}(hj h]hsgt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(hHead of the scatterlist arrayh]hHead of the scatterlist array}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# hKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj# hKhj ubj|)}(h;``context`` Client context data associated to the transfer h](j)}(h ``context``h]j)}(hjG h]hcontext}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjA ubj)}(hhh]h)}(h.Client context data associated to the transferh]h.Client context data associated to the transfer}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ hKhj] ubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1j{hj\ hKhj ubj|)}(h*``complete`` Transfer completion callback h](j)}(h ``complete``h]j)}(hj h]hcomplete}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjz ubj)}(hhh]h)}(hTransfer completion callbackh]hTransfer completion callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]uh1j{hj hKhj ubj|)}(h:``destructor`` Destructor to free resources when flushing h](j)}(h``destructor``h]j)}(hj h]h destructor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(h*Destructor to free resources when flushingh]h*Destructor to free resources when flushing}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hKhj ubj|)}(h1``status`` Status of the transfer when completed h](j)}(h ``status``h]j)}(hj h]hstatus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj ubj)}(hhh]h)}(h%Status of the transfer when completedh]h%Status of the transfer when completed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hjhKhj ubj|)}(h?``actual_len`` Actual length of data transferred on completion h](j)}(h``actual_len``h]j)}(hj+h]h actual_len}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj%ubj)}(hhh]h)}(h/Actual length of data transferred on completionh]h/Actual length of data transferred on completion}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1j{hj@hKhj ubj|)}(h.``channel`` Channel were to TX/RX the message h](j)}(h ``channel``h]j)}(hjdh]hchannel}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj^ubj)}(hhh]h)}(h!Channel were to TX/RX the messageh]h!Channel were to TX/RX the message}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhKhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1j{hjyhKhj ubj|)}(h2``ttype`` Transfer type (TX if set, RX otherwise) h](j)}(h ``ttype``h]j)}(hjh]httype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h'Transfer type (TX if set, RX otherwise)h]h'Transfer type (TX if set, RX otherwise)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhj ubj|)}(he``break_frame`` if true HSI will send/receive a break frame. Data buffers are ignored in the request.h](j)}(h``break_frame``h]j)}(hjh]h break_frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(hUif true HSI will send/receive a break frame. Data buffers are ignored in the request.h]hUif true HSI will send/receive a break frame. Data buffers are ignored in the request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhj ubeh}(h]h ]h"]h$]h&]uh1jvhjK ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_port (C struct) c.hsi_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(hhsi_porth]j)}(hstruct hsi_porth](j )}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj+hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj+hhhj<hKubj/)}(hhsi_porth]j5)}(hj)h]hhsi_port}(hjOhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjKubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj+hhhj<hKubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj'hhhj<hKubah}(h]j"ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj<hKhj$hhubja)}(hhh]h)}(hHSI port deviceh]hHSI port device}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjnhhubah}(h]h ]h"]h$]h&]uh1j`hj$hhhj<hKubeh}(h]h ](j}structeh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(hX**Definition**:: struct hsi_port { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; unsigned int num; unsigned int shared:1; int claimed; struct mutex lock; int (*async)(struct hsi_msg *msg); int (*setup)(struct hsi_client *cl); int (*flush)(struct hsi_client *cl); int (*start_tx)(struct hsi_client *cl); int (*stop_tx)(struct hsi_client *cl); int (*release)(struct hsi_client *cl); struct blocking_notifier_head n_head; }; **Members** ``device`` Driver model representation of the device ``tx_cfg`` Current TX path configuration ``rx_cfg`` Current RX path configuration ``num`` Port number ``shared`` Set when port can be shared by different clients ``claimed`` Reference count of clients which claimed the port ``lock`` Serialize port claim ``async`` Asynchronous transfer callback ``setup`` Callback to set the HSI client configuration ``flush`` Callback to clean the HW state and destroy all pending transfers ``start_tx`` Callback to inform that a client wants to TX data ``stop_tx`` Callback to inform that a client no longer wishes to TX data ``release`` Callback to inform that a client no longer uses the port ``n_head`` Notifier chain for signaling port events to the clients.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj )}(hXQstruct hsi_port { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; unsigned int num; unsigned int shared:1; int claimed; struct mutex lock; int (*async)(struct hsi_msg *msg); int (*setup)(struct hsi_client *cl); int (*flush)(struct hsi_client *cl); int (*start_tx)(struct hsi_client *cl); int (*stop_tx)(struct hsi_client *cl); int (*release)(struct hsi_client *cl); struct blocking_notifier_head n_head; };h]hXQstruct hsi_port { struct device device; struct hsi_config tx_cfg; struct hsi_config rx_cfg; unsigned int num; unsigned int shared:1; int claimed; struct mutex lock; int (*async)(struct hsi_msg *msg); int (*setup)(struct hsi_client *cl); int (*flush)(struct hsi_client *cl); int (*start_tx)(struct hsi_client *cl); int (*stop_tx)(struct hsi_client *cl); int (*release)(struct hsi_client *cl); struct blocking_notifier_head n_head; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubjw)}(hhh](j|)}(h5``device`` Driver model representation of the device h](j)}(h ``device``h]j)}(hjh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h)Driver model representation of the deviceh]h)Driver model representation of the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h)``tx_cfg`` Current TX path configuration h](j)}(h ``tx_cfg``h]j)}(hjh]htx_cfg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(hCurrent TX path configurationh]hCurrent TX path configuration}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj,hKhjubj|)}(h)``rx_cfg`` Current RX path configuration h](j)}(h ``rx_cfg``h]j)}(hjPh]hrx_cfg}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjJubj)}(hhh]h)}(hCurrent RX path configurationh]hCurrent RX path configuration}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehKhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1j{hjehKhjubj|)}(h``num`` Port number h](j)}(h``num``h]j)}(hjh]hnum}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h Port numberh]h Port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h<``shared`` Set when port can be shared by different clients h](j)}(h ``shared``h]j)}(hjh]hshared}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h0Set when port can be shared by different clientsh]h0Set when port can be shared by different clients}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h>``claimed`` Reference count of clients which claimed the port h](j)}(h ``claimed``h]j)}(hjh]hclaimed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h1Reference count of clients which claimed the porth]h1Reference count of clients which claimed the port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h``lock`` Serialize port claim h](j)}(h``lock``h]j)}(hj4h]hlock}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhj.ubj)}(hhh]h)}(hSerialize port claimh]hSerialize port claim}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1j{hjIhKhjubj|)}(h)``async`` Asynchronous transfer callback h](j)}(h ``async``h]j)}(hjmh]hasync}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjgubj)}(hhh]h)}(hAsynchronous transfer callbackh]hAsynchronous transfer callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h7``setup`` Callback to set the HSI client configuration h](j)}(h ``setup``h]j)}(hjh]hsetup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h,Callback to set the HSI client configurationh]h,Callback to set the HSI client configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(hK``flush`` Callback to clean the HW state and destroy all pending transfers h](j)}(h ``flush``h]j)}(hjh]hflush}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h@Callback to clean the HW state and destroy all pending transfersh]h@Callback to clean the HW state and destroy all pending transfers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h?``start_tx`` Callback to inform that a client wants to TX data h](j)}(h ``start_tx``h]j)}(hjh]hstart_tx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjubj)}(hhh]h)}(h1Callback to inform that a client wants to TX datah]h1Callback to inform that a client wants to TX data}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj-hKhjubj|)}(hI``stop_tx`` Callback to inform that a client no longer wishes to TX data h](j)}(h ``stop_tx``h]j)}(hjQh]hstop_tx}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhKhjKubj)}(hhh]h)}(hh]hid}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM hj8ubj)}(hhh]h)}(hHSI controller IDh]hHSI controller ID}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1j{hjShM hjubj|)}(h4``num_ports`` Number of ports in the HSI controller h](j)}(h ``num_ports``h]j)}(hjwh]h num_ports}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM hjqubj)}(hhh]h)}(h%Number of ports in the HSI controllerh]h%Number of ports in the HSI controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1j{hjhM hjubj|)}(h``port`` Array of HSI portsh](j)}(h``port``h]j)}(hjh]hport}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM hjubj)}(hhh]h)}(hArray of HSI portsh]hArray of HSI ports}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM hjubeh}(h]h ]h"]h$]h&]uh1jvhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_id (C function)c.hsi_idhNtauh1jhjhhhNhNubj)}(hhh](j)}(h+unsigned int hsi_id (struct hsi_client *cl)h]j)}(h*unsigned int hsi_id(struct hsi_client *cl)h](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMDubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMDubj )}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMDubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMDubj/)}(hhsi_idh]j5)}(hhsi_idh]hhsi_id}(hjJhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjFubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhMDubhdesc_parameterlist)}(h(struct hsi_client *cl)h]hdesc_parameter)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainj}reftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjLsbc.hsi_idasbuh1hhjfubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjfubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjfubj5)}(hclh]hcl}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjfubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj`ubah}(h]h ]h"]h$]h&]jjuh1j^hjhhhjhMDubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhMDubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMDhjhhubja)}(hhh]h)}(h,Get HSI controller ID associated to a clienth]h,Get HSI controller ID associated to a client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMDhjhhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhMDubeh}(h]h ](j}functioneh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` Pointer to a HSI client **Description** Return the controller id where the client is attached toh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMHhjubjw)}(hhh]j|)}(h2``struct hsi_client *cl`` Pointer to a HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hj:h]hstruct hsi_client *cl}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMEhj4ubj)}(hhh]h)}(hPointer to a HSI clienth]hPointer to a HSI client}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMEhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1j{hjOhMEhj1ubah}(h]h ]h"]h$]h&]uh1jvhjubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMGhjubh)}(h8Return the controller id where the client is attached toh]h8Return the controller id where the client is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMFhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_port_id (C function) c.hsi_port_idhNtauh1jhjhhhNhNubj)}(hhh](j)}(h0unsigned int hsi_port_id (struct hsi_client *cl)h]j)}(h/unsigned int hsi_port_id(struct hsi_client *cl)h](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMOubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMOubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhjhMOubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMOubj/)}(h hsi_port_idh]j5)}(h hsi_port_idh]h hsi_port_id}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhMOubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj1hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj3modnameN classnameNjj)}j]j)}jjsb c.hsi_port_idasbuh1hhjubj)}(h h]h }(hjQhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(hclh]hcl}(hjlhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj ubah}(h]h ]h"]h$]h&]jjuh1j^hjhhhjhMOubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhMOubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMOhjhhubja)}(hhh]h)}(h,Gets the port number a client is attached toh]h,Gets the port number a client is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhMOubeh}(h]h ](j}functioneh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` Pointer to HSI client **Description** Return the port number associated to the clienth](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMShjubjw)}(hhh]j|)}(h0``struct hsi_client *cl`` Pointer to HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjh]hstruct hsi_client *cl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMPhjubj)}(hhh]h)}(hPointer to HSI clienth]hPointer to HSI client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMPhjubah}(h]h ]h"]h$]h&]uh1jvhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMRhjubh)}(h/Return the port number associated to the clienth]h/Return the port number associated to the client}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_setup (C function) c.hsi_setuphNtauh1jhjhhhNhNubj)}(hhh](j)}(h%int hsi_setup (struct hsi_client *cl)h]j)}(h$int hsi_setup(struct hsi_client *cl)h](j )}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjShhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMZubj)}(h h]h }(hjfhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjShhhjehMZubj/)}(h hsi_setuph]j5)}(h hsi_setuph]h hsi_setup}(hjxhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjtubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjShhhjehMZubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjmodnameN classnameNjj)}j]j)}jjzsb c.hsi_setupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(hclh]hcl}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubah}(h]h ]h"]h$]h&]jjuh1j^hjShhhjehMZubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjOhhhjehMZubah}(h]jJah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjehMZhjLhhubja)}(hhh]h)}(hConfigure the client's porth]hConfigure the client’s port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1j`hjLhhhjehMZubeh}(h]h ](j}functioneh"]h$]h&]jj}jj/jj/jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` Pointer to the HSI client **Description** When sharing ports, clients should either relay on a single client setup or have the same setup for all of them. Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hj9h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM^hj3ubjw)}(hhh]j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjXh]hstruct hsi_client *cl}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM[hjRubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhM[hjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1j{hjmhM[hjOubah}(h]h ]h"]h$]h&]uh1jvhj3ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM]hj3ubh)}(hpWhen sharing ports, clients should either relay on a single client setup or have the same setup for all of them.h]hpWhen sharing ports, clients should either relay on a single client setup or have the same setup for all of them.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM\hj3ubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM_hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_flush (C function) c.hsi_flushhNtauh1jhjhhhNhNubj)}(hhh](j)}(h%int hsi_flush (struct hsi_client *cl)h]j)}(h$int hsi_flush(struct hsi_client *cl)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMjubj/)}(h hsi_flushh]j5)}(h hsi_flushh]h hsi_flush}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhMjubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjBhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj?ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjDmodnameN classnameNjj)}j]j)}jj sb c.hsi_flushasbuh1hhj ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj5)}(hclh]hcl}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubah}(h]h ]h"]h$]h&]jjuh1j^hjhhhjhMjubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhMjubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMjhjhhubja)}(hhh]h)}(h3Flush all pending transactions on the client's porth]h5Flush all pending transactions on the client’s port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMjhjhhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhMjubeh}(h]h ](j}functioneh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct hsi_client *cl`` Pointer to the HSI client **Description** This function will destroy all pending hsi_msg in the port and reset the HW port so it is ready to receive and transmit from a clean state. Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMnhjubjw)}(hhh]j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjh]hstruct hsi_client *cl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMkhjubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMkhjubah}(h]h ]h"]h$]h&]uh1jvhjubh)}(h**Description**h]j)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMmhjubh)}(hThis function will destroy all pending hsi_msg in the port and reset the HW port so it is ready to receive and transmit from a clean state.h]hThis function will destroy all pending hsi_msg in the port and reset the HW port so it is ready to receive and transmit from a clean state.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMlhjubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_async_read (C function)c.hsi_async_readhNtauh1jhjhhhNhNubj)}(hhh](j)}(h?int hsi_async_read (struct hsi_client *cl, struct hsi_msg *msg)h]j)}(h>int hsi_async_read(struct hsi_client *cl, struct hsi_msg *msg)h](j )}(hinth]hint}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjshhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMzubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjshhhjhMzubj/)}(hhsi_async_readh]j5)}(hhsi_async_readh]hhsi_async_read}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjshhhjhMzubj_)}(h,(struct hsi_client *cl, struct hsi_msg *msg)h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.hsi_async_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(hclh]hcl}(hj hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubje)}(hstruct hsi_msg *msgh](j )}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"ubh)}(hhh]j5)}(hhsi_msgh]hhsi_msg}(hjDhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjAubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjFmodnameN classnameNjj)}j]jc.hsi_async_readasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"ubj)}(hjh]h*}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj5)}(hmsgh]hmsg}(hj}hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubeh}(h]h ]h"]h$]h&]jjuh1j^hjshhhjhMzubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjohhhjhMzubah}(h]jjah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMzhjlhhubja)}(hhh]h)}(hSubmit a read transferh]hSubmit a read transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMzhjhhubah}(h]h ]h"]h$]h&]uh1j`hjlhhhjhMzubeh}(h]h ](j}functioneh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` Pointer to the HSI client ``struct hsi_msg *msg`` HSI message descriptor of the transfer **Description** Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM~hjubjw)}(hhh](j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjh]hstruct hsi_client *cl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM{hjubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM{hjubj|)}(h?``struct hsi_msg *msg`` HSI message descriptor of the transfer h](j)}(h``struct hsi_msg *msg``h]j)}(hj!h]hstruct hsi_msg *msg}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM|hjubj)}(hhh]h)}(h&HSI message descriptor of the transferh]h&HSI message descriptor of the transfer}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM|hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj6hM|hjubeh}(h]h ]h"]h$]h&]uh1jvhjubh)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM~hjubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhM}hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_async_write (C function)c.hsi_async_writehNtauh1jhjhhhNhNubj)}(hhh](j)}(h@int hsi_async_write (struct hsi_client *cl, struct hsi_msg *msg)h]j)}(h?int hsi_async_write(struct hsi_client *cl, struct hsi_msg *msg)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(hhsi_async_writeh]j5)}(hhsi_async_writeh]hhsi_async_write}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhMubj_)}(h,(struct hsi_client *cl, struct hsi_msg *msg)h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.hsi_async_writeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(hclh]hcl}(hj7hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubje)}(hstruct hsi_msg *msgh](j )}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLubh)}(hhh]j5)}(hhsi_msgh]hhsi_msg}(hjnhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjkubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjpmodnameN classnameNjj)}j]jc.hsi_async_writeasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj5)}(hmsgh]hmsg}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjubeh}(h]h ]h"]h$]h&]jjuh1j^hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhMubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMhjhhubja)}(hhh]h)}(hSubmit a write transferh]hSubmit a write transfer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhMubeh}(h]h ](j}functioneh"]h$]h&]jj}jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` Pointer to the HSI client ``struct hsi_msg *msg`` HSI message descriptor of the transfer **Description** Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjubjw)}(hhh](j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjh]hstruct hsi_client *cl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj ubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj'hMhj ubj|)}(h?``struct hsi_msg *msg`` HSI message descriptor of the transfer h](j)}(h``struct hsi_msg *msg``h]j)}(hjKh]hstruct hsi_msg *msg}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjEubj)}(hhh]h)}(h&HSI message descriptor of the transferh]h&HSI message descriptor of the transfer}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1j{hj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jvhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_start_tx (C function)c.hsi_start_txhNtauh1jhjhhhNhNubj)}(hhh](j)}(h(int hsi_start_tx (struct hsi_client *cl)h]j)}(h'int hsi_start_tx(struct hsi_client *cl)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjhhhjhMubj/)}(h hsi_start_txh]j5)}(h hsi_start_txh]h hsi_start_tx}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjhhhjhMubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj& hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj# ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj( modnameN classnameNjj)}j]j)}jjsbc.hsi_start_txasbuh1hhj ubj)}(h h]h }(hjF hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj5)}(hclh]hcl}(hja hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj ubah}(h]h ]h"]h$]h&]jjuh1j^hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjhhhjhMubah}(h]jah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjhMhjhhubja)}(hhh]h)}(h3Signal the port that the client wants to start a TXh]h3Signal the port that the client wants to start a TX}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j`hjhhhjhMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj jj jjjuh1jhhhjhNhNubj)}(h~**Parameters** ``struct hsi_client *cl`` Pointer to the HSI client **Description** Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj ubjw)}(hhh]j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hj h]hstruct hsi_client *cl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj ubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhj ubah}(h]h ]h"]h$]h&]uh1jvhj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj ubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_stop_tx (C function) c.hsi_stop_txhNtauh1jhjhhhNhNubj)}(hhh](j)}(h'int hsi_stop_tx (struct hsi_client *cl)h]j)}(h&int hsi_stop_tx(struct hsi_client *cl)h](j )}(hinth]hint}(hjL!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjH!hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMubj)}(h h]h }(hj[!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjH!hhhjZ!hMubj/)}(h hsi_stop_txh]j5)}(h hsi_stop_txh]h hsi_stop_tx}(hjm!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hji!ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hjH!hhhjZ!hMubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj!modnameN classnameNjj)}j]j)}jjo!sb c.hsi_stop_txasbuh1hhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj!ubj)}(hjh]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj5)}(hclh]hcl}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj!ubah}(h]h ]h"]h$]h&]jjuh1j^hjH!hhhjZ!hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjD!hhhjZ!hMubah}(h]j?!ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjZ!hMhjA!hhubja)}(hhh]h)}(h;Signal the port that the client no longer wants to transmith]h;Signal the port that the client no longer wants to transmit}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj "hhubah}(h]h ]h"]h$]h&]uh1j`hjA!hhhjZ!hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj$"jj$"jjjuh1jhhhjhNhNubj)}(h~**Parameters** ``struct hsi_client *cl`` Pointer to the HSI client **Description** Return -errno on failure, 0 on successh](h)}(h**Parameters**h]j)}(hj."h]h Parameters}(hj0"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,"ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj("ubjw)}(hhh]j|)}(h4``struct hsi_client *cl`` Pointer to the HSI client h](j)}(h``struct hsi_client *cl``h]j)}(hjM"h]hstruct hsi_client *cl}(hjO"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhjG"ubj)}(hhh]h)}(hPointer to the HSI clienth]hPointer to the HSI client}(hjf"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb"hMhjc"ubah}(h]h ]h"]h$]h&]uh1jhjG"ubeh}(h]h ]h"]h$]h&]uh1j{hjb"hMhjD"ubah}(h]h ]h"]h$]h&]uh1jvhj("ubh)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj("ubh)}(h&Return -errno on failure, 0 on successh]h&Return -errno on failure, 0 on success}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:83: ./include/linux/hsi/hsi.hhMhj("ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(hsi_port_unregister_clients (C function)c.hsi_port_unregister_clientshNtauh1jhjhhhNhNubj)}(hhh](j)}(h8void hsi_port_unregister_clients (struct hsi_port *port)h]j)}(h7void hsi_port_unregister_clients(struct hsi_port *port)h](j )}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMbubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj"hhhj"hMbubj/)}(hhsi_port_unregister_clientsh]j5)}(hhsi_port_unregister_clientsh]hhsi_port_unregister_clients}(hj"hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj"hhhj"hMbubj_)}(h(struct hsi_port *port)h]je)}(hstruct hsi_port *porth](j )}(hjh]hstruct}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubh)}(hhh]j5)}(hhsi_porth]hhsi_port}(hj(#hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%#ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj*#modnameN classnameNjj)}j]j)}jj"sbc.hsi_port_unregister_clientsasbuh1hhj#ubj)}(h h]h }(hjH#hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj#ubj)}(hjh]h*}(hjV#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj5)}(hporth]hport}(hjc#hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj#ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj#ubah}(h]h ]h"]h$]h&]jjuh1j^hj"hhhj"hMbubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj"hhhj"hMbubah}(h]j"ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj"hMbhj"hhubja)}(hhh]h)}(hUnregister an HSI porth]hUnregister an HSI port}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMbhj#hhubah}(h]h ]h"]h$]h&]uh1j`hj"hhhj"hMbubeh}(h]h ](j}functioneh"]h$]h&]jj}jj#jj#jjjuh1jhhhjhNhNubj)}(hF**Parameters** ``struct hsi_port *port`` The HSI port to unregisterh](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMfhj#ubjw)}(hhh]j|)}(h4``struct hsi_port *port`` The HSI port to unregisterh](j)}(h``struct hsi_port *port``h]j)}(hj#h]hstruct hsi_port *port}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhhj#ubj)}(hhh]h)}(hThe HSI port to unregisterh]hThe HSI port to unregister}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMchj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1j{hj#hMhhj#ubah}(h]h ]h"]h$]h&]uh1jvhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hsi_unregister_controller (C function)c.hsi_unregister_controllerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h;void hsi_unregister_controller (struct hsi_controller *hsi)h]j)}(h:void hsi_unregister_controller(struct hsi_controller *hsi)h](j )}(hvoidh]hvoid}(hj($hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$$hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMlubj)}(h h]h }(hj7$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj$$hhhj6$hMlubj/)}(hhsi_unregister_controllerh]j5)}(hhsi_unregister_controllerh]hhsi_unregister_controller}(hjI$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjE$ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj$$hhhj6$hMlubj_)}(h(struct hsi_controller *hsi)h]je)}(hstruct hsi_controller *hsih](j )}(hjh]hstruct}(hje$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hja$ubj)}(h h]h }(hjr$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhja$ubh)}(hhh]j5)}(hhsi_controllerh]hhsi_controller}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj$ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj$modnameN classnameNjj)}j]j)}jjK$sbc.hsi_unregister_controllerasbuh1hhja$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhja$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja$ubj5)}(hhsih]hhsi}(hj$hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hja$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj]$ubah}(h]h ]h"]h$]h&]jjuh1j^hj$$hhhj6$hMlubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj $hhhj6$hMlubah}(h]j$ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj6$hMlhj$hhubja)}(hhh]h)}(hUnregister an HSI controllerh]hUnregister an HSI controller}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMlhj$hhubah}(h]h ]h"]h$]h&]uh1j`hj$hhhj6$hMlubeh}(h]h ](j}functioneh"]h$]h&]jj}jj%jj%jjjuh1jhhhjhNhNubj)}(hO**Parameters** ``struct hsi_controller *hsi`` The HSI controller to registerh](h)}(h**Parameters**h]j)}(hj %h]h Parameters}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMphj%ubjw)}(hhh]j|)}(h=``struct hsi_controller *hsi`` The HSI controller to registerh](j)}(h``struct hsi_controller *hsi``h]j)}(hj)%h]hstruct hsi_controller *hsi}(hj+%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'%ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMrhj#%ubj)}(hhh]h)}(hThe HSI controller to registerh]hThe HSI controller to register}(hjB%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMmhj?%ubah}(h]h ]h"]h$]h&]uh1jhj#%ubeh}(h]h ]h"]h$]h&]uh1j{hj>%hMrhj %ubah}(h]h ]h"]h$]h&]uh1jvhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hsi_register_controller (C function)c.hsi_register_controllerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h8int hsi_register_controller (struct hsi_controller *hsi)h]j)}(h7int hsi_register_controller(struct hsi_controller *hsi)h](j )}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMwubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%hhhj%hMwubj/)}(hhsi_register_controllerh]j5)}(hhsi_register_controllerh]hhsi_register_controller}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj%hhhj%hMwubj_)}(h(struct hsi_controller *hsi)h]je)}(hstruct hsi_controller *hsih](j )}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubh)}(hhh]j5)}(hhsi_controllerh]hhsi_controller}(hj%hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj%modnameN classnameNjj)}j]j)}jj%sbc.hsi_register_controllerasbuh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%ubj)}(hjh]h*}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj5)}(hhsih]hhsi}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj%ubah}(h]h ]h"]h$]h&]jjuh1j^hj%hhhj%hMwubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj{%hhhj%hMwubah}(h]jv%ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj%hMwhjx%hhubja)}(hhh]h)}(h(Register an HSI controller and its portsh]h(Register an HSI controller and its ports}(hjC&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMwhj@&hhubah}(h]h ]h"]h$]h&]uh1j`hjx%hhhj%hMwubeh}(h]h ](j}functioneh"]h$]h&]jj}jj[&jj[&jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_controller *hsi`` The HSI controller to register **Description** Returns -errno on failure, 0 on success.h](h)}(h**Parameters**h]j)}(hje&h]h Parameters}(hjg&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc&ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM{hj_&ubjw)}(hhh]j|)}(h>``struct hsi_controller *hsi`` The HSI controller to register h](j)}(h``struct hsi_controller *hsi``h]j)}(hj&h]hstruct hsi_controller *hsi}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMxhj~&ubj)}(hhh]h)}(hThe HSI controller to registerh]hThe HSI controller to register}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMxhj&ubah}(h]h ]h"]h$]h&]uh1jhj~&ubeh}(h]h ]h"]h$]h&]uh1j{hj&hMxhj{&ubah}(h]h ]h"]h$]h&]uh1jvhj_&ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMzhj_&ubh)}(h(Returns -errno on failure, 0 on success.h]h(Returns -errno on failure, 0 on success.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMyhj_&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hsi_register_client_driver (C function)c.hsi_register_client_driverhNtauh1jhjhhhNhNubj)}(hhh](j)}(h>int hsi_register_client_driver (struct hsi_client_driver *drv)h]j)}(h=int hsi_register_client_driver(struct hsi_client_driver *drv)h](j )}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj'hhhj'hMubj/)}(hhsi_register_client_driverh]j5)}(hhsi_register_client_driverh]hhsi_register_client_driver}(hj%'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj!'ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj'hhhj'hMubj_)}(h(struct hsi_client_driver *drv)h]je)}(hstruct hsi_client_driver *drvh](j )}(hjh]hstruct}(hjA'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj='ubj)}(h h]h }(hjN'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj='ubh)}(hhh]j5)}(hhsi_client_driverh]hhsi_client_driver}(hj_'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj\'ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetja'modnameN classnameNjj)}j]j)}jj''sbc.hsi_register_client_driverasbuh1hhj='ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj='ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj='ubj5)}(hdrvh]hdrv}(hj'hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj='ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj9'ubah}(h]h ]h"]h$]h&]jjuh1j^hj'hhhj'hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj&hhhj'hMubah}(h]j&ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj'hMhj&hhubja)}(hhh]h)}(h%Register an HSI client to the HSI bush]h%Register an HSI client to the HSI bus}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'hhubah}(h]h ]h"]h$]h&]uh1j`hj&hhhj'hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj'jj'jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client_driver *drv`` HSI client driver to register **Description** Returns -errno on failure, 0 on success.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'ubjw)}(hhh]j|)}(h@``struct hsi_client_driver *drv`` HSI client driver to register h](j)}(h!``struct hsi_client_driver *drv``h]j)}(hj(h]hstruct hsi_client_driver *drv}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'ubj)}(hhh]h)}(hHSI client driver to registerh]hHSI client driver to register}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1j{hj(hMhj'ubah}(h]h ]h"]h$]h&]uh1jvhj'ubh)}(h**Description**h]j)}(hj@(h]h Description}(hjB(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>(ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'ubh)}(h(Returns -errno on failure, 0 on success.h]h(Returns -errno on failure, 0 on success.}(hjV(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_put_controller (C function)c.hsi_put_controllerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h4void hsi_put_controller (struct hsi_controller *hsi)h]j)}(h3void hsi_put_controller(struct hsi_controller *hsi)h](j )}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(hhhj(hMubj/)}(hhsi_put_controllerh]j5)}(hhsi_put_controllerh]hhsi_put_controller}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj(hhhj(hMubj_)}(h(struct hsi_controller *hsi)h]je)}(hstruct hsi_controller *hsih](j )}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubh)}(hhh]j5)}(hhsi_controllerh]hhsi_controller}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj(modnameN classnameNjj)}j]j)}jj(sbc.hsi_put_controllerasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj5)}(hhsih]hhsi}(hj)hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj(ubah}(h]h ]h"]h$]h&]jjuh1j^hj(hhhj(hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj}(hhhj(hMubah}(h]jx(ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj(hMhjz(hhubja)}(hhh]h)}(hFree an HSI controllerh]hFree an HSI controller}(hjE)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjB)hhubah}(h]h ]h"]h$]h&]uh1j`hjz(hhhj(hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj])jj])jjjuh1jhhhjhNhNubj)}(hX,**Parameters** ``struct hsi_controller *hsi`` Pointer to the HSI controller to freed **Description** HSI controller drivers should only use this function if they need to free their allocated hsi_controller structures before a successful call to hsi_register_controller. Other use is not allowed.h](h)}(h**Parameters**h]j)}(hjg)h]h Parameters}(hji)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje)ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhja)ubjw)}(hhh]j|)}(hF``struct hsi_controller *hsi`` Pointer to the HSI controller to freed h](j)}(h``struct hsi_controller *hsi``h]j)}(hj)h]hstruct hsi_controller *hsi}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj)ubj)}(hhh]h)}(h&Pointer to the HSI controller to freedh]h&Pointer to the HSI controller to freed}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1j{hj)hMhj})ubah}(h]h ]h"]h$]h&]uh1jvhja)ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhja)ubh)}(hHSI controller drivers should only use this function if they need to free their allocated hsi_controller structures before a successful call to hsi_register_controller. Other use is not allowed.h]hHSI controller drivers should only use this function if they need to free their allocated hsi_controller structures before a successful call to hsi_register_controller. Other use is not allowed.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhja)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!hsi_alloc_controller (C function)c.hsi_alloc_controllerhNtauh1jhjhhhNhNubj)}(hhh](j)}(hPstruct hsi_controller * hsi_alloc_controller (unsigned int n_ports, gfp_t flags)h]j)}(hNstruct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)h](j )}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj*hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*hhhj*hMubh)}(hhh]j5)}(hhsi_controllerh]hhsi_controller}(hj%*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj"*ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj'*modnameN classnameNjj)}j]j)}jhsi_alloc_controllersbc.hsi_alloc_controllerasbuh1hhj*hhhj*hMubj)}(h h]h }(hjF*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*hhhj*hMubj)}(hjh]h*}(hjT*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hMubj/)}(hhsi_alloc_controllerh]j5)}(hjC*h]hhsi_alloc_controller}(hje*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hja*ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj*hhhj*hMubj_)}(h#(unsigned int n_ports, gfp_t flags)h](je)}(hunsigned int n_portsh](j )}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|*ubj )}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj|*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj|*ubj5)}(hn_portsh]hn_ports}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjx*ubje)}(h gfp_t flagsh](h)}(hhh]j5)}(hgfp_th]hgfp_t}(hj*hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj*modnameN classnameNjj)}j]jA*c.hsi_alloc_controllerasbuh1hhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj*ubj5)}(hflagsh]hflags}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjx*ubeh}(h]h ]h"]h$]h&]jjuh1j^hj*hhhj*hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj)hhhj*hMubah}(h]j)ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj*hMhj)hhubja)}(hhh]h)}(h(Allocate an HSI controller and its portsh]h(Allocate an HSI controller and its ports}(hj*+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj'+hhubah}(h]h ]h"]h$]h&]uh1j`hj)hhhj*hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jjB+jjB+jjjuh1jhhhjhNhNubj)}(h**Parameters** ``unsigned int n_ports`` Number of ports on the HSI controller ``gfp_t flags`` Kernel allocation flags **Description** Return NULL on failure or a pointer to an hsi_controller on success.h](h)}(h**Parameters**h]j)}(hjL+h]h Parameters}(hjN+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ+ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjF+ubjw)}(hhh](j|)}(h?``unsigned int n_ports`` Number of ports on the HSI controller h](j)}(h``unsigned int n_ports``h]j)}(hjk+h]hunsigned int n_ports}(hjm+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhje+ubj)}(hhh]h)}(h%Number of ports on the HSI controllerh]h%Number of ports on the HSI controller}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhje+ubeh}(h]h ]h"]h$]h&]uh1j{hj+hMhjb+ubj|)}(h(``gfp_t flags`` Kernel allocation flags h](j)}(h``gfp_t flags``h]j)}(hj+h]h gfp_t flags}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj+ubj)}(hhh]h)}(hKernel allocation flagsh]hKernel allocation flags}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1j{hj+hMhjb+ubeh}(h]h ]h"]h$]h&]uh1jvhjF+ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjF+ubh)}(hDReturn NULL on failure or a pointer to an hsi_controller on success.h]hDReturn NULL on failure or a pointer to an hsi_controller on success.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjF+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_free_msg (C function)c.hsi_free_msghNtauh1jhjhhhNhNubj)}(hhh](j)}(h'void hsi_free_msg (struct hsi_msg *msg)h]j)}(h&void hsi_free_msg(struct hsi_msg *msg)h](j )}(hvoidh]hvoid}(hj$,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj ,hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj3,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj ,hhhj2,hMubj/)}(h hsi_free_msgh]j5)}(h hsi_free_msgh]h hsi_free_msg}(hjE,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjA,ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj ,hhhj2,hMubj_)}(h(struct hsi_msg *msg)h]je)}(hstruct hsi_msg *msgh](j )}(hjh]hstruct}(hja,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj],ubj)}(h h]h }(hjn,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj],ubh)}(hhh]j5)}(hhsi_msgh]hhsi_msg}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|,ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj,modnameN classnameNjj)}j]j)}jjG,sbc.hsi_free_msgasbuh1hhj],ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj],ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj],ubj5)}(hmsgh]hmsg}(hj,hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj],ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjY,ubah}(h]h ]h"]h$]h&]jjuh1j^hj ,hhhj2,hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj,hhhj2,hMubah}(h]j,ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj2,hMhj,hhubja)}(hhh]h)}(hFree an HSI messageh]hFree an HSI message}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj,hhubah}(h]h ]h"]h$]h&]uh1j`hj,hhhj2,hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj,jj,jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_msg *msg`` Pointer to the HSI message **Description** Client is responsible to free the buffers pointed by the scatterlists.h](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj-ubjw)}(hhh]j|)}(h3``struct hsi_msg *msg`` Pointer to the HSI message h](j)}(h``struct hsi_msg *msg``h]j)}(hj%-h]hstruct hsi_msg *msg}(hj'-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj-ubj)}(hhh]h)}(hPointer to the HSI messageh]hPointer to the HSI message}(hj>-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:-hMhj;-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1j{hj:-hMhj-ubah}(h]h ]h"]h$]h&]uh1jvhj-ubh)}(h**Description**h]j)}(hj`-h]h Description}(hjb-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^-ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj-ubh)}(hFClient is responsible to free the buffers pointed by the scatterlists.h]hFClient is responsible to free the buffers pointed by the scatterlists.}(hjv-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_alloc_msg (C function)c.hsi_alloc_msghNtauh1jhjhhhNhNubj)}(hhh](j)}(h@struct hsi_msg * hsi_alloc_msg (unsigned int nents, gfp_t flags)h]j)}(h>struct hsi_msg *hsi_alloc_msg(unsigned int nents, gfp_t flags)h](j )}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-hhhj-hMubh)}(hhh]j5)}(hhsi_msgh]hhsi_msg}(hj-hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj-ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj-modnameN classnameNjj)}j]j)}j hsi_alloc_msgsbc.hsi_alloc_msgasbuh1hhj-hhhj-hMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj-hhhj-hMubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhj-hMubj/)}(h hsi_alloc_msgh]j5)}(hj-h]h hsi_alloc_msg}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj-hhhj-hMubj_)}(h!(unsigned int nents, gfp_t flags)h](je)}(hunsigned int nentsh](j )}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj)}(h h]h }(hj-.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.ubj )}(hinth]hint}(hj;.hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj.ubj)}(h h]h }(hjI.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj.ubj5)}(hnentsh]hnents}(hjW.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj.ubje)}(h gfp_t flagsh](h)}(hhh]j5)}(hgfp_th]hgfp_t}(hjs.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjp.ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetju.modnameN classnameNjj)}j]j-c.hsi_alloc_msgasbuh1hhjl.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjl.ubj5)}(hflagsh]hflags}(hj.hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjl.ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj.ubeh}(h]h ]h"]h$]h&]jjuh1j^hj-hhhj-hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj-hhhj-hMubah}(h]j-ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj-hMhj-hhubja)}(hhh]h)}(hAllocate an HSI messageh]hAllocate an HSI message}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj.hhubah}(h]h ]h"]h$]h&]uh1j`hj-hhhj-hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj.jj.jjjuh1jhhhjhNhNubj)}(hXf**Parameters** ``unsigned int nents`` Number of memory entries ``gfp_t flags`` Kernel allocation flags **Description** nents can be 0. This mainly makes sense for read transfer. In that case, HSI drivers will call the complete callback when there is data to be read without consuming it. Return NULL on failure or a pointer to an hsi_msg on success.h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM hj.ubjw)}(hhh](j|)}(h0``unsigned int nents`` Number of memory entries h](j)}(h``unsigned int nents``h]j)}(hj /h]hunsigned int nents}(hj /hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj/ubj)}(hhh]h)}(hNumber of memory entriesh]hNumber of memory entries}(hj#/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj /ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1j{hj/hMhj/ubj|)}(h(``gfp_t flags`` Kernel allocation flags h](j)}(h``gfp_t flags``h]j)}(hjC/h]h gfp_t flags}(hjE/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM hj=/ubj)}(hhh]h)}(hKernel allocation flagsh]hKernel allocation flags}(hj\/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX/hM hjY/ubah}(h]h ]h"]h$]h&]uh1jhj=/ubeh}(h]h ]h"]h$]h&]uh1j{hjX/hM hj/ubeh}(h]h ]h"]h$]h&]uh1jvhj.ubh)}(h**Description**h]j)}(hj~/h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|/ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM hj.ubh)}(hnents can be 0. This mainly makes sense for read transfer. In that case, HSI drivers will call the complete callback when there is data to be read without consuming it.h]hnents can be 0. This mainly makes sense for read transfer. In that case, HSI drivers will call the complete callback when there is data to be read without consuming it.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM hj.ubh)}(h=Return NULL on failure or a pointer to an hsi_msg on success.h]h=Return NULL on failure or a pointer to an hsi_msg on success.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_async (C function) c.hsi_asynchNtauh1jhjhhhNhNubj)}(hhh](j)}(h:int hsi_async (struct hsi_client *cl, struct hsi_msg *msg)h]j)}(h9int hsi_async(struct hsi_client *cl, struct hsi_msg *msg)h](j )}(hinth]hint}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj/hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM(ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj/hhhj/hM(ubj/)}(h hsi_asynch]j5)}(h hsi_asynch]h hsi_async}(hj/hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj/ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj/hhhj/hM(ubj_)}(h,(struct hsi_client *cl, struct hsi_msg *msg)h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj 0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj 0ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj-0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj*0ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj/0modnameN classnameNjj)}j]j)}jj/sb c.hsi_asyncasbuh1hhj 0ubj)}(h h]h }(hjM0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj 0ubj)}(hjh]h*}(hj[0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0ubj5)}(hclh]hcl}(hjh0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj 0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj0ubje)}(hstruct hsi_msg *msgh](j )}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj}0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj}0ubh)}(hhh]j5)}(hhsi_msgh]hhsi_msg}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj0ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj0modnameN classnameNjj)}j]jI0 c.hsi_asyncasbuh1hhj}0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj}0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}0ubj5)}(hmsgh]hmsg}(hj0hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj}0ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj0ubeh}(h]h ]h"]h$]h&]jjuh1j^hj/hhhj/hM(ubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj/hhhj/hM(ubah}(h]j/ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj/hM(hj/hhubja)}(hhh]h)}(h(Submit an HSI transfer to the controllerh]h(Submit an HSI transfer to the controller}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM(hj0hhubah}(h]h ]h"]h$]h&]uh1j`hj/hhhj/hM(ubeh}(h]h ](j}functioneh"]h$]h&]jj}jj1jj1jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct hsi_client *cl`` HSI client sending the transfer ``struct hsi_msg *msg`` The HSI transfer passed to controller **Description** The HSI message must have the channel, ttype, complete and destructor fields set beforehand. If nents > 0 then the client has to initialize also the scatterlists to point to the buffers to write to or read from. HSI controllers relay on pre-allocated buffers from their clients and they do not allocate buffers on their own. Once the HSI message transfer finishes, the HSI controller calls the complete callback with the status and actual_len fields of the HSI message updated. The complete callback can be called before returning from hsi_async. Returns -errno on failure or 0 on successh](h)}(h**Parameters**h]j)}(hj$1h]h Parameters}(hj&1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"1ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM,hj1ubjw)}(hhh](j|)}(h:``struct hsi_client *cl`` HSI client sending the transfer h](j)}(h``struct hsi_client *cl``h]j)}(hjC1h]hstruct hsi_client *cl}(hjE1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM)hj=1ubj)}(hhh]h)}(hHSI client sending the transferh]hHSI client sending the transfer}(hj\1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX1hM)hjY1ubah}(h]h ]h"]h$]h&]uh1jhj=1ubeh}(h]h ]h"]h$]h&]uh1j{hjX1hM)hj:1ubj|)}(h>``struct hsi_msg *msg`` The HSI transfer passed to controller h](j)}(h``struct hsi_msg *msg``h]j)}(hj|1h]hstruct hsi_msg *msg}(hj~1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM*hjv1ubj)}(hhh]h)}(h%The HSI transfer passed to controllerh]h%The HSI transfer passed to controller}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hM*hj1ubah}(h]h ]h"]h$]h&]uh1jhjv1ubeh}(h]h ]h"]h$]h&]uh1j{hj1hM*hj:1ubeh}(h]h ]h"]h$]h&]uh1jvhj1ubh)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM,hj1ubh)}(hThe HSI message must have the channel, ttype, complete and destructor fields set beforehand. If nents > 0 then the client has to initialize also the scatterlists to point to the buffers to write to or read from.h]hThe HSI message must have the channel, ttype, complete and destructor fields set beforehand. If nents > 0 then the client has to initialize also the scatterlists to point to the buffers to write to or read from.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM+hj1ubh)}(hpHSI controllers relay on pre-allocated buffers from their clients and they do not allocate buffers on their own.h]hpHSI controllers relay on pre-allocated buffers from their clients and they do not allocate buffers on their own.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM/hj1ubh)}(hOnce the HSI message transfer finishes, the HSI controller calls the complete callback with the status and actual_len fields of the HSI message updated. The complete callback can be called before returning from hsi_async.h]hOnce the HSI message transfer finishes, the HSI controller calls the complete callback with the status and actual_len fields of the HSI message updated. The complete callback can be called before returning from hsi_async.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM2hj1ubh)}(h)Returns -errno on failure or 0 on successh]h)Returns -errno on failure or 0 on success}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chM7hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_claim_port (C function)c.hsi_claim_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(h>int hsi_claim_port (struct hsi_client *cl, unsigned int share)h]j)}(h=int hsi_claim_port(struct hsi_client *cl, unsigned int share)h](j )}(hinth]hint}(hj)2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj%2hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMIubj)}(h h]h }(hj82hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj%2hhhj72hMIubj/)}(hhsi_claim_porth]j5)}(hhsi_claim_porth]hhsi_claim_port}(hjJ2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjF2ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj%2hhhj72hMIubj_)}(h+(struct hsi_client *cl, unsigned int share)h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjf2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjb2ubj)}(h h]h }(hjs2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjb2ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj2modnameN classnameNjj)}j]j)}jjL2sbc.hsi_claim_portasbuh1hhjb2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjb2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb2ubj5)}(hclh]hcl}(hj2hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjb2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj^2ubje)}(hunsigned int shareh](j )}(hunsignedh]hunsigned}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubj )}(hinth]hint}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj2ubj5)}(hshareh]hshare}(hj3hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj2ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj^2ubeh}(h]h ]h"]h$]h&]jjuh1j^hj%2hhhj72hMIubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj!2hhhj72hMIubah}(h]j2ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj72hMIhj2hhubja)}(hhh]h)}(hClaim the HSI client's porth]hClaim the HSI client’s port}(hj:3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMIhj73hhubah}(h]h ]h"]h$]h&]uh1j`hj2hhhj72hMIubeh}(h]h ](j}functioneh"]h$]h&]jj}jjR3jjR3jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` HSI client that wants to claim its port ``unsigned int share`` Flag to indicate if the client wants to share the port or not. **Description** Returns -errno on failure, 0 on success.h](h)}(h**Parameters**h]j)}(hj\3h]h Parameters}(hj^3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMMhjV3ubjw)}(hhh](j|)}(hB``struct hsi_client *cl`` HSI client that wants to claim its port h](j)}(h``struct hsi_client *cl``h]j)}(hj{3h]hstruct hsi_client *cl}(hj}3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMJhju3ubj)}(hhh]h)}(h'HSI client that wants to claim its porth]h'HSI client that wants to claim its port}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMJhj3ubah}(h]h ]h"]h$]h&]uh1jhju3ubeh}(h]h ]h"]h$]h&]uh1j{hj3hMJhjr3ubj|)}(hV``unsigned int share`` Flag to indicate if the client wants to share the port or not. h](j)}(h``unsigned int share``h]j)}(hj3h]hunsigned int share}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMKhj3ubj)}(hhh]h)}(h>Flag to indicate if the client wants to share the port or not.h]h>Flag to indicate if the client wants to share the port or not.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMKhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1j{hj3hMKhjr3ubeh}(h]h ]h"]h$]h&]uh1jvhjV3ubh)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMMhjV3ubh)}(h(Returns -errno on failure, 0 on success.h]h(Returns -errno on failure, 0 on success.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMLhjV3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_release_port (C function)c.hsi_release_porthNtauh1jhjhhhNhNubj)}(hhh](j)}(h-void hsi_release_port (struct hsi_client *cl)h]j)}(h,void hsi_release_port(struct hsi_client *cl)h](j )}(hvoidh]hvoid}(hj44hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj04hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhubj)}(h h]h }(hjC4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj04hhhjB4hMhubj/)}(hhsi_release_porth]j5)}(hhsi_release_porth]hhsi_release_port}(hjU4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjQ4ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj04hhhjB4hMhubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjq4hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjm4ubj)}(h h]h }(hj~4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjm4ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj4ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj4modnameN classnameNjj)}j]j)}jjW4sbc.hsi_release_portasbuh1hhjm4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjm4ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm4ubj5)}(hclh]hcl}(hj4hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjm4ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhji4ubah}(h]h ]h"]h$]h&]jjuh1j^hj04hhhjB4hMhubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj,4hhhjB4hMhubah}(h]j'4ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjB4hMhhj)4hhubja)}(hhh]h)}(hRelease the HSI client's porth]hRelease the HSI client’s port}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhhj4hhubah}(h]h ]h"]h$]h&]uh1j`hj)4hhhjB4hMhubeh}(h]h ](j}functioneh"]h$]h&]jj}jj 5jj 5jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct hsi_client *cl`` HSI client which previously claimed its porth](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMlhj5ubjw)}(hhh]j|)}(hF``struct hsi_client *cl`` HSI client which previously claimed its porth](j)}(h``struct hsi_client *cl``h]j)}(hj55h]hstruct hsi_client *cl}(hj75hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj35ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMnhj/5ubj)}(hhh]h)}(h,HSI client which previously claimed its porth]h,HSI client which previously claimed its port}(hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMihjK5ubah}(h]h ]h"]h$]h&]uh1jhj/5ubeh}(h]h ]h"]h$]h&]uh1j{hjJ5hMnhj,5ubah}(h]h ]h"]h$]h&]uh1jvhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$hsi_register_port_event (C function)c.hsi_register_port_eventhNtauh1jhjhhhNhNubj)}(hhh](j)}(hhint hsi_register_port_event (struct hsi_client *cl, void (*handler)(struct hsi_client *, unsigned long))h]j)}(hfint hsi_register_port_event(struct hsi_client *cl, void (*handler)(struct hsi_client*, unsigned long))h](j )}(hinth]hint}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5hhhj5hMubj/)}(hhsi_register_port_eventh]j5)}(hhsi_register_port_eventh]hhsi_register_port_event}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj5hhhj5hMubj_)}(hK(struct hsi_client *cl, void (*handler)(struct hsi_client*, unsigned long))h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj5hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj5modnameN classnameNjj)}j]j)}jj5sbc.hsi_register_port_eventasbuh1hhj5ubj)}(h h]h }(hj 6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj5)}(hclh]hcl}(hj%6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj5ubje)}(h2void (*handler)(struct hsi_client*, unsigned long)h](j )}(hvoidh]hvoid}(hj>6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:6ubj)}(h h]h }(hjL6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:6ubj)}(h(h]h(}(hjZ6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj)}(hjh]h*}(hjh6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj5)}(hhandlerh]hhandler}(hju6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:6ubj)}(h)h]h)}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj)}(hj\6h]h(}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj )}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:6ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj6hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj6ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj6modnameN classnameNjj)}j]j6c.hsi_register_port_eventasbuh1hhj:6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj)}(h,h]h,}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:6ubj )}(hunsignedh]hunsigned}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:6ubj )}(hlongh]hlong}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:6ubj)}(hj6h]h)}(hj-7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj5ubeh}(h]h ]h"]h$]h&]jjuh1j^hj5hhhj5hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj5hhhj5hMubah}(h]j5ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj5hMhj5hhubja)}(hhh]h)}(h(Register a client to receive port eventsh]h(Register a client to receive port events}(hjV7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjS7hhubah}(h]h ]h"]h$]h&]uh1j`hj5hhhj5hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jjn7jjn7jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct hsi_client *cl`` HSI client that wants to receive port events ``void (*handler)(struct hsi_client *, unsigned long)`` Event handler callback **Description** Clients should register a callback to be able to receive events from the ports. Registration should happen after claiming the port. The handler can be called in interrupt context. Returns -errno on error, or 0 on success.h](h)}(h**Parameters**h]j)}(hjx7h]h Parameters}(hjz7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv7ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjr7ubjw)}(hhh](j|)}(hG``struct hsi_client *cl`` HSI client that wants to receive port events h](j)}(h``struct hsi_client *cl``h]j)}(hj7h]hstruct hsi_client *cl}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj7ubj)}(hhh]h)}(h,HSI client that wants to receive port eventsh]h,HSI client that wants to receive port events}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1j{hj7hMhj7ubj|)}(hO``void (*handler)(struct hsi_client *, unsigned long)`` Event handler callback h](j)}(h7``void (*handler)(struct hsi_client *, unsigned long)``h]j)}(hj7h]h3void (*handler)(struct hsi_client *, unsigned long)}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj7ubj)}(hhh]h)}(hEvent handler callbackh]hEvent handler callback}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1j{hj7hMhj7ubeh}(h]h ]h"]h$]h&]uh1jvhjr7ubh)}(h**Description**h]j)}(hj 8h]h Description}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjr7ubh)}(hClients should register a callback to be able to receive events from the ports. Registration should happen after claiming the port. The handler can be called in interrupt context.h]hClients should register a callback to be able to receive events from the ports. Registration should happen after claiming the port. The handler can be called in interrupt context.}(hj!8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjr7ubh)}(h)Returns -errno on error, or 0 on success.h]h)Returns -errno on error, or 0 on success.}(hj08hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjr7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&hsi_unregister_port_event (C function)c.hsi_unregister_port_eventhNtauh1jhjhhhNhNubj)}(hhh](j)}(h5int hsi_unregister_port_event (struct hsi_client *cl)h]j)}(h4int hsi_unregister_port_event(struct hsi_client *cl)h](j )}(hinth]hint}(hj_8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj[8hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hjn8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj[8hhhjm8hMubj/)}(hhsi_unregister_port_eventh]j5)}(hhsi_unregister_port_eventh]hhsi_unregister_port_event}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj|8ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj[8hhhjm8hMubj_)}(h(struct hsi_client *cl)h]je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetj8modnameN classnameNjj)}j]j)}jj8sbc.hsi_unregister_port_eventasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj8ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj5)}(hclh]hcl}(hj8hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj8ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj8ubah}(h]h ]h"]h$]h&]jjuh1j^hj[8hhhjm8hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThjW8hhhjm8hMubah}(h]jR8ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhjm8hMhjT8hhubja)}(hhh]h)}(h'Stop receiving port events for a clienth]h'Stop receiving port events for a client}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj9hhubah}(h]h ]h"]h$]h&]uh1j`hjT8hhhjm8hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj79jj79jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct hsi_client *cl`` HSI client that wants to stop receiving port events **Description** Clients should call this function before releasing their associated port. Returns -errno on error, or 0 on success.h](h)}(h**Parameters**h]j)}(hjA9h]h Parameters}(hjC9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?9ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;9ubjw)}(hhh]j|)}(hN``struct hsi_client *cl`` HSI client that wants to stop receiving port events h](j)}(h``struct hsi_client *cl``h]j)}(hj`9h]hstruct hsi_client *cl}(hjb9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^9ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjZ9ubj)}(hhh]h)}(h3HSI client that wants to stop receiving port eventsh]h3HSI client that wants to stop receiving port events}(hjy9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju9hMhjv9ubah}(h]h ]h"]h$]h&]uh1jhjZ9ubeh}(h]h ]h"]h$]h&]uh1j{hju9hMhjW9ubah}(h]h ]h"]h$]h&]uh1jvhj;9ubh)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;9ubh)}(hIClients should call this function before releasing their associated port.h]hIClients should call this function before releasing their associated port.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;9ubh)}(h)Returns -errno on error, or 0 on success.h]h)Returns -errno on error, or 0 on success.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jhsi_event (C function) c.hsi_eventhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:int hsi_event (struct hsi_port *port, unsigned long event)h]j)}(h9int hsi_event(struct hsi_port *port, unsigned long event)h](j )}(hinth]hint}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj9hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj9hhhj9hMubj/)}(h hsi_eventh]j5)}(h hsi_eventh]h hsi_event}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj :ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj9hhhj9hMubj_)}(h,(struct hsi_port *port, unsigned long event)h](je)}(hstruct hsi_port *porth](j )}(hjh]hstruct}(hj,:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj(:ubj)}(h h]h }(hj9:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(:ubh)}(hhh]j5)}(hhsi_porth]hhsi_port}(hjJ:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjG:ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetjL:modnameN classnameNjj)}j]j)}jj:sb c.hsi_eventasbuh1hhj(:ubj)}(h h]h }(hjj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj(:ubj)}(hjh]h*}(hjx:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(:ubj5)}(hporth]hport}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj(:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj$:ubje)}(hunsigned long eventh](j )}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubj )}(hlongh]hlong}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj:ubj5)}(heventh]hevent}(hj:hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj:ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhj$:ubeh}(h]h ]h"]h$]h&]jjuh1j^hj9hhhj9hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj9hhhj9hMubah}(h]j9ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj9hMhj9hhubja)}(hhh]h)}(h"Notifies clients about port eventsh]h"Notifies clients about port events}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj:hhubah}(h]h ]h"]h$]h&]uh1j`hj9hhhj9hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj;jj;jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct hsi_port *port`` Port where the event occurred ``unsigned long event`` The event type **Description** Clients should not be concerned about wake line behavior. However, due to a race condition in HSI HW protocol, clients need to be notified about wake line changes, so they can implement a workaround for it. Events: HSI_EVENT_START_RX - Incoming wake line high HSI_EVENT_STOP_RX - Incoming wake line down Returns -errno on error, or 0 on success.h](h)}(h**Parameters**h]j)}(hj";h]h Parameters}(hj$;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ;ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;ubjw)}(hhh](j|)}(h8``struct hsi_port *port`` Port where the event occurred h](j)}(h``struct hsi_port *port``h]j)}(hjA;h]hstruct hsi_port *port}(hjC;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;;ubj)}(hhh]h)}(hPort where the event occurredh]hPort where the event occurred}(hjZ;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV;hMhjW;ubah}(h]h ]h"]h$]h&]uh1jhj;;ubeh}(h]h ]h"]h$]h&]uh1j{hjV;hMhj8;ubj|)}(h'``unsigned long event`` The event type h](j)}(h``unsigned long event``h]j)}(hjz;h]hunsigned long event}(hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjt;ubj)}(hhh]h)}(hThe event typeh]hThe event type}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjt;ubeh}(h]h ]h"]h$]h&]uh1j{hj;hMhj8;ubeh}(h]h ]h"]h$]h&]uh1jvhj;ubh)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;ubh)}(hClients should not be concerned about wake line behavior. However, due to a race condition in HSI HW protocol, clients need to be notified about wake line changes, so they can implement a workaround for it.h]hClients should not be concerned about wake line behavior. However, due to a race condition in HSI HW protocol, clients need to be notified about wake line changes, so they can implement a workaround for it.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;ubh)}(h`Events: HSI_EVENT_START_RX - Incoming wake line high HSI_EVENT_STOP_RX - Incoming wake line downh]h`Events: HSI_EVENT_START_RX - Incoming wake line high HSI_EVENT_STOP_RX - Incoming wake line down}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;ubh)}(h)Returns -errno on error, or 0 on success.h]h)Returns -errno on error, or 0 on success.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'hsi_get_channel_id_by_name (C function)c.hsi_get_channel_id_by_namehNtauh1jhjhhhNhNubj)}(hhh](j)}(hBint hsi_get_channel_id_by_name (struct hsi_client *cl, char *name)h]j)}(hAint hsi_get_channel_id_by_name(struct hsi_client *cl, char *name)h](j )}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMubj)}(h h]h }(hj'<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<hhhj&<hMubj/)}(hhsi_get_channel_id_by_nameh]j5)}(hhsi_get_channel_id_by_nameh]hhsi_get_channel_id_by_name}(hj9<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj5<ubah}(h]h ](jGjHeh"]h$]h&]jjuh1j.hj<hhhj&<hMubj_)}(h#(struct hsi_client *cl, char *name)h](je)}(hstruct hsi_client *clh](j )}(hjh]hstruct}(hjU<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjQ<ubj)}(h h]h }(hjb<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQ<ubh)}(hhh]j5)}(h hsi_clienth]h hsi_client}(hjs<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjp<ubah}(h]h ]h"]h$]h&] refdomainj}reftypej reftargetju<modnameN classnameNjj)}j]j)}jj;<sbc.hsi_get_channel_id_by_nameasbuh1hhjQ<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhjQ<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ<ubj5)}(hclh]hcl}(hj<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hjQ<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjM<ubje)}(h char *nameh](j )}(hcharh]hchar}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j*ah"]h$]h&]uh1jhj<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj5)}(hnameh]hname}(hj<hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j4hj<ubeh}(h]h ]h"]h$]h&]noemphjjuh1jdhjM<ubeh}(h]h ]h"]h$]h&]jjuh1j^hj<hhhj&<hMubeh}(h]h ]h"]h$]h&]jjjRuh1jjSjThj<hhhj&<hMubah}(h]j <ah ](jXjYeh"]h$]h&]j]j^)j_huh1jhj&<hMhj <hhubja)}(hhh]h)}(h"acquire channel id by channel nameh]h"acquire channel id by channel name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj=hhubah}(h]h ]h"]h$]h&]uh1j`hj <hhhj&<hMubeh}(h]h ](j}functioneh"]h$]h&]jj}jj2=jj2=jjjuh1jhhhjhNhNubj)}(hXx**Parameters** ``struct hsi_client *cl`` HSI client, which uses the channel ``char *name`` name the channel is known under **Description** Clients can call this function to get the hsi channel ids similar to requesting IRQs or GPIOs by name. This function assumes the same channel configuration is used for RX and TX. Returns -errno on error or channel id on success.h](h)}(h**Parameters**h]j)}(hj<=h]h Parameters}(hj>=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:=ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj6=ubjw)}(hhh](j|)}(h=``struct hsi_client *cl`` HSI client, which uses the channel h](j)}(h``struct hsi_client *cl``h]j)}(hj[=h]hstruct hsi_client *cl}(hj]=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY=ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhjU=ubj)}(hhh]h)}(h"HSI client, which uses the channelh]h"HSI client, which uses the channel}(hjt=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp=hMhjq=ubah}(h]h ]h"]h$]h&]uh1jhjU=ubeh}(h]h ]h"]h$]h&]uh1j{hjp=hMhjR=ubj|)}(h/``char *name`` name the channel is known under h](j)}(h``char *name``h]j)}(hj=h]h char *name}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj=ubj)}(hhh]h)}(hname the channel is known underh]hname the channel is known under}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1j{hj=hMhjR=ubeh}(h]h ]h"]h$]h&]uh1jvhj6=ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj6=ubh)}(hClients can call this function to get the hsi channel ids similar to requesting IRQs or GPIOs by name. This function assumes the same channel configuration is used for RX and TX.h]hClients can call this function to get the hsi channel ids similar to requesting IRQs or GPIOs by name. This function assumes the same channel configuration is used for RX and TX.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj6=ubh)}(h1Returns -errno on error or channel id on success.h]h1Returns -errno on error or channel id on success.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/hsi:86: ./drivers/hsi/hsi_core.chMhj6=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]the-kernel-hsi-apiah ]h"]the kernel hsi apiah$]h&]uh1hhhhhhhhKQubeh}(h]+high-speed-synchronous-serial-interface-hsiah ]h"]-high speed synchronous serial interface (hsi)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj=>error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j>j>jjjTjQjjj>j >u nametypes}(j>jjTjj>uh}(j>hjhjQj"jjWj >jjjjejjjjj\ ja j j j j j"j'jjjjjjjJjOjjjjjojjjjj?!jD!j"j"j$j $jv%j{%j&j&jx(j}(j)j)j,j,j-j-j/j/j2j!2j'4j,4j5j5jR8jW8j9j9j <j<u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.