sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/translations/zh_CN/peci/pecimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/peci/pecimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/peci/pecimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/peci/pecimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/peci/pecimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/pt_BR/peci/pecimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/peci/pecimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h%SPDX-License-Identifier: GPL-2.0-onlyh]h%SPDX-License-Identifier: GPL-2.0-only}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh7/var/lib/git/docbuild/linux/Documentation/peci/peci.rsthKubhsection)}(hhh](htitle)}(hOverviewh]hOverview}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXThe Platform Environment Control Interface (PECI) is a communication interface between Intel processor and management controllers (e.g. Baseboard Management Controller, BMC). PECI provides services that allow the management controller to configure, monitor and debug platform by accessing various registers. It defines a dedicated command protocol, where the management controller is acting as a PECI originator and the processor - as a PECI responder. PECI can be used in both single processor and multiple-processor based systems.h]hXThe Platform Environment Control Interface (PECI) is a communication interface between Intel processor and management controllers (e.g. Baseboard Management Controller, BMC). PECI provides services that allow the management controller to configure, monitor and debug platform by accessing various registers. It defines a dedicated command protocol, where the management controller is acting as a PECI originator and the processor - as a PECI responder. PECI can be used in both single processor and multiple-processor based systems.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hNOTE: Intel PECI specification is not released as a dedicated document, instead it is a part of External Design Specification (EDS) for given Intel CPU. External Design Specifications are usually not publicly available.h]hNOTE: Intel PECI specification is not released as a dedicated document, instead it is a part of External Design Specification (EDS) for given Intel CPU. External Design Specifications are usually not publicly available.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h PECI Wireh]h PECI Wire}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hXPECI Wire interface uses a single wire for self-clocking and data transfer. It does not require any additional control lines - the physical layer is a self-clocked one-wire bus signal that begins each bit with a driven, rising edge from an idle near zero volts. The duration of the signal driven high allows to determine whether the bit value is logic '0' or logic '1'. PECI Wire also includes variable data rate established with every message.h]hXPECI Wire interface uses a single wire for self-clocking and data transfer. It does not require any additional control lines - the physical layer is a self-clocked one-wire bus signal that begins each bit with a driven, rising edge from an idle near zero volts. The duration of the signal driven high allows to determine whether the bit value is logic ‘0’ or logic ‘1’. PECI Wire also includes variable data rate established with every message.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hX For PECI Wire, each processor package will utilize unique, fixed addresses within a defined range and that address should have a fixed relationship with the processor socket ID - if one of the processors is removed, it does not affect addresses of remaining processors.h]hX For PECI Wire, each processor package will utilize unique, fixed addresses within a defined range and that address should have a fixed relationship with the processor socket ID - if one of the processors is removed, it does not affect addresses of remaining processors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hhhhubeh}(h] peci-wireah ]h"] peci wireah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hPECI subsystem internalsh]hPECI subsystem internals}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hhhhhK*ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepeci_controller_ops (C struct)c.peci_controller_opshNtauh1jAhj0hhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhNubhdesc)}(hhh](hdesc_signature)}(hpeci_controller_opsh]hdesc_signature_line)}(hstruct peci_controller_opsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjfhhhNhNubah}(h]h ]kah"]h$]h&]uh1jdhj`hhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKubhdesc_sig_space)}(h h]h }(hjxhhhNhNubah}(h]h ]wah"]h$]h&]uh1jvhj`hhhjuhKubh desc_name)}(hpeci_controller_opsh]h desc_sig_name)}(hj\h]hpeci_controller_ops}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhj`hhhjuhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j^sphinx_line_type declaratorhjZhhhjuhKubah}(h]jPah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jXhjuhKhjUhhubh desc_content)}(hhh]h)}(h PECI controller specific methodsh]h PECI controller specific methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjuhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jShhhj0hjRhNubh container)}(h**Definition**:: struct peci_controller_ops { int (*xfer)(struct peci_controller *controller, u8 addr, struct peci_request *req); }; **Members** ``xfer`` PECI transfer functionh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjubh literal_block)}(hwstruct peci_controller_ops { int (*xfer)(struct peci_controller *controller, u8 addr, struct peci_request *req); };h]hwstruct peci_controller_ops { int (*xfer)(struct peci_controller *controller, u8 addr, struct peci_request *req); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjubhdefinition_list)}(hhh]hdefinition_list_item)}(h``xfer`` PECI transfer functionh](hterm)}(h``xfer``h]hliteral)}(hj>h]hxfer}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj<ubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhj6ubh definition)}(hhh]h)}(hPECI transfer functionh]hPECI transfer function}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjXubah}(h]h ]h"]h$]h&]uh1jVhj6ubeh}(h]h ]h"]h$]h&]uh1j4hjUhKhj1ubah}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjRhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhj0hhubh)}(hPECI controllers may have different hardware interfaces - the drivers implementing PECI controllers can use this structure to abstract away those differences by exposing a common interface for PECI core.h]hPECI controllers may have different hardware interfaces - the drivers implementing PECI controllers can use this structure to abstract away those differences by exposing a common interface for PECI core.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhj0hhubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_controller (C struct)c.peci_controllerhNtauh1jAhj0hhhjRhNubjT)}(hhh](jY)}(hpeci_controllerh]j_)}(hstruct peci_controllerh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhKubj)}(hpeci_controllerh]j)}(hjh]hpeci_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhKhjhhubj)}(hhh]h)}(hPECI controllerh]hPECI controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK!hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jShhhj0hjRhNubj)}(hX**Definition**:: struct peci_controller { struct device dev; const struct peci_controller_ops *ops; struct mutex bus_lock; u8 id; }; **Members** ``dev`` device object to register PECI controller to the device model ``ops`` pointer to device specific controller operations ``bus_lock`` lock used to protect multiple callers ``id`` PECI controller IDh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh:}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK%hj!ubj)}(hstruct peci_controller { struct device dev; const struct peci_controller_ops *ops; struct mutex bus_lock; u8 id; };h]hstruct peci_controller { struct device dev; const struct peci_controller_ops *ops; struct mutex bus_lock; u8 id; };}hjBsbah}(h]h ]h"]h$]h&]hhuh1jhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK'hj!ubh)}(h **Members**h]j)}(hjSh]hMembers}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK.hj!ubj0)}(hhh](j5)}(hF``dev`` device object to register PECI controller to the device model h](j;)}(h``dev``h]jA)}(hjrh]hdev}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjpubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK#hjlubjW)}(hhh]h)}(h=device object to register PECI controller to the device modelh]h=device object to register PECI controller to the device model}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK#hjubah}(h]h ]h"]h$]h&]uh1jVhjlubeh}(h]h ]h"]h$]h&]uh1j4hjhK#hjiubj5)}(h9``ops`` pointer to device specific controller operations h](j;)}(h``ops``h]jA)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK$hjubjW)}(hhh]h)}(h0pointer to device specific controller operationsh]h0pointer to device specific controller operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK$hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK$hjiubj5)}(h3``bus_lock`` lock used to protect multiple callers h](j;)}(h ``bus_lock``h]jA)}(hjh]hbus_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK%hjubjW)}(hhh]h)}(h%lock used to protect multiple callersh]h%lock used to protect multiple callers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK%hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK%hjiubj5)}(h``id`` PECI controller IDh](j;)}(h``id``h]jA)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK%hjubjW)}(hhh]h)}(hPECI controller IDh]hPECI controller ID}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK&hj3ubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj2hK%hjiubeh}(h]h ]h"]h$]h&]uh1j/hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjRhNubh)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK)hj0hhubh)}(hPECI controllers usually connect to their drivers using non-PECI bus, such as the platform bus. Each PECI controller can communicate with one or more PECI devices.h]hPECI controllers usually connect to their drivers using non-PECI bus, such as the platform bus. Each PECI controller can communicate with one or more PECI devices.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK&hj0hhubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_device (C struct) c.peci_devicehNtauh1jAhj0hhhjRhNubjT)}(hhh](jY)}(h peci_deviceh]j_)}(hstruct peci_deviceh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK-ubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhK-ubj)}(h peci_deviceh]j)}(hjh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK-ubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhK-ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhK-hjhhubj)}(hhh]h)}(h PECI deviceh]h PECI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK;hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK-ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jShhhj0hjRhNubj)}(hX**Definition**:: struct peci_device { struct device dev; struct { u32 x86_vfm; u8 peci_revision; u8 socket_id; } info; u8 addr; bool deleted; }; **Members** ``dev`` device object to register PECI device to the device model ``info`` PECI device characteristics ``info.x86_vfm`` device vendor-family-model ``info.peci_revision`` PECI revision supported by the PECI device ``info.socket_id`` the socket ID represented by the PECI device ``addr`` address used on the PECI bus connected to the parent controller ``deleted`` indicates that PECI device was already deletedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK?hjubj)}(hstruct peci_device { struct device dev; struct { u32 x86_vfm; u8 peci_revision; u8 socket_id; } info; u8 addr; bool deleted; };h]hstruct peci_device { struct device dev; struct { u32 x86_vfm; u8 peci_revision; u8 socket_id; } info; u8 addr; bool deleted; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKAhjubh)}(h **Members**h]j)}(hj.h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKLhjubj0)}(hhh](j5)}(hB``dev`` device object to register PECI device to the device model h](j;)}(h``dev``h]jA)}(hjMh]hdev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjKubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK=hjGubjW)}(hhh]h)}(h9device object to register PECI device to the device modelh]h9device object to register PECI device to the device model}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhK=hjcubah}(h]h ]h"]h$]h&]uh1jVhjGubeh}(h]h ]h"]h$]h&]uh1j4hjbhK=hjDubj5)}(h%``info`` PECI device characteristics h](j;)}(h``info``h]jA)}(hjh]hinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK>hjubjW)}(hhh]h)}(hPECI device characteristicsh]hPECI device characteristics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK>hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK>hjDubj5)}(h,``info.x86_vfm`` device vendor-family-model h](j;)}(h``info.x86_vfm``h]jA)}(hjh]h info.x86_vfm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK?hjubjW)}(hhh]h)}(hdevice vendor-family-modelh]hdevice vendor-family-model}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK?hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK?hjDubj5)}(hB``info.peci_revision`` PECI revision supported by the PECI device h](j;)}(h``info.peci_revision``h]jA)}(hjh]hinfo.peci_revision}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK@hjubjW)}(hhh]h)}(h*PECI revision supported by the PECI deviceh]h*PECI revision supported by the PECI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK@hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj hK@hjDubj5)}(h@``info.socket_id`` the socket ID represented by the PECI device h](j;)}(h``info.socket_id``h]jA)}(hj1h]hinfo.socket_id}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj/ubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKAhj+ubjW)}(hhh]h)}(h,the socket ID represented by the PECI deviceh]h,the socket ID represented by the PECI device}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKAhjGubah}(h]h ]h"]h$]h&]uh1jVhj+ubeh}(h]h ]h"]h$]h&]uh1j4hjFhKAhjDubj5)}(hI``addr`` address used on the PECI bus connected to the parent controller h](j;)}(h``addr``h]jA)}(hjjh]haddr}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjhubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKBhjdubjW)}(hhh]h)}(h?address used on the PECI bus connected to the parent controllerh]h?address used on the PECI bus connected to the parent controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKBhjubah}(h]h ]h"]h$]h&]uh1jVhjdubeh}(h]h ]h"]h$]h&]uh1j4hjhKBhjDubj5)}(h:``deleted`` indicates that PECI device was already deletedh](j;)}(h ``deleted``h]jA)}(hjh]hdeleted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKBhjubjW)}(hhh]h)}(h.indicates that PECI device was already deletedh]h.indicates that PECI device was already deleted}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKChjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKBhjDubeh}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjRhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKFhj0hhubh)}(hA peci_device identifies a single device (i.e. CPU) connected to a PECI bus. The behaviour exposed to the rest of the system is defined by the PECI driver managing the device.h]hA peci_device identifies a single device (i.e. CPU) connected to a PECI bus. The behaviour exposed to the rest of the system is defined by the PECI driver managing the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKChj0hhubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_request (C struct)c.peci_requesthNtauh1jAhj0hhhjRhNubjT)}(hhh](jY)}(h peci_requesth]j_)}(hstruct peci_requesth](je)}(hjhh]hstruct}(hj$hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj hhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKJubjw)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj hhhj1hKJubj)}(h peci_requesth]j)}(hjh]h peci_request}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj1hKJubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhj1hKJubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhj1hKJhjhhubj)}(hhh]h)}(h PECI requesth]h PECI request}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKYhjchhubah}(h]h ]h"]h$]h&]uh1jhjhhhj1hKJubeh}(h]h ](jstructeh"]h$]h&]jjjj~jj~jjjuh1jShhhj0hjRhNubj)}(hX**Definition**:: struct peci_request { struct peci_device *device; struct { u8 buf[PECI_REQUEST_MAX_BUF_SIZE]; u8 len; } rx, tx; }; **Members** ``device`` PECI device to which the request is sent ``rx`` RX buffer specific data ``rx.buf`` RX buffer ``rx.len`` received data length in bytes ``tx`` TX buffer specific data ``tx.buf`` TX buffer ``tx.len`` transfer data length in bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK]hjubj)}(hstruct peci_request { struct peci_device *device; struct { u8 buf[PECI_REQUEST_MAX_BUF_SIZE]; u8 len; } rx, tx; };h]hstruct peci_request { struct peci_device *device; struct { u8 buf[PECI_REQUEST_MAX_BUF_SIZE]; u8 len; } rx, tx; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK_hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKghjubj0)}(hhh](j5)}(h4``device`` PECI device to which the request is sent h](j;)}(h ``device``h]jA)}(hjh]hdevice}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK[hjubjW)}(hhh]h)}(h(PECI device to which the request is senth]h(PECI device to which the request is sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK[hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK[hjubj5)}(h``rx`` RX buffer specific data h](j;)}(h``rx``h]jA)}(hj h]hrx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK_hjubjW)}(hhh]h)}(hRX buffer specific datah]hRX buffer specific data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK_hj"ubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj!hK_hjubj5)}(h``rx.buf`` RX buffer h](j;)}(h ``rx.buf``h]jA)}(hjEh]hrx.buf}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjCubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK`hj?ubjW)}(hhh]h)}(h RX bufferh]h RX buffer}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhK`hj[ubah}(h]h ]h"]h$]h&]uh1jVhj?ubeh}(h]h ]h"]h$]h&]uh1j4hjZhK`hjubj5)}(h)``rx.len`` received data length in bytes h](j;)}(h ``rx.len``h]jA)}(hj~h]hrx.len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj|ubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKahjxubjW)}(hhh]h)}(hreceived data length in bytesh]hreceived data length in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1jVhjxubeh}(h]h ]h"]h$]h&]uh1j4hjhKahjubj5)}(h``tx`` TX buffer specific data h](j;)}(h``tx``h]jA)}(hjh]htx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK\hjubjW)}(hhh]h)}(hTX buffer specific datah]hTX buffer specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK\hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK\hjubj5)}(h``tx.buf`` TX buffer h](j;)}(h ``tx.buf``h]jA)}(hjh]htx.buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK]hjubjW)}(hhh]h)}(h TX bufferh]h TX buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK]hj ubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj hK]hjubj5)}(h(``tx.len`` transfer data length in bytesh](j;)}(h ``tx.len``h]jA)}(hj) h]htx.len}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj' ubah}(h]h ]h"]h$]h&]uh1j:hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK]hj# ubjW)}(hhh]h)}(htransfer data length in bytesh]htransfer data length in bytes}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK^hj? ubah}(h]h ]h"]h$]h&]uh1jVhj# ubeh}(h]h ]h"]h$]h&]uh1j4hj> hK]hjubeh}(h]h ]h"]h$]h&]uh1j/hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhjRhNubh)}(h**Description**h]j)}(hjl h]h Description}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKahj0hhubh)}(htA peci_request represents a request issued by PECI originator (TX) and a response received from PECI responder (RX).h]htA peci_request represents a request issued by PECI originator (TX) and a response received from PECI responder (RX).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKahj0hhubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_device_id (C struct)c.peci_device_idhNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(hpeci_device_idh]j_)}(hstruct peci_device_idh](je)}(hjhh]hstruct}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKubjw)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj hhhj hKubj)}(hpeci_device_idh]j)}(hj h]hpeci_device_id}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jXhj hKhj hhubj)}(hhh]h)}(hPECI device data to matchh]hPECI device data to match}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKChj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1jShhhj0hNhNubj)}(h**Definition**:: struct peci_device_id { const void *data; u32 x86_vfm; }; **Members** ``data`` pointer to driver private data specific to device ``x86_vfm`` device vendor-family-modelh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKGhj ubj)}(hAstruct peci_device_id { const void *data; u32 x86_vfm; };h]hAstruct peci_device_id { const void *data; u32 x86_vfm; };}hj) sbah}(h]h ]h"]h$]h&]hhuh1jhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKIhj ubh)}(h **Members**h]j)}(hj: h]hMembers}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKNhj ubj0)}(hhh](j5)}(h;``data`` pointer to driver private data specific to device h](j;)}(h``data``h]jA)}(hjY h]hdata}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjW ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKEhjS ubjW)}(hhh]h)}(h1pointer to driver private data specific to deviceh]h1pointer to driver private data specific to device}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn hKEhjo ubah}(h]h ]h"]h$]h&]uh1jVhjS ubeh}(h]h ]h"]h$]h&]uh1j4hjn hKEhjP ubj5)}(h&``x86_vfm`` device vendor-family-modelh](j;)}(h ``x86_vfm``h]jA)}(hj h]hx86_vfm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKEhj ubjW)}(hhh]h)}(hdevice vendor-family-modelh]hdevice vendor-family-model}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKFhj ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj hKEhjP ubeh}(h]h ]h"]h$]h&]uh1j/hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_driver (C struct) c.peci_driverhNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(h peci_driverh]j_)}(hstruct peci_driverh](je)}(hjhh]hstruct}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKLubjw)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj hhhj hKLubj)}(h peci_driverh]j)}(hj h]h peci_driver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKLubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj hhhj hKLubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jXhj hKLhj hhubj)}(hhh]h)}(h PECI driverh]h PECI driver}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKVhj+ hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKLubeh}(h]h ](jstructeh"]h$]h&]jjjjF jjF jjjuh1jShhhj0hNhNubj)}(hX**Definition**:: struct peci_driver { struct device_driver driver; int (*probe)(struct peci_device *device, const struct peci_device_id *id); void (*remove)(struct peci_device *device); const struct peci_device_id *id_table; }; **Members** ``driver`` inherit device driver ``probe`` probe callback ``remove`` remove callback ``id_table`` PECI device match table to decide which device to bindh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubh:}(hjN hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKZhjJ ubj)}(hstruct peci_driver { struct device_driver driver; int (*probe)(struct peci_device *device, const struct peci_device_id *id); void (*remove)(struct peci_device *device); const struct peci_device_id *id_table; };h]hstruct peci_driver { struct device_driver driver; int (*probe)(struct peci_device *device, const struct peci_device_id *id); void (*remove)(struct peci_device *device); const struct peci_device_id *id_table; };}hjk sbah}(h]h ]h"]h$]h&]hhuh1jhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhK\hjJ ubh)}(h **Members**h]j)}(hj| h]hMembers}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKchjJ ubj0)}(hhh](j5)}(h!``driver`` inherit device driver h](j;)}(h ``driver``h]jA)}(hj h]hdriver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKXhj ubjW)}(hhh]h)}(hinherit device driverh]hinherit device driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKXhj ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj hKXhj ubj5)}(h``probe`` probe callback h](j;)}(h ``probe``h]jA)}(hj h]hprobe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKYhj ubjW)}(hhh]h)}(hprobe callbackh]hprobe callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKYhj ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj hKYhj ubj5)}(h``remove`` remove callback h](j;)}(h ``remove``h]jA)}(hj h]hremove}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKZhj ubjW)}(hhh]h)}(hremove callbackh]hremove callback}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj" hKZhj# ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj" hKZhj ubj5)}(hC``id_table`` PECI device match table to decide which device to bindh](j;)}(h ``id_table``h]jA)}(hjF h]hid_table}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjD ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKZhj@ ubjW)}(hhh]h)}(h6PECI device match table to decide which device to bindh]h6PECI device match table to decide which device to bind}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhK[hj\ ubah}(h]h ]h"]h$]h&]uh1jVhj@ ubeh}(h]h ]h"]h$]h&]uh1j4hj[ hKZhj ubeh}(h]h ]h"]h$]h&]uh1j/hjJ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_driver_register (C macro)c.peci_driver_registerhNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(hpeci_driver_registerh]j_)}(hpeci_driver_registerh]j)}(hpeci_driver_registerh]j)}(hj h]hpeci_driver_register}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKhubah}(h]h ]h"]h$]h&]hhjuh1j^jjhj hhhj hKhubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jXhj hKhhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKhubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1jShhhj0hNhNubh)}(h!``peci_driver_register (driver)``h]jA)}(hj h]hpeci_driver_register (driver)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKjhj0hhubh block_quote)}(hregister PECI driver h]h)}(hregister PECI driverh]hregister PECI driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKhhj ubah}(h]h ]h"]h$]h&]uh1j hj hKhhj0hhubj)}(hX**Parameters** ``driver`` the driver to be registered **Description** PECI drivers that don't need to do anything special in module init should use the convenience "module_peci_driver" macro instead **Return** zero on success, else a negative error code.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKlhj ubj0)}(hhh]j5)}(h'``driver`` the driver to be registered h](j;)}(h ``driver``h]jA)}(hj, h]hdriver}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj* ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKihj& ubjW)}(hhh]h)}(hthe driver to be registeredh]hthe driver to be registered}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA hKihjB ubah}(h]h ]h"]h$]h&]uh1jVhj& ubeh}(h]h ]h"]h$]h&]uh1j4hjA hKihj# ubah}(h]h ]h"]h$]h&]uh1j/hj ubh)}(h**Description**h]j)}(hjg h]h Description}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKkhj ubh)}(hPECI drivers that don't need to do anything special in module init should use the convenience "module_peci_driver" macro insteadh]hPECI drivers that don’t need to do anything special in module init should use the convenience “module_peci_driver” macro instead}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKjhj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKmhj ubh)}(h,zero on success, else a negative error code.h]h,zero on success, else a negative error code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKnhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNmodule_peci_driver (C macro)c.module_peci_driverhNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(hmodule_peci_driverh]j_)}(hmodule_peci_driverh]j)}(hmodule_peci_driverh]j)}(hj h]hmodule_peci_driver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKuubah}(h]h ]h"]h$]h&]hhjuh1j^jjhj hhhj hKuubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jXhj hKuhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKuubeh}(h]h ](jmacroeh"]h$]h&]jjjjjjjjjuh1jShhhj0hNhNubh)}(h&``module_peci_driver (__peci_driver)``h]jA)}(hj h]h"module_peci_driver (__peci_driver)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKwhj0hhubj )}(h3helper macro for registering a modular PECI driver h]h)}(h2helper macro for registering a modular PECI driverh]h2helper macro for registering a modular PECI driver}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKuhjubah}(h]h ]h"]h$]h&]uh1j hj1hKuhj0hhubj)}(hX$**Parameters** ``__peci_driver`` peci_driver struct **Description** Helper macro for PECI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKyhj8ubj0)}(hhh]j5)}(h%``__peci_driver`` peci_driver struct h](j;)}(h``__peci_driver``h]jA)}(hj]h]h __peci_driver}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj[ubah}(h]h ]h"]h$]h&]uh1j:hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKvhjWubjW)}(hhh]h)}(hpeci_driver structh]hpeci_driver struct}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhKvhjsubah}(h]h ]h"]h$]h&]uh1jVhjWubeh}(h]h ]h"]h$]h&]uh1j4hjrhKvhjTubah}(h]h ]h"]h$]h&]uh1j/hj8ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKxhj8ubh)}(hHelper macro for PECI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()h]hHelper macro for PECI drivers which do not do anything special in module init/exit. This eliminates a lot of boilerplate. Each module may only use this macro once, and calling it replaces module_init() and module_exit()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKwhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jN%devm_peci_controller_add (C function)c.devm_peci_controller_addhNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(hmstruct peci_controller * devm_peci_controller_add (struct device *dev, const struct peci_controller_ops *ops)h]j_)}(hkstruct peci_controller *devm_peci_controller_add(struct device *dev, const struct peci_controller_ops *ops)h](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhKjubh)}(hhh]j)}(hpeci_controllerh]hpeci_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jdevm_peci_controller_addsbc.devm_peci_controller_addasbuh1hhjhhhjhKjubjw)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhKjubhdesc_sig_punctuation)}(h*h]h*}(hj5hhhNhNubah}(h]h ]pah"]h$]h&]uh1j3hjhhhjhKjubj)}(hdevm_peci_controller_addh]j)}(hj"h]hdevm_peci_controller_add}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKjubhdesc_parameterlist)}(h;(struct device *dev, const struct peci_controller_ops *ops)h](hdesc_parameter)}(hstruct device *devh](je)}(hjhh]hstruct}(hjghhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjcubjw)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjcubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.devm_peci_controller_addasbuh1hhjcubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjcubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjcubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj]ubjb)}(h%const struct peci_controller_ops *opsh](je)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubje)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubh)}(hhh]j)}(hpeci_controller_opsh]hpeci_controller_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.devm_peci_controller_addasbuh1hhjubjw)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hj=hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hopsh]hops}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj]ubeh}(h]h ]h"]h$]h&]hhuh1j[hjhhhjhKjubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhKjubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhKjhjhhubj)}(hhh]h)}(hadd PECI controllerh]hadd PECI controller}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKjhjqhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jShhhj0hNhNubj)}(hX~**Parameters** ``struct device *dev`` device for devm operations ``const struct peci_controller_ops *ops`` pointer to controller specific methods **Description** In final stage of its probe(), peci_controller driver calls devm_peci_controller_add() to register itself with the PECI bus. **Return** Pointer to the newly allocated controller or ERR_PTR() in case of failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKnhjubj0)}(hhh](j5)}(h2``struct device *dev`` device for devm operations h](j;)}(h``struct device *dev``h]jA)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKkhjubjW)}(hhh]h)}(hdevice for devm operationsh]hdevice for devm operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKkhjubj5)}(hQ``const struct peci_controller_ops *ops`` pointer to controller specific methods h](j;)}(h)``const struct peci_controller_ops *ops``h]jA)}(hjh]h%const struct peci_controller_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKlhjubjW)}(hhh]h)}(h&pointer to controller specific methodsh]h&pointer to controller specific methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKlhjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKlhjubeh}(h]h ]h"]h$]h&]uh1j/hjubh)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKnhjubh)}(h|In final stage of its probe(), peci_controller driver calls devm_peci_controller_add() to register itself with the PECI bus.h]h|In final stage of its probe(), peci_controller driver calls devm_peci_controller_add() to register itself with the PECI bus.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKmhjubh)}(h **Return**h]j)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKphjubh)}(hJPointer to the newly allocated controller or ERR_PTR() in case of failure.h]hJPointer to the newly allocated controller or ERR_PTR() in case of failure.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKqhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jN peci_request_status (C function)c.peci_request_statushNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(h2int peci_request_status (struct peci_request *req)h]j_)}(h1int peci_request_status(struct peci_request *req)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chK^ubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhK^ubj)}(hpeci_request_statush]j)}(hpeci_request_statush]hpeci_request_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK^ubj\)}(h(struct peci_request *req)h]jb)}(hstruct peci_request *reqh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubh)}(hhh]j)}(h peci_requesth]h peci_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.peci_request_statusasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hreqh]hreq}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubah}(h]h ]h"]h$]h&]hhuh1j[hjhhhjhK^ubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhK^ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhK^hjhhubj)}(hhh]h)}(h+return -errno based on PECI completion codeh]h+return -errno based on PECI completion code}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chK^hjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK^ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1jShhhj0hNhNubj)}(hX**Parameters** ``struct peci_request *req`` the PECI request that contains response data with completion code **Description** It can't be used for Ping(), GetDIB() and GetTemp() - for those commands we don't expect completion code in the response. **Return** -errnoh](h)}(h**Parameters**h]j)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKbhjtubj0)}(hhh]j5)}(h_``struct peci_request *req`` the PECI request that contains response data with completion code h](j;)}(h``struct peci_request *req``h]jA)}(hjh]hstruct peci_request *req}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chK_hjubjW)}(hhh]h)}(hAthe PECI request that contains response data with completion codeh]hAthe PECI request that contains response data with completion code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK_hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK_hjubah}(h]h ]h"]h$]h&]uh1j/hjtubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKahjtubh)}(hyIt can't be used for Ping(), GetDIB() and GetTemp() - for those commands we don't expect completion code in the response.h]h}It can’t be used for Ping(), GetDIB() and GetTemp() - for those commands we don’t expect completion code in the response.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chK`hjtubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKchjtubh)}(h-errnoh]h-errno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKdhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_request_alloc (C function)c.peci_request_allochNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(h[struct peci_request * peci_request_alloc (struct peci_device *device, u8 tx_len, u8 rx_len)h]j_)}(hYstruct peci_request *peci_request_alloc(struct peci_device *device, u8 tx_len, u8 rx_len)h](je)}(hjhh]hstruct}(hj@hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<hhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKubjw)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj<hhhjMhKubh)}(hhh]j)}(h peci_requesth]h peci_request}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjamodnameN classnameNjj)}j]j)}jpeci_request_allocsbc.peci_request_allocasbuh1hhj<hhhjMhKubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj<hhhjMhKubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj<hhhjMhKubj)}(hpeci_request_alloch]j)}(hj}h]hpeci_request_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj<hhhjMhKubj\)}(h2(struct peci_device *device, u8 tx_len, u8 rx_len)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j{c.peci_request_allocasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubjb)}(h u8 tx_lenh](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.peci_request_allocasbuh1hhj&ubjw)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj&ubj)}(htx_lenh]htx_len}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubjb)}(h u8 rx_lenh](h)}(hhh]j)}(hu8h]hu8}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjwmodnameN classnameNjj)}j]j{c.peci_request_allocasbuh1hhjnubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjnubj)}(hrx_lenh]hrx_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubeh}(h]h ]h"]h$]h&]hhuh1j[hj<hhhjMhKubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj8hhhjMhKubah}(h]j3ah ](jjeh"]h$]h&]jj)jhuh1jXhjMhKhj5hhubj)}(hhh]h)}(h7allocate :c:type:`struct peci_requests `h](h allocate }(hjhhhNhNubh)}(h.:c:type:`struct peci_requests `h]jA)}(hjh]hstruct peci_requests}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]refdoc peci/peci refdomainjreftypetype refexplicitrefwarnjj)}j]j{c.peci_request_allocasb reftarget peci_requestsuh1hhjhK^hjubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj5hhhjMhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jShhhj0hNhNubj)}(hX**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``u8 tx_len`` TX length ``u8 rx_len`` RX length **Return** A pointer to a newly allocated :c:type:`struct peci_request ` on success or NULL otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hj3h]hstruct peci_device *device}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj1ubah}(h]h ]h"]h$]h&]uh1j:hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhj-ubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKhjIubah}(h]h ]h"]h$]h&]uh1jVhj-ubeh}(h]h ]h"]h$]h&]uh1j4hjHhKhj*ubj5)}(h``u8 tx_len`` TX length h](j;)}(h ``u8 tx_len``h]jA)}(hjlh]h u8 tx_len}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjjubah}(h]h ]h"]h$]h&]uh1j:hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjfubjW)}(hhh]h)}(h TX lengthh]h TX length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jVhjfubeh}(h]h ]h"]h$]h&]uh1j4hjhKhj*ubj5)}(h``u8 rx_len`` RX length h](j;)}(h ``u8 rx_len``h]jA)}(hjh]h u8 rx_len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjubjW)}(hhh]h)}(h RX lengthh]h RX length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKhj*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&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjubh)}(hiA pointer to a newly allocated :c:type:`struct peci_request ` on success or NULL otherwise.h](hA pointer to a newly allocated }(hjhhhNhNubh)}(h,:c:type:`struct peci_request `h]jA)}(hjh]hstruct peci_request}(hjhhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjj)}j]sbj peci_requestuh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjubh on success or NULL otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_request_free (C function)c.peci_request_freehNtauh1jAhj0hhhNhNubjT)}(hhh](jY)}(h1void peci_request_free (struct peci_request *req)h]j_)}(h0void peci_request_free(struct peci_request *req)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKubjw)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjGhhhjYhKubj)}(hpeci_request_freeh]j)}(hpeci_request_freeh]hpeci_request_free}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]hhuh1jhjGhhhjYhKubj\)}(h(struct peci_request *req)h]jb)}(hstruct peci_request *reqh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubh)}(hhh]j)}(h peci_requesth]h peci_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjnsbc.peci_request_freeasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubah}(h]h ]h"]h$]h&]hhuh1j[hjGhhhjYhKubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjChhhjYhKubah}(h]j>ah ](jjeh"]h$]h&]jj)jhuh1jXhjYhKhj@hhubj)}(hhh]h)}(hfree peci_requesth]hfree peci_request}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhjYhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jShhhj0hNhNubj)}(hK**Parameters** ``struct peci_request *req`` the PECI request to be freedh](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhj'ubj0)}(hhh]j5)}(h9``struct peci_request *req`` the PECI request to be freedh](j;)}(h``struct peci_request *req``h]jA)}(hjLh]hstruct peci_request *req}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjJubah}(h]h ]h"]h$]h&]uh1j:hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjFubjW)}(hhh]h)}(hthe PECI request to be freedh]hthe PECI request to be freed}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjbubah}(h]h ]h"]h$]h&]uh1jVhjFubeh}(h]h ]h"]h$]h&]uh1j4hjahKhjCubah}(h]h ]h"]h$]h&]uh1j/hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubeh}(h]peci-subsystem-internalsah ]h"]peci subsystem internalsah$]h&]uh1hhhhhhhhK*ubh)}(hhh](h)}(hPECI CPU Driver APIh]hPECI CPU Driver API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK2ubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_temp_read (C function)c.peci_temp_readhNtauh1jAhjhhhNhNubjT)}(hhh](jY)}(h>int peci_temp_read (struct peci_device *device, s16 *temp_raw)h]j_)}(h=int peci_temp_read(struct peci_device *device, s16 *temp_raw)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK ubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhK ubj)}(hpeci_temp_readh]j)}(hpeci_temp_readh]hpeci_temp_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK ubj\)}(h+(struct peci_device *device, s16 *temp_raw)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjw)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.peci_temp_readasbuh1hhjubjw)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hjHhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hdeviceh]hdevice}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubjb)}(h s16 *temp_rawh](h)}(hhh]j)}(hs16h]hs16}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j6c.peci_temp_readasbuh1hhjjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjjubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjjubj)}(htemp_rawh]htemp_raw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjubeh}(h]h ]h"]h$]h&]hhuh1j[hjhhhjhK ubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhK ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhK hjhhubj)}(hhh]h)}(h8read the maximum die temperature from PECI target deviceh]h8read the maximum die temperature from PECI target device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jShhhjhNhNubj)}(hX**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``s16 *temp_raw`` where to store the read temperature **Description** It uses GetTemp PECI command. **Return** 0 if succeeded, other values in case errors.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hjh]hstruct peci_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj*hKhj ubj5)}(h6``s16 *temp_raw`` where to store the read temperature h](j;)}(h``s16 *temp_raw``h]jA)}(hjNh]h s16 *temp_raw}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjLubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjHubjW)}(hhh]h)}(h#where to store the read temperatureh]h#where to store the read temperature}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchKhjdubah}(h]h ]h"]h$]h&]uh1jVhjHubeh}(h]h ]h"]h$]h&]uh1j4hjchKhj ubeh}(h]h ]h"]h$]h&]uh1j/hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubh)}(hIt uses GetTemp PECI command.h]hIt uses GetTemp PECI command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubh)}(h,0 if succeeded, other values in case errors.h]h,0 if succeeded, other values in case errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_pcs_read (C function)c.peci_pcs_readhNtauh1jAhjhhhNhNubjT)}(hhh](jY)}(hNint peci_pcs_read (struct peci_device *device, u8 index, u16 param, u32 *data)h]j_)}(hMint peci_pcs_read(struct peci_device *device, u8 index, u16 param, u32 *data)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK&ubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhhhjhK&ubj)}(h peci_pcs_readh]j)}(h peci_pcs_readh]h peci_pcs_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK&ubj\)}(h<(struct peci_device *device, u8 index, u16 param, u32 *data)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hj2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj.ubjw)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj.ubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNjj)}j]j)}jjsbc.peci_pcs_readasbuh1hhj.ubjw)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj.ubj4)}(hj7h]h*}(hj~hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj.ubj)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj*ubjb)}(hu8 indexh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jlc.peci_pcs_readasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj*ubjb)}(h u16 paramh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jlc.peci_pcs_readasbuh1hhjubjw)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj)}(hparamh]hparam}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj*ubjb)}(h u32 *datah](h)}(hhh]j)}(hu32h]hu32}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]jlc.peci_pcs_readasbuh1hhj0ubjw)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj0ubj4)}(hj7h]h*}(hjchhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj0ubj)}(hdatah]hdata}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj*ubeh}(h]h ]h"]h$]h&]hhuh1j[hjhhhjhK&ubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhjhhhjhK&ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jXhjhK&hjhhubj)}(hhh]h)}(hread PCS registerh]hread PCS register}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK&hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jShhhjhNhNubj)}(hX6**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``u8 index`` PCS index ``u16 param`` PCS parameter ``u32 *data`` where to store the read data **Description** It uses RdPkgConfig PECI command. **Return** 0 if succeeded, other values in case errors.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK*hjubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hjh]hstruct peci_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK'hjubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK'hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK'hjubj5)}(h``u8 index`` PCS index h](j;)}(h ``u8 index``h]jA)}(hjh]hu8 index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK(hjubjW)}(hhh]h)}(h PCS indexh]h PCS index}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hK(hj*ubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hj)hK(hjubj5)}(h``u16 param`` PCS parameter h](j;)}(h ``u16 param``h]jA)}(hjMh]h u16 param}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjKubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK)hjGubjW)}(hhh]h)}(h PCS parameterh]h PCS parameter}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhK)hjcubah}(h]h ]h"]h$]h&]uh1jVhjGubeh}(h]h ]h"]h$]h&]uh1j4hjbhK)hjubj5)}(h+``u32 *data`` where to store the read data h](j;)}(h ``u32 *data``h]jA)}(hjh]h u32 *data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK*hjubjW)}(hhh]h)}(hwhere to store the read datah]hwhere to store the read data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK*hjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhK*hjubeh}(h]h ]h"]h$]h&]uh1j/hjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK,hjubh)}(h!It uses RdPkgConfig PECI command.h]h!It uses RdPkgConfig PECI command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK+hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK-hjubh)}(h,0 if succeeded, other values in case errors.h]h,0 if succeeded, other values in case errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK.hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jN peci_pci_local_read (C function)c.peci_pci_local_readhNtauh1jAhjhhhNhNubjT)}(hhh](jY)}(haint peci_pci_local_read (struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h]j_)}(h`int peci_pci_local_read(struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](j)}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKFubjw)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj)hhhj;hKFubj)}(hpeci_pci_local_readh]j)}(hpeci_pci_local_readh]hpeci_pci_local_read}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ](jjeh"]h$]h&]hhuh1jhj)hhhj;hKFubj\)}(hI(struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hjjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjfubjw)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjfubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjPsbc.peci_pci_local_readasbuh1hhjfubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjfubj4)}(hj7h]h*}(hjhhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjfubj)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubjb)}(hu8 bush](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj)}(hbush]hbus}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubjb)}(hu8 devh](h)}(hhh]j)}(hu8h]hu8}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj)modnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhj ubjw)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj ubj)}(hdevh]hdev}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubjb)}(hu8 funch](h)}(hhh]j)}(hu8h]hu8}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjhubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjhubj)}(hfunch]hfunc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubjb)}(hu16 regh](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubjb)}(h u32 *datah](h)}(hhh]j)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjw)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjubj4)}(hj7h]h*}(hj+hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjubj)}(hdatah]hdata}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjbubeh}(h]h ]h"]h$]h&]hhuh1j[hj)hhhj;hKFubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj%hhhj;hKFubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jXhj;hKFhj"hhubj)}(hhh]h)}(h-read 32-bit memory location using raw addressh]h-read 32-bit memory location using raw address}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKFhj_hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj;hKFubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jShhhjhNhNubj)}(hXY**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``u8 bus`` bus ``u8 dev`` device ``u8 func`` function ``u16 reg`` register ``u32 *data`` where to store the read data **Description** It uses RdPCIConfigLocal PECI command. **Return** 0 if succeeded, other values in case errors.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKJhj~ubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hjh]hstruct peci_device *device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKGhjubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKGhjubj5)}(h``u8 bus`` bus h](j;)}(h ``u8 bus``h]jA)}(hjh]hu8 bus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKHhjubjW)}(hhh]h)}(hbush]hbus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKHhjubah}(h]h ]h"]h$]h&]uh1jVhjubeh}(h]h ]h"]h$]h&]uh1j4hjhKHhjubj5)}(h``u8 dev`` device h](j;)}(h ``u8 dev``h]jA)}(hj h]hu8 dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKIhj ubjW)}(hhh]h)}(hdeviceh]hdevice}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj* hKIhj+ ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj* hKIhjubj5)}(h``u8 func`` function h](j;)}(h ``u8 func``h]jA)}(hjN h]hu8 func}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjL ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKJhjH ubjW)}(hhh]h)}(hfunctionh]hfunction}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc hKJhjd ubah}(h]h ]h"]h$]h&]uh1jVhjH ubeh}(h]h ]h"]h$]h&]uh1j4hjc hKJhjubj5)}(h``u16 reg`` register h](j;)}(h ``u16 reg``h]jA)}(hj h]hu16 reg}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKKhj ubjW)}(hhh]h)}(hregisterh]hregister}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKKhj ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj hKKhjubj5)}(h+``u32 *data`` where to store the read data h](j;)}(h ``u32 *data``h]jA)}(hj h]h u32 *data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKLhj ubjW)}(hhh]h)}(hwhere to store the read datah]hwhere to store the read data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKLhj ubah}(h]h ]h"]h$]h&]uh1jVhj ubeh}(h]h ]h"]h$]h&]uh1j4hj hKLhjubeh}(h]h ]h"]h$]h&]uh1j/hj~ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKNhj~ubh)}(h&It uses RdPCIConfigLocal PECI command.h]h&It uses RdPCIConfigLocal PECI command.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKMhj~ubh)}(h **Return**h]j)}(hj"!h]hReturn}(hj$!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKOhj~ubh)}(h,0 if succeeded, other values in case errors.h]h,0 if succeeded, other values in case errors.}(hj8!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKPhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jN#peci_ep_pci_local_read (C function)c.peci_ep_pci_local_readhNtauh1jAhjhhhNhNubjT)}(hhh](jY)}(hlint peci_ep_pci_local_read (struct peci_device *device, u8 seg, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h]j_)}(hkint peci_ep_pci_local_read(struct peci_device *device, u8 seg, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](j)}(hinth]hint}(hjg!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!hhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKiubjw)}(h h]h }(hjv!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjc!hhhju!hKiubj)}(hpeci_ep_pci_local_readh]j)}(hpeci_ep_pci_local_readh]hpeci_ep_pci_local_read}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjc!hhhju!hKiubj\)}(hQ(struct peci_device *device, u8 seg, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hj!hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj!ubjw)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj!ubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j)}jj!sbc.peci_ep_pci_local_readasbuh1hhj!ubjw)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj!ubj4)}(hj7h]h*}(hj!hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj!ubj)}(hdeviceh]hdevice}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(hu8 segh](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.peci_ep_pci_local_readasbuh1hhj"ubjw)}(h h]h }(hj7"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj"ubj)}(hsegh]hseg}(hjE"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(hu8 bush](h)}(hhh]j)}(hu8h]hu8}(hja"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjc"modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhjZ"ubjw)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjZ"ubj)}(hbush]hbus}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(hu8 devh](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.peci_ep_pci_local_readasbuh1hhj"ubjw)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj"ubj)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(hu8 funch](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.peci_ep_pci_local_readasbuh1hhj"ubjw)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj"ubj)}(hfunch]hfunc}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(hu16 regh](h)}(hhh]j)}(hu16h]hu16}(hj9#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;#modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhj2#ubjw)}(h h]h }(hjW#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj2#ubj)}(hregh]hreg}(hje#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubjb)}(h u32 *datah](h)}(hhh]j)}(hu32h]hu32}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhjz#ubjw)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjz#ubj4)}(hj7h]h*}(hj#hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hjz#ubj)}(hdatah]hdata}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjz#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahj!ubeh}(h]h ]h"]h$]h&]hhuh1j[hjc!hhhju!hKiubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj_!hhhju!hKiubah}(h]jZ!ah ](jjeh"]h$]h&]jj)jhuh1jXhju!hKihj\!hhubj)}(hhh]h)}(h-read 32-bit memory location using raw addressh]h-read 32-bit memory location using raw address}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKihj#hhubah}(h]h ]h"]h$]h&]uh1jhj\!hhhju!hKiubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jShhhjhNhNubj)}(hX**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``u8 seg`` PCI segment ``u8 bus`` bus ``u8 dev`` device ``u8 func`` function ``u16 reg`` register ``u32 *data`` where to store the read data **Description** Like :c:type:`peci_pci_local_read`, but it uses RdEndpointConfig PECI command. **Return** 0 if succeeded, other values in case errors.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKmhj$ubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hj%$h]hstruct peci_device *device}(hj'$hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj#$ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKjhj$ubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hj>$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:$hKjhj;$ubah}(h]h ]h"]h$]h&]uh1jVhj$ubeh}(h]h ]h"]h$]h&]uh1j4hj:$hKjhj$ubj5)}(h``u8 seg`` PCI segment h](j;)}(h ``u8 seg``h]jA)}(hj^$h]hu8 seg}(hj`$hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj\$ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKkhjX$ubjW)}(hhh]h)}(h PCI segmenth]h PCI segment}(hjw$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs$hKkhjt$ubah}(h]h ]h"]h$]h&]uh1jVhjX$ubeh}(h]h ]h"]h$]h&]uh1j4hjs$hKkhj$ubj5)}(h``u8 bus`` bus h](j;)}(h ``u8 bus``h]jA)}(hj$h]hu8 bus}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj$ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKlhj$ubjW)}(hhh]h)}(hbush]hbus}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKlhj$ubah}(h]h ]h"]h$]h&]uh1jVhj$ubeh}(h]h ]h"]h$]h&]uh1j4hj$hKlhj$ubj5)}(h``u8 dev`` device h](j;)}(h ``u8 dev``h]jA)}(hj$h]hu8 dev}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj$ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKmhj$ubjW)}(hhh]h)}(hdeviceh]hdevice}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKmhj$ubah}(h]h ]h"]h$]h&]uh1jVhj$ubeh}(h]h ]h"]h$]h&]uh1j4hj$hKmhj$ubj5)}(h``u8 func`` function h](j;)}(h ``u8 func``h]jA)}(hj %h]hu8 func}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj%ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKnhj%ubjW)}(hhh]h)}(hfunctionh]hfunction}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKnhj%ubah}(h]h ]h"]h$]h&]uh1jVhj%ubeh}(h]h ]h"]h$]h&]uh1j4hj%hKnhj$ubj5)}(h``u16 reg`` register h](j;)}(h ``u16 reg``h]jA)}(hjB%h]hu16 reg}(hjD%hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj@%ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKohj<%ubjW)}(hhh]h)}(hregisterh]hregister}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW%hKohjX%ubah}(h]h ]h"]h$]h&]uh1jVhj<%ubeh}(h]h ]h"]h$]h&]uh1j4hjW%hKohj$ubj5)}(h+``u32 *data`` where to store the read data h](j;)}(h ``u32 *data``h]jA)}(hj{%h]h u32 *data}(hj}%hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjy%ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKphju%ubjW)}(hhh]h)}(hwhere to store the read datah]hwhere to store the read data}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hKphj%ubah}(h]h ]h"]h$]h&]uh1jVhju%ubeh}(h]h ]h"]h$]h&]uh1j4hj%hKphj$ubeh}(h]h ]h"]h$]h&]uh1j/hj$ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKrhj$ubh)}(hNLike :c:type:`peci_pci_local_read`, but it uses RdEndpointConfig PECI command.h](hLike }(hj%hhhNhNubh)}(h:c:type:`peci_pci_local_read`h]jA)}(hj%h]hpeci_pci_local_read}(hj%hhhNhNubah}(h]h ](jjc-typeeh"]h$]h&]uh1j@hj%ubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypetype refexplicitrefwarnjjjpeci_pci_local_readuh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKqhj%ubh,, but it uses RdEndpointConfig PECI command.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKqhj$ubh)}(h **Return**h]j)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKshj$ubh)}(h,0 if succeeded, other values in case errors.h]h,0 if succeeded, other values in case errors.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKthj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjB)}(hhh]h}(h]h ]h"]h$]h&]entries](jNpeci_mmio_read (C function)c.peci_mmio_readhNtauh1jAhjhhhNhNubjT)}(hhh](jY)}(hpint peci_mmio_read (struct peci_device *device, u8 bar, u8 seg, u8 bus, u8 dev, u8 func, u64 address, u32 *data)h]j_)}(hoint peci_mmio_read(struct peci_device *device, u8 bar, u8 seg, u8 bus, u8 dev, u8 func, u64 address, u32 *data)h](j)}(hinth]hint}(hjE&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA&hhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKubjw)}(h h]h }(hjT&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjA&hhhjS&hKubj)}(hpeci_mmio_readh]j)}(hpeci_mmio_readh]hpeci_mmio_read}(hjf&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb&ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjA&hhhjS&hKubj\)}(h](struct peci_device *device, u8 bar, u8 seg, u8 bus, u8 dev, u8 func, u64 address, u32 *data)h](jb)}(hstruct peci_device *deviceh](je)}(hjhh]hstruct}(hj&hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj~&ubjw)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj~&ubh)}(hhh]j)}(h peci_deviceh]h peci_device}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j)}jjh&sbc.peci_mmio_readasbuh1hhj~&ubjw)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj~&ubj4)}(hj7h]h*}(hj&hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj~&ubj)}(hdeviceh]hdevice}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(hu8 barh](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.peci_mmio_readasbuh1hhj&ubjw)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj&ubj)}(hbarh]hbar}(hj#'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(hu8 segh](h)}(hhh]j)}(hu8h]hu8}(hj?'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjA'modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj8'ubjw)}(h h]h }(hj]'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj8'ubj)}(hsegh]hseg}(hjk'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(hu8 bush](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.peci_mmio_readasbuh1hhj'ubjw)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj'ubj)}(hbush]hbus}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(hu8 devh](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.peci_mmio_readasbuh1hhj'ubjw)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj'ubj)}(hdevh]hdev}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(hu8 funch](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.peci_mmio_readasbuh1hhj(ubjw)}(h h]h }(hj5(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj(ubj)}(hfunch]hfunc}(hjC(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(h u64 addressh](h)}(hhh]j)}(hu64h]hu64}(hj_(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetja(modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhjX(ubjw)}(h h]h }(hj}(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhjX(ubj)}(haddressh]haddress}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubjb)}(h u32 *datah](h)}(hhh]j)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj(ubjw)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jvhj(ubj4)}(hj7h]h*}(hj(hhhNhNubah}(h]h ]j@ah"]h$]h&]uh1j3hj(ubj)}(hdatah]hdata}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jahjz&ubeh}(h]h ]h"]h$]h&]hhuh1j[hjA&hhhjS&hKubeh}(h]h ]h"]h$]h&]hhjuh1j^jjhj=&hhhjS&hKubah}(h]j8&ah ](jjeh"]h$]h&]jj)jhuh1jXhjS&hKhj:&hhubj)}(hhh]h)}(h;read 32-bit memory location using 64-bit bar offset addressh]h;read 32-bit memory location using 64-bit bar offset address}(hj )hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj)hhubah}(h]h ]h"]h$]h&]uh1jhj:&hhhjS&hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj")jj")jjjuh1jShhhjhNhNubj)}(hX**Parameters** ``struct peci_device *device`` PECI device to which request is going to be sent ``u8 bar`` PCI bar ``u8 seg`` PCI segment ``u8 bus`` bus ``u8 dev`` device ``u8 func`` function ``u64 address`` 64-bit MMIO address ``u32 *data`` where to store the read data **Description** It uses RdEndpointConfig PECI command. **Return** 0 if succeeded, other values in case errors.h](h)}(h**Parameters**h]j)}(hj,)h]h Parameters}(hj.)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*)ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj&)ubj0)}(hhh](j5)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j;)}(h``struct peci_device *device``h]jA)}(hjK)h]hstruct peci_device *device}(hjM)hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjI)ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjE)ubjW)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hjd)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`)hKhja)ubah}(h]h ]h"]h$]h&]uh1jVhjE)ubeh}(h]h ]h"]h$]h&]uh1j4hj`)hKhjB)ubj5)}(h``u8 bar`` PCI bar h](j;)}(h ``u8 bar``h]jA)}(hj)h]hu8 bar}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj)ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj~)ubjW)}(hhh]h)}(hPCI barh]hPCI bar}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jVhj~)ubeh}(h]h ]h"]h$]h&]uh1j4hj)hKhjB)ubj5)}(h``u8 seg`` PCI segment h](j;)}(h ``u8 seg``h]jA)}(hj)h]hu8 seg}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj)ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj)ubjW)}(hhh]h)}(h PCI segmenth]h PCI segment}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jVhj)ubeh}(h]h ]h"]h$]h&]uh1j4hj)hKhjB)ubj5)}(h``u8 bus`` bus h](j;)}(h ``u8 bus``h]jA)}(hj)h]hu8 bus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj)ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj)ubjW)}(hhh]h)}(hbush]hbus}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj *hKhj *ubah}(h]h ]h"]h$]h&]uh1jVhj)ubeh}(h]h ]h"]h$]h&]uh1j4hj *hKhjB)ubj5)}(h``u8 dev`` device h](j;)}(h ``u8 dev``h]jA)}(hj/*h]hu8 dev}(hj1*hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj-*ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj)*ubjW)}(hhh]h)}(hdeviceh]hdevice}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD*hKhjE*ubah}(h]h ]h"]h$]h&]uh1jVhj)*ubeh}(h]h ]h"]h$]h&]uh1j4hjD*hKhjB)ubj5)}(h``u8 func`` function h](j;)}(h ``u8 func``h]jA)}(hjh*h]hu8 func}(hjj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hjf*ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjb*ubjW)}(hhh]h)}(hfunctionh]hfunction}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}*hKhj~*ubah}(h]h ]h"]h$]h&]uh1jVhjb*ubeh}(h]h ]h"]h$]h&]uh1j4hj}*hKhjB)ubj5)}(h$``u64 address`` 64-bit MMIO address h](j;)}(h``u64 address``h]jA)}(hj*h]h u64 address}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj*ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj*ubjW)}(hhh]h)}(h64-bit MMIO addressh]h64-bit MMIO address}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jVhj*ubeh}(h]h ]h"]h$]h&]uh1j4hj*hKhjB)ubj5)}(h+``u32 *data`` where to store the read data h](j;)}(h ``u32 *data``h]jA)}(hj*h]h u32 *data}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j@hj*ubah}(h]h ]h"]h$]h&]uh1j:hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj*ubjW)}(hhh]h)}(hwhere to store the read datah]hwhere to store the read data}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jVhj*ubeh}(h]h ]h"]h$]h&]uh1j4hj*hKhjB)ubeh}(h]h ]h"]h$]h&]uh1j/hj&)ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj&)ubh)}(h&It uses RdEndpointConfig PECI command.h]h&It uses RdEndpointConfig PECI command.}(hj++hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj&)ubh)}(h **Return**h]j)}(hj<+h]hReturn}(hj>+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:+ubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj&)ubh)}(h,0 if succeeded, other values in case errors.h]h,0 if succeeded, other values in case errors.}(hjR+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj&)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]peci-cpu-driver-apiah ]h"]peci cpu driver apiah$]h&]uh1hhhhhhhhK2ubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj+error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(ju+jr+j-j*jjjm+jj+u nametypes}(ju+j-jjm+uh}(jr+hj*hjj0jPjZjjjjjjj j j j j j j j jjjjj3j8j>jCjj+jjjjjj j%jZ!j_!j8&j=&u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.