xref: /dpdk/drivers/bus/fslmc/mc/fsl_dpci_cmd.h (revision b4a63e605df40be963e11f1c2f23dfca4c5c4929)
1131a75b6SHemant Agrawal /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
208464d29SNipun Gupta  *
308464d29SNipun Gupta  * Copyright 2013-2016 Freescale Semiconductor Inc.
408464d29SNipun Gupta  *
508464d29SNipun Gupta  */
608464d29SNipun Gupta #ifndef _FSL_DPCI_CMD_H
708464d29SNipun Gupta #define _FSL_DPCI_CMD_H
808464d29SNipun Gupta 
908464d29SNipun Gupta /* DPCI Version */
1008464d29SNipun Gupta #define DPCI_VER_MAJOR			3
11*b4a63e60SHemant Agrawal #define DPCI_VER_MINOR			4
1208464d29SNipun Gupta 
1316bbc98aSShreyansh Jain #define DPCI_CMD_BASE_VERSION		1
1416bbc98aSShreyansh Jain #define DPCI_CMD_BASE_VERSION_V2	2
1516bbc98aSShreyansh Jain #define DPCI_CMD_ID_OFFSET		4
1616bbc98aSShreyansh Jain 
1716bbc98aSShreyansh Jain #define DPCI_CMD_V1(id) ((id << DPCI_CMD_ID_OFFSET) | DPCI_CMD_BASE_VERSION)
1816bbc98aSShreyansh Jain #define DPCI_CMD_V2(id) ((id << DPCI_CMD_ID_OFFSET) | DPCI_CMD_BASE_VERSION_V2)
1916bbc98aSShreyansh Jain 
2008464d29SNipun Gupta /* Command IDs */
2116bbc98aSShreyansh Jain #define DPCI_CMDID_CLOSE		DPCI_CMD_V1(0x800)
2216bbc98aSShreyansh Jain #define DPCI_CMDID_OPEN			DPCI_CMD_V1(0x807)
2316bbc98aSShreyansh Jain #define DPCI_CMDID_CREATE		DPCI_CMD_V2(0x907)
2416bbc98aSShreyansh Jain #define DPCI_CMDID_DESTROY		DPCI_CMD_V1(0x987)
2516bbc98aSShreyansh Jain #define DPCI_CMDID_GET_API_VERSION	DPCI_CMD_V1(0xa07)
2608464d29SNipun Gupta 
2716bbc98aSShreyansh Jain #define DPCI_CMDID_ENABLE		DPCI_CMD_V1(0x002)
2816bbc98aSShreyansh Jain #define DPCI_CMDID_DISABLE		DPCI_CMD_V1(0x003)
2916bbc98aSShreyansh Jain #define DPCI_CMDID_GET_ATTR		DPCI_CMD_V1(0x004)
3016bbc98aSShreyansh Jain #define DPCI_CMDID_RESET		DPCI_CMD_V1(0x005)
3116bbc98aSShreyansh Jain #define DPCI_CMDID_IS_ENABLED		DPCI_CMD_V1(0x006)
3208464d29SNipun Gupta 
3316bbc98aSShreyansh Jain #define DPCI_CMDID_SET_RX_QUEUE		DPCI_CMD_V1(0x0e0)
3416bbc98aSShreyansh Jain #define DPCI_CMDID_GET_LINK_STATE	DPCI_CMD_V1(0x0e1)
3516bbc98aSShreyansh Jain #define DPCI_CMDID_GET_PEER_ATTR	DPCI_CMD_V1(0x0e2)
3616bbc98aSShreyansh Jain #define DPCI_CMDID_GET_RX_QUEUE		DPCI_CMD_V1(0x0e3)
3716bbc98aSShreyansh Jain #define DPCI_CMDID_GET_TX_QUEUE		DPCI_CMD_V1(0x0e4)
38*b4a63e60SHemant Agrawal #define DPCI_CMDID_SET_OPR		DPCI_CMD_V1(0x0e5)
39*b4a63e60SHemant Agrawal #define DPCI_CMDID_GET_OPR		DPCI_CMD_V1(0x0e6)
4008464d29SNipun Gupta 
4116bbc98aSShreyansh Jain /* Macros for accessing command fields smaller than 1byte */
4216bbc98aSShreyansh Jain #define DPCI_MASK(field)        \
4316bbc98aSShreyansh Jain 	GENMASK(DPCI_##field##_SHIFT + DPCI_##field##_SIZE - 1, \
4416bbc98aSShreyansh Jain 		DPCI_##field##_SHIFT)
4516bbc98aSShreyansh Jain #define dpci_set_field(var, field, val) \
4616bbc98aSShreyansh Jain 	((var) |= (((val) << DPCI_##field##_SHIFT) & DPCI_MASK(field)))
4716bbc98aSShreyansh Jain #define dpci_get_field(var, field)      \
4816bbc98aSShreyansh Jain 	(((var) & DPCI_MASK(field)) >> DPCI_##field##_SHIFT)
4908464d29SNipun Gupta 
5016bbc98aSShreyansh Jain #pragma pack(push, 1)
5116bbc98aSShreyansh Jain struct dpci_cmd_open {
5216bbc98aSShreyansh Jain 	uint32_t dpci_id;
5316bbc98aSShreyansh Jain };
5408464d29SNipun Gupta 
5516bbc98aSShreyansh Jain struct dpci_cmd_create {
5616bbc98aSShreyansh Jain 	uint8_t num_of_priorities;
5716bbc98aSShreyansh Jain 	uint8_t pad[15];
5816bbc98aSShreyansh Jain 	uint32_t options;
5916bbc98aSShreyansh Jain };
6008464d29SNipun Gupta 
6116bbc98aSShreyansh Jain struct dpci_cmd_destroy {
6216bbc98aSShreyansh Jain 	uint32_t dpci_id;
6316bbc98aSShreyansh Jain };
6408464d29SNipun Gupta 
6516bbc98aSShreyansh Jain #define DPCI_ENABLE_SHIFT	0
6616bbc98aSShreyansh Jain #define DPCI_ENABLE_SIZE	1
6708464d29SNipun Gupta 
6816bbc98aSShreyansh Jain struct dpci_rsp_is_enabled {
6916bbc98aSShreyansh Jain 	/* only the LSB bit */
7016bbc98aSShreyansh Jain 	uint8_t en;
7116bbc98aSShreyansh Jain };
7208464d29SNipun Gupta 
7316bbc98aSShreyansh Jain struct dpci_rsp_get_attr {
7416bbc98aSShreyansh Jain 	uint32_t id;
7516bbc98aSShreyansh Jain 	uint16_t pad;
7616bbc98aSShreyansh Jain 	uint8_t num_of_priorities;
7716bbc98aSShreyansh Jain };
7808464d29SNipun Gupta 
7916bbc98aSShreyansh Jain struct dpci_rsp_get_peer_attr {
8016bbc98aSShreyansh Jain 	uint32_t id;
8116bbc98aSShreyansh Jain 	uint32_t pad;
8216bbc98aSShreyansh Jain 	uint8_t num_of_priorities;
8316bbc98aSShreyansh Jain };
8408464d29SNipun Gupta 
8516bbc98aSShreyansh Jain #define DPCI_UP_SHIFT	0
8616bbc98aSShreyansh Jain #define DPCI_UP_SIZE	1
8708464d29SNipun Gupta 
8816bbc98aSShreyansh Jain struct dpci_rsp_get_link_state {
8916bbc98aSShreyansh Jain 	/* only the LSB bit */
9016bbc98aSShreyansh Jain 	uint8_t up;
9116bbc98aSShreyansh Jain };
9208464d29SNipun Gupta 
9316bbc98aSShreyansh Jain #define DPCI_DEST_TYPE_SHIFT	0
9416bbc98aSShreyansh Jain #define DPCI_DEST_TYPE_SIZE	4
95*b4a63e60SHemant Agrawal #define DPCI_ORDER_PRESERVATION_SHIFT	4
96*b4a63e60SHemant Agrawal #define DPCI_ORDER_PRESERVATION_SIZE	1
9708464d29SNipun Gupta 
9816bbc98aSShreyansh Jain struct dpci_cmd_set_rx_queue {
9916bbc98aSShreyansh Jain 	uint32_t dest_id;
10016bbc98aSShreyansh Jain 	uint8_t dest_priority;
10116bbc98aSShreyansh Jain 	uint8_t priority;
10216bbc98aSShreyansh Jain 	/* from LSB: dest_type:4 */
10316bbc98aSShreyansh Jain 	uint8_t dest_type;
10416bbc98aSShreyansh Jain 	uint8_t pad;
10516bbc98aSShreyansh Jain 	uint64_t user_ctx;
10616bbc98aSShreyansh Jain 	uint32_t options;
10716bbc98aSShreyansh Jain };
10808464d29SNipun Gupta 
10916bbc98aSShreyansh Jain struct dpci_cmd_get_queue {
11016bbc98aSShreyansh Jain 	uint8_t pad[5];
11116bbc98aSShreyansh Jain 	uint8_t priority;
11216bbc98aSShreyansh Jain };
11308464d29SNipun Gupta 
11416bbc98aSShreyansh Jain struct dpci_rsp_get_rx_queue {
11516bbc98aSShreyansh Jain 	uint32_t dest_id;
11616bbc98aSShreyansh Jain 	uint8_t dest_priority;
11716bbc98aSShreyansh Jain 	uint8_t pad;
11816bbc98aSShreyansh Jain 	/* from LSB: dest_type:4 */
11916bbc98aSShreyansh Jain 	uint8_t dest_type;
12016bbc98aSShreyansh Jain 	uint8_t pad1;
12116bbc98aSShreyansh Jain 	uint64_t user_ctx;
12216bbc98aSShreyansh Jain 	uint32_t fqid;
12316bbc98aSShreyansh Jain };
12416bbc98aSShreyansh Jain 
12516bbc98aSShreyansh Jain struct dpci_rsp_get_tx_queue {
12616bbc98aSShreyansh Jain 	uint32_t pad;
12716bbc98aSShreyansh Jain 	uint32_t fqid;
12816bbc98aSShreyansh Jain };
12916bbc98aSShreyansh Jain 
13016bbc98aSShreyansh Jain struct dpci_rsp_get_api_version {
13116bbc98aSShreyansh Jain 	uint16_t major;
13216bbc98aSShreyansh Jain 	uint16_t minor;
13316bbc98aSShreyansh Jain };
13416bbc98aSShreyansh Jain 
135*b4a63e60SHemant Agrawal struct dpci_cmd_set_opr {
136*b4a63e60SHemant Agrawal 	uint16_t pad0;
137*b4a63e60SHemant Agrawal 	uint8_t index;
138*b4a63e60SHemant Agrawal 	uint8_t options;
139*b4a63e60SHemant Agrawal 	uint8_t pad1[7];
140*b4a63e60SHemant Agrawal 	uint8_t oloe;
141*b4a63e60SHemant Agrawal 	uint8_t oeane;
142*b4a63e60SHemant Agrawal 	uint8_t olws;
143*b4a63e60SHemant Agrawal 	uint8_t oa;
144*b4a63e60SHemant Agrawal 	uint8_t oprrws;
145*b4a63e60SHemant Agrawal };
146*b4a63e60SHemant Agrawal 
147*b4a63e60SHemant Agrawal struct dpci_cmd_get_opr {
148*b4a63e60SHemant Agrawal 	uint16_t pad;
149*b4a63e60SHemant Agrawal 	uint8_t index;
150*b4a63e60SHemant Agrawal };
151*b4a63e60SHemant Agrawal 
152*b4a63e60SHemant Agrawal #define DPCI_RIP_SHIFT		0
153*b4a63e60SHemant Agrawal #define DPCI_RIP_SIZE		1
154*b4a63e60SHemant Agrawal #define DPCI_OPR_ENABLE_SHIFT	1
155*b4a63e60SHemant Agrawal #define DPCI_OPR_ENABLE_SIZE	1
156*b4a63e60SHemant Agrawal #define DPCI_TSEQ_NLIS_SHIFT	0
157*b4a63e60SHemant Agrawal #define DPCI_TSEQ_NLIS_SIZE	1
158*b4a63e60SHemant Agrawal #define DPCI_HSEQ_NLIS_SHIFT	0
159*b4a63e60SHemant Agrawal #define DPCI_HSEQ_NLIS_SIZE	1
160*b4a63e60SHemant Agrawal 
161*b4a63e60SHemant Agrawal struct dpci_rsp_get_opr {
162*b4a63e60SHemant Agrawal 	uint64_t pad0;
163*b4a63e60SHemant Agrawal 	/* from LSB: rip:1 enable:1 */
164*b4a63e60SHemant Agrawal 	uint8_t flags;
165*b4a63e60SHemant Agrawal 	uint16_t pad1;
166*b4a63e60SHemant Agrawal 	uint8_t oloe;
167*b4a63e60SHemant Agrawal 	uint8_t oeane;
168*b4a63e60SHemant Agrawal 	uint8_t olws;
169*b4a63e60SHemant Agrawal 	uint8_t oa;
170*b4a63e60SHemant Agrawal 	uint8_t oprrws;
171*b4a63e60SHemant Agrawal 	uint16_t nesn;
172*b4a63e60SHemant Agrawal 	uint16_t pad8;
173*b4a63e60SHemant Agrawal 	uint16_t ndsn;
174*b4a63e60SHemant Agrawal 	uint16_t pad2;
175*b4a63e60SHemant Agrawal 	uint16_t ea_tseq;
176*b4a63e60SHemant Agrawal 	/* only the LSB */
177*b4a63e60SHemant Agrawal 	uint8_t tseq_nlis;
178*b4a63e60SHemant Agrawal 	uint8_t pad3;
179*b4a63e60SHemant Agrawal 	uint16_t ea_hseq;
180*b4a63e60SHemant Agrawal 	/* only the LSB */
181*b4a63e60SHemant Agrawal 	uint8_t hseq_nlis;
182*b4a63e60SHemant Agrawal 	uint8_t pad4;
183*b4a63e60SHemant Agrawal 	uint16_t ea_hptr;
184*b4a63e60SHemant Agrawal 	uint16_t pad5;
185*b4a63e60SHemant Agrawal 	uint16_t ea_tptr;
186*b4a63e60SHemant Agrawal 	uint16_t pad6;
187*b4a63e60SHemant Agrawal 	uint16_t opr_vid;
188*b4a63e60SHemant Agrawal 	uint16_t pad7;
189*b4a63e60SHemant Agrawal 	uint16_t opr_id;
190*b4a63e60SHemant Agrawal };
19116bbc98aSShreyansh Jain #pragma pack(pop)
19208464d29SNipun Gupta #endif /* _FSL_DPCI_CMD_H */
193