€•¸[Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ%/translations/zh_CN/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/zh_TW/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/it_IT/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ja_JP/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/ko_KR/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ%/translations/sp_SP/arch/x86/amd_hsmp”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒ?/var/lib/git/docbuild/linux/Documentation/arch/x86/amd_hsmp.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒAMD HSMP interface”h]”hŒAMD HSMP interface”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒÏNewer Fam19h(model 0x00-0x1f, 0x30-0x3f, 0x90-0x9f, 0xa0-0xaf), Fam1Ah(model 0x00-0x1f) EPYC server line of processors from AMD support system management functionality via HSMP (Host System Management Port).”h]”hŒÏNewer Fam19h(model 0x00-0x1f, 0x30-0x3f, 0x90-0x9f, 0xa0-0xaf), Fam1Ah(model 0x00-0x1f) EPYC server line of processors from AMD support system management functionality via HSMP (Host System Management Port).”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒžThe Host System Management Port (HSMP) is an interface to provide OS-level software with access to system management functions via a set of mailbox registers.”h]”hŒžThe Host System Management Port (HSMP) is an interface to provide OS-level software with access to system management functions via a set of mailbox registers.”…””}”(hhÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hh¶hžhubhÊ)”}”(hŒéMore details on the interface can be found in chapter "7 Host System Management Port (HSMP)" of the family/model PPR Eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”h]”(hŒ}More details on the interface can be found in chapter “7 Host System Management Port (HSMP)†of the family/model PPR Eg: ”…””}”(hhçhžhhŸNh NubhŒ reference”“”)”}”(hŒphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”h]”hŒphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”…””}”(hhñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”hóuh1hïhhçubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhÊ)”}”(hŒIHSMP interface is supported on EPYC line of server CPUs and MI300A (APU).”h]”hŒIHSMP interface is supported on EPYC line of server CPUs and MI300A (APU).”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒ HSMP device”h]”hŒ HSMP device”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KubhÊ)”}”(hŒ»amd_hsmp driver under drivers/platforms/x86/amd/hsmp/ has separate driver files for ACPI object based probing, platform device based probing and for the common code for these two drivers.”h]”hŒ»amd_hsmp driver under drivers/platforms/x86/amd/hsmp/ has separate driver files for ACPI object based probing, platform device based probing and for the common code for these two drivers.”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjhžhubhÊ)”}”(hX(Kconfig option CONFIG_AMD_HSMP_PLAT compiles plat.c and creates amd_hsmp.ko. Kconfig option CONFIG_AMD_HSMP_ACPI compiles acpi.c and creates hsmp_acpi.ko. Selecting any of these two configs automatically selects CONFIG_AMD_HSMP. This compiles common code hsmp.c and creates hsmp_common.ko module.”h]”hX(Kconfig option CONFIG_AMD_HSMP_PLAT compiles plat.c and creates amd_hsmp.ko. Kconfig option CONFIG_AMD_HSMP_ACPI compiles acpi.c and creates hsmp_acpi.ko. Selecting any of these two configs automatically selects CONFIG_AMD_HSMP. This compiles common code hsmp.c and creates hsmp_common.ko module.”…””}”(hj3hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjhžhubhÊ)”}”(hŒtBoth the ACPI and plat drivers create the miscdevice /dev/hsmp to let user space programs run hsmp mailbox commands.”h]”hŒtBoth the ACPI and plat drivers create the miscdevice /dev/hsmp to let user space programs run hsmp mailbox commands.”…””}”(hjAhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K#hjhžhubhÊ)”}”(hŒ@The ACPI object format supported by the driver is defined below.”h]”hŒ@The ACPI object format supported by the driver is defined below.”…””}”(hjOhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K&hjhžhubhÊ)”}”(hŒH$ ls -al /dev/hsmp crw-r--r-- 1 root root 10, 123 Jan 21 21:41 /dev/hsmp”h]”hŒH$ ls -al /dev/hsmp crw-r--r-- 1 root root 10, 123 Jan 21 21:41 /dev/hsmp”…””}”(hj]hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K(hjhžhubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒ•Characteristics of the dev node: * Write mode is used for running set/configure commands * Read mode is used for running get/status monitor commands ”h]”(hŒterm”“”)”}”(hŒ Characteristics of the dev node:”h]”hŒ Characteristics of the dev node:”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhŸh³h K-hjrubhŒ definition”“”)”}”(hhh]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ5Write mode is used for running set/configure commands”h]”hÊ)”}”(hj”h]”hŒ5Write mode is used for running set/configure commands”…””}”(hj–hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K,hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj‘)”}”(hŒ:Read mode is used for running get/status monitor commands ”h]”hÊ)”}”(hŒ9Read mode is used for running get/status monitor commands”h]”hŒ9Read mode is used for running get/status monitor commands”…””}”(hj­hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1j‹hŸh³h K,hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j†hjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphŸh³h K-hjmubjq)”}”(hŒ‰Access restrictions: * Only root user is allowed to open the file in write mode. * The file can be opened in read mode by all the users. ”h]”(jw)”}”(hŒAccess restrictions:”h]”hŒAccess restrictions:”…””}”(hjÙhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhŸh³h K1hjÕubj‡)”}”(hhh]”jŒ)”}”(hhh]”(j‘)”}”(hŒ9Only root user is allowed to open the file in write mode.”h]”hÊ)”}”(hjïh]”hŒ9Only root user is allowed to open the file in write mode.”…””}”(hjñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K0hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubj‘)”}”(hŒ6The file can be opened in read mode by all the users. ”h]”hÊ)”}”(hŒ5The file can be opened in read mode by all the users.”h]”hŒ5The file can be opened in read mode by all the users.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubeh}”(h]”h ]”h"]”h$]”h&]”jÇjÈuh1j‹hŸh³h K0hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j†hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphŸh³h K1hjmhžhubjq)”}”(hŒ®In-kernel integration: * Other subsystems in the kernel can use the exported transport function hsmp_send_message(). * Locking across callers is taken care by the driver. ”h]”(jw)”}”(hŒIn-kernel integration:”h]”hŒIn-kernel integration:”…””}”(hj2hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhŸh³h K7hj.ubj‡)”}”(hhh]”jŒ)”}”(hhh]”(j‘)”}”(hŒ[Other subsystems in the kernel can use the exported transport function hsmp_send_message().”h]”hÊ)”}”(hŒ[Other subsystems in the kernel can use the exported transport function hsmp_send_message().”h]”hŒ[Other subsystems in the kernel can use the exported transport function hsmp_send_message().”…””}”(hjJhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K4hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubj‘)”}”(hŒ5Locking across callers is taken care by the driver. ”h]”hÊ)”}”(hŒ3Locking across callers is taken care by the driver.”h]”hŒ3Locking across callers is taken care by the driver.”…””}”(hjbhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K6hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubeh}”(h]”h ]”h"]”h$]”h&]”jÇjÈuh1j‹hŸh³h K4hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j†hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphŸh³h K7hjmhžhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jkhjhžhhŸNh Nubeh}”(h]”Œ hsmp-device”ah ]”h"]”Œ hsmp device”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒHSMP sysfs interface”h]”hŒHSMP sysfs interface”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj–hžhhŸh³h K:ubhŒenumerated_list”“”)”}”(hhh]”j‘)”}”(hŒMetrics table binary sysfs ”h]”hÊ)”}”(hŒMetrics table binary sysfs”h]”hŒMetrics table binary sysfs”…””}”(hj°hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj–hžhubhÊ)”}”(hŒ¤The metrics table is made available as hexadecimal sysfs binary file under per socket sysfs directory created at /sys/devices/platform/amd_hsmp/socket%d/metrics_bin”h]”hŒ¤The metrics table is made available as hexadecimal sysfs binary file under per socket sysfs directory created at /sys/devices/platform/amd_hsmp/socket%d/metrics_bin”…””}”(hjÝhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KAhj–hžhubhÊ)”}”(hŒ?Note: lseek() is not supported as entire metrics table is read.”h]”hŒ?Note: lseek() is not supported as entire metrics table is read.”…””}”(hjëhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KEhj–hžhubhÊ)”}”(hŒqMetrics table definitions will be documented as part of Public PPR. The same is defined in the amd_hsmp.h header.”h]”hŒqMetrics table definitions will be documented as part of Public PPR. The same is defined in the amd_hsmp.h header.”…””}”(hjùhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KGhj–hžhubeh}”(h]”Œhsmp-sysfs-interface”ah ]”h"]”Œhsmp sysfs interface”ah$]”h&]”uh1h´hh¶hžhhŸh³h K:ubhµ)”}”(hhh]”(hº)”}”(hŒACPI device object format”h]”hŒACPI device object format”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KKubhÊ)”}”(hŒ^The ACPI object format expected from the amd_hsmp driver for socket with ID00 is given below::”h]”hŒ]The ACPI object format expected from the amd_hsmp driver for socket with ID00 is given below:”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KLhjhžhubhŒ literal_block”“”)”}”(hX[Device(HSMP) { Name(_HID, "AMDI0097") Name(_UID, "ID00") Name(HSE0, 0x00000001) Name(RBF0, ResourceTemplate() { Memory32Fixed(ReadWrite, 0xxxxxxx, 0x00100000) }) Method(_CRS, 0, NotSerialized) { Return(RBF0) } Method(_STA, 0, NotSerialized) { If(LEqual(HSE0, One)) { Return(0x0F) } Else { Return(Zero) } } Name(_DSD, Package(2) { Buffer(0x10) { 0x9D, 0x61, 0x4D, 0xB7, 0x07, 0x57, 0xBD, 0x48, 0xA6, 0x9F, 0x4E, 0xA2, 0x87, 0x1F, 0xC2, 0xF6 }, Package(3) { Package(2) {"MsgIdOffset", 0x00010934}, Package(2) {"MsgRspOffset", 0x00010980}, Package(2) {"MsgArgOffset", 0x000109E0} } }) }”h]”hX[Device(HSMP) { Name(_HID, "AMDI0097") Name(_UID, "ID00") Name(HSE0, 0x00000001) Name(RBF0, ResourceTemplate() { Memory32Fixed(ReadWrite, 0xxxxxxx, 0x00100000) }) Method(_CRS, 0, NotSerialized) { Return(RBF0) } Method(_STA, 0, NotSerialized) { If(LEqual(HSE0, One)) { Return(0x0F) } Else { Return(Zero) } } Name(_DSD, Package(2) { Buffer(0x10) { 0x9D, 0x61, 0x4D, 0xB7, 0x07, 0x57, 0xBD, 0x48, 0xA6, 0x9F, 0x4E, 0xA2, 0x87, 0x1F, 0xC2, 0xF6 }, Package(3) { Package(2) {"MsgIdOffset", 0x00010934}, Package(2) {"MsgRspOffset", 0x00010980}, Package(2) {"MsgArgOffset", 0x000109E0} } }) }”…””}”hj0sbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j.hŸh³h KOhjhžhubeh}”(h]”Œacpi-device-object-format”ah ]”h"]”Œacpi device object format”ah$]”h&]”uh1h´hh¶hžhhŸh³h KKubhµ)”}”(hhh]”(hº)”}”(hŒ An example”h]”hŒ An example”…””}”(hjIhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjFhžhhŸh³h KyubhÊ)”}”(hŒPTo access hsmp device from a C program. First, you need to include the headers::”h]”hŒOTo access hsmp device from a C program. First, you need to include the headers:”…””}”(hjWhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K{hjFhžhubj/)”}”(hŒ#include ”h]”hŒ#include ”…””}”hjesbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j.hŸh³h K~hjFhžhubhÊ)”}”(hŒ1Which defines the supported messages/message IDs.”h]”hŒ1Which defines the supported messages/message IDs.”…””}”(hjshžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K€hjFhžhubhÊ)”}”(hŒ.Next thing, open the device file, as follows::”h]”hŒ-Next thing, open the device file, as follows:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K‚hjFhžhubj/)”}”(hŒŒint file; file = open("/dev/hsmp", O_RDWR); if (file < 0) { /* ERROR HANDLING; you can check errno to see what went wrong */ exit(1); }”h]”hŒŒint file; file = open("/dev/hsmp", O_RDWR); if (file < 0) { /* ERROR HANDLING; you can check errno to see what went wrong */ exit(1); }”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j.hŸh³h K„hjFhžhubhÊ)”}”(hŒThe following IOCTL is defined:”h]”hŒThe following IOCTL is defined:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŒhjFhžhubjl)”}”(hhh]”jq)”}”(hX``ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)`` The argument is a pointer to a:: struct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ }; ”h]”(jw)”}”(hŒ9``ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)``”h]”hŒliteral”“”)”}”(hj´h]”hŒ5ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)”…””}”(hj¸hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhŸh³h K—hj®ubj‡)”}”(hhh]”(hÊ)”}”(hŒ The argument is a pointer to a::”h]”hŒThe argument is a pointer to a:”…””}”(hjÎhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjËubj/)”}”(hX—struct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ };”h]”hX—struct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ };”…””}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j.hŸh³h K‘hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j†hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphŸh³h K—hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jkhjFhžhhŸh³h NubhÊ)”}”(hŒ|The ioctl would return a non-zero on failure; you can read errno to see what happened. The transaction returns 0 on success.”h]”hŒ|The ioctl would return a non-zero on failure; you can read errno to see what happened. The transaction returns 0 on success.”…””}”(hjühžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K™hjFhžhubhÊ)”}”(hX More details on the interface and message definitions can be found in chapter "7 Host System Management Port (HSMP)" of the respective family/model PPR eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”h]”(hŒ More details on the interface and message definitions can be found in chapter “7 Host System Management Port (HSMP)†of the respective family/model PPR eg: ”…””}”(hj hžhhŸNh Nubhð)”}”(hŒphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”h]”hŒphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1hïhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KœhjFhžhubhÊ)”}”(hŒÉUser space C-APIs are made available by linking against the esmi library, which is provided by the E-SMS project https://www.amd.com/en/developer/e-sms.html. See: https://github.com/amd/esmi_ib_library”h]”(hŒqUser space C-APIs are made available by linking against the esmi library, which is provided by the E-SMS project ”…””}”(hj'hžhhŸNh Nubhð)”}”(hŒ+https://www.amd.com/en/developer/e-sms.html”h]”hŒ+https://www.amd.com/en/developer/e-sms.html”…””}”(hj/hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j1uh1hïhj'ubhŒ. See: ”…””}”(hj'hžhhŸNh Nubhð)”}”(hŒ&https://github.com/amd/esmi_ib_library”h]”hŒ&https://github.com/amd/esmi_ib_library”…””}”(hjBhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jDuh1hïhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hjFhžhubeh}”(h]”Œ an-example”ah ]”h"]”Œ an example”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kyubeh}”(h]”Œamd-hsmp-interface”ah ]”h"]”Œamd hsmp interface”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŠŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jdjaj“jj j jCj@j\jYuŒ nametypes”}”(jd‰j“‰j ‰jC‰j\‰uh}”(jah¶jjj j–j@jjYjFuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.