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]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.}(hhhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK*ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepeci_controller_ops (C struct)c.peci_controller_opshNtauh1j-hjhhhN/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}(hjRhhhNhNubah}(h]h ]kah"]h$]h&]uh1jPhjLhhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKubhdesc_sig_space)}(h h]h }(hjdhhhNhNubah}(h]h ]wah"]h$]h&]uh1jbhjLhhhjahKubh desc_name)}(hpeci_controller_opsh]h desc_sig_name)}(hjHh]hpeci_controller_ops}(hj{hhhNhNubah}(h]h ]nah"]h$]h&]uh1jyhjuubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jshjLhhhjahKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jJsphinx_line_type declaratorhjFhhhjahKubah}(h]j<ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jDhjahKhjAhhubh 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&]uh1jhjAhhhjahKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j?hhhjhj>hNubh 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}(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.hhKhj"ubh definition)}(hhh]h)}(hPECI transfer functionh]hPECI transfer function}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjDubah}(h]h ]h"]h$]h&]uh1jBhj"ubeh}(h]h ]h"]h$]h&]uh1j hjAhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj>hNubh)}(h**Description**h]j)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKhjhhubh)}(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.hhKhjhhubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_controller (C struct)c.peci_controllerhNtauh1j-hjhhhj>hNubj@)}(hhh](jE)}(hpeci_controllerh]jK)}(hstruct peci_controllerh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhKubjt)}(hpeci_controllerh]jz)}(hjh]hpeci_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhjhKhjhhubj)}(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&]jjjj jj jjjuh1j?hhhjhj>hNubj)}(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}(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%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; };}hj.sbah}(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)}(hj?h]hMembers}(hjAhhhNhNubah}(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.hj ubj)}(hhh](j!)}(hF``dev`` device object to register PECI controller to the device model h](j')}(h``dev``h]j-)}(hj^h]hdev}(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#hjXubjC)}(hhh]h)}(h=device object to register PECI controller to the device modelh]h=device object to register PECI controller to the device model}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshK#hjtubah}(h]h ]h"]h$]h&]uh1jBhjXubeh}(h]h ]h"]h$]h&]uh1j hjshK#hjUubj!)}(h9``ops`` pointer to device specific controller operations h](j')}(h``ops``h]j-)}(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$hjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK$hjUubj!)}(h3``bus_lock`` lock used to protect multiple callers h](j')}(h ``bus_lock``h]j-)}(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%hjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK%hjUubj!)}(h``id`` PECI controller IDh](j')}(h``id``h]j-)}(hj h]hid}(hj hhhNhNubah}(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%hjubjC)}(hhh]h)}(hPECI controller IDh]hPECI controller ID}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK&hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK%hjUubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj>hNubh)}(h**Description**h]j)}(hjLh]h Description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK)hjhhubh)}(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.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK'hjhhubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_device (C struct) c.peci_devicehNtauh1j-hjhhhj>hNubj@)}(hhh](jE)}(h peci_deviceh]jK)}(hstruct peci_deviceh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK.ubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhK.ubjt)}(h peci_deviceh]jz)}(hjh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhjhK.ubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhK.ubah}(h]j}ah ](jjeh"]h$]h&]jj)jhuh1jDhjhK.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&]jjjjjjjjjuh1j?hhhjhj>hNubj)}(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; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKAhjubh)}(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.hhKLhjubj)}(hhh](j!)}(hB``dev`` device object to register PECI device to the device model h](j')}(h``dev``h]j-)}(hj9h]hdev}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj7ubah}(h]h ]h"]h$]h&]uh1j&hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK=hj3ubjC)}(hhh]h)}(h9device object to register PECI device to the device modelh]h9device object to register PECI device to the device model}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK=hjOubah}(h]h ]h"]h$]h&]uh1jBhj3ubeh}(h]h ]h"]h$]h&]uh1j hjNhK=hj0ubj!)}(h%``info`` PECI device characteristics h](j')}(h``info``h]j-)}(hjrh]hinfo}(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>hjlubjC)}(hhh]h)}(hPECI device characteristicsh]hPECI device characteristics}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK>hjubah}(h]h ]h"]h$]h&]uh1jBhjlubeh}(h]h ]h"]h$]h&]uh1j hjhK>hj0ubj!)}(h,``info.x86_vfm`` device vendor-family-model h](j')}(h``info.x86_vfm``h]j-)}(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?hjubjC)}(hhh]h)}(hdevice vendor-family-modelh]hdevice vendor-family-model}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK?hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK?hj0ubj!)}(hB``info.peci_revision`` PECI revision supported by the PECI device h](j')}(h``info.peci_revision``h]j-)}(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@hjubjC)}(hhh]h)}(h*PECI revision supported by the PECI deviceh]h*PECI revision supported by the PECI device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK@hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK@hj0ubj!)}(h@``info.socket_id`` the socket ID represented by the PECI device h](j')}(h``info.socket_id``h]j-)}(hjh]hinfo.socket_id}(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.hhKAhjubjC)}(hhh]h)}(h,the socket ID represented by the PECI deviceh]h,the socket ID represented by the PECI device}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKAhj3ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hj2hKAhj0ubj!)}(hI``addr`` address used on the PECI bus connected to the parent controller h](j')}(h``addr``h]j-)}(hjVh]haddr}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjTubah}(h]h ]h"]h$]h&]uh1j&hN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKBhjPubjC)}(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}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhKBhjlubah}(h]h ]h"]h$]h&]uh1jBhjPubeh}(h]h ]h"]h$]h&]uh1j hjkhKBhj0ubj!)}(h:``deleted`` indicates that PECI device was already deletedh](j')}(h ``deleted``h]j-)}(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.hhKBhjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKBhj0ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj>hNubh)}(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.hhKFhjhhubh)}(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.hhKDhjhhubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_request (C struct)c.peci_requesthNtauh1j-hjhhhj>hNubj@)}(hhh](jE)}(h peci_requesth]jK)}(hstruct peci_requesth](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKKubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhjhKKubjt)}(h peci_requesth]jz)}(hj h]h peci_request}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj,ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj hhhjhKKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhKKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhjhKKhjhhubj)}(hhh]h)}(h PECI requesth]h PECI request}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKYhjOhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjjjuh1j?hhhjhj>hNubj)}(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}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhK]hjnubj)}(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_hjnubh)}(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.hhKghjnubj)}(hhh](j!)}(h4``device`` PECI device to which the request is sent h](j')}(h ``device``h]j-)}(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[hjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK[hjubj!)}(h``rx`` RX buffer specific data h](j')}(h``rx``h]j-)}(hjh]hrx}(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_hjubjC)}(hhh]h)}(hRX buffer specific datah]hRX buffer specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK_hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hj hK_hjubj!)}(h``rx.buf`` RX buffer h](j')}(h ``rx.buf``h]j-)}(hj1h]hrx.buf}(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.hhK`hj+ubjC)}(hhh]h)}(h RX bufferh]h RX buffer}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhK`hjGubah}(h]h ]h"]h$]h&]uh1jBhj+ubeh}(h]h ]h"]h$]h&]uh1j hjFhK`hjubj!)}(h)``rx.len`` received data length in bytes h](j')}(h ``rx.len``h]j-)}(hjjh]hrx.len}(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.hhKahjdubjC)}(hhh]h)}(hreceived data length in bytesh]hreceived data length in bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1jBhjdubeh}(h]h ]h"]h$]h&]uh1j hjhKahjubj!)}(h``tx`` TX buffer specific data h](j')}(h``tx``h]j-)}(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\hjubjC)}(hhh]h)}(hTX buffer specific datah]hTX buffer specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK\hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK\hjubj!)}(h``tx.buf`` TX buffer h](j')}(h ``tx.buf``h]j-)}(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]hjubjC)}(hhh]h)}(h TX bufferh]h TX buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK]hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK]hjubj!)}(h(``tx.len`` transfer data length in bytesh](j')}(h ``tx.len``h]j-)}(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 ubjC)}(hhh]h)}(htransfer data length in bytesh]htransfer data length in bytes}(hj. 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&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj* hK]hjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj>hNubh)}(h**Description**h]j)}(hjX h]h Description}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKahjhhubh)}(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).}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhN/var/lib/git/docbuild/linux/Documentation/peci/peci:44: ./include/linux/peci.hhKbhjhhubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_device_id (C struct)c.peci_device_idhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hpeci_device_idh]jK)}(hstruct peci_device_idh](jQ)}(hjTh]hstruct}(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKubjc)}(h h]h }(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhj hKubjt)}(hpeci_device_idh]jz)}(hj h]hpeci_device_id}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jDhj 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 jjjuh1j?hhhjhNhNubj)}(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&]uh1jhj$ ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKNhj ubj)}(hhh](j!)}(h;``data`` pointer to driver private data specific to device h](j')}(h``data``h]j-)}(hjE h]hdata}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjC ubah}(h]h ]h"]h$]h&]uh1j&hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKEhj? ubjC)}(hhh]h)}(h1pointer to driver private data specific to deviceh]h1pointer to driver private data specific to device}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ hKEhj[ ubah}(h]h ]h"]h$]h&]uh1jBhj? ubeh}(h]h ]h"]h$]h&]uh1j hjZ hKEhj< ubj!)}(h&``x86_vfm`` device vendor-family-modelh](j')}(h ``x86_vfm``h]j-)}(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.hhKEhjx ubjC)}(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&]uh1jBhjx ubeh}(h]h ]h"]h$]h&]uh1j hj hKEhj< ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_driver (C struct) c.peci_driverhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(h peci_driverh]jK)}(hstruct peci_driverh](jQ)}(hjTh]hstruct}(hj hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKLubjc)}(h h]h }(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj hhhj hKLubjt)}(h peci_driverh]jz)}(hj h]h peci_driver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj hhhj hKLubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhj hhhj hKLubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jDhj 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&]jjjj2 jj2 jjjuh1j?hhhjhNhNubj)}(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}(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.hhKZhj6 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; };}hjW sbah}(h]h ]h"]h$]h&]hhuh1jhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhK\hj6 ubh)}(h **Members**h]j)}(hjh h]hMembers}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKchj6 ubj)}(hhh](j!)}(h!``driver`` inherit device driver h](j')}(h ``driver``h]j-)}(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 ubjC)}(hhh]h)}(hinherit device driverh]hinherit device driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKXhj ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj hKXhj~ ubj!)}(h``probe`` probe callback h](j')}(h ``probe``h]j-)}(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 ubjC)}(hhh]h)}(hprobe callbackh]hprobe callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKYhj ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj hKYhj~ ubj!)}(h``remove`` remove callback h](j')}(h ``remove``h]j-)}(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 ubjC)}(hhh]h)}(hremove callbackh]hremove callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKZhj ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj hKZhj~ ubj!)}(hC``id_table`` PECI device match table to decide which device to bindh](j')}(h ``id_table``h]j-)}(hj2 h]hid_table}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj0 ubah}(h]h ]h"]h$]h&]uh1j&hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKZhj, ubjC)}(hhh]h)}(h6PECI device match table to decide which device to bindh]h6PECI device match table to decide which device to bind}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhK[hjH ubah}(h]h ]h"]h$]h&]uh1jBhj, ubeh}(h]h ]h"]h$]h&]uh1j hjG hKZhj~ ubeh}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_driver_register (C macro)c.peci_driver_registerhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hpeci_driver_registerh]jK)}(hpeci_driver_registerh]jt)}(hpeci_driver_registerh]jz)}(hj h]hpeci_driver_register}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKpubah}(h]h ]h"]h$]h&]hhjuh1jJjjhj hhhj hKpubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jDhj hKphj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKpubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1j?hhhjhNhNubh)}(h!``peci_driver_register (driver)``h]j-)}(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.hhKrhjhhubh 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 hKhhjhhubj)}(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 ubj)}(hhh]j!)}(h'``driver`` the driver to be registered h](j')}(h ``driver``h]j-)}(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 ubjC)}(hhh]h)}(hthe driver to be registeredh]hthe driver to be registered}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hKihj. ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj- hKihj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjS h]h Description}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ 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}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKkhj ubh)}(h **Return**h]j)}(hjz h]hReturn}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKnhj 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&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:module_peci_driver (C macro)c.module_peci_driverhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hmodule_peci_driverh]jK)}(hmodule_peci_driverh]jt)}(hmodule_peci_driverh]jz)}(hj h]hmodule_peci_driver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj hhhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhK|ubah}(h]h ]h"]h$]h&]hhjuh1jJjjhj hhhj hK|ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jDhj hK|hj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hK|ubeh}(h]h ](jmacroeh"]h$]h&]jjjj jj jjjuh1j?hhhjhNhNubh)}(h&``module_peci_driver (__peci_driver)``h]j-)}(hj h]h"module_peci_driver (__peci_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.hhK~hjhhubj )}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKuhj ubah}(h]h ]h"]h$]h&]uh1j hjhKuhjhhubj)}(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.hhKyhj$ubj)}(hhh]j!)}(h%``__peci_driver`` peci_driver struct h](j')}(h``__peci_driver``h]j-)}(hjIh]h __peci_driver}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjGubah}(h]h ]h"]h$]h&]uh1j&hQ/var/lib/git/docbuild/linux/Documentation/peci/peci:45: ./drivers/peci/internal.hhKvhjCubjC)}(hhh]h)}(hpeci_driver structh]hpeci_driver struct}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hKvhj_ubah}(h]h ]h"]h$]h&]uh1jBhjCubeh}(h]h ]h"]h$]h&]uh1j hj^hKvhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubh)}(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.hhKxhj$ubh)}(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.hhKxhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:%devm_peci_controller_add (C function)c.devm_peci_controller_addhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hmstruct peci_controller * devm_peci_controller_add (struct device *dev, const struct peci_controller_ops *ops)h]jK)}(hkstruct peci_controller *devm_peci_controller_add(struct device *dev, const struct peci_controller_ops *ops)h](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjhhhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKsubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhKsubh)}(hhh]jz)}(hpeci_controllerh]hpeci_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(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_addasbuh1hhjhhhjhKsubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhKsubhdesc_sig_punctuation)}(h*h]h*}(hj!hhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjhhhjhKsubjt)}(hdevm_peci_controller_addh]jz)}(hjh]hdevm_peci_controller_add}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj0ubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhjhKsubhdesc_parameterlist)}(h;(struct device *dev, const struct peci_controller_ops *ops)h](hdesc_parameter)}(hstruct device *devh](jQ)}(hjTh]hstruct}(hjShhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjOubjc)}(h h]h }(hj`hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjOubh)}(hhh]jz)}(hdeviceh]hdevice}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjsmodnameN classnameNjj)}j]j c.devm_peci_controller_addasbuh1hhjOubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjOubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOubjz)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjIubjN)}(h%const struct peci_controller_ops *opsh](jQ)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubh)}(hhh]jz)}(hpeci_controller_opsh]hpeci_controller_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j c.devm_peci_controller_addasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hopsh]hops}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjIubeh}(h]h ]h"]h$]h&]hhuh1jGhjhhhjhKsubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhKsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhjhKshjhhubj)}(hhh]h)}(hadd PECI controllerh]hadd PECI controller}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKjhj]hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1j?hhhjhNhNubj)}(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.chKnhj|ubj)}(hhh](j!)}(h2``struct device *dev`` device for devm operations h](j')}(h``struct device *dev``h]j-)}(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.chKkhjubjC)}(hhh]h)}(hdevice for devm operationsh]hdevice for devm operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKkhjubj!)}(hQ``const struct peci_controller_ops *ops`` pointer to controller specific methods h](j')}(h)``const struct peci_controller_ops *ops``h]j-)}(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.chKlhjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKlhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hjh]h Description}(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.chKnhj|ubh)}(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.chKnhj|ubh)}(h **Return**h]j)}(hj<h]hReturn}(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.chKqhj|ubh)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhM/var/lib/git/docbuild/linux/Documentation/peci/peci:46: ./drivers/peci/core.chKqhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j: peci_request_status (C function)c.peci_request_statushNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(h2int peci_request_status (struct peci_request *req)h]jK)}(h1int peci_request_status(struct peci_request *req)h](hdesc_sig_keyword_type)}(hinth]hint}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhj}hhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKfubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj}hhhjhKfubjt)}(hpeci_request_statush]jz)}(hpeci_request_statush]hpeci_request_status}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshj}hhhjhKfubjH)}(h(struct peci_request *req)h]jN)}(hstruct peci_request *reqh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubh)}(hhh]jz)}(h peci_requesth]h peci_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j )}jjsbc.peci_request_statusasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubah}(h]h ]h"]h$]h&]hhuh1jGhj}hhhjhKfubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjyhhhjhKfubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1jDhjhKfhjvhhubj)}(hhh]h)}(h+return -errno based on PECI completion codeh]h+return -errno based on PECI completion code}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chK^hjAhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhKfubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1j?hhhjhNhNubj)}(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)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKbhj`ubj)}(hhh]j!)}(h_``struct peci_request *req`` the PECI request that contains response data with completion code h](j')}(h``struct peci_request *req``h]j-)}(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_hjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK_hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubh)}(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.chKahj`ubh)}(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.chKahj`ubh)}(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.chKdhj`ubh)}(h-errnoh]h-errno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKdhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_request_alloc (C function)c.peci_request_allochNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(h[struct peci_request * peci_request_alloc (struct peci_device *device, u8 tx_len, u8 rx_len)h]jK)}(hYstruct peci_request *peci_request_alloc(struct peci_device *device, u8 tx_len, u8 rx_len)h](jQ)}(hjTh]hstruct}(hj,hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj(hhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKubjc)}(h h]h }(hj:hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(hhhj9hKubh)}(hhh]jz)}(h peci_requesth]h peci_request}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjHubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]j )}jpeci_request_allocsbc.peci_request_allocasbuh1hhj(hhhj9hKubjc)}(h h]h }(hjlhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(hhhj9hKubj )}(hj#h]h*}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(hhhj9hKubjt)}(hpeci_request_alloch]jz)}(hjih]hpeci_request_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshj(hhhj9hKubjH)}(h2(struct peci_device *device, u8 tx_len, u8 rx_len)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jgc.peci_request_allocasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(h u8 tx_lenh](h)}(hhh]jz)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jgc.peci_request_allocasbuh1hhjubjc)}(h h]h }(hj7hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjz)}(htx_lenh]htx_len}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(h u8 rx_lenh](h)}(hhh]jz)}(hu8h]hu8}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNjj)}j]jgc.peci_request_allocasbuh1hhjZubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjZubjz)}(hrx_lenh]hrx_len}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjZubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubeh}(h]h ]h"]h$]h&]hhuh1jGhj(hhhj9hKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhj$hhhj9hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhj9hKhj!hhubj)}(hhh]h)}(h7allocate :c:type:`struct peci_requests `h](h allocate }(hjhhhNhNubh)}(h.:c:type:`struct peci_requests `h]j-)}(hjh]hstruct peci_requests}(hjhhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1j,hjubah}(h]h ]h"]h$]h&]refdoc peci/peci refdomainjreftypetype refexplicitrefwarnjj)}j]jgc.peci_request_allocasb reftarget peci_requestsuh1hhjhKfhjubeh}(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!hhhj9hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j?hhhjhNhNubj)}(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.chKhjubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(hjh]hstruct peci_device *device}(hj!hhhNhNubah}(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.chKhjubjC)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hKhj5ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hj4hKhjubj!)}(h``u8 tx_len`` TX length h](j')}(h ``u8 tx_len``h]j-)}(hjXh]h u8 tx_len}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjVubah}(h]h ]h"]h$]h&]uh1j&hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjRubjC)}(hhh]h)}(h TX lengthh]h TX length}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjnubah}(h]h ]h"]h$]h&]uh1jBhjRubeh}(h]h ]h"]h$]h&]uh1j hjmhKhjubj!)}(h``u8 rx_len`` RX length h](j')}(h ``u8 rx_len``h]j-)}(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.chKhjubjC)}(hhh]h)}(h RX lengthh]h RX length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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]j-)}(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&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_request_free (C function)c.peci_request_freehNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(h1void peci_request_free (struct peci_request *req)h]jK)}(h0void peci_request_free(struct peci_request *req)h](j)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKubjc)}(h h]h }(hjFhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj3hhhjEhKubjt)}(hpeci_request_freeh]jz)}(hpeci_request_freeh]hpeci_request_free}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjTubah}(h]h ](jjeh"]h$]h&]hhuh1jshj3hhhjEhKubjH)}(h(struct peci_request *req)h]jN)}(hstruct peci_request *reqh](jQ)}(hjTh]hstruct}(hjthhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjpubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjpubh)}(hhh]jz)}(h peci_requesth]h peci_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j )}jjZsbc.peci_request_freeasbuh1hhjpubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjpubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjpubjz)}(hreqh]hreq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjpubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjlubah}(h]h ]h"]h$]h&]hhuh1jGhj3hhhjEhKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhj/hhhjEhKubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jDhjEhKhj,hhubj)}(hhh]h)}(hfree peci_requesth]hfree peci_request}(hjhhhNhNubah}(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,hhhjEhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j?hhhjhNhNubj)}(hK**Parameters** ``struct peci_request *req`` the PECI request to be freedh](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.chKhjubj)}(hhh]j!)}(h9``struct peci_request *req`` the PECI request to be freedh](j')}(h``struct peci_request *req``h]j-)}(hj8h]hstruct peci_request *req}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj6ubah}(h]h ]h"]h$]h&]uh1j&hP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhj2ubjC)}(hhh]h)}(hthe PECI request to be freedh]hthe PECI request to be freed}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/peci/peci:47: ./drivers/peci/request.chKhjNubah}(h]h ]h"]h$]h&]uh1jBhj2ubeh}(h]h ]h"]h$]h&]uh1j hjMhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(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&]uh1hhjhhhhhK2ubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_temp_read (C function)c.peci_temp_readhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(h>int peci_temp_read (struct peci_device *device, s16 *temp_raw)h]jK)}(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.chKubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhKubjt)}(hpeci_temp_readh]jz)}(hpeci_temp_readh]hpeci_temp_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhjhKubjH)}(h+(struct peci_device *device, s16 *temp_raw)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j )}jjsbc.peci_temp_readasbuh1hhjubjc)}(h h]h }(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hdeviceh]hdevice}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(h s16 *temp_rawh](h)}(hhh]jz)}(hs16h]hs16}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjZubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j"c.peci_temp_readasbuh1hhjVubjc)}(h h]h }(hj{hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjVubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubjz)}(htemp_rawh]htemp_raw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubeh}(h]h ]h"]h$]h&]hhuh1jGhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j?hhhjhNhNubj)}(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.chKhjubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(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.chKhjubjC)}(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&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj!)}(h6``s16 *temp_raw`` where to store the read temperature h](j')}(h``s16 *temp_raw``h]j-)}(hj:h]h s16 *temp_raw}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj8ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj4ubjC)}(hhh]h)}(h#where to store the read temperatureh]h#where to store the read temperature}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jBhj4ubeh}(h]h ]h"]h$]h&]uh1j hjOhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(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&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_pcs_read (C function)c.peci_pcs_readhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hNint peci_pcs_read (struct peci_device *device, u8 index, u16 param, u32 *data)h]jK)}(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.chK0ubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhjhK0ubjt)}(h peci_pcs_readh]jz)}(h peci_pcs_readh]h peci_pcs_read}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhjhK0ubjH)}(h<(struct peci_device *device, u8 index, u16 param, u32 *data)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hjhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjubjc)}(h h]h }(hj+hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNjj)}j]j )}jjsbc.peci_pcs_readasbuh1hhjubjc)}(h h]h }(hj\hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hjjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hdeviceh]hdevice}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(hu8 indexh](h)}(hhh]jz)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jXc.peci_pcs_readasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjz)}(hindexh]hindex}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(h u16 paramh](h)}(hhh]jz)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jXc.peci_pcs_readasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjz)}(hparamh]hparam}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubjN)}(h u32 *datah](h)}(hhh]jz)}(hu32h]hu32}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]jXc.peci_pcs_readasbuh1hhjubjc)}(h h]h }(hjAhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hjOhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hdatah]hdata}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjubeh}(h]h ]h"]h$]h&]hhuh1jGhjhhhjhK0ubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhjhK0ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jDhjhK0hjhhubj)}(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&]uh1jhjhhhjhK0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j?hhhjhNhNubj)}(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*hjubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(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'hjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK'hjubj!)}(h``u8 index`` PCS index h](j')}(h ``u8 index``h]j-)}(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(hjubjC)}(hhh]h)}(h PCS indexh]h PCS index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhK(hjubj!)}(h``u16 param`` PCS parameter h](j')}(h ``u16 param``h]j-)}(hj9h]h u16 param}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj7ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK)hj3ubjC)}(hhh]h)}(h PCS parameterh]h PCS parameter}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK)hjOubah}(h]h ]h"]h$]h&]uh1jBhj3ubeh}(h]h ]h"]h$]h&]uh1j hjNhK)hjubj!)}(h+``u32 *data`` where to store the read data h](j')}(h ``u32 *data``h]j-)}(hjrh]h u32 *data}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjpubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chK*hjlubjC)}(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&]uh1jBhjlubeh}(h]h ]h"]h$]h&]uh1j hjhK*hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j: peci_pci_local_read (C function)c.peci_pci_local_readhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(haint peci_pci_local_read (struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h]jK)}(h`int peci_pci_local_read(struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, 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.chKRubjc)}(h h]h }(hj(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjhhhj'hKRubjt)}(hpeci_pci_local_readh]jz)}(hpeci_pci_local_readh]hpeci_pci_local_read}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj6ubah}(h]h ](jjeh"]h$]h&]hhuh1jshjhhhj'hKRubjH)}(hI(struct peci_device *device, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hjVhhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjRubjc)}(h h]h }(hjchhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjqubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvmodnameN classnameNjj)}j]j )}jj<sbc.peci_pci_local_readasbuh1hhjRubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjRubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRubjz)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubjN)}(hu8 bush](h)}(hhh]jz)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjz)}(hbush]hbus}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubjN)}(hu8 devh](h)}(hhh]jz)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhj ubjc)}(h h]h }(hj1hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj ubjz)}(hdevh]hdev}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubjN)}(hu8 funch](h)}(hhh]jz)}(hu8h]hu8}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjTubjc)}(h h]h }(hjyhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjTubjz)}(hfunch]hfunc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjTubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubjN)}(hu16 regh](h)}(hhh]jz)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjc)}(h h]h }(hjhhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubjz)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubjN)}(h u32 *datah](h)}(hhh]jz)}(hu32h]hu32}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.peci_pci_local_readasbuh1hhjubjc)}(h h]h }(hj hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjubj )}(hj#h]h*}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubjz)}(hdatah]hdata}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjNubeh}(h]h ]h"]h$]h&]hhuh1jGhjhhhj'hKRubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjhhhj'hKRubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jDhj'hKRhjhhubj)}(hhh]h)}(h-read 32-bit memory location using raw addressh]h-read 32-bit memory location using raw address}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKFhjKhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj'hKRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1j?hhhjhNhNubj)}(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)}(hjph]h Parameters}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKJhjjubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(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.chKGhjubjC)}(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&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKGhjubj!)}(h``u8 bus`` bus h](j')}(h ``u8 bus``h]j-)}(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.chKHhjubjC)}(hhh]h)}(hbush]hbus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKHhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hjhKHhjubj!)}(h``u8 dev`` device h](j')}(h ``u8 dev``h]j-)}(hj h]hu8 dev}(hj hhhNhNubah}(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.chKIhjubjC)}(hhh]h)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKIhj ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j hj hKIhjubj!)}(h``u8 func`` function h](j')}(h ``u8 func``h]j-)}(hj: h]hu8 func}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj8 ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKJhj4 ubjC)}(hhh]h)}(hfunctionh]hfunction}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO hKJhjP ubah}(h]h ]h"]h$]h&]uh1jBhj4 ubeh}(h]h ]h"]h$]h&]uh1j hjO hKJhjubj!)}(h``u16 reg`` register h](j')}(h ``u16 reg``h]j-)}(hjs h]hu16 reg}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjq ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKKhjm ubjC)}(hhh]h)}(hregisterh]hregister}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKKhj ubah}(h]h ]h"]h$]h&]uh1jBhjm ubeh}(h]h ]h"]h$]h&]uh1j hj hKKhjubj!)}(h+``u32 *data`` where to store the read data h](j')}(h ``u32 *data``h]j-)}(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 ubjC)}(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&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j hj hKLhjubeh}(h]h ]h"]h$]h&]uh1jhjjubh)}(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.chKNhjjubh)}(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.chKNhjjubh)}(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.chKPhjjubh)}(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.chKPhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:#peci_ep_pci_local_read (C function)c.peci_ep_pci_local_readhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hlint peci_ep_pci_local_read (struct peci_device *device, u8 seg, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h]jK)}(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}(hjS!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO!hhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKvubjc)}(h h]h }(hjb!hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjO!hhhja!hKvubjt)}(hpeci_ep_pci_local_readh]jz)}(hpeci_ep_pci_local_readh]hpeci_ep_pci_local_read}(hjt!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjp!ubah}(h]h ](jjeh"]h$]h&]hhuh1jshjO!hhhja!hKvubjH)}(hQ(struct peci_device *device, u8 seg, u8 bus, u8 dev, u8 func, u16 reg, u32 *data)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hj!hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhj!ubjc)}(h h]h }(hj!hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj!ubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj!modnameN classnameNjj)}j]j )}jjv!sbc.peci_ep_pci_local_readasbuh1hhj!ubjc)}(h h]h }(hj!hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj!ubj )}(hj#h]h*}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!ubjz)}(hdeviceh]hdevice}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(hu8 segh](h)}(hhh]jz)}(hu8h]hu8}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhj!ubjc)}(h h]h }(hj#"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj!ubjz)}(hsegh]hseg}(hj1"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(hu8 bush](h)}(hhh]jz)}(hu8h]hu8}(hjM"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjJ"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjO"modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhjF"ubjc)}(h h]h }(hjk"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjF"ubjz)}(hbush]hbus}(hjy"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjF"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(hu8 devh](h)}(hhh]jz)}(hu8h]hu8}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhj"ubjc)}(h h]h }(hj"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj"ubjz)}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(hu8 funch](h)}(hhh]jz)}(hu8h]hu8}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhj"ubjc)}(h h]h }(hj"hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj"ubjz)}(hfunch]hfunc}(hj #hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(hu16 regh](h)}(hhh]jz)}(hu16h]hu16}(hj%#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj"#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'#modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhj#ubjc)}(h h]h }(hjC#hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj#ubjz)}(hregh]hreg}(hjQ#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubjN)}(h u32 *datah](h)}(hhh]jz)}(hu32h]hu32}(hjm#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjo#modnameN classnameNjj)}j]j!c.peci_ep_pci_local_readasbuh1hhjf#ubjc)}(h h]h }(hj#hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjf#ubj )}(hj#h]h*}(hj#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjf#ubjz)}(hdatah]hdata}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjf#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhj!ubeh}(h]h ]h"]h$]h&]hhuh1jGhjO!hhhja!hKvubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhjK!hhhja!hKvubah}(h]jF!ah ](jjeh"]h$]h&]jj)jhuh1jDhja!hKvhjH!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&]uh1jhjH!hhhja!hKvubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1j?hhhjhNhNubj)}(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#ubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(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 $ubjC)}(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&]uh1jBhj $ubeh}(h]h ]h"]h$]h&]uh1j hj&$hKjhj$ubj!)}(h``u8 seg`` PCI segment h](j')}(h ``u8 seg``h]j-)}(hjJ$h]hu8 seg}(hjL$hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjH$ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKkhjD$ubjC)}(hhh]h)}(h PCI segmenth]h PCI segment}(hjc$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_$hKkhj`$ubah}(h]h ]h"]h$]h&]uh1jBhjD$ubeh}(h]h ]h"]h$]h&]uh1j hj_$hKkhj$ubj!)}(h``u8 bus`` bus h](j')}(h ``u8 bus``h]j-)}(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}$ubjC)}(hhh]h)}(hbush]hbus}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKlhj$ubah}(h]h ]h"]h$]h&]uh1jBhj}$ubeh}(h]h ]h"]h$]h&]uh1j hj$hKlhj$ubj!)}(h``u8 dev`` device h](j')}(h ``u8 dev``h]j-)}(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$ubjC)}(hhh]h)}(hdeviceh]hdevice}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKmhj$ubah}(h]h ]h"]h$]h&]uh1jBhj$ubeh}(h]h ]h"]h$]h&]uh1j hj$hKmhj$ubj!)}(h``u8 func`` function h](j')}(h ``u8 func``h]j-)}(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$ubjC)}(hhh]h)}(hfunctionh]hfunction}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj %hKnhj %ubah}(h]h ]h"]h$]h&]uh1jBhj$ubeh}(h]h ]h"]h$]h&]uh1j hj %hKnhj$ubj!)}(h``u16 reg`` register h](j')}(h ``u16 reg``h]j-)}(hj.%h]hu16 reg}(hj0%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(%ubjC)}(hhh]h)}(hregisterh]hregister}(hjG%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC%hKohjD%ubah}(h]h ]h"]h$]h&]uh1jBhj(%ubeh}(h]h ]h"]h$]h&]uh1j hjC%hKohj$ubj!)}(h+``u32 *data`` where to store the read data h](j')}(h ``u32 *data``h]j-)}(hjg%h]h u32 *data}(hji%hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hje%ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKphja%ubjC)}(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&]uh1jBhja%ubeh}(h]h ]h"]h$]h&]uh1j hj|%hKphj$ubeh}(h]h ]h"]h$]h&]uh1jhj#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]j-)}(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.chKrhj%ubh,, but it uses RdEndpointConfig PECI command.}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKrhj#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.chKthj#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&]uh1jhjhhhNhNubj.)}(hhh]h}(h]h ]h"]h$]h&]entries](j:peci_mmio_read (C function)c.peci_mmio_readhNtauh1j-hjhhhNhNubj@)}(hhh](jE)}(hpint peci_mmio_read (struct peci_device *device, u8 bar, u8 seg, u8 bus, u8 dev, u8 func, u64 address, u32 *data)h]jK)}(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}(hj1&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-&hhhL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKubjc)}(h h]h }(hj@&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj-&hhhj?&hKubjt)}(hpeci_mmio_readh]jz)}(hpeci_mmio_readh]hpeci_mmio_read}(hjR&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjN&ubah}(h]h ](jjeh"]h$]h&]hhuh1jshj-&hhhj?&hKubjH)}(h](struct peci_device *device, u8 bar, u8 seg, u8 bus, u8 dev, u8 func, u64 address, u32 *data)h](jN)}(hstruct peci_device *deviceh](jQ)}(hjTh]hstruct}(hjn&hhhNhNubah}(h]h ]j]ah"]h$]h&]uh1jPhjj&ubjc)}(h h]h }(hj{&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjj&ubh)}(hhh]jz)}(h peci_deviceh]h peci_device}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j )}jjT&sbc.peci_mmio_readasbuh1hhjj&ubjc)}(h h]h }(hj&hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjj&ubj )}(hj#h]h*}(hj&hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjj&ubjz)}(hdeviceh]hdevice}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(hu8 barh](h)}(hhh]jz)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj&ubjc)}(h h]h }(hj'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj&ubjz)}(hbarh]hbar}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(hu8 segh](h)}(hhh]jz)}(hu8h]hu8}(hj+'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj('ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-'modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj$'ubjc)}(h h]h }(hjI'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj$'ubjz)}(hsegh]hseg}(hjW'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj$'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(hu8 bush](h)}(hhh]jz)}(hu8h]hu8}(hjs'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjp'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetju'modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhjl'ubjc)}(h h]h }(hj'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjl'ubjz)}(hbush]hbus}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjl'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(hu8 devh](h)}(hhh]jz)}(hu8h]hu8}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj'ubjc)}(h h]h }(hj'hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj'ubjz)}(hdevh]hdev}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(hu8 funch](h)}(hhh]jz)}(hu8h]hu8}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj'ubjc)}(h h]h }(hj!(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj'ubjz)}(hfunch]hfunc}(hj/(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(h u64 addressh](h)}(hhh]jz)}(hu64h]hu64}(hjK(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjH(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjM(modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhjD(ubjc)}(h h]h }(hji(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhjD(ubjz)}(haddressh]haddress}(hjw(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjD(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubjN)}(h u32 *datah](h)}(hhh]jz)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j&c.peci_mmio_readasbuh1hhj(ubjc)}(h h]h }(hj(hhhNhNubah}(h]h ]joah"]h$]h&]uh1jbhj(ubj )}(hj#h]h*}(hj(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(ubjz)}(hdatah]hdata}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jMhjf&ubeh}(h]h ]h"]h$]h&]hhuh1jGhj-&hhhj?&hKubeh}(h]h ]h"]h$]h&]hhjuh1jJjjhj)&hhhj?&hKubah}(h]j$&ah ](jjeh"]h$]h&]jj)jhuh1jDhj?&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&&hhhj?&hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1j?hhhjhNhNubj)}(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)ubj)}(hhh](j!)}(hP``struct peci_device *device`` PECI device to which request is going to be sent h](j')}(h``struct peci_device *device``h]j-)}(hj7)h]hstruct peci_device *device}(hj9)hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hj5)ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhj1)ubjC)}(hhh]h)}(h0PECI device to which request is going to be senth]h0PECI device to which request is going to be sent}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL)hKhjM)ubah}(h]h ]h"]h$]h&]uh1jBhj1)ubeh}(h]h ]h"]h$]h&]uh1j hjL)hKhj.)ubj!)}(h``u8 bar`` PCI bar h](j')}(h ``u8 bar``h]j-)}(hjp)h]hu8 bar}(hjr)hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjn)ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjj)ubjC)}(hhh]h)}(hPCI barh]hPCI bar}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jBhjj)ubeh}(h]h ]h"]h$]h&]uh1j hj)hKhj.)ubj!)}(h``u8 seg`` PCI segment h](j')}(h ``u8 seg``h]j-)}(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)ubjC)}(hhh]h)}(h PCI segmenth]h PCI segment}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jBhj)ubeh}(h]h ]h"]h$]h&]uh1j hj)hKhj.)ubj!)}(h``u8 bus`` bus h](j')}(h ``u8 bus``h]j-)}(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)ubjC)}(hhh]h)}(hbush]hbus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jBhj)ubeh}(h]h ]h"]h$]h&]uh1j hj)hKhj.)ubj!)}(h``u8 dev`` device h](j')}(h ``u8 dev``h]j-)}(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.chKhj*ubjC)}(hhh]h)}(hdeviceh]hdevice}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0*hKhj1*ubah}(h]h ]h"]h$]h&]uh1jBhj*ubeh}(h]h ]h"]h$]h&]uh1j hj0*hKhj.)ubj!)}(h``u8 func`` function h](j')}(h ``u8 func``h]j-)}(hjT*h]hu8 func}(hjV*hhhNhNubah}(h]h ]h"]h$]h&]uh1j,hjR*ubah}(h]h ]h"]h$]h&]uh1j&hL/var/lib/git/docbuild/linux/Documentation/peci/peci:51: ./drivers/peci/cpu.chKhjN*ubjC)}(hhh]h)}(hfunctionh]hfunction}(hjm*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji*hKhjj*ubah}(h]h ]h"]h$]h&]uh1jBhjN*ubeh}(h]h ]h"]h$]h&]uh1j hji*hKhj.)ubj!)}(h$``u64 address`` 64-bit MMIO address h](j')}(h``u64 address``h]j-)}(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*ubjC)}(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&]uh1jBhj*ubeh}(h]h ]h"]h$]h&]uh1j hj*hKhj.)ubj!)}(h+``u32 *data`` where to store the read data h](j')}(h ``u32 *data``h]j-)}(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*ubjC)}(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&]uh1jBhj*ubeh}(h]h ]h"]h$]h&]uh1j hj*hKhj.)ubeh}(h]h ]h"]h$]h&]uh1jhj)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.}(hj>+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_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(ja+j^+jjj~j{jY+jV+u nametypes}(ja+jj~jY+uh}(j^+hjhj{jj<jFjjj}jjjj j j j j j j j jjjtjyjj$j*j/jV+jjjjjj jjF!jK!j$&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.