1*96de2506SJakub Kicinski /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 2*96de2506SJakub Kicinski /* Copyright (C) 2018 Netronome Systems, Inc. */ 30c693323SJakub Kicinski 40c693323SJakub Kicinski #ifndef __NFP_ABI__ 50c693323SJakub Kicinski #define __NFP_ABI__ 1 60c693323SJakub Kicinski 70c693323SJakub Kicinski #include <linux/types.h> 80c693323SJakub Kicinski 90c693323SJakub Kicinski #define NFP_MBOX_SYM_NAME "_abi_nfd_pf%u_mbox" 100c693323SJakub Kicinski #define NFP_MBOX_SYM_MIN_SIZE 16 /* When no data needed */ 110c693323SJakub Kicinski 120c693323SJakub Kicinski #define NFP_MBOX_CMD 0x00 130c693323SJakub Kicinski #define NFP_MBOX_RET 0x04 140c693323SJakub Kicinski #define NFP_MBOX_DATA_LEN 0x08 150c693323SJakub Kicinski #define NFP_MBOX_RESERVED 0x0c 160c693323SJakub Kicinski #define NFP_MBOX_DATA 0x10 170c693323SJakub Kicinski 180c693323SJakub Kicinski /** 190c693323SJakub Kicinski * enum nfp_mbox_cmd - PF mailbox commands 200c693323SJakub Kicinski * 210c693323SJakub Kicinski * @NFP_MBOX_NO_CMD: null command 220c693323SJakub Kicinski * Used to indicate previous command has finished. 23a0d163f4SJakub Kicinski * 24a0d163f4SJakub Kicinski * @NFP_MBOX_POOL_GET: get shared buffer pool info/config 25a0d163f4SJakub Kicinski * Input - struct nfp_shared_buf_pool_id 26a0d163f4SJakub Kicinski * Output - struct nfp_shared_buf_pool_info_get 27a0d163f4SJakub Kicinski * 28a0d163f4SJakub Kicinski * @NFP_MBOX_POOL_SET: set shared buffer pool info/config 29a0d163f4SJakub Kicinski * Input - struct nfp_shared_buf_pool_info_set 30a0d163f4SJakub Kicinski * Output - None 31055ee0d6SJakub Kicinski * 32055ee0d6SJakub Kicinski * @NFP_MBOX_PCIE_ABM_ENABLE: enable PCIe-side advanced buffer management 33055ee0d6SJakub Kicinski * Enable advanced buffer management of the PCIe block. If ABM is disabled 34055ee0d6SJakub Kicinski * PCIe block maintains a very short queue of buffers and does tail drop. 35055ee0d6SJakub Kicinski * ABM allows more advanced buffering and priority control. 36055ee0d6SJakub Kicinski * Input - None 37055ee0d6SJakub Kicinski * Output - None 38055ee0d6SJakub Kicinski * 39055ee0d6SJakub Kicinski * @NFP_MBOX_PCIE_ABM_DISABLE: disable PCIe-side advanced buffer management 40055ee0d6SJakub Kicinski * Input - None 41055ee0d6SJakub Kicinski * Output - None 420c693323SJakub Kicinski */ 430c693323SJakub Kicinski enum nfp_mbox_cmd { 440c693323SJakub Kicinski NFP_MBOX_NO_CMD = 0x00, 45a0d163f4SJakub Kicinski 46a0d163f4SJakub Kicinski NFP_MBOX_POOL_GET = 0x01, 47a0d163f4SJakub Kicinski NFP_MBOX_POOL_SET = 0x02, 48055ee0d6SJakub Kicinski 49055ee0d6SJakub Kicinski NFP_MBOX_PCIE_ABM_ENABLE = 0x03, 50055ee0d6SJakub Kicinski NFP_MBOX_PCIE_ABM_DISABLE = 0x04, 51a0d163f4SJakub Kicinski }; 52a0d163f4SJakub Kicinski 53a0d163f4SJakub Kicinski #define NFP_SHARED_BUF_COUNT_SYM_NAME "_abi_nfd_pf%u_sb_cnt" 54a0d163f4SJakub Kicinski #define NFP_SHARED_BUF_TABLE_SYM_NAME "_abi_nfd_pf%u_sb_tbl" 55a0d163f4SJakub Kicinski 56a0d163f4SJakub Kicinski /** 57a0d163f4SJakub Kicinski * struct nfp_shared_buf - NFP shared buffer description 58a0d163f4SJakub Kicinski * @id: numerical user-visible id of the shared buffer 59a0d163f4SJakub Kicinski * @size: size in bytes of the buffer 60a0d163f4SJakub Kicinski * @ingress_pools_count: number of ingress pools 61a0d163f4SJakub Kicinski * @egress_pools_count: number of egress pools 62a0d163f4SJakub Kicinski * @ingress_tc_count: number of ingress trafic classes 63a0d163f4SJakub Kicinski * @egress_tc_count: number of egress trafic classes 64a0d163f4SJakub Kicinski * @pool_size_unit: pool size may be in credits, each credit is 65a0d163f4SJakub Kicinski * @pool_size_unit bytes 66a0d163f4SJakub Kicinski */ 67a0d163f4SJakub Kicinski struct nfp_shared_buf { 68a0d163f4SJakub Kicinski __le32 id; 69a0d163f4SJakub Kicinski __le32 size; 70a0d163f4SJakub Kicinski __le16 ingress_pools_count; 71a0d163f4SJakub Kicinski __le16 egress_pools_count; 72a0d163f4SJakub Kicinski __le16 ingress_tc_count; 73a0d163f4SJakub Kicinski __le16 egress_tc_count; 74a0d163f4SJakub Kicinski 75a0d163f4SJakub Kicinski __le32 pool_size_unit; 76a0d163f4SJakub Kicinski }; 77a0d163f4SJakub Kicinski 78a0d163f4SJakub Kicinski /** 79a0d163f4SJakub Kicinski * struct nfp_shared_buf_pool_id - shared buffer pool identification 80a0d163f4SJakub Kicinski * @shared_buf: shared buffer id 81a0d163f4SJakub Kicinski * @pool: pool index 82a0d163f4SJakub Kicinski */ 83a0d163f4SJakub Kicinski struct nfp_shared_buf_pool_id { 84a0d163f4SJakub Kicinski __le32 shared_buf; 85a0d163f4SJakub Kicinski __le32 pool; 86a0d163f4SJakub Kicinski }; 87a0d163f4SJakub Kicinski 88a0d163f4SJakub Kicinski /** 89a0d163f4SJakub Kicinski * struct nfp_shared_buf_pool_info_get - struct devlink_sb_pool_info mirror 90a0d163f4SJakub Kicinski * @pool_type: one of enum devlink_sb_pool_type 91a0d163f4SJakub Kicinski * @size: pool size in units of SB's @pool_size_unit 92a0d163f4SJakub Kicinski * @threshold_type: one of enum devlink_sb_threshold_type 93a0d163f4SJakub Kicinski */ 94a0d163f4SJakub Kicinski struct nfp_shared_buf_pool_info_get { 95a0d163f4SJakub Kicinski __le32 pool_type; 96a0d163f4SJakub Kicinski __le32 size; 97a0d163f4SJakub Kicinski __le32 threshold_type; 98a0d163f4SJakub Kicinski }; 99a0d163f4SJakub Kicinski 100a0d163f4SJakub Kicinski /** 101a0d163f4SJakub Kicinski * struct nfp_shared_buf_pool_info_set - packed args of sb_pool_set 102a0d163f4SJakub Kicinski * @id: pool identification info 103a0d163f4SJakub Kicinski * @size: pool size in units of SB's @pool_size_unit 104a0d163f4SJakub Kicinski * @threshold_type: one of enum devlink_sb_threshold_type 105a0d163f4SJakub Kicinski */ 106a0d163f4SJakub Kicinski struct nfp_shared_buf_pool_info_set { 107a0d163f4SJakub Kicinski struct nfp_shared_buf_pool_id id; 108a0d163f4SJakub Kicinski __le32 size; 109a0d163f4SJakub Kicinski __le32 threshold_type; 1100c693323SJakub Kicinski }; 1110c693323SJakub Kicinski 1120c693323SJakub Kicinski #endif 113