xref: /linux/drivers/net/ethernet/intel/ice/ice_sbq_cmd.h (revision b74710eaff314d6afe4fb0bbe9bc7657bf226fd4)
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 };
54 
55 enum ice_sbq_msg_opcode {
56 	ice_sbq_msg_rd	= 0x00,
57 	ice_sbq_msg_wr	= 0x01
58 };
59 
60 #define ICE_SBQ_MSG_FLAGS	0x40
61 #define ICE_SBQ_MSG_SBE_FBE	0x0F
62 
63 struct ice_sbq_msg_req {
64 	u8 dest_dev;
65 	u8 src_dev;
66 	u8 opcode;
67 	u8 flags;
68 	u8 sbe_fbe;
69 	u8 func_id;
70 	__le16 msg_addr_low;
71 	__le32 msg_addr_high;
72 	__le32 data;
73 };
74 
75 struct ice_sbq_msg_cmpl {
76 	u8 dest_dev;
77 	u8 src_dev;
78 	u8 opcode;
79 	u8 flags;
80 	__le32 data;
81 };
82 
83 /* Internal struct */
84 struct ice_sbq_msg_input {
85 	u8 dest_dev;
86 	u8 opcode;
87 	u16 msg_addr_low;
88 	u32 msg_addr_high;
89 	u32 data;
90 };
91 #endif /* _ICE_SBQ_CMD_H_ */
92