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