1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2*4882a593Smuzhiyun /* Copyright (C) 2018 Netronome Systems, Inc. */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef __NFP_ABI__ 5*4882a593Smuzhiyun #define __NFP_ABI__ 1 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <linux/types.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define NFP_MBOX_SYM_NAME "_abi_nfd_pf%u_mbox" 10*4882a593Smuzhiyun #define NFP_MBOX_SYM_MIN_SIZE 16 /* When no data needed */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define NFP_MBOX_CMD 0x00 13*4882a593Smuzhiyun #define NFP_MBOX_RET 0x04 14*4882a593Smuzhiyun #define NFP_MBOX_DATA_LEN 0x08 15*4882a593Smuzhiyun #define NFP_MBOX_RESERVED 0x0c 16*4882a593Smuzhiyun #define NFP_MBOX_DATA 0x10 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /** 19*4882a593Smuzhiyun * enum nfp_mbox_cmd - PF mailbox commands 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * @NFP_MBOX_NO_CMD: null command 22*4882a593Smuzhiyun * Used to indicate previous command has finished. 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * @NFP_MBOX_POOL_GET: get shared buffer pool info/config 25*4882a593Smuzhiyun * Input - struct nfp_shared_buf_pool_id 26*4882a593Smuzhiyun * Output - struct nfp_shared_buf_pool_info_get 27*4882a593Smuzhiyun * 28*4882a593Smuzhiyun * @NFP_MBOX_POOL_SET: set shared buffer pool info/config 29*4882a593Smuzhiyun * Input - struct nfp_shared_buf_pool_info_set 30*4882a593Smuzhiyun * Output - None 31*4882a593Smuzhiyun * 32*4882a593Smuzhiyun * @NFP_MBOX_PCIE_ABM_ENABLE: enable PCIe-side advanced buffer management 33*4882a593Smuzhiyun * Enable advanced buffer management of the PCIe block. If ABM is disabled 34*4882a593Smuzhiyun * PCIe block maintains a very short queue of buffers and does tail drop. 35*4882a593Smuzhiyun * ABM allows more advanced buffering and priority control. 36*4882a593Smuzhiyun * Input - None 37*4882a593Smuzhiyun * Output - None 38*4882a593Smuzhiyun * 39*4882a593Smuzhiyun * @NFP_MBOX_PCIE_ABM_DISABLE: disable PCIe-side advanced buffer management 40*4882a593Smuzhiyun * Input - None 41*4882a593Smuzhiyun * Output - None 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun enum nfp_mbox_cmd { 44*4882a593Smuzhiyun NFP_MBOX_NO_CMD = 0x00, 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun NFP_MBOX_POOL_GET = 0x01, 47*4882a593Smuzhiyun NFP_MBOX_POOL_SET = 0x02, 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun NFP_MBOX_PCIE_ABM_ENABLE = 0x03, 50*4882a593Smuzhiyun NFP_MBOX_PCIE_ABM_DISABLE = 0x04, 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define NFP_SHARED_BUF_COUNT_SYM_NAME "_abi_nfd_pf%u_sb_cnt" 54*4882a593Smuzhiyun #define NFP_SHARED_BUF_TABLE_SYM_NAME "_abi_nfd_pf%u_sb_tbl" 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /** 57*4882a593Smuzhiyun * struct nfp_shared_buf - NFP shared buffer description 58*4882a593Smuzhiyun * @id: numerical user-visible id of the shared buffer 59*4882a593Smuzhiyun * @size: size in bytes of the buffer 60*4882a593Smuzhiyun * @ingress_pools_count: number of ingress pools 61*4882a593Smuzhiyun * @egress_pools_count: number of egress pools 62*4882a593Smuzhiyun * @ingress_tc_count: number of ingress trafic classes 63*4882a593Smuzhiyun * @egress_tc_count: number of egress trafic classes 64*4882a593Smuzhiyun * @pool_size_unit: pool size may be in credits, each credit is 65*4882a593Smuzhiyun * @pool_size_unit bytes 66*4882a593Smuzhiyun */ 67*4882a593Smuzhiyun struct nfp_shared_buf { 68*4882a593Smuzhiyun __le32 id; 69*4882a593Smuzhiyun __le32 size; 70*4882a593Smuzhiyun __le16 ingress_pools_count; 71*4882a593Smuzhiyun __le16 egress_pools_count; 72*4882a593Smuzhiyun __le16 ingress_tc_count; 73*4882a593Smuzhiyun __le16 egress_tc_count; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun __le32 pool_size_unit; 76*4882a593Smuzhiyun }; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /** 79*4882a593Smuzhiyun * struct nfp_shared_buf_pool_id - shared buffer pool identification 80*4882a593Smuzhiyun * @shared_buf: shared buffer id 81*4882a593Smuzhiyun * @pool: pool index 82*4882a593Smuzhiyun */ 83*4882a593Smuzhiyun struct nfp_shared_buf_pool_id { 84*4882a593Smuzhiyun __le32 shared_buf; 85*4882a593Smuzhiyun __le32 pool; 86*4882a593Smuzhiyun }; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /** 89*4882a593Smuzhiyun * struct nfp_shared_buf_pool_info_get - struct devlink_sb_pool_info mirror 90*4882a593Smuzhiyun * @pool_type: one of enum devlink_sb_pool_type 91*4882a593Smuzhiyun * @size: pool size in units of SB's @pool_size_unit 92*4882a593Smuzhiyun * @threshold_type: one of enum devlink_sb_threshold_type 93*4882a593Smuzhiyun */ 94*4882a593Smuzhiyun struct nfp_shared_buf_pool_info_get { 95*4882a593Smuzhiyun __le32 pool_type; 96*4882a593Smuzhiyun __le32 size; 97*4882a593Smuzhiyun __le32 threshold_type; 98*4882a593Smuzhiyun }; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /** 101*4882a593Smuzhiyun * struct nfp_shared_buf_pool_info_set - packed args of sb_pool_set 102*4882a593Smuzhiyun * @id: pool identification info 103*4882a593Smuzhiyun * @size: pool size in units of SB's @pool_size_unit 104*4882a593Smuzhiyun * @threshold_type: one of enum devlink_sb_threshold_type 105*4882a593Smuzhiyun */ 106*4882a593Smuzhiyun struct nfp_shared_buf_pool_info_set { 107*4882a593Smuzhiyun struct nfp_shared_buf_pool_id id; 108*4882a593Smuzhiyun __le32 size; 109*4882a593Smuzhiyun __le32 threshold_type; 110*4882a593Smuzhiyun }; 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #endif 113