xref: /linux/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_mbx_fw.h (revision 24f171c7e145f43b9f187578e89b0982ce87e54c)
1*c6d3f019SDong Yibo /* SPDX-License-Identifier: GPL-2.0 */
2*c6d3f019SDong Yibo /* Copyright(c) 2020 - 2025 Mucse Corporation. */
3*c6d3f019SDong Yibo 
4*c6d3f019SDong Yibo #ifndef _RNPGBE_MBX_FW_H
5*c6d3f019SDong Yibo #define _RNPGBE_MBX_FW_H
6*c6d3f019SDong Yibo 
7*c6d3f019SDong Yibo #include <linux/types.h>
8*c6d3f019SDong Yibo 
9*c6d3f019SDong Yibo #include "rnpgbe.h"
10*c6d3f019SDong Yibo 
11*c6d3f019SDong Yibo #define MUCSE_MBX_REQ_HDR_LEN 24
12*c6d3f019SDong Yibo 
13*c6d3f019SDong Yibo enum MUCSE_FW_CMD {
14*c6d3f019SDong Yibo 	GET_HW_INFO     = 0x0601,
15*c6d3f019SDong Yibo 	GET_MAC_ADDRESS = 0x0602,
16*c6d3f019SDong Yibo 	RESET_HW        = 0x0603,
17*c6d3f019SDong Yibo 	POWER_UP        = 0x0803,
18*c6d3f019SDong Yibo };
19*c6d3f019SDong Yibo 
20*c6d3f019SDong Yibo struct mucse_hw_info {
21*c6d3f019SDong Yibo 	u8 link_stat;
22*c6d3f019SDong Yibo 	u8 port_mask;
23*c6d3f019SDong Yibo 	__le32 speed;
24*c6d3f019SDong Yibo 	__le16 phy_type;
25*c6d3f019SDong Yibo 	__le16 nic_mode;
26*c6d3f019SDong Yibo 	__le16 pfnum;
27*c6d3f019SDong Yibo 	__le32 fw_version;
28*c6d3f019SDong Yibo 	__le32 axi_mhz;
29*c6d3f019SDong Yibo 	union {
30*c6d3f019SDong Yibo 		u8 port_id[4];
31*c6d3f019SDong Yibo 		__le32 port_ids;
32*c6d3f019SDong Yibo 	};
33*c6d3f019SDong Yibo 	__le32 bd_uid;
34*c6d3f019SDong Yibo 	__le32 phy_id;
35*c6d3f019SDong Yibo 	__le32 wol_status;
36*c6d3f019SDong Yibo 	__le32 ext_info;
37*c6d3f019SDong Yibo } __packed;
38*c6d3f019SDong Yibo 
39*c6d3f019SDong Yibo struct mbx_fw_cmd_req {
40*c6d3f019SDong Yibo 	__le16 flags;
41*c6d3f019SDong Yibo 	__le16 opcode;
42*c6d3f019SDong Yibo 	__le16 datalen;
43*c6d3f019SDong Yibo 	__le16 ret_value;
44*c6d3f019SDong Yibo 	__le32 cookie_lo;
45*c6d3f019SDong Yibo 	__le32 cookie_hi;
46*c6d3f019SDong Yibo 	__le32 reply_lo;
47*c6d3f019SDong Yibo 	__le32 reply_hi;
48*c6d3f019SDong Yibo 	union {
49*c6d3f019SDong Yibo 		u8 data[32];
50*c6d3f019SDong Yibo 		struct {
51*c6d3f019SDong Yibo 			__le32 version;
52*c6d3f019SDong Yibo 			__le32 status;
53*c6d3f019SDong Yibo 		} powerup;
54*c6d3f019SDong Yibo 		struct {
55*c6d3f019SDong Yibo 			__le32 port_mask;
56*c6d3f019SDong Yibo 			__le32 pfvf_num;
57*c6d3f019SDong Yibo 		} get_mac_addr;
58*c6d3f019SDong Yibo 	};
59*c6d3f019SDong Yibo } __packed;
60*c6d3f019SDong Yibo 
61*c6d3f019SDong Yibo struct mbx_fw_cmd_reply {
62*c6d3f019SDong Yibo 	__le16 flags;
63*c6d3f019SDong Yibo 	__le16 opcode;
64*c6d3f019SDong Yibo 	__le16 error_code;
65*c6d3f019SDong Yibo 	__le16 datalen;
66*c6d3f019SDong Yibo 	__le32 cookie_lo;
67*c6d3f019SDong Yibo 	__le32 cookie_hi;
68*c6d3f019SDong Yibo 	union {
69*c6d3f019SDong Yibo 		u8 data[40];
70*c6d3f019SDong Yibo 		struct mac_addr {
71*c6d3f019SDong Yibo 			__le32 ports;
72*c6d3f019SDong Yibo 			struct _addr {
73*c6d3f019SDong Yibo 				/* for macaddr:01:02:03:04:05:06
74*c6d3f019SDong Yibo 				 * mac-hi=0x01020304 mac-lo=0x05060000
75*c6d3f019SDong Yibo 				 */
76*c6d3f019SDong Yibo 				u8 mac[8];
77*c6d3f019SDong Yibo 			} addrs[4];
78*c6d3f019SDong Yibo 		} mac_addr;
79*c6d3f019SDong Yibo 		struct mucse_hw_info hw_info;
80*c6d3f019SDong Yibo 	};
81*c6d3f019SDong Yibo } __packed;
82*c6d3f019SDong Yibo 
83*c6d3f019SDong Yibo int mucse_mbx_sync_fw(struct mucse_hw *hw);
84*c6d3f019SDong Yibo int mucse_mbx_powerup(struct mucse_hw *hw, bool is_powerup);
85*c6d3f019SDong Yibo int mucse_mbx_reset_hw(struct mucse_hw *hw);
86*c6d3f019SDong Yibo int mucse_mbx_get_macaddr(struct mucse_hw *hw, int pfvfnum,
87*c6d3f019SDong Yibo 			  u8 *mac_addr, int port);
88*c6d3f019SDong Yibo #endif /* _RNPGBE_MBX_FW_H */
89