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