Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401/* SPDX-License-Identifier: GPL-2.0-only *//* Copyright (C) 2025 Intel Corporation */
#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 - Generic structure used in adminq communication * @param0: generic parameter high 32bit * @param1: generic parameter lower 32bit * @addr_high: generic address high 32bit * @addr_low: generic address lower 32bit */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 - Used in command get version (direct 0x0001) * @rom_ver: rom version * @fw_build: number coressponding to firmware build * @fw_branch: branch identifier of firmware version * @fw_major: major number of firmware version * @fw_minor: minor number of firmware version * @fw_patch: patch of firmware version * @api_branch: brancch identifier of API version * @api_major: major number of API version * @api_minor: minor number of API version * @api_patch: patch of API version */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 - Used in command send driver version * (indirect 0x0002) * @major_ver: driver major version * @minor_ver: driver minor version * @build_ver: driver build version * @subbuild_ver: driver subbuild version * @reserved: for feature use * @addr_high: high part of response address buff * @addr_low: low part of response address buff */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 - Request resource ownership * @res_id: resource ID (look at enum definition above) * @access_type: read or write (enum definition above) * @timeout: Upon successful completion, FW writes this value and driver is * expected to release resource before timeout. This value is provided in * milliseconds. * @res_number: for SDP, this is the pin ID of the SDP * @status: status only used for LIBIE_AQC_RES_ID_GLBL_LOCK, for others reserved * @reserved: reserved for future use * * Used in commands: * request resource ownership (direct 0x0008) * request resource ownership (direct 0x0009) */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 - Getting capabilities * @cmd_flags: command flags * @pf_index: index of PF to get caps from * @reserved: reserved for future use * @count: number of capabilities records * @addr_high: high part of response address buff * @addr_low: low part of response address buff * * Used in commands: * get function capabilities (indirect 0x000A) * get device capabilities (indirect 0x000B) */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);
/* Device/Function buffer entry, repeated per reported capability */#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_EEE 0x009B#define LIBIE_AQC_CAPS_FLEX10 0x00F1#define LIBIE_AQC_CAPS_CEM 0x00F2
/** * struct libie_aqc_list_caps_elem - Getting list of caps elements * @cap: one from the defines list above * @major_ver: major version * @minor_ver: minor version * @number: number of resources described by this capability * @logical_id: logical ID, only meaningful for some types of resources * @phys_id: physical ID, only meaningful for some types of resources * @rsvd1: reserved for future use * @rsvd2: reserved for future use */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);
/* Admin Queue command opcodes */enum libie_adminq_opc { /* FW Logging Commands */ 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};
/* Set FW Logging configuration (indirect 0xFF30) * Register for FW Logging (indirect 0xFF31) * Query FW Logging (indirect 0xFF32) * FW Log Event (indirect 0xFF33) */#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;};
/* Response Buffer for: * Set Firmware Logging Configuration (0xFF30) * Query FW Logging (0xFF32) */struct libie_aqc_fw_log_cfg_resp { __le16 module_identifier; u8 log_level; u8 rsvd0;};
/** * struct libie_aq_desc - Admin Queue (AQ) descriptor * @flags: LIBIE_AQ_FLAG_* flags * @opcode: AQ command opcode * @datalen: length in bytes of indirect/external data buffer * @retval: return value from firmware * @cookie_high: opaque data high-half * @cookie_low: opaque data low-half * @params: command-specific parameters * * Descriptor format for commands the driver posts on the Admin Transmit Queue * (ATQ). The firmware writes back onto the command descriptor and returns * the result of the command. Asynchronous events that are not an immediate * result of the command are written to the Admin Receive Queue (ARQ) using * the same descriptor format. Descriptors are in little-endian notation with * 32-bit words. */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);
/* FW defined boundary for a large buffer, 4k >= Large buffer > 512 bytes */#define LIBIE_AQ_LG_BUF 512
/* Flags sub-structure * |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 | * |DD |CMP|ERR|VFE| * * RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE | */#define LIBIE_AQ_FLAG_DD BIT(0) /* 0x1 */#define LIBIE_AQ_FLAG_CMP BIT(1) /* 0x2 */#define LIBIE_AQ_FLAG_ERR BIT(2) /* 0x4 */#define LIBIE_AQ_FLAG_VFE BIT(3) /* 0x8 */#define LIBIE_AQ_FLAG_LB BIT(9) /* 0x200 */#define LIBIE_AQ_FLAG_RD BIT(10) /* 0x400 */#define LIBIE_AQ_FLAG_VFC BIT(11) /* 0x800 */#define LIBIE_AQ_FLAG_BUF BIT(12) /* 0x1000 */#define LIBIE_AQ_FLAG_SI BIT(13) /* 0x2000 */#define LIBIE_AQ_FLAG_EI BIT(14) /* 0x4000 */#define LIBIE_AQ_FLAG_FE BIT(15) /* 0x8000 */
/* error codes */enum libie_aq_err { LIBIE_AQ_RC_OK = 0, /* Success */ LIBIE_AQ_RC_EPERM = 1, /* Operation not permitted */ LIBIE_AQ_RC_ENOENT = 2, /* No such element */ LIBIE_AQ_RC_ESRCH = 3, /* Bad opcode */ LIBIE_AQ_RC_EIO = 5, /* I/O error */ LIBIE_AQ_RC_EAGAIN = 8, /* Try again */ LIBIE_AQ_RC_ENOMEM = 9, /* Out of memory */ LIBIE_AQ_RC_EACCES = 10, /* Permission denied */ LIBIE_AQ_RC_EBUSY = 12, /* Device or resource busy */ LIBIE_AQ_RC_EEXIST = 13, /* Object already exists */ LIBIE_AQ_RC_EINVAL = 14, /* Invalid argument */ LIBIE_AQ_RC_ENOSPC = 16, /* No space left or allocation failure */ LIBIE_AQ_RC_ENOSYS = 17, /* Function not implemented */ LIBIE_AQ_RC_EMODE = 21, /* Op not allowed in current dev mode */ LIBIE_AQ_RC_ENOSEC = 24, /* Missing security manifest */ LIBIE_AQ_RC_EBADSIG = 25, /* Bad RSA signature */ LIBIE_AQ_RC_ESVN = 26, /* SVN number prohibits this package */ LIBIE_AQ_RC_EBADMAN = 27, /* Manifest hash mismatch */ LIBIE_AQ_RC_EBADBUF = 28, /* Buffer hash mismatches manifest */};
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 /* __LIBIE_ADMINQ_H */