cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rdma_netlink.h (15002B)


      1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2#ifndef _UAPI_RDMA_NETLINK_H
      3#define _UAPI_RDMA_NETLINK_H
      4
      5#include <linux/types.h>
      6
      7enum {
      8	RDMA_NL_IWCM = 2,
      9	RDMA_NL_RSVD,
     10	RDMA_NL_LS,	/* RDMA Local Services */
     11	RDMA_NL_NLDEV,	/* RDMA device interface */
     12	RDMA_NL_NUM_CLIENTS
     13};
     14
     15enum {
     16	RDMA_NL_GROUP_IWPM = 2,
     17	RDMA_NL_GROUP_LS,
     18	RDMA_NL_NUM_GROUPS
     19};
     20
     21#define RDMA_NL_GET_CLIENT(type) ((type & (((1 << 6) - 1) << 10)) >> 10)
     22#define RDMA_NL_GET_OP(type) (type & ((1 << 10) - 1))
     23#define RDMA_NL_GET_TYPE(client, op) ((client << 10) + op)
     24
     25/* The minimum version that the iwpm kernel supports */
     26#define IWPM_UABI_VERSION_MIN	3
     27
     28/* The latest version that the iwpm kernel supports */
     29#define IWPM_UABI_VERSION	4
     30
     31/* iwarp port mapper message flags */
     32enum {
     33
     34	/* Do not map the port for this IWPM request */
     35	IWPM_FLAGS_NO_PORT_MAP = (1 << 0),
     36};
     37
     38/* iwarp port mapper op-codes */
     39enum {
     40	RDMA_NL_IWPM_REG_PID = 0,
     41	RDMA_NL_IWPM_ADD_MAPPING,
     42	RDMA_NL_IWPM_QUERY_MAPPING,
     43	RDMA_NL_IWPM_REMOVE_MAPPING,
     44	RDMA_NL_IWPM_REMOTE_INFO,
     45	RDMA_NL_IWPM_HANDLE_ERR,
     46	RDMA_NL_IWPM_MAPINFO,
     47	RDMA_NL_IWPM_MAPINFO_NUM,
     48	RDMA_NL_IWPM_HELLO,
     49	RDMA_NL_IWPM_NUM_OPS
     50};
     51
     52enum {
     53	IWPM_NLA_REG_PID_UNSPEC = 0,
     54	IWPM_NLA_REG_PID_SEQ,
     55	IWPM_NLA_REG_IF_NAME,
     56	IWPM_NLA_REG_IBDEV_NAME,
     57	IWPM_NLA_REG_ULIB_NAME,
     58	IWPM_NLA_REG_PID_MAX
     59};
     60
     61enum {
     62	IWPM_NLA_RREG_PID_UNSPEC = 0,
     63	IWPM_NLA_RREG_PID_SEQ,
     64	IWPM_NLA_RREG_IBDEV_NAME,
     65	IWPM_NLA_RREG_ULIB_NAME,
     66	IWPM_NLA_RREG_ULIB_VER,
     67	IWPM_NLA_RREG_PID_ERR,
     68	IWPM_NLA_RREG_PID_MAX
     69
     70};
     71
     72enum {
     73	IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0,
     74	IWPM_NLA_MANAGE_MAPPING_SEQ,
     75	IWPM_NLA_MANAGE_ADDR,
     76	IWPM_NLA_MANAGE_FLAGS,
     77	IWPM_NLA_MANAGE_MAPPING_MAX
     78};
     79
     80enum {
     81	IWPM_NLA_RMANAGE_MAPPING_UNSPEC = 0,
     82	IWPM_NLA_RMANAGE_MAPPING_SEQ,
     83	IWPM_NLA_RMANAGE_ADDR,
     84	IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR,
     85	/* The following maintains bisectability of rdma-core */
     86	IWPM_NLA_MANAGE_MAPPED_LOC_ADDR = IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR,
     87	IWPM_NLA_RMANAGE_MAPPING_ERR,
     88	IWPM_NLA_RMANAGE_MAPPING_MAX
     89};
     90
     91#define IWPM_NLA_MAPINFO_SEND_MAX   3
     92#define IWPM_NLA_REMOVE_MAPPING_MAX 3
     93
     94enum {
     95	IWPM_NLA_QUERY_MAPPING_UNSPEC = 0,
     96	IWPM_NLA_QUERY_MAPPING_SEQ,
     97	IWPM_NLA_QUERY_LOCAL_ADDR,
     98	IWPM_NLA_QUERY_REMOTE_ADDR,
     99	IWPM_NLA_QUERY_FLAGS,
    100	IWPM_NLA_QUERY_MAPPING_MAX,
    101};
    102
    103enum {
    104	IWPM_NLA_RQUERY_MAPPING_UNSPEC = 0,
    105	IWPM_NLA_RQUERY_MAPPING_SEQ,
    106	IWPM_NLA_RQUERY_LOCAL_ADDR,
    107	IWPM_NLA_RQUERY_REMOTE_ADDR,
    108	IWPM_NLA_RQUERY_MAPPED_LOC_ADDR,
    109	IWPM_NLA_RQUERY_MAPPED_REM_ADDR,
    110	IWPM_NLA_RQUERY_MAPPING_ERR,
    111	IWPM_NLA_RQUERY_MAPPING_MAX
    112};
    113
    114enum {
    115	IWPM_NLA_MAPINFO_REQ_UNSPEC = 0,
    116	IWPM_NLA_MAPINFO_ULIB_NAME,
    117	IWPM_NLA_MAPINFO_ULIB_VER,
    118	IWPM_NLA_MAPINFO_REQ_MAX
    119};
    120
    121enum {
    122	IWPM_NLA_MAPINFO_UNSPEC = 0,
    123	IWPM_NLA_MAPINFO_LOCAL_ADDR,
    124	IWPM_NLA_MAPINFO_MAPPED_ADDR,
    125	IWPM_NLA_MAPINFO_FLAGS,
    126	IWPM_NLA_MAPINFO_MAX
    127};
    128
    129enum {
    130	IWPM_NLA_MAPINFO_NUM_UNSPEC = 0,
    131	IWPM_NLA_MAPINFO_SEQ,
    132	IWPM_NLA_MAPINFO_SEND_NUM,
    133	IWPM_NLA_MAPINFO_ACK_NUM,
    134	IWPM_NLA_MAPINFO_NUM_MAX
    135};
    136
    137enum {
    138	IWPM_NLA_ERR_UNSPEC = 0,
    139	IWPM_NLA_ERR_SEQ,
    140	IWPM_NLA_ERR_CODE,
    141	IWPM_NLA_ERR_MAX
    142};
    143
    144enum {
    145	IWPM_NLA_HELLO_UNSPEC = 0,
    146	IWPM_NLA_HELLO_ABI_VERSION,
    147	IWPM_NLA_HELLO_MAX
    148};
    149
    150/* For RDMA_NLDEV_ATTR_DEV_NODE_TYPE */
    151enum {
    152	/* IB values map to NodeInfo:NodeType. */
    153	RDMA_NODE_IB_CA = 1,
    154	RDMA_NODE_IB_SWITCH,
    155	RDMA_NODE_IB_ROUTER,
    156	RDMA_NODE_RNIC,
    157	RDMA_NODE_USNIC,
    158	RDMA_NODE_USNIC_UDP,
    159	RDMA_NODE_UNSPECIFIED,
    160};
    161
    162/*
    163 * Local service operations:
    164 *   RESOLVE - The client requests the local service to resolve a path.
    165 *   SET_TIMEOUT - The local service requests the client to set the timeout.
    166 *   IP_RESOLVE - The client requests the local service to resolve an IP to GID.
    167 */
    168enum {
    169	RDMA_NL_LS_OP_RESOLVE = 0,
    170	RDMA_NL_LS_OP_SET_TIMEOUT,
    171	RDMA_NL_LS_OP_IP_RESOLVE,
    172	RDMA_NL_LS_NUM_OPS
    173};
    174
    175/* Local service netlink message flags */
    176#define RDMA_NL_LS_F_ERR	0x0100	/* Failed response */
    177
    178/*
    179 * Local service resolve operation family header.
    180 * The layout for the resolve operation:
    181 *    nlmsg header
    182 *    family header
    183 *    attributes
    184 */
    185
    186/*
    187 * Local service path use:
    188 * Specify how the path(s) will be used.
    189 *   ALL - For connected CM operation (6 pathrecords)
    190 *   UNIDIRECTIONAL - For unidirectional UD (1 pathrecord)
    191 *   GMP - For miscellaneous GMP like operation (at least 1 reversible
    192 *         pathrecord)
    193 */
    194enum {
    195	LS_RESOLVE_PATH_USE_ALL = 0,
    196	LS_RESOLVE_PATH_USE_UNIDIRECTIONAL,
    197	LS_RESOLVE_PATH_USE_GMP,
    198	LS_RESOLVE_PATH_USE_MAX
    199};
    200
    201#define LS_DEVICE_NAME_MAX 64
    202
    203struct rdma_ls_resolve_header {
    204	__u8 device_name[LS_DEVICE_NAME_MAX];
    205	__u8 port_num;
    206	__u8 path_use;
    207};
    208
    209struct rdma_ls_ip_resolve_header {
    210	__u32 ifindex;
    211};
    212
    213/* Local service attribute type */
    214#define RDMA_NLA_F_MANDATORY	(1 << 13)
    215#define RDMA_NLA_TYPE_MASK	(~(NLA_F_NESTED | NLA_F_NET_BYTEORDER | \
    216				  RDMA_NLA_F_MANDATORY))
    217
    218/*
    219 * Local service attributes:
    220 *   Attr Name       Size                       Byte order
    221 *   -----------------------------------------------------
    222 *   PATH_RECORD     struct ib_path_rec_data
    223 *   TIMEOUT         u32                        cpu
    224 *   SERVICE_ID      u64                        cpu
    225 *   DGID            u8[16]                     BE
    226 *   SGID            u8[16]                     BE
    227 *   TCLASS          u8
    228 *   PKEY            u16                        cpu
    229 *   QOS_CLASS       u16                        cpu
    230 *   IPV4            u32                        BE
    231 *   IPV6            u8[16]                     BE
    232 */
    233enum {
    234	LS_NLA_TYPE_UNSPEC = 0,
    235	LS_NLA_TYPE_PATH_RECORD,
    236	LS_NLA_TYPE_TIMEOUT,
    237	LS_NLA_TYPE_SERVICE_ID,
    238	LS_NLA_TYPE_DGID,
    239	LS_NLA_TYPE_SGID,
    240	LS_NLA_TYPE_TCLASS,
    241	LS_NLA_TYPE_PKEY,
    242	LS_NLA_TYPE_QOS_CLASS,
    243	LS_NLA_TYPE_IPV4,
    244	LS_NLA_TYPE_IPV6,
    245	LS_NLA_TYPE_MAX
    246};
    247
    248/* Local service DGID/SGID attribute: big endian */
    249struct rdma_nla_ls_gid {
    250	__u8		gid[16];
    251};
    252
    253enum rdma_nldev_command {
    254	RDMA_NLDEV_CMD_UNSPEC,
    255
    256	RDMA_NLDEV_CMD_GET, /* can dump */
    257	RDMA_NLDEV_CMD_SET,
    258
    259	RDMA_NLDEV_CMD_NEWLINK,
    260
    261	RDMA_NLDEV_CMD_DELLINK,
    262
    263	RDMA_NLDEV_CMD_PORT_GET, /* can dump */
    264
    265	RDMA_NLDEV_CMD_SYS_GET,
    266	RDMA_NLDEV_CMD_SYS_SET,
    267
    268	/* 8 is free to use */
    269
    270	RDMA_NLDEV_CMD_RES_GET = 9, /* can dump */
    271
    272	RDMA_NLDEV_CMD_RES_QP_GET, /* can dump */
    273
    274	RDMA_NLDEV_CMD_RES_CM_ID_GET, /* can dump */
    275
    276	RDMA_NLDEV_CMD_RES_CQ_GET, /* can dump */
    277
    278	RDMA_NLDEV_CMD_RES_MR_GET, /* can dump */
    279
    280	RDMA_NLDEV_CMD_RES_PD_GET, /* can dump */
    281
    282	RDMA_NLDEV_CMD_GET_CHARDEV,
    283
    284	RDMA_NLDEV_CMD_STAT_SET,
    285
    286	RDMA_NLDEV_CMD_STAT_GET, /* can dump */
    287
    288	RDMA_NLDEV_CMD_STAT_DEL,
    289
    290	RDMA_NLDEV_CMD_RES_QP_GET_RAW,
    291
    292	RDMA_NLDEV_CMD_RES_CQ_GET_RAW,
    293
    294	RDMA_NLDEV_CMD_RES_MR_GET_RAW,
    295
    296	RDMA_NLDEV_CMD_RES_CTX_GET, /* can dump */
    297
    298	RDMA_NLDEV_CMD_RES_SRQ_GET, /* can dump */
    299
    300	RDMA_NLDEV_CMD_STAT_GET_STATUS,
    301
    302	RDMA_NLDEV_NUM_OPS
    303};
    304
    305enum rdma_nldev_print_type {
    306	RDMA_NLDEV_PRINT_TYPE_UNSPEC,
    307	RDMA_NLDEV_PRINT_TYPE_HEX,
    308};
    309
    310enum rdma_nldev_attr {
    311	/* don't change the order or add anything between, this is ABI! */
    312	RDMA_NLDEV_ATTR_UNSPEC,
    313
    314	/* Pad attribute for 64b alignment */
    315	RDMA_NLDEV_ATTR_PAD = RDMA_NLDEV_ATTR_UNSPEC,
    316
    317	/* Identifier for ib_device */
    318	RDMA_NLDEV_ATTR_DEV_INDEX,		/* u32 */
    319
    320	RDMA_NLDEV_ATTR_DEV_NAME,		/* string */
    321	/*
    322	 * Device index together with port index are identifiers
    323	 * for port/link properties.
    324	 *
    325	 * For RDMA_NLDEV_CMD_GET commamnd, port index will return number
    326	 * of available ports in ib_device, while for port specific operations,
    327	 * it will be real port index as it appears in sysfs. Port index follows
    328	 * sysfs notation and starts from 1 for the first port.
    329	 */
    330	RDMA_NLDEV_ATTR_PORT_INDEX,		/* u32 */
    331
    332	/*
    333	 * Device and port capabilities
    334	 *
    335	 * When used for port info, first 32-bits are CapabilityMask followed by
    336	 * 16-bit CapabilityMask2.
    337	 */
    338	RDMA_NLDEV_ATTR_CAP_FLAGS,		/* u64 */
    339
    340	/*
    341	 * FW version
    342	 */
    343	RDMA_NLDEV_ATTR_FW_VERSION,		/* string */
    344
    345	/*
    346	 * Node GUID (in host byte order) associated with the RDMA device.
    347	 */
    348	RDMA_NLDEV_ATTR_NODE_GUID,			/* u64 */
    349
    350	/*
    351	 * System image GUID (in host byte order) associated with
    352	 * this RDMA device and other devices which are part of a
    353	 * single system.
    354	 */
    355	RDMA_NLDEV_ATTR_SYS_IMAGE_GUID,		/* u64 */
    356
    357	/*
    358	 * Subnet prefix (in host byte order)
    359	 */
    360	RDMA_NLDEV_ATTR_SUBNET_PREFIX,		/* u64 */
    361
    362	/*
    363	 * Local Identifier (LID),
    364	 * According to IB specification, It is 16-bit address assigned
    365	 * by the Subnet Manager. Extended to be 32-bit for OmniPath users.
    366	 */
    367	RDMA_NLDEV_ATTR_LID,			/* u32 */
    368	RDMA_NLDEV_ATTR_SM_LID,			/* u32 */
    369
    370	/*
    371	 * LID mask control (LMC)
    372	 */
    373	RDMA_NLDEV_ATTR_LMC,			/* u8 */
    374
    375	RDMA_NLDEV_ATTR_PORT_STATE,		/* u8 */
    376	RDMA_NLDEV_ATTR_PORT_PHYS_STATE,	/* u8 */
    377
    378	RDMA_NLDEV_ATTR_DEV_NODE_TYPE,		/* u8 */
    379
    380	RDMA_NLDEV_ATTR_RES_SUMMARY,		/* nested table */
    381	RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY,	/* nested table */
    382	RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_NAME,	/* string */
    383	RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR,	/* u64 */
    384
    385	RDMA_NLDEV_ATTR_RES_QP,			/* nested table */
    386	RDMA_NLDEV_ATTR_RES_QP_ENTRY,		/* nested table */
    387	/*
    388	 * Local QPN
    389	 */
    390	RDMA_NLDEV_ATTR_RES_LQPN,		/* u32 */
    391	/*
    392	 * Remote QPN,
    393	 * Applicable for RC and UC only IBTA 11.2.5.3 QUERY QUEUE PAIR
    394	 */
    395	RDMA_NLDEV_ATTR_RES_RQPN,		/* u32 */
    396	/*
    397	 * Receive Queue PSN,
    398	 * Applicable for RC and UC only 11.2.5.3 QUERY QUEUE PAIR
    399	 */
    400	RDMA_NLDEV_ATTR_RES_RQ_PSN,		/* u32 */
    401	/*
    402	 * Send Queue PSN
    403	 */
    404	RDMA_NLDEV_ATTR_RES_SQ_PSN,		/* u32 */
    405	RDMA_NLDEV_ATTR_RES_PATH_MIG_STATE,	/* u8 */
    406	/*
    407	 * QP types as visible to RDMA/core, the reserved QPT
    408	 * are not exported through this interface.
    409	 */
    410	RDMA_NLDEV_ATTR_RES_TYPE,		/* u8 */
    411	RDMA_NLDEV_ATTR_RES_STATE,		/* u8 */
    412	/*
    413	 * Process ID which created object,
    414	 * in case of kernel origin, PID won't exist.
    415	 */
    416	RDMA_NLDEV_ATTR_RES_PID,		/* u32 */
    417	/*
    418	 * The name of process created following resource.
    419	 * It will exist only for kernel objects.
    420	 * For user created objects, the user is supposed
    421	 * to read /proc/PID/comm file.
    422	 */
    423	RDMA_NLDEV_ATTR_RES_KERN_NAME,		/* string */
    424
    425	RDMA_NLDEV_ATTR_RES_CM_ID,		/* nested table */
    426	RDMA_NLDEV_ATTR_RES_CM_ID_ENTRY,	/* nested table */
    427	/*
    428	 * rdma_cm_id port space.
    429	 */
    430	RDMA_NLDEV_ATTR_RES_PS,			/* u32 */
    431	/*
    432	 * Source and destination socket addresses
    433	 */
    434	RDMA_NLDEV_ATTR_RES_SRC_ADDR,		/* __kernel_sockaddr_storage */
    435	RDMA_NLDEV_ATTR_RES_DST_ADDR,		/* __kernel_sockaddr_storage */
    436
    437	RDMA_NLDEV_ATTR_RES_CQ,			/* nested table */
    438	RDMA_NLDEV_ATTR_RES_CQ_ENTRY,		/* nested table */
    439	RDMA_NLDEV_ATTR_RES_CQE,		/* u32 */
    440	RDMA_NLDEV_ATTR_RES_USECNT,		/* u64 */
    441	RDMA_NLDEV_ATTR_RES_POLL_CTX,		/* u8 */
    442
    443	RDMA_NLDEV_ATTR_RES_MR,			/* nested table */
    444	RDMA_NLDEV_ATTR_RES_MR_ENTRY,		/* nested table */
    445	RDMA_NLDEV_ATTR_RES_RKEY,		/* u32 */
    446	RDMA_NLDEV_ATTR_RES_LKEY,		/* u32 */
    447	RDMA_NLDEV_ATTR_RES_IOVA,		/* u64 */
    448	RDMA_NLDEV_ATTR_RES_MRLEN,		/* u64 */
    449
    450	RDMA_NLDEV_ATTR_RES_PD,			/* nested table */
    451	RDMA_NLDEV_ATTR_RES_PD_ENTRY,		/* nested table */
    452	RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY,	/* u32 */
    453	RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY,	/* u32 */
    454	/*
    455	 * Provides logical name and index of netdevice which is
    456	 * connected to physical port. This information is relevant
    457	 * for RoCE and iWARP.
    458	 *
    459	 * The netdevices which are associated with containers are
    460	 * supposed to be exported together with GID table once it
    461	 * will be exposed through the netlink. Because the
    462	 * associated netdevices are properties of GIDs.
    463	 */
    464	RDMA_NLDEV_ATTR_NDEV_INDEX,		/* u32 */
    465	RDMA_NLDEV_ATTR_NDEV_NAME,		/* string */
    466	/*
    467	 * driver-specific attributes.
    468	 */
    469	RDMA_NLDEV_ATTR_DRIVER,			/* nested table */
    470	RDMA_NLDEV_ATTR_DRIVER_ENTRY,		/* nested table */
    471	RDMA_NLDEV_ATTR_DRIVER_STRING,		/* string */
    472	/*
    473	 * u8 values from enum rdma_nldev_print_type
    474	 */
    475	RDMA_NLDEV_ATTR_DRIVER_PRINT_TYPE,	/* u8 */
    476	RDMA_NLDEV_ATTR_DRIVER_S32,		/* s32 */
    477	RDMA_NLDEV_ATTR_DRIVER_U32,		/* u32 */
    478	RDMA_NLDEV_ATTR_DRIVER_S64,		/* s64 */
    479	RDMA_NLDEV_ATTR_DRIVER_U64,		/* u64 */
    480
    481	/*
    482	 * Indexes to get/set secific entry,
    483	 * for QP use RDMA_NLDEV_ATTR_RES_LQPN
    484	 */
    485	RDMA_NLDEV_ATTR_RES_PDN,               /* u32 */
    486	RDMA_NLDEV_ATTR_RES_CQN,               /* u32 */
    487	RDMA_NLDEV_ATTR_RES_MRN,               /* u32 */
    488	RDMA_NLDEV_ATTR_RES_CM_IDN,            /* u32 */
    489	RDMA_NLDEV_ATTR_RES_CTXN,	       /* u32 */
    490	/*
    491	 * Identifies the rdma driver. eg: "rxe" or "siw"
    492	 */
    493	RDMA_NLDEV_ATTR_LINK_TYPE,		/* string */
    494
    495	/*
    496	 * net namespace mode for rdma subsystem:
    497	 * either shared or exclusive among multiple net namespaces.
    498	 */
    499	RDMA_NLDEV_SYS_ATTR_NETNS_MODE,		/* u8 */
    500	/*
    501	 * Device protocol, e.g. ib, iw, usnic, roce and opa
    502	 */
    503	RDMA_NLDEV_ATTR_DEV_PROTOCOL,		/* string */
    504
    505	/*
    506	 * File descriptor handle of the net namespace object
    507	 */
    508	RDMA_NLDEV_NET_NS_FD,			/* u32 */
    509	/*
    510	 * Information about a chardev.
    511	 * CHARDEV_TYPE is the name of the chardev ABI (ie uverbs, umad, etc)
    512	 * CHARDEV_ABI signals the ABI revision (historical)
    513	 * CHARDEV_NAME is the kernel name for the /dev/ file (no directory)
    514	 * CHARDEV is the 64 bit dev_t for the inode
    515	 */
    516	RDMA_NLDEV_ATTR_CHARDEV_TYPE,		/* string */
    517	RDMA_NLDEV_ATTR_CHARDEV_NAME,		/* string */
    518	RDMA_NLDEV_ATTR_CHARDEV_ABI,		/* u64 */
    519	RDMA_NLDEV_ATTR_CHARDEV,		/* u64 */
    520	RDMA_NLDEV_ATTR_UVERBS_DRIVER_ID,       /* u64 */
    521	/*
    522	 * Counter-specific attributes.
    523	 */
    524	RDMA_NLDEV_ATTR_STAT_MODE,		/* u32 */
    525	RDMA_NLDEV_ATTR_STAT_RES,		/* u32 */
    526	RDMA_NLDEV_ATTR_STAT_AUTO_MODE_MASK,	/* u32 */
    527	RDMA_NLDEV_ATTR_STAT_COUNTER,		/* nested table */
    528	RDMA_NLDEV_ATTR_STAT_COUNTER_ENTRY,	/* nested table */
    529	RDMA_NLDEV_ATTR_STAT_COUNTER_ID,	/* u32 */
    530	RDMA_NLDEV_ATTR_STAT_HWCOUNTERS,	/* nested table */
    531	RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY,	/* nested table */
    532	RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_NAME,	/* string */
    533	RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_VALUE,	/* u64 */
    534
    535	/*
    536	 * CQ adaptive moderatio (DIM)
    537	 */
    538	RDMA_NLDEV_ATTR_DEV_DIM,                /* u8 */
    539
    540	RDMA_NLDEV_ATTR_RES_RAW,	/* binary */
    541
    542	RDMA_NLDEV_ATTR_RES_CTX,		/* nested table */
    543	RDMA_NLDEV_ATTR_RES_CTX_ENTRY,		/* nested table */
    544
    545	RDMA_NLDEV_ATTR_RES_SRQ,		/* nested table */
    546	RDMA_NLDEV_ATTR_RES_SRQ_ENTRY,		/* nested table */
    547	RDMA_NLDEV_ATTR_RES_SRQN,		/* u32 */
    548
    549	RDMA_NLDEV_ATTR_MIN_RANGE,		/* u32 */
    550	RDMA_NLDEV_ATTR_MAX_RANGE,		/* u32 */
    551
    552	RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK,	/* u8 */
    553
    554	RDMA_NLDEV_ATTR_STAT_HWCOUNTER_INDEX,	/* u32 */
    555	RDMA_NLDEV_ATTR_STAT_HWCOUNTER_DYNAMIC, /* u8 */
    556
    557	/*
    558	 * Always the end
    559	 */
    560	RDMA_NLDEV_ATTR_MAX
    561};
    562
    563/*
    564 * Supported counter bind modes. All modes are mutual-exclusive.
    565 */
    566enum rdma_nl_counter_mode {
    567	RDMA_COUNTER_MODE_NONE,
    568
    569	/*
    570	 * A qp is bound with a counter automatically during initialization
    571	 * based on the auto mode (e.g., qp type, ...)
    572	 */
    573	RDMA_COUNTER_MODE_AUTO,
    574
    575	/*
    576	 * Which qp are bound with which counter is explicitly specified
    577	 * by the user
    578	 */
    579	RDMA_COUNTER_MODE_MANUAL,
    580
    581	/*
    582	 * Always the end
    583	 */
    584	RDMA_COUNTER_MODE_MAX,
    585};
    586
    587/*
    588 * Supported criteria in counter auto mode.
    589 * Currently only "qp type" is supported
    590 */
    591enum rdma_nl_counter_mask {
    592	RDMA_COUNTER_MASK_QP_TYPE = 1,
    593	RDMA_COUNTER_MASK_PID = 1 << 1,
    594};
    595#endif /* _UAPI_RDMA_NETLINK_H */