sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget1/translations/zh_CN/driver-api/mei/mei-client-busmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/zh_TW/driver-api/mei/mei-client-busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/it_IT/driver-api/mei/mei-client-busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ja_JP/driver-api/mei/mei-client-busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/ko_KR/driver-api/mei/mei-client-busmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget1/translations/sp_SP/driver-api/mei/mei-client-busmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhK/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus.rsthKubhsection)}(hhh](htitle)}(h.Intel(R) Management Engine (ME) Client bus APIh]h.Intel(R) Management Engine (ME) Client bus API}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Rationaleh]h Rationale}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh paragraph)}(hX+The MEI character device is useful for dedicated applications to send and receive data to the many FW appliance found in Intel's ME from the user space. However, for some of the ME functionalities it makes sense to leverage existing software stack and expose them through existing kernel subsystems.h]hX-The MEI character device is useful for dedicated applications to send and receive data to the many FW appliance found in Intel’s ME from the user space. However, for some of the ME functionalities it makes sense to leverage existing software stack and expose them through existing kernel subsystems.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXuIn order to plug seamlessly into the kernel device driver model we add kernel virtual bus abstraction on top of the MEI driver. This allows implementing Linux kernel drivers for the various MEI features as a stand alone entities found in their respective subsystem. Existing device drivers can even potentially be re-used by adding an MEI CL bus layer to the existing code.h]hXuIn order to plug seamlessly into the kernel device driver model we add kernel virtual bus abstraction on top of the MEI driver. This allows implementing Linux kernel drivers for the various MEI features as a stand alone entities found in their respective subsystem. Existing device drivers can even potentially be re-used by adding an MEI CL bus layer to the existing code.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h] rationaleah ]h"] rationaleah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hMEI CL bus APIh]hMEI CL bus API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hA driver implementation for an MEI Client is very similar to any other existing bus based device drivers. The driver registers itself as an MEI CL bus driver through the ``struct mei_cl_driver`` structure defined in :file:`include/linux/mei_cl_bus.c`h](hA driver implementation for an MEI Client is very similar to any other existing bus based device drivers. The driver registers itself as an MEI CL bus driver through the }(hjhhhNhNubhliteral)}(h``struct mei_cl_driver``h]hstruct mei_cl_driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh structure defined in }(hjhhhNhNubj)}(h":file:`include/linux/mei_cl_bus.c`h]hinclude/linux/mei_cl_bus.c}(hj-hhhNhNubah}(h]h ]fileah"]h$]h&]rolefileuh1jhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh literal_block)}(hX struct mei_cl_driver { struct device_driver driver; const char *name; const struct mei_cl_device_id *id_table; int (*probe)(struct mei_cl_device *dev, const struct mei_cl_id *id); int (*remove)(struct mei_cl_device *dev); };h]hX struct mei_cl_driver { struct device_driver driver; const char *name; const struct mei_cl_device_id *id_table; int (*probe)(struct mei_cl_device *dev, const struct mei_cl_id *id); int (*remove)(struct mei_cl_device *dev); };}hjFsbah}(h]h ]h"]h$]h&]hhforcelanguageChighlight_args}uh1jDhhhKhjhhubh)}(hThe mei_cl_device_id structure defined in :file:`include/linux/mod_devicetable.h` allows a driver to bind itself against a device name.h](h*The mei_cl_device_id structure defined in }(hjYhhhNhNubj)}(h':file:`include/linux/mod_devicetable.h`h]hinclude/linux/mod_devicetable.h}(hjahhhNhNubah}(h]h ]fileah"]h$]h&]rolefileuh1jhjYubh6 allows a driver to bind itself against a device name.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK,hjhhubjE)}(hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };h]hstruct mei_cl_device_id { char name[MEI_CL_NAME_SIZE]; uuid_le uuid; __u8 version; kernel_ulong_t driver_info; };}hj|sbah}(h]h ]h"]h$]h&]hhjTjUjVjW}uh1jDhhhK/hjhhubh)}(hTo actually register a driver on the ME Client bus one must call the :c:func:`mei_cl_add_driver` API. This is typically called at module initialization time.h](hETo actually register a driver on the ME Client bus one must call the }(hjhhhNhNubh)}(h:c:func:`mei_cl_add_driver`h]j)}(hjh]hmei_cl_add_driver()}(hjhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocdriver-api/mei/mei-client-bus refdomainjreftypefunc refexplicitrefwarn reftargetmei_cl_add_driveruh1hhhhK8hjubh= API. This is typically called at module initialization time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK8hjhhubh)}(hXOnce the driver is registered and bound to the device, a driver will typically try to do some I/O on this bus and this should be done through the :c:func:`mei_cl_send` and :c:func:`mei_cl_recv` functions. More detailed information is in :ref:`api` section.h](hOnce the driver is registered and bound to the device, a driver will typically try to do some I/O on this bus and this should be done through the }(hjhhhNhNubh)}(h:c:func:`mei_cl_send`h]j)}(hjh]h mei_cl_send()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj mei_cl_senduh1hhhhK;hjubh and }(hjhhhNhNubh)}(h:c:func:`mei_cl_recv`h]j)}(hjh]h mei_cl_recv()}(hjhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnj mei_cl_recvuh1hhhhK;hjubh, functions. More detailed information is in }(hjhhhNhNubh)}(h :ref:`api`h]hinline)}(hjh]hapi}(hjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjapiuh1hhhhK;hjubh section.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubh)}(hIn order for a driver to be notified about pending traffic or event, the driver should register a callback via :c:func:`mei_cl_devev_register_rx_cb` and :c:func:`mei_cldev_register_notify_cb` function respectively.h](hoIn order for a driver to be notified about pending traffic or event, the driver should register a callback via }(hj:hhhNhNubh)}(h%:c:func:`mei_cl_devev_register_rx_cb`h]j)}(hjDh]hmei_cl_devev_register_rx_cb()}(hjFhhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjmei_cl_devev_register_rx_cbuh1hhhhK?hj:ubh and }(hj:hhhNhNubh)}(h&:c:func:`mei_cldev_register_notify_cb`h]j)}(hjgh]hmei_cldev_register_notify_cb()}(hjihhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjmei_cldev_register_notify_cbuh1hhhhK?hj:ubh function respectively.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK?hjhhubhtarget)}(h.. _api:h]h}(h]h ]h"]h$]h&]refidapiuh1jhKChjhhhhubh)}(hhh](h)}(hAPI:h]hAPI:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKFubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single mei_cldev_send_vtag (C function)c.mei_cldev_send_vtaghNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h`ssize_t mei_cldev_send_vtag (struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag)h]hdesc_signature_line)}(h_ssize_t mei_cldev_send_vtag(struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag)h](h)}(hhh]h desc_sig_name)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jmei_cldev_send_vtagsbc.mei_cldev_send_vtagasbuh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhMubh desc_name)}(hmei_cldev_send_vtagh]j)}(hjh]hmei_cldev_send_vtag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhMubhdesc_parameterlist)}(hD(struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag)h](hdesc_parameter)}(hstruct mei_cl_device *cldevh](hdesc_sig_keyword)}(hstructh]hstruct}(hj9hhhNhNubah}(h]h ]kah"]h$]h&]uh1j7hj3ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNjj)}j]jc.mei_cldev_send_vtagasbuh1hhj3ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj3ubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj-ubj2)}(h const u8 *bufh](j8)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_send_vtagasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj-ubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]jc.mei_cldev_send_vtagasbuh1hhjubj)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hlengthh]hlength}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj-ubj2)}(hu8 vtagh](h)}(hhh]j)}(hu8h]hu8}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]jc.mei_cldev_send_vtagasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdubj)}(hvtagh]hvtag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj-ubeh}(h]h ]h"]h$]h&]hhuh1j+hjhhhjhMubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhMubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhMhjhhubh desc_content)}(hhh]h)}(h me device send with vtag (write)h]h me device send with vtag (write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(h**Parameters** ``struct mei_cl_device *cldev`` me client device ``const u8 *buf`` buffer to send ``size_t length`` buffer length ``u8 vtag`` virtual tag **Return** * written size in bytes * < 0 on errorh](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h1``struct mei_cl_device *cldev`` me client device h](hterm)}(h``struct mei_cl_device *cldev``h]j)}(hjh]hstruct mei_cl_device *cldev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubh definition)}(hhh]h)}(hme client deviceh]hme client device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj4ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj1hMhjubj)}(h!``const u8 *buf`` buffer to send h](j)}(h``const u8 *buf``h]j)}(hjWh]h const u8 *buf}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjQubj3)}(hhh]h)}(hbuffer to sendh]hbuffer to send}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1j2hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMhjubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hjh]h size_t length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u8 vtag`` virtual tag h](j)}(h ``u8 vtag``h]j)}(hjh]hu8 vtag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hjubj3)}(hhh]h)}(h virtual tagh]h virtual tag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hjubh block_quote)}(h&* written size in bytes * < 0 on errorh]h bullet_list)}(hhh](h list_item)}(hwritten size in bytesh]h)}(hj)h]hwritten size in bytes}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj'ubah}(h]h ]h"]h$]h&]uh1j%hj"ubj&)}(h < 0 on errorh]h)}(hjAh]h < 0 on error}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj?ubah}(h]h ]h"]h$]h&]uh1j%hj"ubeh}(h]h ]h"]h$]h&]bulletjuh1j hj8hM hjubah}(h]h ]h"]h$]h&]uh1jhj8hM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mei_cldev_send_vtag_timeout (C function)c.mei_cldev_send_vtag_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(hssize_t mei_cldev_send_vtag_timeout (struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag, unsigned long timeout)h]j)}(h~ssize_t mei_cldev_send_vtag_timeout(struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag, unsigned long timeout)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jmei_cldev_send_vtag_timeoutsbc.mei_cldev_send_vtag_timeoutasbuh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM&ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhM&ubj)}(hmei_cldev_send_vtag_timeouth]j)}(hjh]hmei_cldev_send_vtag_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjhhhjhM&ubj,)}(h[(struct mei_cl_device *cldev, const u8 *buf, size_t length, u8 vtag, unsigned long timeout)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_send_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcldevh]hcldev}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(h const u8 *bufh](j8)}(hjh]hconst}(hjFhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]jc.mei_cldev_send_vtag_timeoutasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_send_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hu8 vtagh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_send_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hvtagh]hvtag}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hunsigned long timeouth](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jFhjBubj)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubjG)}(hlongh]hlong}(hjehhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjBubj)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubeh}(h]h ]h"]h$]h&]hhuh1j+hjhhhjhM&ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj|hhhjhM&ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhM&hjyhhubj)}(hhh]h)}(h,me device send with vtag and timeout (write)h]h,me device send with vtag and timeout (write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX,**Parameters** ``struct mei_cl_device *cldev`` me client device ``const u8 *buf`` buffer to send ``size_t length`` buffer length ``u8 vtag`` virtual tag ``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout **Return** * written size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjh]hstruct mei_cl_device *cldev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(hme client deviceh]hme client device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h!``const u8 *buf`` buffer to send h](j)}(h``const u8 *buf``h]j)}(hj% h]h const u8 *buf}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj ubj3)}(hhh]h)}(hbuffer to sendh]hbuffer to send}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj: hMhj; ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj: hMhjubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hj^ h]h size_t length}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjX ubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs hMhjt ubah}(h]h ]h"]h$]h&]uh1j2hjX ubeh}(h]h ]h"]h$]h&]uh1jhjs hMhjubj)}(h``u8 vtag`` virtual tag h](j)}(h ``u8 vtag``h]j)}(hj h]hu8 vtag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj ubj3)}(hhh]h)}(h virtual tagh]h virtual tag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hO``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout h](j)}(h``unsigned long timeout``h]j)}(hj h]hunsigned long timeout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj ubj3)}(hhh]h)}(h4send timeout in milliseconds, 0 for infinite timeouth]h4send timeout in milliseconds, 0 for infinite timeout}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM"hjubj)}(h&* written size in bytes * < 0 on errorh]j!)}(hhh](j&)}(hwritten size in bytesh]h)}(hj* h]hwritten size in bytes}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM"hj( ubah}(h]h ]h"]h$]h&]uh1j%hj% ubj&)}(h < 0 on errorh]h)}(hjB h]h < 0 on error}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM#hj@ ubah}(h]h ]h"]h$]h&]uh1j%hj% ubeh}(h]h ]h"]h$]h&]j]juh1j hj9 hM"hj! ubah}(h]h ]h"]h$]h&]uh1jhj9 hM"hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j mei_cldev_recv_vtag (C function)c.mei_cldev_recv_vtaghNtauh1jhjhhhNhNubj)}(hhh](j)}(h[ssize_t mei_cldev_recv_vtag (struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag)h]j)}(hZssize_t mei_cldev_recv_vtag(struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jmei_cldev_recv_vtagsbc.mei_cldev_recv_vtagasbuh1hhj hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM<ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhj hM<ubj)}(hmei_cldev_recv_vtagh]j)}(hj h]hmei_cldev_recv_vtag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj hhhj hM<ubj,)}(h?(struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.mei_cldev_recv_vtagasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hcldevh]hcldev}(hj- hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubj2)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjK modnameN classnameNjj)}j]j c.mei_cldev_recv_vtagasbuh1hhjB ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjB ubj)}(hjh]h*}(hju hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubj)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.mei_cldev_recv_vtagasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj)}(hlengthh]hlength}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubj2)}(hu8 *vtagh](h)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j c.mei_cldev_recv_vtagasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hvtagh]hvtag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubeh}(h]h ]h"]h$]h&]hhuh1j+hj hhhj hM<ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj| hhhj hM<ubah}(h]jw ah ](jjeh"]h$]h&]jj)jhuh1jhj hM<hjy hhubj)}(hhh]h)}(hclient receive with vtag (read)h]hclient receive with vtag (read)}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM1hjF hhubah}(h]h ]h"]h$]h&]uh1jhjy hhhj hM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjja jja jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mei_cl_device *cldev`` me client device ``u8 *buf`` buffer to receive ``size_t length`` buffer length ``u8 *vtag`` virtual tag **Return** * read size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hjk h]h Parameters}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM5hje ubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj h]hstruct mei_cl_device *cldev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM3hj ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM3hj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM3hj ubj)}(h``u8 *buf`` buffer to receive h](j)}(h ``u8 *buf``h]j)}(hj h]hu8 *buf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM4hj ubj3)}(hhh]h)}(hbuffer to receiveh]hbuffer to receive}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM4hj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM4hj ubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hj h]h size_t length}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM5hj ubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM5hj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hM5hj ubj)}(h``u8 *vtag`` virtual tag h](j)}(h ``u8 *vtag``h]j)}(hj5 h]hu8 *vtag}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM6hj/ ubj3)}(hhh]h)}(h virtual tagh]h virtual tag}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ hM6hjK ubah}(h]h ]h"]h$]h&]uh1j2hj/ ubeh}(h]h ]h"]h$]h&]uh1jhjJ hM6hj ubeh}(h]h ]h"]h$]h&]uh1j hje ubh)}(h **Return**h]j)}(hjp h]hReturn}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM8hje ubj!)}(hhh](j&)}(hread size in bytesh]h)}(hj h]hread size in bytes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM8hj ubah}(h]h ]h"]h$]h&]uh1j%hj ubj&)}(h < 0 on errorh]h)}(hj h]h < 0 on error}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM9hj ubah}(h]h ]h"]h$]h&]uh1j%hj ubeh}(h]h ]h"]h$]h&]j]juh1j hj hM8hje ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mei_cldev_recv_timeout (C function)c.mei_cldev_recv_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(hkssize_t mei_cldev_recv_timeout (struct mei_cl_device *cldev, u8 *buf, size_t length, unsigned long timeout)h]j)}(hjssize_t mei_cldev_recv_timeout(struct mei_cl_device *cldev, u8 *buf, size_t length, unsigned long timeout)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jmei_cldev_recv_timeoutsbc.mei_cldev_recv_timeoutasbuh1hhj hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMRubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhjhMRubj)}(hmei_cldev_recv_timeouth]j)}(hjh]hmei_cldev_recv_timeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj hhhjhMRubj,)}(hL(struct mei_cl_device *cldev, u8 *buf, size_t length, unsigned long timeout)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj-ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j c.mei_cldev_recv_timeoutasbuh1hhj-ubj)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj)ubj2)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mei_cldev_recv_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj)ubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.mei_cldev_recv_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hlengthh]hlength}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj)ubj2)}(hunsigned long timeouth](jG)}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj:ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubjG)}(hlongh]hlong}(hjZhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj:ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(htimeouth]htimeout}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj)ubeh}(h]h ]h"]h$]h&]hhuh1j+hj hhhjhMRubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhjhMRubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhjhMRhj hhubj)}(hhh]h)}(h"client receive with timeout (read)h]h"client receive with timeout (read)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMGhjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhjhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct mei_cl_device *cldev`` me client device ``u8 *buf`` buffer to receive ``size_t length`` buffer length ``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout **Return** * read size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMKhjubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjh]hstruct mei_cl_device *cldev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMIhjubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubj)}(h``u8 *buf`` buffer to receive h](j)}(h ``u8 *buf``h]j)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMJhjubj3)}(hhh]h)}(hbuffer to receiveh]hbuffer to receive}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMJhj0ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMJhjubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hjSh]h size_t length}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMKhjMubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMKhjiubah}(h]h ]h"]h$]h&]uh1j2hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMKhjubj)}(hO``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout h](j)}(h``unsigned long timeout``h]j)}(hjh]hunsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMLhjubj3)}(hhh]h)}(h4send timeout in milliseconds, 0 for infinite timeouth]h4send timeout in milliseconds, 0 for infinite timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMNhjubj!)}(hhh](j&)}(hread size in bytesh]h)}(hjh]hread size in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMNhjubah}(h]h ]h"]h$]h&]uh1j%hjubj&)}(h < 0 on errorh]h)}(hjh]h < 0 on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMOhjubah}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ]h"]h$]h&]j]juh1j hjhMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mei_cldev_recv_vtag_timeout (C function)c.mei_cldev_recv_vtag_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(hzssize_t mei_cldev_recv_vtag_timeout (struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag, unsigned long timeout)h]j)}(hyssize_t mei_cldev_recv_vtag_timeout(struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag, unsigned long timeout)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;modnameN classnameNjj)}j]j)}jmei_cldev_recv_vtag_timeoutsbc.mei_cldev_recv_vtag_timeoutasbuh1hhj2hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMfubj)}(h h]h }(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2hhhjZhMfubj)}(hmei_cldev_recv_vtag_timeouth]j)}(hjWh]hmei_cldev_recv_vtag_timeout}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj2hhhjZhMfubj,)}(hV(struct mei_cl_device *cldev, u8 *buf, size_t length, u8 *vtag, unsigned long timeout)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.mei_cldev_recv_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.mei_cldev_recv_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]jUc.mei_cldev_recv_vtag_timeoutasbuh1hhjIubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIubj)}(hlengthh]hlength}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hu8 *vtagh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jUc.mei_cldev_recv_vtag_timeoutasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hvtagh]hvtag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hunsigned long timeouth](jG)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjG)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(htimeouth]htimeout}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubeh}(h]h ]h"]h$]h&]hhuh1j+hj2hhhjZhMfubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj.hhhjZhMfubah}(h]j)ah ](jjeh"]h$]h&]jj)jhuh1jhjZhMfhj+hhubj)}(hhh]h)}(hclient receive with vtag (read)h]hclient receive with vtag (read)}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMZhjIhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjZhMfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1jhhhjhNhNubj)}(hX&**Parameters** ``struct mei_cl_device *cldev`` me client device ``u8 *buf`` buffer to receive ``size_t length`` buffer length ``u8 *vtag`` virtual tag ``unsigned long timeout`` recv timeout in milliseconds, 0 for infinite timeout **Return** * read size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hjnh]h Parameters}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM^hjhubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjh]hstruct mei_cl_device *cldev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM\hjubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubj)}(h``u8 *buf`` buffer to receive h](j)}(h ``u8 *buf``h]j)}(hjh]hu8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM]hjubj3)}(hhh]h)}(hbuffer to receiveh]hbuffer to receive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hjh]h size_t length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM^hjubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM^hjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhM^hjubj)}(h``u8 *vtag`` virtual tag h](j)}(h ``u8 *vtag``h]j)}(hj8h]hu8 *vtag}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM_hj2ubj3)}(hhh]h)}(h virtual tagh]h virtual tag}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhM_hjNubah}(h]h ]h"]h$]h&]uh1j2hj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhM_hjubj)}(hO``unsigned long timeout`` recv timeout in milliseconds, 0 for infinite timeout h](j)}(h``unsigned long timeout``h]j)}(hjqh]hunsigned long timeout}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM`hjkubj3)}(hhh]h)}(h4recv timeout in milliseconds, 0 for infinite timeouth]h4recv timeout in milliseconds, 0 for infinite timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1j2hjkubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjubeh}(h]h ]h"]h$]h&]uh1j hjhubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMbhjhubj!)}(hhh](j&)}(hread size in bytesh]h)}(hjh]hread size in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMbhjubah}(h]h ]h"]h$]h&]uh1j%hjubj&)}(h < 0 on errorh]h)}(hjh]h < 0 on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMchjubah}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ]h"]h$]h&]j]juh1j hjhMbhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_send (C function)c.mei_cldev_sendhNtauh1jhjhhhNhNubj)}(hhh](j)}(hRssize_t mei_cldev_send (struct mei_cl_device *cldev, const u8 *buf, size_t length)h]j)}(hQssize_t mei_cldev_send(struct mei_cl_device *cldev, const u8 *buf, size_t length)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jmei_cldev_sendsbc.mei_cldev_sendasbuh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM{ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj?hM{ubj)}(hmei_cldev_sendh]j)}(hj<h]hmei_cldev_send}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjhhhj?hM{ubj,)}(h;(struct mei_cl_device *cldev, const u8 *buf, size_t length)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjmhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j:c.mei_cldev_sendasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjeubj2)}(h const u8 *bufh](j8)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j:c.mei_cldev_sendasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjeubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j:c.mei_cldev_sendasbuh1hhjIubj)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIubj)}(hlengthh]hlength}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjeubeh}(h]h ]h"]h$]h&]hhuh1j+hjhhhj?hM{ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj?hM{ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj?hM{hjhhubj)}(hhh]h)}(hme device send (write)h]hme device send (write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMqhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj?hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mei_cl_device *cldev`` me client device ``const u8 *buf`` buffer to send ``size_t length`` buffer length **Return** * written size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMuhjubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjh]hstruct mei_cl_device *cldev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMshjubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMshjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMshjubj)}(h!``const u8 *buf`` buffer to send h](j)}(h``const u8 *buf``h]j)}(hj h]h const u8 *buf}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMthjubj3)}(hhh]h)}(hbuffer to sendh]hbuffer to send}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMthj6ubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhj5hMthjubj)}(h ``size_t length`` buffer length &h](j)}(h``size_t length``h]j)}(hjYh]h size_t length}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMuhjSubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMuhjoubah}(h]h ]h"]h$]h&]uh1j2hjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMuhjubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMwhjubj)}(h&* written size in bytes * < 0 on errorh]j!)}(hhh](j&)}(hwritten size in bytesh]h)}(hjh]hwritten size in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMwhjubah}(h]h ]h"]h$]h&]uh1j%hjubj&)}(h < 0 on errorh]h)}(hjh]h < 0 on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMxhjubah}(h]h ]h"]h$]h&]uh1j%hjubeh}(h]h ]h"]h$]h&]j]juh1j hjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjhMwhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#mei_cldev_send_timeout (C function)c.mei_cldev_send_timeouthNtauh1jhjhhhNhNubj)}(hhh](j)}(hqssize_t mei_cldev_send_timeout (struct mei_cl_device *cldev, const u8 *buf, size_t length, unsigned long timeout)h]j)}(hpssize_t mei_cldev_send_timeout(struct mei_cl_device *cldev, const u8 *buf, size_t length, unsigned long timeout)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jmei_cldev_send_timeoutsbc.mei_cldev_send_timeoutasbuh1hhj hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhj1hMubj)}(hmei_cldev_send_timeouth]j)}(hj.h]hmei_cldev_send_timeout}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj hhhj1hMubj,)}(hR(struct mei_cl_device *cldev, const u8 *buf, size_t length, unsigned long timeout)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj_hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj[ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,c.mei_cldev_send_timeoutasbuh1hhj[ubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjWubj2)}(h const u8 *bufh](j8)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j,c.mei_cldev_send_timeoutasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hbufh]hbuf}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjWubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]j,c.mei_cldev_send_timeoutasbuh1hhj;ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubj)}(hlengthh]hlength}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjWubj2)}(hunsigned long timeouth](jG)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubjG)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjWubeh}(h]h ]h"]h$]h&]hhuh1j+hj hhhj1hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj1hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj1hMhjhhubj)}(hhh]h)}(h#me device send with timeout (write)h]h#me device send with timeout (write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mei_cl_device *cldev`` me client device ``const u8 *buf`` buffer to send ``size_t length`` buffer length ``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout **Return** * written size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj*h]hstruct mei_cl_device *cldev}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj$ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1j2hj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj!ubj)}(h!``const u8 *buf`` buffer to send h](j)}(h``const u8 *buf``h]j)}(hjch]h const u8 *buf}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj]ubj3)}(hhh]h)}(hbuffer to sendh]hbuffer to send}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1j2hj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhj!ubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hjh]h size_t length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubj)}(hO``unsigned long timeout`` send timeout in milliseconds, 0 for infinite timeout h](j)}(h``unsigned long timeout``h]j)}(hjh]hunsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(h4send timeout in milliseconds, 0 for infinite timeouth]h4send timeout in milliseconds, 0 for infinite timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj!ubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj)}(h&* written size in bytes * < 0 on errorh]j!)}(hhh](j&)}(hwritten size in bytesh]h)}(hj/h]hwritten size in bytes}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj-ubah}(h]h ]h"]h$]h&]uh1j%hj*ubj&)}(h < 0 on errorh]h)}(hjGh]h < 0 on error}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjEubah}(h]h ]h"]h$]h&]uh1j%hj*ubeh}(h]h ]h"]h$]h&]j]juh1j hj>hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj>hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_recv (C function)c.mei_cldev_recvhNtauh1jhjhhhNhNubj)}(hhh](j)}(hLssize_t mei_cldev_recv (struct mei_cl_device *cldev, u8 *buf, size_t length)h]j)}(hKssize_t mei_cldev_recv(struct mei_cl_device *cldev, u8 *buf, size_t length)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jmei_cldev_recvsbc.mei_cldev_recvasbuh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhjhMubj)}(hmei_cldev_recvh]j)}(hjh]hmei_cldev_recv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjhhhjhMubj,)}(h5(struct mei_cl_device *cldev, u8 *buf, size_t length)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_recvasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcldevh]hcldev}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(hu8 *bufh](h)}(hhh]j)}(hu8h]hu8}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]jc.mei_cldev_recvasbuh1hhjGubj)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubj2)}(h size_t lengthh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_recvasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hlengthh]hlength}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjubeh}(h]h ]h"]h$]h&]hhuh1j+hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1jhjhMhj~hhubj)}(hhh]h)}(hclient receive (read)h]hclient receive (read)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mei_cl_device *cldev`` me client device ``u8 *buf`` buffer to receive ``size_t length`` buffer length **Return** read size in bytes of < 0 on errorh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj:h]hstruct mei_cl_device *cldev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj4ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1j2hj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(h``u8 *buf`` buffer to receive h](j)}(h ``u8 *buf``h]j)}(hjsh]hu8 *buf}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjmubj3)}(hhh]h)}(hbuffer to receiveh]hbuffer to receive}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h ``size_t length`` buffer length h](j)}(h``size_t length``h]j)}(hjh]h size_t length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(h buffer lengthh]h buffer length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubeh}(h]h ]h"]h$]h&]uh1j hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubh)}(h"read size in bytes of < 0 on errorh]h"read size in bytes of < 0 on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%mei_cldev_register_rx_cb (C function)c.mei_cldev_register_rx_cbhNtauh1jhjhhhNhNubj)}(hhh](j)}(hPint mei_cldev_register_rx_cb (struct mei_cl_device *cldev, mei_cldev_cb_t rx_cb)h]j)}(hOint mei_cldev_register_rx_cb(struct mei_cl_device *cldev, mei_cldev_cb_t rx_cb)h](jG)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj(hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubj)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(hhhj:hMubj)}(hmei_cldev_register_rx_cbh]j)}(hmei_cldev_register_rx_cbh]hmei_cldev_register_rx_cb}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj(hhhj:hMubj,)}(h3(struct mei_cl_device *cldev, mei_cldev_cb_t rx_cb)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjihhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjeubj)}(h h]h }(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjOsbc.mei_cldev_register_rx_cbasbuh1hhjeubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjeubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubj)}(hcldevh]hcldev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjaubj2)}(hmei_cldev_cb_t rx_cbh](h)}(hhh]j)}(hmei_cldev_cb_th]hmei_cldev_cb_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.mei_cldev_register_rx_cbasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hrx_cbh]hrx_cb}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjaubeh}(h]h ]h"]h$]h&]hhuh1j+hj(hhhj:hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj$hhhj:hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj:hMhj!hhubj)}(hhh]h)}(hregister Rx event callbackh]hregister Rx event callback}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj1hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj:hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mei_cl_device *cldev`` me client devices ``mei_cldev_cb_t rx_cb`` callback function **Return** 0 on success -EALREADY if an callback is already registered <0 on other errorsh](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjPubj)}(hhh](j)}(h2``struct mei_cl_device *cldev`` me client devices h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjuh]hstruct mei_cl_device *cldev}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjoubj3)}(hhh]h)}(hme client devicesh]hme client devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubj)}(h+``mei_cldev_cb_t rx_cb`` callback function h](j)}(h``mei_cldev_cb_t rx_cb``h]j)}(hjh]hmei_cldev_cb_t rx_cb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjubj3)}(hhh]h)}(hcallback functionh]hcallback function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjlubeh}(h]h ]h"]h$]h&]uh1j hjPubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjPubj)}(hhh]j)}(hN0 on success -EALREADY if an callback is already registered <0 on other errorsh](j)}(h 0 on successh]h 0 on success}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj ubj3)}(hhh]h)}(hA-EALREADY if an callback is already registered <0 on other errorsh]hA-EALREADY if an callback is already registered <0 on other errors}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j2hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(mei_cldev_register_notif_cb (C function)c.mei_cldev_register_notif_cbhNtauh1jhjhhhNhNubj)}(hhh](j)}(hVint mei_cldev_register_notif_cb (struct mei_cl_device *cldev, mei_cldev_cb_t notif_cb)h]j)}(hUint mei_cldev_register_notif_cb(struct mei_cl_device *cldev, mei_cldev_cb_t notif_cb)h](jG)}(hinth]hint}(hjX hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjT hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM'ubj)}(h h]h }(hjg hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjT hhhjf hM'ubj)}(hmei_cldev_register_notif_cbh]j)}(hmei_cldev_register_notif_cbh]hmei_cldev_register_notif_cb}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjT hhhjf hM'ubj,)}(h6(struct mei_cl_device *cldev, mei_cldev_cb_t notif_cb)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj{ sbc.mei_cldev_register_notif_cbasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hcldevh]hcldev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubj2)}(hmei_cldev_cb_t notif_cbh](h)}(hhh]j)}(hmei_cldev_cb_th]hmei_cldev_cb_t}(hj !hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj !modnameN classnameNjj)}j]j c.mei_cldev_register_notif_cbasbuh1hhj!ubj)}(h h]h }(hj(!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubj)}(hnotif_cbh]hnotif_cb}(hj6!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj ubeh}(h]h ]h"]h$]h&]hhuh1j+hjT hhhjf hM'ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjP hhhjf hM'ubah}(h]jK ah ](jjeh"]h$]h&]jj)jhuh1jhjf hM'hjM hhubj)}(hhh]h)}(h'register FW notification event callbackh]h'register FW notification event callback}(hj`!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj]!hhubah}(h]h ]h"]h$]h&]uh1jhjM hhhjf hM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjx!jjx!jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct mei_cl_device *cldev`` me client devices ``mei_cldev_cb_t notif_cb`` callback function **Return** 0 on success -EALREADY if an callback is already registered <0 on other errorsh](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM"hj|!ubj)}(hhh](j)}(h2``struct mei_cl_device *cldev`` me client devices h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj!h]hstruct mei_cl_device *cldev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj!ubj3)}(hhh]h)}(hme client devicesh]hme client devices}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM hj!ubah}(h]h ]h"]h$]h&]uh1j2hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM hj!ubj)}(h.``mei_cldev_cb_t notif_cb`` callback function h](j)}(h``mei_cldev_cb_t notif_cb``h]j)}(hj!h]hmei_cldev_cb_t notif_cb}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM!hj!ubj3)}(hhh]h)}(hcallback functionh]hcallback function}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM!hj!ubah}(h]h ]h"]h$]h&]uh1j2hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hM!hj!ubeh}(h]h ]h"]h$]h&]uh1j hj|!ubh)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM#hj|!ubj)}(hhh]j)}(hN0 on success -EALREADY if an callback is already registered <0 on other errorsh](j)}(h 0 on successh]h 0 on success}(hj2"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM$hj."ubj3)}(hhh]h)}(hA-EALREADY if an callback is already registered <0 on other errorsh]hA-EALREADY if an callback is already registered <0 on other errors}(hjD"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@"hM$hjA"ubah}(h]h ]h"]h$]h&]uh1j2hj."ubeh}(h]h ]h"]h$]h&]uh1jhj@"hM$hj+"ubah}(h]h ]h"]h$]h&]uh1j hj|!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mei_cldev_get_drvdata (C function)c.mei_cldev_get_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(h@void * mei_cldev_get_drvdata (const struct mei_cl_device *cldev)h]j)}(h>void *mei_cldev_get_drvdata(const struct mei_cl_device *cldev)h](jG)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj"hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMJubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"hhhj"hMJubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hMJubj)}(hmei_cldev_get_drvdatah]j)}(hmei_cldev_get_drvdatah]hmei_cldev_get_drvdata}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj"hhhj"hMJubj,)}(h#(const struct mei_cl_device *cldev)h]j2)}(h!const struct mei_cl_device *cldevh](j8)}(hjh]hconst}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj8)}(hj;h]hstruct}(hj"hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj #modnameN classnameNjj)}j]j)}jj"sbc.mei_cldev_get_drvdataasbuh1hhj"ubj)}(h h]h }(hj'#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubj)}(hjh]h*}(hj5#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hcldevh]hcldev}(hjB#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj"ubah}(h]h ]h"]h$]h&]hhuh1j+hj"hhhj"hMJubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj|"hhhj"hMJubah}(h]jw"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hMJhjy"hhubj)}(hhh]h)}(hdriver data getterh]hdriver data getter}(hjl#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMDhji#hhubah}(h]h ]h"]h$]h&]uh1jhjy"hhhj"hMJubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjhNhNubj)}(hj**Parameters** ``const struct mei_cl_device *cldev`` mei client device **Return** driver private datah](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMHhj#ubj)}(hhh]j)}(h8``const struct mei_cl_device *cldev`` mei client device h](j)}(h%``const struct mei_cl_device *cldev``h]j)}(hj#h]h!const struct mei_cl_device *cldev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMFhj#ubj3)}(hhh]h)}(hmei client deviceh]hmei client device}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMFhj#ubah}(h]h ]h"]h$]h&]uh1j2hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMFhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubh)}(h **Return**h]j)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMHhj#ubh)}(hdriver private datah]hdriver private data}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMHhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"mei_cldev_set_drvdata (C function)c.mei_cldev_set_drvdatahNtauh1jhjhhhNhNubj)}(hhh](j)}(hDvoid mei_cldev_set_drvdata (struct mei_cl_device *cldev, void *data)h]j)}(hCvoid mei_cldev_set_drvdata(struct mei_cl_device *cldev, void *data)h](jG)}(hvoidh]hvoid}(hj-$hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj)$hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMVubj)}(h h]h }(hj<$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)$hhhj;$hMVubj)}(hmei_cldev_set_drvdatah]j)}(hmei_cldev_set_drvdatah]hmei_cldev_set_drvdata}(hjN$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ$ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj)$hhhj;$hMVubj,)}(h)(struct mei_cl_device *cldev, void *data)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hjj$hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjf$ubj)}(h h]h }(hjw$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjf$ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j)}jjP$sbc.mei_cldev_set_drvdataasbuh1hhjf$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjf$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf$ubj)}(hcldevh]hcldev}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjb$ubj2)}(h void *datah](jG)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hdatah]hdata}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjb$ubeh}(h]h ]h"]h$]h&]hhuh1j+hj)$hhhj;$hMVubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj%$hhhj;$hMVubah}(h]j $ah ](jjeh"]h$]h&]jj)jhuh1jhj;$hMVhj"$hhubj)}(hhh]h)}(hdriver data setterh]hdriver data setter}(hj/%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMQhj,%hhubah}(h]h ]h"]h$]h&]uh1jhj"$hhhj;$hMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjjG%jjG%jjjuh1jhhhjhNhNubj)}(hc**Parameters** ``struct mei_cl_device *cldev`` mei client device ``void *data`` data to storeh](h)}(h**Parameters**h]j)}(hjQ%h]h Parameters}(hjS%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMUhjK%ubj)}(hhh](j)}(h2``struct mei_cl_device *cldev`` mei client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjp%h]hstruct mei_cl_device *cldev}(hjr%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMShjj%ubj3)}(hhh]h)}(hmei client deviceh]hmei client device}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMShj%ubah}(h]h ]h"]h$]h&]uh1j2hjj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMShjg%ubj)}(h``void *data`` data to storeh](j)}(h``void *data``h]j)}(hj%h]h void *data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMUhj%ubj3)}(hhh]h)}(h data to storeh]h data to store}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMThj%ubah}(h]h ]h"]h$]h&]uh1j2hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMUhjg%ubeh}(h]h ]h"]h$]h&]uh1j hjK%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_ver (C function)c.mei_cldev_verhNtauh1jhjhhhNhNubj)}(hhh](j)}(h4u8 mei_cldev_ver (const struct mei_cl_device *cldev)h]j)}(h3u8 mei_cldev_ver(const struct mei_cl_device *cldev)h](h)}(hhh]j)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}j mei_cldev_versbc.mei_cldev_verasbuh1hhj%hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMcubj)}(h h]h }(hj(&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%hhhj'&hMcubj)}(h mei_cldev_verh]j)}(hj$&h]h mei_cldev_ver}(hj:&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6&ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj%hhhj'&hMcubj,)}(h#(const struct mei_cl_device *cldev)h]j2)}(h!const struct mei_cl_device *cldevh](j8)}(hjh]hconst}(hjU&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjQ&ubj)}(h h]h }(hjb&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQ&ubj8)}(hj;h]hstruct}(hjp&hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjQ&ubj)}(h h]h }(hj}&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQ&ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j"&c.mei_cldev_verasbuh1hhjQ&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQ&ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ&ubj)}(hcldevh]hcldev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hjM&ubah}(h]h ]h"]h$]h&]hhuh1j+hj%hhhj'&hMcubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj%hhhj'&hMcubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj'&hMchj%hhubj)}(hhh]h)}(h3return protocol version of the underlying me clienth]h3return protocol version of the underlying me client}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM]hj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj'&hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjj 'jj 'jjjuh1jhhhjhNhNubj)}(hq**Parameters** ``const struct mei_cl_device *cldev`` mei client device **Return** me client protocol versionh](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMahj 'ubj)}(hhh]j)}(h8``const struct mei_cl_device *cldev`` mei client device h](j)}(h%``const struct mei_cl_device *cldev``h]j)}(hj2'h]h!const struct mei_cl_device *cldev}(hj4'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0'ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM_hj,'ubj3)}(hhh]h)}(hmei client deviceh]hmei client device}(hjK'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG'hM_hjH'ubah}(h]h ]h"]h$]h&]uh1j2hj,'ubeh}(h]h ]h"]h$]h&]uh1jhjG'hM_hj)'ubah}(h]h ]h"]h$]h&]uh1j hj 'ubh)}(h **Return**h]j)}(hjm'h]hReturn}(hjo'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk'ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMahj 'ubh)}(hme client protocol versionh]hme client protocol version}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMahj 'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_enabled (C function)c.mei_cldev_enabledhNtauh1jhjhhhNhNubj)}(hhh](j)}(h:bool mei_cldev_enabled (const struct mei_cl_device *cldev)h]j)}(h9bool mei_cldev_enabled(const struct mei_cl_device *cldev)h](jG)}(hboolh]hbool}(hj'hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj'hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMpubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'hhhj'hMpubj)}(hmei_cldev_enabledh]j)}(hmei_cldev_enabledh]hmei_cldev_enabled}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj'hhhj'hMpubj,)}(h#(const struct mei_cl_device *cldev)h]j2)}(h!const struct mei_cl_device *cldevh](j8)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj8)}(hj;h]hstruct}(hj (hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj((hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*(modnameN classnameNjj)}j]j)}jj'sbc.mei_cldev_enabledasbuh1hhj'ubj)}(h h]h }(hjH(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hjV(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hcldevh]hcldev}(hjc(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj'ubah}(h]h ]h"]h$]h&]hhuh1j+hj'hhhj'hMpubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj'hhhj'hMpubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMphj'hhubj)}(hhh]h)}(h#check whether the device is enabledh]h#check whether the device is enabled}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMjhj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMpubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhjhNhNubj)}(h**Parameters** ``const struct mei_cl_device *cldev`` mei client device **Return** true if me client is initialized and connectedh](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMnhj(ubj)}(hhh]j)}(h8``const struct mei_cl_device *cldev`` mei client device h](j)}(h%``const struct mei_cl_device *cldev``h]j)}(hj(h]h!const struct mei_cl_device *cldev}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMlhj(ubj3)}(hhh]h)}(hmei client deviceh]hmei client device}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMlhj(ubah}(h]h ]h"]h$]h&]uh1j2hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMlhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubh)}(h **Return**h]j)}(hj )h]hReturn}(hj )hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMnhj(ubh)}(h.true if me client is initialized and connectedh]h.true if me client is initialized and connected}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMnhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_enable (C function)c.mei_cldev_enablehNtauh1jhjhhhNhNubj)}(hhh](j)}(h2int mei_cldev_enable (struct mei_cl_device *cldev)h]j)}(h1int mei_cldev_enable(struct mei_cl_device *cldev)h](jG)}(hinth]hint}(hjN)hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjJ)hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubj)}(h h]h }(hj])hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJ)hhhj\)hMubj)}(hmei_cldev_enableh]j)}(hmei_cldev_enableh]hmei_cldev_enable}(hjo)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk)ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjJ)hhhj\)hMubj,)}(h(struct mei_cl_device *cldev)h]j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj)hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]j)}jjq)sbc.mei_cldev_enableasbuh1hhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hcldevh]hcldev}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj)ubah}(h]h ]h"]h$]h&]hhuh1j+hjJ)hhhj\)hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjF)hhhj\)hMubah}(h]jA)ah ](jjeh"]h$]h&]jj)jhuh1jhj\)hMhjC)hhubj)}(hhh]h)}(h8enable me client device create connection with me clienth]h8enable me client device create connection with me client}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj *hhubah}(h]h ]h"]h$]h&]uh1jhjC)hhhj\)hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&*jj&*jjjuh1jhhhjhNhNubj)}(hm**Parameters** ``struct mei_cl_device *cldev`` me client device **Return** 0 on success and < 0 on errorh](h)}(h**Parameters**h]j)}(hj0*h]h Parameters}(hj2*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.*ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj**ubj)}(hhh]j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hjO*h]hstruct mei_cl_device *cldev}(hjQ*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM*ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hjI*ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd*hM hje*ubah}(h]h ]h"]h$]h&]uh1j2hjI*ubeh}(h]h ]h"]h$]h&]uh1jhjd*hM hjF*ubah}(h]h ]h"]h$]h&]uh1j hj**ubh)}(h **Return**h]j)}(hj*h]hReturn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj**ubh)}(h0 on success and < 0 on errorh]h0 on success and < 0 on error}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chM hj**ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jmei_cldev_disable (C function)c.mei_cldev_disablehNtauh1jhjhhhNhNubj)}(hhh](j)}(h3int mei_cldev_disable (struct mei_cl_device *cldev)h]j)}(h2int mei_cldev_disable(struct mei_cl_device *cldev)h](jG)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj*hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMZubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*hhhj*hMZubj)}(hmei_cldev_disableh]j)}(hmei_cldev_disableh]hmei_cldev_disable}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhj*hhhj*hMZubj,)}(h(struct mei_cl_device *cldev)h]j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj +hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj*+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,+modnameN classnameNjj)}j]j)}jj*sbc.mei_cldev_disableasbuh1hhj+ubj)}(h h]h }(hjJ+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hjX+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hcldevh]hcldev}(hje+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj+ubah}(h]h ]h"]h$]h&]hhuh1j+hj*hhhj*hMZubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj*hhhj*hMZubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhj*hMZhj*hhubj)}(hhh]h)}(h6disable me client device disconnect form the me clienth]h6disable me client device disconnect form the me client}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMShj+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjhNhNubj)}(hm**Parameters** ``struct mei_cl_device *cldev`` me client device **Return** 0 on success and < 0 on errorh](h)}(h**Parameters**h]j)}(hj+h]h Parameters}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMWhj+ubj)}(hhh]j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj+h]hstruct mei_cl_device *cldev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMVhj+ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMVhj+ubah}(h]h ]h"]h$]h&]uh1j2hj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hMVhj+ubah}(h]h ]h"]h$]h&]uh1j hj+ubh)}(h **Return**h]j)}(hj ,h]hReturn}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ,ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMXhj+ubh)}(h0 on success and < 0 on errorh]h0 on success and < 0 on error}(hj!,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMXhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'mei_cldev_send_gsc_command (C function)c.mei_cldev_send_gsc_commandhNtauh1jhjhhhNhNubj)}(hhh](j)}(hssize_t mei_cldev_send_gsc_command (struct mei_cl_device *cldev, u8 client_id, u32 fence_id, struct scatterlist *sg_in, size_t total_in_len, struct scatterlist *sg_out)h]j)}(hssize_t mei_cldev_send_gsc_command(struct mei_cl_device *cldev, u8 client_id, u32 fence_id, struct scatterlist *sg_in, size_t total_in_len, struct scatterlist *sg_out)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjS,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjU,modnameN classnameNjj)}j]j)}jmei_cldev_send_gsc_commandsbc.mei_cldev_send_gsc_commandasbuh1hhjL,hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMubj)}(h h]h }(hju,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjL,hhhjt,hMubj)}(hmei_cldev_send_gsc_commandh]j)}(hjq,h]hmei_cldev_send_gsc_command}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](j&j'eh"]h$]h&]hhuh1jhjL,hhhjt,hMubj,)}(h(struct mei_cl_device *cldev, u8 client_id, u32 fence_id, struct scatterlist *sg_in, size_t total_in_len, struct scatterlist *sg_out)h](j2)}(hstruct mei_cl_device *cldevh](j8)}(hj;h]hstruct}(hj,hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h mei_cl_deviceh]h mei_cl_device}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hcldevh]hcldev}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubj2)}(h u8 client_idh](h)}(hhh]j)}(hu8h]hu8}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhj-ubj)}(h h]h }(hj3-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj)}(h client_idh]h client_id}(hjA-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubj2)}(h u32 fence_idh](h)}(hhh]j)}(hu32h]hu32}(hj]-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_-modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhjV-ubj)}(h h]h }(hj{-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV-ubj)}(hfence_idh]hfence_id}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubj2)}(hstruct scatterlist *sg_inh](j8)}(hj;h]hstruct}(hj-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hsg_inh]hsg_in}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubj2)}(hsize_t total_in_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhj.ubj)}(h h]h }(hj3.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj)}(h total_in_lenh]h total_in_len}(hjA.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubj2)}(hstruct scatterlist *sg_outh](j8)}(hj;h]hstruct}(hjZ.hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjV.ubj)}(h h]h }(hjg.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV.ubh)}(hhh]j)}(h scatterlisth]h scatterlist}(hjx.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjz.modnameN classnameNjj)}j]jo,c.mei_cldev_send_gsc_commandasbuh1hhjV.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV.ubj)}(hjh]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV.ubj)}(hsg_outh]hsg_out}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j1hj,ubeh}(h]h ]h"]h$]h&]hhuh1j+hjL,hhhjt,hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjH,hhhjt,hMubah}(h]jC,ah ](jjeh"]h$]h&]jj)jhuh1jhjt,hMhjE,hhubj)}(hhh]h)}(hUsends a gsc command, by sending a gsl mei message to gsc and receiving reply from gsch]hUsends a gsc command, by sending a gsl mei message to gsc and receiving reply from gsc;}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jhjE,hhhjt,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct mei_cl_device *cldev`` me client device ``u8 client_id`` client id to send the command to ``u32 fence_id`` fence id to send the command to ``struct scatterlist *sg_in`` scatter gather list containing addresses for rx message buffer ``size_t total_in_len`` total length of data in 'in' sg, can be less than the sum of buffers sizes ``struct scatterlist *sg_out`` scatter gather list containing addresses for tx message buffer **Return** * written size in bytes * < 0 on errorh](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj.ubj)}(hhh](j)}(h1``struct mei_cl_device *cldev`` me client device h](j)}(h``struct mei_cl_device *cldev``h]j)}(hj/h]hstruct mei_cl_device *cldev}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj/ubj3)}(hhh]h)}(hme client deviceh]hme client device}(hj5/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1/hMhj2/ubah}(h]h ]h"]h$]h&]uh1j2hj/ubeh}(h]h ]h"]h$]h&]uh1jhj1/hMhj/ubj)}(h2``u8 client_id`` client id to send the command to h](j)}(h``u8 client_id``h]j)}(hjU/h]h u8 client_id}(hjW/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhjO/ubj3)}(hhh]h)}(h client id to send the command toh]h client id to send the command to}(hjn/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj/hMhjk/ubah}(h]h ]h"]h$]h&]uh1j2hjO/ubeh}(h]h ]h"]h$]h&]uh1jhjj/hMhj/ubj)}(h1``u32 fence_id`` fence id to send the command to h](j)}(h``u32 fence_id``h]j)}(hj/h]h u32 fence_id}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj/ubj3)}(hhh]h)}(hfence id to send the command toh]hfence id to send the command to}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1j2hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubj)}(h]``struct scatterlist *sg_in`` scatter gather list containing addresses for rx message buffer h](j)}(h``struct scatterlist *sg_in``h]j)}(hj/h]hstruct scatterlist *sg_in}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj/ubj3)}(hhh]h)}(h>scatter gather list containing addresses for rx message bufferh]h>scatter gather list containing addresses for rx message buffer}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1j2hj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj/ubj)}(hc``size_t total_in_len`` total length of data in 'in' sg, can be less than the sum of buffers sizes h](j)}(h``size_t total_in_len``h]j)}(hj0h]hsize_t total_in_len}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj/ubj3)}(hhh]h)}(hJtotal length of data in 'in' sg, can be less than the sum of buffers sizesh]hNtotal length of data in ‘in’ sg, can be less than the sum of buffers sizes}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1j2hj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj/ubj)}(h^``struct scatterlist *sg_out`` scatter gather list containing addresses for tx message buffer h](j)}(h``struct scatterlist *sg_out``h]j)}(hj90h]hstruct scatterlist *sg_out}(hj;0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj70ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj30ubj3)}(hhh]h)}(h>scatter gather list containing addresses for tx message bufferh]h>scatter gather list containing addresses for tx message buffer}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN0hMhjO0ubah}(h]h ]h"]h$]h&]uh1j2hj30ubeh}(h]h ]h"]h$]h&]uh1jhjN0hMhj/ubeh}(h]h ]h"]h$]h&]uh1j hj.ubh)}(h **Return**h]j)}(hjt0h]hReturn}(hjv0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr0ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj.ubj)}(h&* written size in bytes * < 0 on errorh]j!)}(hhh](j&)}(hwritten size in bytesh]h)}(hj0h]hwritten size in bytes}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj0ubah}(h]h ]h"]h$]h&]uh1j%hj0ubj&)}(h < 0 on errorh]h)}(hj0h]h < 0 on error}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/mei/mei-client-bus:71: ./drivers/misc/mei/bus.chMhj0ubah}(h]h ]h"]h$]h&]uh1j%hj0ubeh}(h]h ]h"]h$]h&]j]juh1j hj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0hMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h](jid1eh ]h"](api:apieh$]h&]uh1hhjhhhhhKFexpect_referenced_by_name}j0jsexpect_referenced_by_id}jjsubeh}(h]mei-cl-bus-apiah ]h"]mei cl bus apiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hExampleh]hExample}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhKMubh)}(hAs a theoretical example let's pretend the ME comes with a "contact" NFC IP. The driver init and exit routines for this device would look like:h]hAs a theoretical example let’s pretend the ME comes with a “contact” NFC IP. The driver init and exit routines for this device would look like:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhj0hhubjE)}(hX6#define CONTACT_DRIVER_NAME "contact" static struct mei_cl_device_id contact_mei_cl_tbl[] = { { CONTACT_DRIVER_NAME, }, /* required last entry */ { } }; MODULE_DEVICE_TABLE(mei_cl, contact_mei_cl_tbl); static struct mei_cl_driver contact_driver = { .id_table = contact_mei_tbl, .name = CONTACT_DRIVER_NAME, .probe = contact_probe, .remove = contact_remove, }; static int contact_init(void) { int r; r = mei_cl_driver_register(&contact_driver); if (r) { pr_err(CONTACT_DRIVER_NAME ": driver registration failed\n"); return r; } return 0; } static void __exit contact_exit(void) { mei_cl_driver_unregister(&contact_driver); } module_init(contact_init); module_exit(contact_exit);h]hX6#define CONTACT_DRIVER_NAME "contact" static struct mei_cl_device_id contact_mei_cl_tbl[] = { { CONTACT_DRIVER_NAME, }, /* required last entry */ { } }; MODULE_DEVICE_TABLE(mei_cl, contact_mei_cl_tbl); static struct mei_cl_driver contact_driver = { .id_table = contact_mei_tbl, .name = CONTACT_DRIVER_NAME, .probe = contact_probe, .remove = contact_remove, }; static int contact_init(void) { int r; r = mei_cl_driver_register(&contact_driver); if (r) { pr_err(CONTACT_DRIVER_NAME ": driver registration failed\n"); return r; } return 0; } static void __exit contact_exit(void) { mei_cl_driver_unregister(&contact_driver); } module_init(contact_init); module_exit(contact_exit);}hj1sbah}(h]h ]h"]h$]h&]hhjTjUjVjW}uh1jDhhhKRhj0hhubh)}(h?And the driver's simplified probe routine would look like that:h]hAAnd the driver’s simplified probe routine would look like that:}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK{hj0hhubjE)}(hint contact_probe(struct mei_cl_device *dev, struct mei_cl_device_id *id) { [...] mei_cldev_enable(dev); mei_cldev_register_rx_cb(dev, contact_rx_cb); return 0; }h]hint contact_probe(struct mei_cl_device *dev, struct mei_cl_device_id *id) { [...] mei_cldev_enable(dev); mei_cldev_register_rx_cb(dev, contact_rx_cb); return 0; }}hj%1sbah}(h]h ]h"]h$]h&]hhjTjUjVjW}uh1jDhhhK}hj0hhubh)}(hX In the probe routine the driver first enable the MEI device and then registers an rx handler which is as close as it can get to registering a threaded IRQ handler. The handler implementation will typically call :c:func:`mei_cldev_recv` and then process received data.h](hIn the probe routine the driver first enable the MEI device and then registers an rx handler which is as close as it can get to registering a threaded IRQ handler. The handler implementation will typically call }(hj41hhhNhNubh)}(h:c:func:`mei_cldev_recv`h]j)}(hj>1h]hmei_cldev_recv()}(hj@1hhhNhNubah}(h]h ](jjc-funceh"]h$]h&]uh1jhj<1ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypefunc refexplicitrefwarnjj)}j]sbjmei_cldev_recvuh1hhhhKhj41ubh and then process received data.}(hj41hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj0hhubjE)}(hX#define MAX_PAYLOAD 128 #define HDR_SIZE 4 static void conntact_rx_cb(struct mei_cl_device *cldev) { struct contact *c = mei_cldev_get_drvdata(cldev); unsigned char payload[MAX_PAYLOAD]; ssize_t payload_sz; payload_sz = mei_cldev_recv(cldev, payload, MAX_PAYLOAD) if (reply_size < HDR_SIZE) { return; } c->process_rx(payload); }h]hX#define MAX_PAYLOAD 128 #define HDR_SIZE 4 static void conntact_rx_cb(struct mei_cl_device *cldev) { struct contact *c = mei_cldev_get_drvdata(cldev); unsigned char payload[MAX_PAYLOAD]; ssize_t payload_sz; payload_sz = mei_cldev_recv(cldev, payload, MAX_PAYLOAD) if (reply_size < HDR_SIZE) { return; } c->process_rx(payload); }}hjh1sbah}(h]h ]h"]h$]h&]hhjTjUjVjW}uh1jDhhhKhj0hhubeh}(h]exampleah ]h"]exampleah$]h&]uh1hhhhhhhhKMubh)}(hhh](h)}(hMEI Client Bus Driversh]hMEI Client Bus Drivers}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hhhhhKubhcompound)}(hhh]htoctree)}(hhh]h}(h]h ]h"]h$]h&]hjentries](Ndriver-api/mei/hdcpNdriver-api/mei/nfce includefiles](j1j1emaxdepthKcaptionNglobhidden includehiddennumberedK titlesonly rawentries]uh1j1hhhKhj1ubah}(h]h ]toctree-wrapperah"]h$]h&]uh1j1hj1hhhhhNubeh}(h]mei-client-bus-driversah ]h"]mei client bus driversah$]h&]uh1hhhhhhhhKubeh}(h]+intel-r-management-engine-me-client-bus-apiah ]h"].intel(r) management engine (me) client bus apiah$]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_handlerj1error_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}j]jasnameids}(j1j1hhj0j0j0jj0j0j|1jy1j1j1u nametypes}(j1hj0j0j0j|1j1uh}(j1hhhj0jjjj0jjjjwj|jw j| j j j)j.jjjjj|jjj$jK jP jw"j|"j $j%$j%j%j'j'jA)jF)j*j*jC,jH,jy1j0j1j1u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j1KsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h)Hyperlink target "api" is not referenced.}hjU2sbah}(h]h ]h"]h$]h&]uh1hhjR2ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKCuh1jP2uba transformerN include_log] decorationNhhub.