xref: /linux/drivers/net/ethernet/intel/ice/ice_sbq_cmd.h (revision fff4ed70ca9bbd4ffb5026803b7d3a880406e493)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2021, Intel Corporation. */
3 
4 #ifndef _ICE_SBQ_CMD_H_
5 #define _ICE_SBQ_CMD_H_
6 
7 /* This header file defines the Sideband Queue commands, error codes and
8  * descriptor format. It is shared between Firmware and Software.
9  */
10 
11 /* Sideband Queue command structure and opcodes */
12 enum ice_sbq_opc {
13 	/* Sideband Queue commands */
14 	ice_sbq_opc_neigh_dev_req			= 0x0C00,
15 	ice_sbq_opc_neigh_dev_ev			= 0x0C01
16 };
17 
18 /* Sideband Queue descriptor. Indirect command
19  * and non posted
20  */
21 struct ice_sbq_cmd_desc {
22 	__le16 flags;
23 	__le16 opcode;
24 	__le16 datalen;
25 	__le16 cmd_retval;
26 
27 	/* Opaque message data */
28 	__le32 cookie_high;
29 	__le32 cookie_low;
30 
31 	union {
32 		__le16 cmd_len;
33 		__le16 cmpl_len;
34 	} param0;
35 
36 	u8 reserved[6];
37 	__le32 addr_high;
38 	__le32 addr_low;
39 };
40 
41 struct ice_sbq_evt_desc {
42 	__le16 flags;
43 	__le16 opcode;
44 	__le16 datalen;
45 	__le16 cmd_retval;
46 	u8 data[24];
47 };
48 
49 enum ice_sbq_dev_id {
50 	ice_sbq_dev_phy_0	= 0x02,
51 	ice_sbq_dev_cgu		= 0x06,
52 	ice_sbq_dev_phy_0_peer	= 0x0D,
53 	ice_sbq_dev_cgu_peer	= 0x0F,
54 };
55 
56 enum ice_sbq_msg_opcode {
57 	ice_sbq_msg_rd		= 0x00,
58 	ice_sbq_msg_wr		= 0x01,
59 	ice_sbq_msg_wr_np	= 0x02
60 };
61 
62 #define ICE_SBQ_MSG_FLAGS	0x40
63 #define ICE_SBQ_MSG_SBE_FBE	0x0F
64 
65 struct ice_sbq_msg_req {
66 	u8 dest_dev;
67 	u8 src_dev;
68 	u8 opcode;
69 	u8 flags;
70 	u8 sbe_fbe;
71 	u8 func_id;
72 	__le16 msg_addr_low;
73 	__le32 msg_addr_high;
74 	__le32 data;
75 };
76 
77 struct ice_sbq_msg_cmpl {
78 	u8 dest_dev;
79 	u8 src_dev;
80 	u8 opcode;
81 	u8 flags;
82 	__le32 data;
83 };
84 
85 /* Internal struct */
86 struct ice_sbq_msg_input {
87 	u8 dest_dev;
88 	u8 opcode;
89 	u16 msg_addr_low;
90 	u32 msg_addr_high;
91 	u32 data;
92 };
93 #endif /* _ICE_SBQ_CMD_H_ */
94