xref: /openbmc/linux/drivers/net/ethernet/netronome/nfp/nfp_abi.h (revision 3eb66e91a25497065c5322b1268cbc3953642227)
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