blob: 6bd34a139249b2505b95b20684614ff2a77e0bbc [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/* Copyright (c) 2018-2020 Intel Corporation */
#ifndef __PECI_IOCTL_H
#define __PECI_IOCTL_H
#include <linux/ioctl.h>
#include <linux/types.h>
/* The PECI client's default address of 0x30 */
#define PECI_BASE_ADDR 0x30
/* Max number of CPU clients */
#define PECI_OFFSET_MAX 8
/* PECI read/write data buffer size max */
#define PECI_BUFFER_SIZE 255
/* Device Specific Completion Code (CC) Definition */
#define PECI_DEV_CC_SUCCESS 0x40
#define PECI_DEV_CC_NEED_RETRY 0x80
#define PECI_DEV_CC_OUT_OF_RESOURCE 0x81
#define PECI_DEV_CC_UNAVAIL_RESOURCE 0x82
#define PECI_DEV_CC_INVALID_REQ 0x90
#define PECI_DEV_CC_MCA_ERROR 0x91
#define PECI_DEV_CC_CATASTROPHIC_MCA_ERROR 0x93
#define PECI_DEV_CC_FATAL_MCA_DETECTED 0x94
#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB 0x98
#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB_IERR 0x9B
#define PECI_DEV_CC_PARITY_ERROR_ON_GPSB_OR_PMSB_MCA 0x9C
/* Completion Code mask to check retry needs */
#define PECI_DEV_CC_RETRY_CHECK_MASK 0xf0
#define PECI_DEV_RETRY_TIMEOUT msecs_to_jiffies(700)
#define PECI_DEV_RETRY_INTERVAL_MIN_MSEC 1
#define PECI_DEV_RETRY_INTERVAL_MAX_MSEC 128
#define PECI_DEV_RETRY_BIT 0x01
/**
* enum peci_cmd - PECI client commands
* @PECI_CMD_XFER: raw PECI transfer
* @PECI_CMD_PING: ping, a required message for all PECI devices
* @PECI_CMD_GET_DIB: get DIB (Device Info Byte)
* @PECI_CMD_GET_TEMP: get maximum die temperature
* @PECI_CMD_RD_PKG_CFG: read access to the PCS (Package Configuration Space)
* @PECI_CMD_WR_PKG_CFG: write access to the PCS (Package Configuration Space)
* @PECI_CMD_RD_IA_MSR: read access to MSRs (Model Specific Registers)
* @PECI_CMD_WR_IA_MSR: write access to MSRs (Model Specific Registers)
* @PECI_CMD_RD_IA_MSREX: read access to MSRs (Model Specific Registers)
* @PECI_CMD_RD_PCI_CFG: sideband read access to the PCI configuration space
* maintained in downstream devices external to the processor
* @PECI_CMD_WR_PCI_CFG: sideband write access to the PCI configuration space
* maintained in downstream devices external to the processor
* @PECI_CMD_RD_PCI_CFG_LOCAL: sideband read access to the PCI configuration
* space that resides within the processor
* @PECI_CMD_WR_PCI_CFG_LOCAL: sideband write access to the PCI configuration
* space that resides within the processor
*
* Available commands depend on client's PECI revision.
*/
enum peci_cmd {
PECI_CMD_XFER = 0,
PECI_CMD_PING,
PECI_CMD_GET_DIB,
PECI_CMD_GET_TEMP,
PECI_CMD_RD_PKG_CFG,
PECI_CMD_WR_PKG_CFG,
PECI_CMD_RD_IA_MSR,
PECI_CMD_WR_IA_MSR,
PECI_CMD_RD_IA_MSREX,
PECI_CMD_RD_PCI_CFG,
PECI_CMD_WR_PCI_CFG,
PECI_CMD_RD_PCI_CFG_LOCAL,
PECI_CMD_WR_PCI_CFG_LOCAL,
PECI_CMD_RD_END_PT_CFG,
PECI_CMD_WR_END_PT_CFG,
PECI_CMD_CRASHDUMP_DISC,
PECI_CMD_CRASHDUMP_GET_FRAME,
PECI_CMD_MAX
};
/**
* struct peci_xfer_msg - raw PECI transfer command
* @addr; address of the client
* @tx_len: number of data to be written in bytes
* @rx_len: number of data to be read in bytes
* @tx_buf: data to be written, or NULL
* @rx_buf: data to be read, or NULL
*
* raw PECI transfer
*/
struct peci_xfer_msg {
__u8 addr;
__u8 tx_len;
__u8 rx_len;
__u8 padding;
__u8 *tx_buf;
__u8 *rx_buf;
} __attribute__((__packed__));
/**
* struct peci_ping_msg - ping command
* @addr: address of the client
*
* Ping() is a required message for all PECI devices. This message is used to
* enumerate devices or determine if a device has been removed, been
* powered-off, etc.
*/
struct peci_ping_msg {
__u8 addr;
__u8 padding[3];
} __attribute__((__packed__));
/**
* struct peci_get_dib_msg - GetDIB command
* @addr: address of the client
* @dib: DIB data to be read
*
* The processor PECI client implementation of GetDIB() includes an 8-byte
* response and provides information regarding client revision number and the
* number of supported domains. All processor PECI clients support the GetDIB()
* command.
*/
struct peci_get_dib_msg {
#define PECI_GET_DIB_WR_LEN 1
#define PECI_GET_DIB_RD_LEN 8
#define PECI_GET_DIB_CMD 0xf7
__u8 addr;
__u8 padding[3];
__u64 dib;
} __attribute__((__packed__));
/**
* struct peci_get_temp_msg - GetTemp command
* @addr: address of the client
* @temp_raw: raw temperature data to be read
*
* The GetTemp() command is used to retrieve the maximum die temperature from a
* target PECI address. The temperature is used by the external thermal
* management system to regulate the temperature on the die. The data is
* returned as a negative value representing the number of degrees centigrade
* below the maximum processor junction temperature.
*/
struct peci_get_temp_msg {
#define PECI_GET_TEMP_WR_LEN 1
#define PECI_GET_TEMP_RD_LEN 2
#define PECI_GET_TEMP_CMD 0x01
__u8 addr;
__u8 padding;
__s16 temp_raw;
} __attribute__((__packed__));
/**
* struct peci_rd_pkg_cfg_msg - RdPkgConfig command
* @addr: address of the client
* @index: encoding index for the requested service
* @param: specific data being requested
* @rx_len: number of data to be read in bytes
* @cc: completion code
* @pkg_config: package config data to be read
*
* The RdPkgConfig() command provides read access to the Package Configuration
* Space (PCS) within the processor, including various power and thermal
* management functions. Typical PCS read services supported by the processor
* may include access to temperature data, energy status, run time information,
* DIMM temperatures and so on.
*/
struct peci_rd_pkg_cfg_msg {
#define PECI_RDPKGCFG_WRITE_LEN 5
#define PECI_RDPKGCFG_READ_LEN_BASE 1
#define PECI_RDPKGCFG_CMD 0xa1
__u8 addr;
__u8 index;
#define PECI_MBX_INDEX_CPU_ID 0 /* Package Identifier Read */
#define PECI_MBX_INDEX_VR_DEBUG 1 /* VR Debug */
#define PECI_MBX_INDEX_PKG_TEMP_READ 2 /* Package Temperature Read */
#define PECI_MBX_INDEX_ENERGY_COUNTER 3 /* Energy counter */
#define PECI_MBX_INDEX_ENERGY_STATUS 4 /* DDR Energy Status */
#define PECI_MBX_INDEX_WAKE_MODE_BIT 5 /* "Wake on PECI" Mode bit */
#define PECI_MBX_INDEX_EPI 6 /* Efficient Performance Indication */
#define PECI_MBX_INDEX_PKG_RAPL_PERF 8 /* Pkg RAPL Performance Status Read */
#define PECI_MBX_INDEX_PER_CORE_DTS_TEMP 9 /* Per Core DTS Temperature Read */
#define PECI_MBX_INDEX_DTS_MARGIN 10 /* DTS thermal margin */
#define PECI_MBX_INDEX_SKT_PWR_THRTL_DUR 11 /* Socket Power Throttled Duration */
#define PECI_MBX_INDEX_CFG_TDP_CONTROL 12 /* TDP Config Control */
#define PECI_MBX_INDEX_CFG_TDP_LEVELS 13 /* TDP Config Levels */
#define PECI_MBX_INDEX_DDR_DIMM_TEMP 14 /* DDR DIMM Temperature */
#define PECI_MBX_INDEX_CFG_ICCMAX 15 /* Configurable ICCMAX */
#define PECI_MBX_INDEX_TEMP_TARGET 16 /* Temperature Target Read */
#define PECI_MBX_INDEX_CURR_CFG_LIMIT 17 /* Current Config Limit */
#define PECI_MBX_INDEX_DIMM_TEMP_READ 20 /* Package Thermal Status Read */
#define PECI_MBX_INDEX_DRAM_IMC_TMP_READ 22 /* DRAM IMC Temperature Read */
#define PECI_MBX_INDEX_DDR_CH_THERM_STAT 23 /* DDR Channel Thermal Status */
#define PECI_MBX_INDEX_PKG_POWER_LIMIT1 26 /* Package Power Limit1 */
#define PECI_MBX_INDEX_PKG_POWER_LIMIT2 27 /* Package Power Limit2 */
#define PECI_MBX_INDEX_TDP 28 /* Thermal design power minimum */
#define PECI_MBX_INDEX_TDP_HIGH 29 /* Thermal design power maximum */
#define PECI_MBX_INDEX_TDP_UNITS 30 /* Units for power/energy registers */
#define PECI_MBX_INDEX_RUN_TIME 31 /* Accumulated Run Time */
#define PECI_MBX_INDEX_CONSTRAINED_TIME 32 /* Thermally Constrained Time Read */
#define PECI_MBX_INDEX_TURBO_RATIO 33 /* Turbo Activation Ratio */
#define PECI_MBX_INDEX_DDR_RAPL_PL1 34 /* DDR RAPL PL1 */
#define PECI_MBX_INDEX_DDR_PWR_INFO_HIGH 35 /* DRAM Power Info Read (high) */
#define PECI_MBX_INDEX_DDR_PWR_INFO_LOW 36 /* DRAM Power Info Read (low) */
#define PECI_MBX_INDEX_DDR_RAPL_PL2 37 /* DDR RAPL PL2 */
#define PECI_MBX_INDEX_DDR_RAPL_STATUS 38 /* DDR RAPL Performance Status */
#define PECI_MBX_INDEX_DDR_HOT_ABSOLUTE 43 /* DDR Hottest Dimm Absolute Temp */
#define PECI_MBX_INDEX_DDR_HOT_RELATIVE 44 /* DDR Hottest Dimm Relative Temp */
#define PECI_MBX_INDEX_DDR_THROTTLE_TIME 45 /* DDR Throttle Time */
#define PECI_MBX_INDEX_DDR_THERM_STATUS 46 /* DDR Thermal Status */
#define PECI_MBX_INDEX_TIME_AVG_TEMP 47 /* Package time-averaged temperature */
#define PECI_MBX_INDEX_TURBO_RATIO_LIMIT 49 /* Turbo Ratio Limit Read */
#define PECI_MBX_INDEX_HWP_AUTO_OOB 53 /* HWP Autonomous Out-of-band */
#define PECI_MBX_INDEX_DDR_WARM_BUDGET 55 /* DDR Warm Power Budget */
#define PECI_MBX_INDEX_DDR_HOT_BUDGET 56 /* DDR Hot Power Budget */
#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM3 57 /* Package/Psys Power Limit3 */
#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM1 58 /* Package/Psys Power Limit1 */
#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM2 59 /* Package/Psys Power Limit2 */
#define PECI_MBX_INDEX_PKG_PSYS_PWR_LIM4 60 /* Package/Psys Power Limit4 */
#define PECI_MBX_INDEX_PERF_LIMIT_REASON 65 /* Performance Limit Reasons */
__u16 param;
/* When index is PECI_MBX_INDEX_CPU_ID */
#define PECI_PKG_ID_CPU_ID 0x0000 /* CPUID Info */
#define PECI_PKG_ID_PLATFORM_ID 0x0001 /* Platform ID */
#define PECI_PKG_ID_UNCORE_ID 0x0002 /* Uncore Device ID */
#define PECI_PKG_ID_MAX_THREAD_ID 0x0003 /* Max Thread ID */
#define PECI_PKG_ID_MICROCODE_REV 0x0004 /* CPU Microcode Update Revision */
#define PECI_PKG_ID_MACHINE_CHECK_STATUS 0x0005 /* Machine Check Status */
#define PECI_PKG_ID_PKG_ENERGY_STATUS 0x00ff /* Average Energy */
__u8 rx_len;
__u8 cc;
__u8 padding[2];
__u8 pkg_config[4];
} __attribute__((__packed__));
/**
* struct peci_wr_pkg_cfg_msg - WrPkgConfig command
* @addr: address of the client
* @index: encoding index for the requested service
* @param: specific data being requested
* @tx_len: number of data to be written in bytes
* @cc: completion code
* @value: package config data to be written
*
* The WrPkgConfig() command provides write access to the Package Configuration
* Space (PCS) within the processor, including various power and thermal
* management functions. Typical PCS write services supported by the processor
* may include power limiting, thermal averaging constant programming and so
* on.
*/
struct peci_wr_pkg_cfg_msg {
#define PECI_WRPKGCFG_WRITE_LEN_BASE 6
#define PECI_WRPKGCFG_READ_LEN 1
#define PECI_WRPKGCFG_CMD 0xa5
__u8 addr;
__u8 index;
#define PECI_MBX_INDEX_DIMM_AMBIENT 19
#define PECI_MBX_INDEX_DIMM_TEMP 24
__u16 param;
__u8 tx_len;
__u8 cc;
__u8 padding[2];
__u32 value;
} __attribute__((__packed__));
/**
* struct peci_rd_ia_msr_msg - RdIAMSR command
* @addr: address of the client
* @thread_id: ID of the specific logical processor
* @address: address of MSR to read from
* @cc: completion code
* @value: data to be read
*
* The RdIAMSR() PECI command provides read access to Model Specific Registers
* (MSRs) defined in the processor's Intel Architecture (IA).
*/
struct peci_rd_ia_msr_msg {
#define PECI_RDIAMSR_WRITE_LEN 5
#define PECI_RDIAMSR_READ_LEN 9
#define PECI_RDIAMSR_CMD 0xb1
__u8 addr;
__u8 thread_id;
__u16 address;
__u8 cc;
__u8 padding[3];
__u64 value;
} __attribute__((__packed__));
/**
* struct peci_wr_ia_msr_msg - WrIAMSR command
* @addr: address of the client
* @thread_id: ID of the specific logical processor
* @address: address of MSR to write to
* @tx_len: number of data to be written in bytes
* @cc: completion code
* @value: data to be written
*
* The WrIAMSR() PECI command provides write access to Model Specific Registers
* (MSRs) defined in the processor's Intel Architecture (IA).
*/
struct peci_wr_ia_msr_msg {
#define PECI_WRIAMSR_CMD 0xb5
__u8 addr;
__u8 thread_id;
__u16 address;
__u8 tx_len;
__u8 cc;
__u8 padding[2];
__u64 value;
} __attribute__((__packed__));
/**
* struct peci_rd_ia_msrex_msg - RdIAMSREX command
* @addr: address of the client
* @thread_id: ID of the specific logical processor
* @address: address of MSR to read from
* @cc: completion code
* @value: data to be read
*
* The RdIAMSREX() PECI command provides read access to Model Specific
* Registers (MSRs) defined in the processor's Intel Architecture (IA).
* The differences between RdIAMSREX() and RdIAMSR() are that:
* (1)RdIAMSR() can only read MC registers, RdIAMSREX() can read all MSRs
* (2)thread_id of RdIAMSR() is u8, thread_id of RdIAMSREX() is u16
*/
struct peci_rd_ia_msrex_msg {
#define PECI_RDIAMSREX_WRITE_LEN 6
#define PECI_RDIAMSREX_READ_LEN 9
#define PECI_RDIAMSREX_CMD 0xd1
__u8 addr;
__u8 padding0;
__u16 thread_id;
__u16 address;
__u8 cc;
__u8 padding1;
__u64 value;
} __attribute__((__packed__));
/**
* struct peci_rd_pci_cfg_msg - RdPCIConfig command
* @addr: address of the client
* @bus: PCI bus number
* @device: PCI device number
* @function: specific function to read from
* @reg: specific register to read from
* @cc: completion code
* @pci_config: config data to be read
*
* The RdPCIConfig() command provides sideband read access to the PCI
* configuration space maintained in downstream devices external to the
* processor.
*/
struct peci_rd_pci_cfg_msg {
#define PECI_RDPCICFG_WRITE_LEN 6
#define PECI_RDPCICFG_READ_LEN 5
#define PECI_RDPCICFG_READ_LEN_MAX 24
#define PECI_RDPCICFG_CMD 0x61
__u8 addr;
__u8 bus;
#define PECI_PCI_BUS0_CPU0 0x00
#define PECI_PCI_BUS0_CPU1 0x80
#define PECI_PCI_CPUBUSNO_BUS 0x00
#define PECI_PCI_CPUBUSNO_DEV 0x08
#define PECI_PCI_CPUBUSNO_FUNC 0x02
#define PECI_PCI_CPUBUSNO 0xcc
#define PECI_PCI_CPUBUSNO_1 0xd0
#define PECI_PCI_CPUBUSNO_VALID 0xd4
__u8 device;
__u8 function;
__u16 reg;
__u8 cc;
__u8 padding[1];
__u8 pci_config[4];
} __attribute__((__packed__));
/**
* struct peci_wr_pci_cfg_msg - WrPCIConfig command
* @addr: address of the client
* @bus: PCI bus number
* @device: PCI device number
* @function: specific function to write to
* @reg: specific register to write to
* @tx_len: number of data to be written in bytes
* @cc: completion code
* @pci_config: config data to be written
*
* The RdPCIConfig() command provides sideband write access to the PCI
* configuration space maintained in downstream devices external to the
* processor.
*/
struct peci_wr_pci_cfg_msg {
#define PECI_WRPCICFG_CMD 0x65
__u8 addr;
__u8 bus;
__u8 device;
__u8 function;
__u16 reg;
__u8 tx_len;
__u8 cc;
__u8 pci_config[4];
} __attribute__((__packed__));
/**
* struct peci_rd_pci_cfg_local_msg - RdPCIConfigLocal command
* @addr: address of the client
* @bus: PCI bus number
* @device: PCI device number
* @function: specific function to read from
* @reg: specific register to read from
* @rx_len: number of data to be read in bytes
* @cc: completion code
* @pci_config: config data to be read
*
* The RdPCIConfigLocal() command provides sideband read access to the PCI
* configuration space that resides within the processor. This includes all
* processor IIO and uncore registers within the PCI configuration space.
*/
struct peci_rd_pci_cfg_local_msg {
#define PECI_RDPCICFGLOCAL_WRITE_LEN 5
#define PECI_RDPCICFGLOCAL_READ_LEN_BASE 1
#define PECI_RDPCICFGLOCAL_CMD 0xe1
__u8 addr;
__u8 bus;
__u8 device;
__u8 function;
__u16 reg;
__u8 rx_len;
__u8 cc;
__u8 pci_config[4];
} __attribute__((__packed__));
/**
* struct peci_wr_pci_cfg_local_msg - WrPCIConfigLocal command
* @addr: address of the client
* @bus: PCI bus number
* @device: PCI device number
* @function: specific function to read from
* @reg: specific register to read from
* @tx_len: number of data to be written in bytes
* @cc: completion code
* @value: config data to be written
*
* The WrPCIConfigLocal() command provides sideband write access to the PCI
* configuration space that resides within the processor. PECI originators can
* access this space even before BIOS enumeration of the system buses.
*/
struct peci_wr_pci_cfg_local_msg {
#define PECI_WRPCICFGLOCAL_WRITE_LEN_BASE 6
#define PECI_WRPCICFGLOCAL_READ_LEN 1
#define PECI_WRPCICFGLOCAL_CMD 0xe5
__u8 addr;
__u8 bus;
__u8 device;
__u8 function;
__u16 reg;
__u8 tx_len;
__u8 cc;
__u32 value;
} __attribute__((__packed__));
struct peci_rd_end_pt_cfg_msg {
#define PECI_RDENDPTCFG_PCI_WRITE_LEN 12
#define PECI_RDENDPTCFG_MMIO_D_WRITE_LEN 14
#define PECI_RDENDPTCFG_MMIO_Q_WRITE_LEN 18
#define PECI_RDENDPTCFG_READ_LEN_BASE 1
#define PECI_RDENDPTCFG_CMD 0xc1
__u8 addr;
__u8 msg_type;
#define PECI_ENDPTCFG_TYPE_LOCAL_PCI 0x03
#define PECI_ENDPTCFG_TYPE_PCI 0x04
#define PECI_ENDPTCFG_TYPE_MMIO 0x05
union {
struct {
__u8 seg;
__u8 bus;
__u8 device;
__u8 function;
__u16 reg;
} pci_cfg;
struct {
__u8 seg;
__u8 bus;
__u8 device;
__u8 function;
__u8 bar;
__u8 addr_type;
#define PECI_ENDPTCFG_ADDR_TYPE_PCI 0x04
#define PECI_ENDPTCFG_ADDR_TYPE_MMIO_D 0x05
#define PECI_ENDPTCFG_ADDR_TYPE_MMIO_Q 0x06
__u64 offset;
} mmio;
} params;
__u8 rx_len;
__u8 cc;
__u8 padding[2];
__u8 data[8];
} __attribute__((__packed__));
struct peci_wr_end_pt_cfg_msg {
#define PECI_WRENDPTCFG_PCI_WRITE_LEN_BASE 13
#define PECI_WRENDPTCFG_MMIO_D_WRITE_LEN_BASE 15
#define PECI_WRENDPTCFG_MMIO_Q_WRITE_LEN_BASE 19
#define PECI_WRENDPTCFG_READ_LEN 1
#define PECI_WRENDPTCFG_CMD 0xc5
__u8 addr;
__u8 msg_type;
/* See msg_type in struct peci_rd_end_pt_cfg_msg */
union {
struct {
__u8 seg;
__u8 bus;
__u8 device;
__u8 function;
__u16 reg;
} pci_cfg;
struct {
__u8 seg;
__u8 bus;
__u8 device;
__u8 function;
__u8 bar;
__u8 addr_type;
/* See addr_type in struct peci_rd_end_pt_cfg_msg */
__u64 offset;
} mmio;
} params;
__u8 tx_len;
__u8 cc;
__u8 padding[2];
__u64 value;
} __attribute__((__packed__));
/* Crashdump Agent */
#define PECI_CRASHDUMP_CORE 0x00
#define PECI_CRASHDUMP_TOR 0x01
/* Crashdump Agent Param */
#define PECI_CRASHDUMP_PAYLOAD_SIZE 0x00
/* Crashdump Agent Data Param */
#define PECI_CRASHDUMP_AGENT_ID 0x00
#define PECI_CRASHDUMP_AGENT_PARAM 0x01
struct peci_crashdump_disc_msg {
__u8 addr;
__u8 subopcode;
#define PECI_CRASHDUMP_ENABLED 0x00
#define PECI_CRASHDUMP_NUM_AGENTS 0x01
#define PECI_CRASHDUMP_AGENT_DATA 0x02
__u8 cc;
__u8 param0;
__u16 param1;
__u8 param2;
__u8 rx_len;
__u8 data[8];
} __attribute__((__packed__));
struct peci_crashdump_get_frame_msg {
#define PECI_CRASHDUMP_DISC_WRITE_LEN 9
#define PECI_CRASHDUMP_DISC_READ_LEN_BASE 1
#define PECI_CRASHDUMP_DISC_VERSION 0
#define PECI_CRASHDUMP_DISC_OPCODE 1
#define PECI_CRASHDUMP_GET_FRAME_WRITE_LEN 10
#define PECI_CRASHDUMP_GET_FRAME_READ_LEN_BASE 1
#define PECI_CRASHDUMP_GET_FRAME_VERSION 0
#define PECI_CRASHDUMP_GET_FRAME_OPCODE 3
#define PECI_CRASHDUMP_CMD 0x71
__u8 addr;
__u8 padding0;
__u16 param0;
__u16 param1;
__u16 param2;
__u8 rx_len;
__u8 cc;
__u8 padding1[2];
__u8 data[16];
} __attribute__((__packed__));
#define PECI_IOC_BASE 0xb8
#define PECI_IOC_XFER \
_IOWR(PECI_IOC_BASE, PECI_CMD_XFER, struct peci_xfer_msg)
#define PECI_IOC_PING \
_IOWR(PECI_IOC_BASE, PECI_CMD_PING, struct peci_ping_msg)
#define PECI_IOC_GET_DIB \
_IOWR(PECI_IOC_BASE, PECI_CMD_GET_DIB, struct peci_get_dib_msg)
#define PECI_IOC_GET_TEMP \
_IOWR(PECI_IOC_BASE, PECI_CMD_GET_TEMP, struct peci_get_temp_msg)
#define PECI_IOC_RD_PKG_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PKG_CFG, struct peci_rd_pkg_cfg_msg)
#define PECI_IOC_WR_PKG_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_WR_PKG_CFG, struct peci_wr_pkg_cfg_msg)
#define PECI_IOC_RD_IA_MSR \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_IA_MSR, struct peci_rd_ia_msr_msg)
#define PECI_IOC_WR_IA_MSR \
_IOWR(PECI_IOC_BASE, PECI_CMD_WR_IA_MSR, struct peci_wr_ia_msr_msg)
#define PECI_IOC_RD_IA_MSREX \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_IA_MSREX, struct peci_rd_ia_msrex_msg)
#define PECI_IOC_RD_PCI_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG, struct peci_rd_pci_cfg_msg)
#define PECI_IOC_WR_PCI_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_WR_PCI_CFG, struct peci_wr_pci_cfg_msg)
#define PECI_IOC_RD_PCI_CFG_LOCAL \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG_LOCAL, \
struct peci_rd_pci_cfg_local_msg)
#define PECI_IOC_WR_PCI_CFG_LOCAL \
_IOWR(PECI_IOC_BASE, PECI_CMD_WR_PCI_CFG_LOCAL, \
struct peci_wr_pci_cfg_local_msg)
#define PECI_IOC_RD_END_PT_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_RD_END_PT_CFG, \
struct peci_rd_end_pt_cfg_msg)
#define PECI_IOC_WR_END_PT_CFG \
_IOWR(PECI_IOC_BASE, PECI_CMD_WR_END_PT_CFG, \
struct peci_wr_end_pt_cfg_msg)
#define PECI_IOC_CRASHDUMP_DISC \
_IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_DISC, \
struct peci_crashdump_disc_msg)
#define PECI_IOC_CRASHDUMP_GET_FRAME \
_IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_GET_FRAME, \
struct peci_crashdump_get_frame_msg)
#endif /* __PECI_IOCTL_H */