162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 262306a36Sopenharmony_ci/* Copyright (C) 2018 Netronome Systems, Inc. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef __NFP_ABI__ 562306a36Sopenharmony_ci#define __NFP_ABI__ 1 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/types.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#define NFP_MBOX_SYM_NAME "_abi_nfd_pf%u_mbox" 1062306a36Sopenharmony_ci#define NFP_MBOX_SYM_MIN_SIZE 16 /* When no data needed */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define NFP_MBOX_CMD 0x00 1362306a36Sopenharmony_ci#define NFP_MBOX_RET 0x04 1462306a36Sopenharmony_ci#define NFP_MBOX_DATA_LEN 0x08 1562306a36Sopenharmony_ci#define NFP_MBOX_RESERVED 0x0c 1662306a36Sopenharmony_ci#define NFP_MBOX_DATA 0x10 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/** 1962306a36Sopenharmony_ci * enum nfp_mbox_cmd - PF mailbox commands 2062306a36Sopenharmony_ci * 2162306a36Sopenharmony_ci * @NFP_MBOX_NO_CMD: null command 2262306a36Sopenharmony_ci * Used to indicate previous command has finished. 2362306a36Sopenharmony_ci * 2462306a36Sopenharmony_ci * @NFP_MBOX_POOL_GET: get shared buffer pool info/config 2562306a36Sopenharmony_ci * Input - struct nfp_shared_buf_pool_id 2662306a36Sopenharmony_ci * Output - struct nfp_shared_buf_pool_info_get 2762306a36Sopenharmony_ci * 2862306a36Sopenharmony_ci * @NFP_MBOX_POOL_SET: set shared buffer pool info/config 2962306a36Sopenharmony_ci * Input - struct nfp_shared_buf_pool_info_set 3062306a36Sopenharmony_ci * Output - None 3162306a36Sopenharmony_ci * 3262306a36Sopenharmony_ci * @NFP_MBOX_PCIE_ABM_ENABLE: enable PCIe-side advanced buffer management 3362306a36Sopenharmony_ci * Enable advanced buffer management of the PCIe block. If ABM is disabled 3462306a36Sopenharmony_ci * PCIe block maintains a very short queue of buffers and does tail drop. 3562306a36Sopenharmony_ci * ABM allows more advanced buffering and priority control. 3662306a36Sopenharmony_ci * Input - None 3762306a36Sopenharmony_ci * Output - None 3862306a36Sopenharmony_ci * 3962306a36Sopenharmony_ci * @NFP_MBOX_PCIE_ABM_DISABLE: disable PCIe-side advanced buffer management 4062306a36Sopenharmony_ci * Input - None 4162306a36Sopenharmony_ci * Output - None 4262306a36Sopenharmony_ci */ 4362306a36Sopenharmony_cienum nfp_mbox_cmd { 4462306a36Sopenharmony_ci NFP_MBOX_NO_CMD = 0x00, 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci NFP_MBOX_POOL_GET = 0x01, 4762306a36Sopenharmony_ci NFP_MBOX_POOL_SET = 0x02, 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci NFP_MBOX_PCIE_ABM_ENABLE = 0x03, 5062306a36Sopenharmony_ci NFP_MBOX_PCIE_ABM_DISABLE = 0x04, 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define NFP_SHARED_BUF_COUNT_SYM_NAME "_abi_nfd_pf%u_sb_cnt" 5462306a36Sopenharmony_ci#define NFP_SHARED_BUF_TABLE_SYM_NAME "_abi_nfd_pf%u_sb_tbl" 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/** 5762306a36Sopenharmony_ci * struct nfp_shared_buf - NFP shared buffer description 5862306a36Sopenharmony_ci * @id: numerical user-visible id of the shared buffer 5962306a36Sopenharmony_ci * @size: size in bytes of the buffer 6062306a36Sopenharmony_ci * @ingress_pools_count: number of ingress pools 6162306a36Sopenharmony_ci * @egress_pools_count: number of egress pools 6262306a36Sopenharmony_ci * @ingress_tc_count: number of ingress trafic classes 6362306a36Sopenharmony_ci * @egress_tc_count: number of egress trafic classes 6462306a36Sopenharmony_ci * @pool_size_unit: pool size may be in credits, each credit is 6562306a36Sopenharmony_ci * @pool_size_unit bytes 6662306a36Sopenharmony_ci */ 6762306a36Sopenharmony_cistruct nfp_shared_buf { 6862306a36Sopenharmony_ci __le32 id; 6962306a36Sopenharmony_ci __le32 size; 7062306a36Sopenharmony_ci __le16 ingress_pools_count; 7162306a36Sopenharmony_ci __le16 egress_pools_count; 7262306a36Sopenharmony_ci __le16 ingress_tc_count; 7362306a36Sopenharmony_ci __le16 egress_tc_count; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci __le32 pool_size_unit; 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/** 7962306a36Sopenharmony_ci * struct nfp_shared_buf_pool_id - shared buffer pool identification 8062306a36Sopenharmony_ci * @shared_buf: shared buffer id 8162306a36Sopenharmony_ci * @pool: pool index 8262306a36Sopenharmony_ci */ 8362306a36Sopenharmony_cistruct nfp_shared_buf_pool_id { 8462306a36Sopenharmony_ci __le32 shared_buf; 8562306a36Sopenharmony_ci __le32 pool; 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/** 8962306a36Sopenharmony_ci * struct nfp_shared_buf_pool_info_get - struct devlink_sb_pool_info mirror 9062306a36Sopenharmony_ci * @pool_type: one of enum devlink_sb_pool_type 9162306a36Sopenharmony_ci * @size: pool size in units of SB's @pool_size_unit 9262306a36Sopenharmony_ci * @threshold_type: one of enum devlink_sb_threshold_type 9362306a36Sopenharmony_ci */ 9462306a36Sopenharmony_cistruct nfp_shared_buf_pool_info_get { 9562306a36Sopenharmony_ci __le32 pool_type; 9662306a36Sopenharmony_ci __le32 size; 9762306a36Sopenharmony_ci __le32 threshold_type; 9862306a36Sopenharmony_ci}; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci/** 10162306a36Sopenharmony_ci * struct nfp_shared_buf_pool_info_set - packed args of sb_pool_set 10262306a36Sopenharmony_ci * @id: pool identification info 10362306a36Sopenharmony_ci * @size: pool size in units of SB's @pool_size_unit 10462306a36Sopenharmony_ci * @threshold_type: one of enum devlink_sb_threshold_type 10562306a36Sopenharmony_ci */ 10662306a36Sopenharmony_cistruct nfp_shared_buf_pool_info_set { 10762306a36Sopenharmony_ci struct nfp_shared_buf_pool_id id; 10862306a36Sopenharmony_ci __le32 size; 10962306a36Sopenharmony_ci __le32 threshold_type; 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#endif 113