#ifndef __LIBIE_ADMINQ_H
#define __LIBIE_ADMINQ_H
#include <linux/build_bug.h>
#include <linux/types.h>
#define LIBIE_CHECK_STRUCT_LEN(n, X) \
static_assert((n) == sizeof(struct X))
#define LIBIE_AQ_MAX_BUF_LEN 4096
struct libie_aqc_generic {
__le32 param0;
__le32 param1;
__le32 addr_high;
__le32 addr_low;
};
LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_generic);
struct libie_aqc_get_ver {
__le32 rom_ver;
__le32 fw_build;
u8 fw_branch;
u8 fw_major;
u8 fw_minor;
u8 fw_patch;
u8 api_branch;
u8 api_major;
u8 api_minor;
u8 api_patch;
};
LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_get_ver);
struct libie_aqc_driver_ver {
u8 major_ver;
u8 minor_ver;
u8 build_ver;
u8 subbuild_ver;
u8 reserved[4];
__le32 addr_high;
__le32 addr_low;
};
LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_driver_ver);
enum libie_aq_res_id {
LIBIE_AQC_RES_ID_NVM = 1,
LIBIE_AQC_RES_ID_SDP = 2,
LIBIE_AQC_RES_ID_CHNG_LOCK = 3,
LIBIE_AQC_RES_ID_GLBL_LOCK = 4,
};
enum libie_aq_res_access_type {
LIBIE_AQC_RES_ACCESS_READ = 1,
LIBIE_AQC_RES_ACCESS_WRITE = 2,
};
#define LIBIE_AQ_RES_NVM_READ_DFLT_TIMEOUT_MS 3000
#define LIBIE_AQ_RES_NVM_WRITE_DFLT_TIMEOUT_MS 180000
#define LIBIE_AQ_RES_CHNG_LOCK_DFLT_TIMEOUT_MS 1000
#define LIBIE_AQ_RES_GLBL_LOCK_DFLT_TIMEOUT_MS 3000
#define LIBIE_AQ_RES_GLBL_SUCCESS 0
#define LIBIE_AQ_RES_GLBL_IN_PROG 1
#define LIBIE_AQ_RES_GLBL_DONE 2
struct libie_aqc_req_res {
__le16 res_id;
__le16 access_type;
__le32 timeout;
__le32 res_number;
__le16 status;
u8 reserved[2];
};
LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_req_res);
struct libie_aqc_list_caps {
u8 cmd_flags;
u8 pf_index;
u8 reserved[2];
__le32 count;
__le32 addr_high;
__le32 addr_low;
};
LIBIE_CHECK_STRUCT_LEN(16, libie_aqc_list_caps);
#define LIBIE_AQC_CAPS_SWITCH_MODE 0x0001
#define LIBIE_AQC_CAPS_MNG_MODE 0x0002
#define LIBIE_AQC_CAPS_NPAR_ACTIVE 0x0003
#define LIBIE_AQC_CAPS_OS2BMC_CAP 0x0004
#define LIBIE_AQC_CAPS_VALID_FUNCTIONS 0x0005
#define LIBIE_AQC_MAX_VALID_FUNCTIONS 0x8
#define LIBIE_AQC_CAPS_SRIOV 0x0012
#define LIBIE_AQC_CAPS_VF 0x0013
#define LIBIE_AQC_CAPS_VMDQ 0x0014
#define LIBIE_AQC_CAPS_8021QBG 0x0015
#define LIBIE_AQC_CAPS_8021QBR 0x0016
#define LIBIE_AQC_CAPS_VSI 0x0017
#define LIBIE_AQC_CAPS_DCB 0x0018
#define LIBIE_AQC_CAPS_FCOE 0x0021
#define LIBIE_AQC_CAPS_ISCSI 0x0022
#define LIBIE_AQC_CAPS_RSS 0x0040
#define LIBIE_AQC_CAPS_RXQS 0x0041
#define LIBIE_AQC_CAPS_TXQS 0x0042
#define LIBIE_AQC_CAPS_MSIX 0x0043
#define LIBIE_AQC_CAPS_VF_MSIX 0x0044
#define LIBIE_AQC_CAPS_FD 0x0045
#define LIBIE_AQC_CAPS_1588 0x0046
#define LIBIE_AQC_CAPS_MAX_MTU 0x0047
#define LIBIE_AQC_CAPS_NVM_VER 0x0048
#define LIBIE_AQC_CAPS_PENDING_NVM_VER 0x0049
#define LIBIE_AQC_CAPS_OROM_VER 0x004A
#define LIBIE_AQC_CAPS_PENDING_OROM_VER 0x004B
#define LIBIE_AQC_CAPS_NET_VER 0x004C
#define LIBIE_AQC_CAPS_PENDING_NET_VER 0x004D
#define LIBIE_AQC_CAPS_RDMA 0x0051
#define LIBIE_AQC_CAPS_LED 0x0061
#define LIBIE_AQC_CAPS_SDP 0x0062
#define LIBIE_AQC_CAPS_MDIO 0x0063
#define LIBIE_AQC_CAPS_WSR_PROT 0x0064
#define LIBIE_AQC_CAPS_SENSOR_READING 0x0067
#define LIBIE_AQC_INLINE_IPSEC 0x0070
#define LIBIE_AQC_CAPS_NUM_ENABLED_PORTS 0x0072
#define LIBIE_AQC_CAPS_PCIE_RESET_AVOIDANCE 0x0076
#define LIBIE_AQC_CAPS_POST_UPDATE_RESET_RESTRICT 0x0077
#define LIBIE_AQC_CAPS_NVM_MGMT 0x0080
#define LIBIE_AQC_CAPS_EXT_TOPO_DEV_IMG0 0x0081
#define LIBIE_AQC_CAPS_EXT_TOPO_DEV_IMG1 0x0082
#define LIBIE_AQC_CAPS_EXT_TOPO_DEV_IMG2 0x0083
#define LIBIE_AQC_CAPS_EXT_TOPO_DEV_IMG3 0x0084
#define LIBIE_AQC_CAPS_TX_SCHED_TOPO_COMP_MODE 0x0085
#define LIBIE_AQC_CAPS_NAC_TOPOLOGY 0x0087
#define LIBIE_AQC_CAPS_FW_LAG_SUPPORT 0x0092
#define LIBIE_AQC_BIT_ROCEV2_LAG BIT(0)
#define LIBIE_AQC_BIT_SRIOV_LAG BIT(1)
#define LIBIE_AQC_BIT_SRIOV_AA_LAG BIT(2)
#define LIBIE_AQC_CAPS_FLEX10 0x00F1
#define LIBIE_AQC_CAPS_CEM 0x00F2
struct libie_aqc_list_caps_elem {
__le16 cap;
u8 major_ver;
u8 minor_ver;
__le32 number;
__le32 logical_id;
__le32 phys_id;
__le64 rsvd1;
__le64 rsvd2;
};
LIBIE_CHECK_STRUCT_LEN(32, libie_aqc_list_caps_elem);
enum libie_adminq_opc {
libie_aqc_opc_fw_logs_config = 0xFF30,
libie_aqc_opc_fw_logs_register = 0xFF31,
libie_aqc_opc_fw_logs_query = 0xFF32,
libie_aqc_opc_fw_logs_event = 0xFF33,
};
enum libie_aqc_fw_logging_mod {
LIBIE_AQC_FW_LOG_ID_GENERAL = 0,
LIBIE_AQC_FW_LOG_ID_CTRL,
LIBIE_AQC_FW_LOG_ID_LINK,
LIBIE_AQC_FW_LOG_ID_LINK_TOPO,
LIBIE_AQC_FW_LOG_ID_DNL,
LIBIE_AQC_FW_LOG_ID_I2C,
LIBIE_AQC_FW_LOG_ID_SDP,
LIBIE_AQC_FW_LOG_ID_MDIO,
LIBIE_AQC_FW_LOG_ID_ADMINQ,
LIBIE_AQC_FW_LOG_ID_HDMA,
LIBIE_AQC_FW_LOG_ID_LLDP,
LIBIE_AQC_FW_LOG_ID_DCBX,
LIBIE_AQC_FW_LOG_ID_DCB,
LIBIE_AQC_FW_LOG_ID_XLR,
LIBIE_AQC_FW_LOG_ID_NVM,
LIBIE_AQC_FW_LOG_ID_AUTH,
LIBIE_AQC_FW_LOG_ID_VPD,
LIBIE_AQC_FW_LOG_ID_IOSF,
LIBIE_AQC_FW_LOG_ID_PARSER,
LIBIE_AQC_FW_LOG_ID_SW,
LIBIE_AQC_FW_LOG_ID_SCHEDULER,
LIBIE_AQC_FW_LOG_ID_TXQ,
LIBIE_AQC_FW_LOG_ID_RSVD,
LIBIE_AQC_FW_LOG_ID_POST,
LIBIE_AQC_FW_LOG_ID_WATCHDOG,
LIBIE_AQC_FW_LOG_ID_TASK_DISPATCH,
LIBIE_AQC_FW_LOG_ID_MNG,
LIBIE_AQC_FW_LOG_ID_SYNCE,
LIBIE_AQC_FW_LOG_ID_HEALTH,
LIBIE_AQC_FW_LOG_ID_TSDRV,
LIBIE_AQC_FW_LOG_ID_PFREG,
LIBIE_AQC_FW_LOG_ID_MDLVER,
LIBIE_AQC_FW_LOG_ID_MAX
};
#define LIBIE_AQC_FW_LOG_CONF_UART_EN BIT(0)
#define LIBIE_AQC_FW_LOG_CONF_AQ_EN BIT(1)
#define LIBIE_AQC_FW_LOG_QUERY_REGISTERED BIT(2)
#define LIBIE_AQC_FW_LOG_CONF_SET_VALID BIT(3)
#define LIBIE_AQC_FW_LOG_AQ_REGISTER BIT(0)
#define LIBIE_AQC_FW_LOG_AQ_QUERY BIT(2)
#define LIBIE_AQC_FW_LOG_MIN_RESOLUTION 1
#define LIBIE_AQC_FW_LOG_MAX_RESOLUTION 128
struct libie_aqc_fw_log {
u8 cmd_flags;
u8 rsp_flag;
__le16 fw_rt_msb;
union {
struct {
__le32 fw_rt_lsb;
} sync;
struct {
__le16 log_resolution;
__le16 mdl_cnt;
} cfg;
} ops;
__le32 addr_high;
__le32 addr_low;
};
struct libie_aqc_fw_log_cfg_resp {
__le16 module_identifier;
u8 log_level;
u8 rsvd0;
};
struct libie_aq_desc {
__le16 flags;
__le16 opcode;
__le16 datalen;
__le16 retval;
__le32 cookie_high;
__le32 cookie_low;
union {
u8 raw[16];
struct libie_aqc_generic generic;
struct libie_aqc_get_ver get_ver;
struct libie_aqc_driver_ver driver_ver;
struct libie_aqc_req_res res_owner;
struct libie_aqc_list_caps get_cap;
struct libie_aqc_fw_log fw_log;
} params;
};
LIBIE_CHECK_STRUCT_LEN(32, libie_aq_desc);
#define LIBIE_AQ_LG_BUF 512
#define LIBIE_AQ_FLAG_DD BIT(0)
#define LIBIE_AQ_FLAG_CMP BIT(1)
#define LIBIE_AQ_FLAG_ERR BIT(2)
#define LIBIE_AQ_FLAG_VFE BIT(3)
#define LIBIE_AQ_FLAG_LB BIT(9)
#define LIBIE_AQ_FLAG_RD BIT(10)
#define LIBIE_AQ_FLAG_VFC BIT(11)
#define LIBIE_AQ_FLAG_BUF BIT(12)
#define LIBIE_AQ_FLAG_SI BIT(13)
#define LIBIE_AQ_FLAG_EI BIT(14)
#define LIBIE_AQ_FLAG_FE BIT(15)
enum libie_aq_err {
LIBIE_AQ_RC_OK = 0,
LIBIE_AQ_RC_EPERM = 1,
LIBIE_AQ_RC_ENOENT = 2,
LIBIE_AQ_RC_ESRCH = 3,
LIBIE_AQ_RC_EIO = 5,
LIBIE_AQ_RC_EAGAIN = 8,
LIBIE_AQ_RC_ENOMEM = 9,
LIBIE_AQ_RC_EACCES = 10,
LIBIE_AQ_RC_EBUSY = 12,
LIBIE_AQ_RC_EEXIST = 13,
LIBIE_AQ_RC_EINVAL = 14,
LIBIE_AQ_RC_ENOSPC = 16,
LIBIE_AQ_RC_ENOSYS = 17,
LIBIE_AQ_RC_EMODE = 21,
LIBIE_AQ_RC_ENOSEC = 24,
LIBIE_AQ_RC_EBADSIG = 25,
LIBIE_AQ_RC_ESVN = 26,
LIBIE_AQ_RC_EBADMAN = 27,
LIBIE_AQ_RC_EBADBUF = 28,
};
static inline void *libie_aq_raw(struct libie_aq_desc *desc)
{
return &desc->params.raw;
}
const char *libie_aq_str(enum libie_aq_err err);
#endif