160229dcfSJiawen Wu /* SPDX-License-Identifier: BSD-3-Clause 260229dcfSJiawen Wu * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd. 360229dcfSJiawen Wu * Copyright(c) 2010-2017 Intel Corporation 460229dcfSJiawen Wu */ 560229dcfSJiawen Wu 660229dcfSJiawen Wu #ifndef _NGBE_MBX_H_ 760229dcfSJiawen Wu #define _NGBE_MBX_H_ 860229dcfSJiawen Wu 9e2a289a7SJiawen Wu #define NGBE_ERR_MBX -100 10e2a289a7SJiawen Wu 11e2a289a7SJiawen Wu /* If it's a NGBE_VF_* msg then it originates in the VF and is sent to the 12e2a289a7SJiawen Wu * PF. The reverse is true if it is NGBE_PF_*. 13e2a289a7SJiawen Wu * Message ACK's are the value or'd with 0xF0000000 14e2a289a7SJiawen Wu */ 15e2a289a7SJiawen Wu /* Messages below or'd with this are the ACK */ 16e2a289a7SJiawen Wu #define NGBE_VT_MSGTYPE_ACK 0x80000000 17e2a289a7SJiawen Wu /* Messages below or'd with this are the NACK */ 18e2a289a7SJiawen Wu #define NGBE_VT_MSGTYPE_NACK 0x40000000 19e2a289a7SJiawen Wu /* Indicates that VF is still clear to send requests */ 20e2a289a7SJiawen Wu #define NGBE_VT_MSGTYPE_CTS 0x20000000 21e2a289a7SJiawen Wu 22e2a289a7SJiawen Wu #define NGBE_VT_MSGINFO_SHIFT 16 23e2a289a7SJiawen Wu /* bits 23:16 are used for extra info for certain messages */ 24e2a289a7SJiawen Wu #define NGBE_VT_MSGINFO_MASK (0xFF << NGBE_VT_MSGINFO_SHIFT) 25e2a289a7SJiawen Wu 26e2a289a7SJiawen Wu /* 27e2a289a7SJiawen Wu * each element denotes a version of the API; existing numbers may not 28e2a289a7SJiawen Wu * change; any additions must go at the end 29e2a289a7SJiawen Wu */ 30e2a289a7SJiawen Wu enum ngbe_pfvf_api_rev { 31e2a289a7SJiawen Wu ngbe_mbox_api_null, 32e2a289a7SJiawen Wu ngbe_mbox_api_10, /* API version 1.0, linux/freebsd VF driver */ 33e2a289a7SJiawen Wu ngbe_mbox_api_11, /* API version 1.1, linux/freebsd VF driver */ 34e2a289a7SJiawen Wu ngbe_mbox_api_12, /* API version 1.2, linux/freebsd VF driver */ 35e2a289a7SJiawen Wu ngbe_mbox_api_13, /* API version 1.3, linux/freebsd VF driver */ 36e2a289a7SJiawen Wu ngbe_mbox_api_20, /* API version 2.0, solaris Phase1 VF driver */ 37e2a289a7SJiawen Wu /* This value should always be last */ 38e2a289a7SJiawen Wu ngbe_mbox_api_unknown, /* indicates that API version is not known */ 39e2a289a7SJiawen Wu }; 40e2a289a7SJiawen Wu 41e2a289a7SJiawen Wu /* mailbox API, legacy requests */ 42e2a289a7SJiawen Wu #define NGBE_VF_RESET 0x01 /* VF requests reset */ 43e2a289a7SJiawen Wu #define NGBE_VF_SET_MAC_ADDR 0x02 /* VF requests PF to set MAC addr */ 44e2a289a7SJiawen Wu #define NGBE_VF_SET_MULTICAST 0x03 /* VF requests PF to set MC addr */ 45e2a289a7SJiawen Wu #define NGBE_VF_SET_VLAN 0x04 /* VF requests PF to set VLAN */ 46e2a289a7SJiawen Wu 47e2a289a7SJiawen Wu /* mailbox API, version 1.0 VF requests */ 48e2a289a7SJiawen Wu #define NGBE_VF_SET_LPE 0x05 /* VF requests PF to set VMOLR.LPE */ 49e2a289a7SJiawen Wu #define NGBE_VF_SET_MACVLAN 0x06 /* VF requests PF for unicast filter */ 50e2a289a7SJiawen Wu #define NGBE_VF_API_NEGOTIATE 0x08 /* negotiate API version */ 51e2a289a7SJiawen Wu 52e2a289a7SJiawen Wu /* mailbox API, version 1.1 VF requests */ 53e2a289a7SJiawen Wu #define NGBE_VF_GET_QUEUES 0x09 /* get queue configuration */ 54e2a289a7SJiawen Wu 55e2a289a7SJiawen Wu /* mailbox API, version 1.2 VF requests */ 56e2a289a7SJiawen Wu #define NGBE_VF_GET_RETA 0x0a /* VF request for RETA */ 57e2a289a7SJiawen Wu #define NGBE_VF_GET_RSS_KEY 0x0b /* get RSS key */ 58e2a289a7SJiawen Wu #define NGBE_VF_UPDATE_XCAST_MODE 0x0c 59e2a289a7SJiawen Wu 60*66070ca4SZaiyu Wang #define NGBE_VF_BACKUP 0x8001 /* VF requests backup */ 61*66070ca4SZaiyu Wang 62e2a289a7SJiawen Wu /* mode choices for NGBE_VF_UPDATE_XCAST_MODE */ 63e2a289a7SJiawen Wu enum ngbevf_xcast_modes { 64e2a289a7SJiawen Wu NGBEVF_XCAST_MODE_NONE = 0, 65e2a289a7SJiawen Wu NGBEVF_XCAST_MODE_MULTI, 66e2a289a7SJiawen Wu NGBEVF_XCAST_MODE_ALLMULTI, 67e2a289a7SJiawen Wu NGBEVF_XCAST_MODE_PROMISC, 68e2a289a7SJiawen Wu }; 69e2a289a7SJiawen Wu 70e2a289a7SJiawen Wu /* GET_QUEUES return data indices within the mailbox */ 71e2a289a7SJiawen Wu #define NGBE_VF_TX_QUEUES 1 /* number of Tx queues supported */ 72e2a289a7SJiawen Wu #define NGBE_VF_RX_QUEUES 2 /* number of Rx queues supported */ 73e2a289a7SJiawen Wu #define NGBE_VF_TRANS_VLAN 3 /* Indication of port vlan */ 74e2a289a7SJiawen Wu #define NGBE_VF_DEF_QUEUE 4 /* Default queue offset */ 75e2a289a7SJiawen Wu 76e2a289a7SJiawen Wu /* length of permanent address message returned from PF */ 77e2a289a7SJiawen Wu #define NGBE_VF_PERMADDR_MSG_LEN 4 78ace44974SZaiyu Wang /* word in permanent address message with the current multicast type */ 79ace44974SZaiyu Wang #define NGBE_VF_MC_TYPE_WORD 3 80ace44974SZaiyu Wang 81ace44974SZaiyu Wang #define NGBE_PF_CONTROL_MSG 0x0100 /* PF control message */ 82ace44974SZaiyu Wang 83ace44974SZaiyu Wang /* mailbox API, version 2.0 VF requests */ 84ace44974SZaiyu Wang #define NGBE_VF_API_NEGOTIATE 0x08 /* negotiate API version */ 85ace44974SZaiyu Wang #define NGBE_VF_GET_QUEUES 0x09 /* get queue configuration */ 86ace44974SZaiyu Wang #define NGBE_VF_ENABLE_MACADDR 0x0A /* enable MAC address */ 87ace44974SZaiyu Wang #define NGBE_VF_DISABLE_MACADDR 0x0B /* disable MAC address */ 88ace44974SZaiyu Wang #define NGBE_VF_GET_MACADDRS 0x0C /* get all configured MAC addrs */ 89ace44974SZaiyu Wang #define NGBE_VF_SET_MCAST_PROMISC 0x0D /* enable multicast promiscuous */ 90ace44974SZaiyu Wang #define NGBE_VF_GET_MTU 0x0E /* get bounds on MTU */ 91ace44974SZaiyu Wang #define NGBE_VF_SET_MTU 0x0F /* set a specific MTU */ 92ace44974SZaiyu Wang 93ace44974SZaiyu Wang /* mailbox API, version 2.0 PF requests */ 94ace44974SZaiyu Wang #define NGBE_PF_TRANSPARENT_VLAN 0x0101 /* enable transparent vlan */ 95ace44974SZaiyu Wang 96ace44974SZaiyu Wang #define NGBE_VF_MBX_INIT_TIMEOUT 2000 /* number of retries on mailbox */ 97ace44974SZaiyu Wang #define NGBE_VF_MBX_INIT_DELAY 500 /* microseconds between retries */ 98e2a289a7SJiawen Wu s32 ngbe_read_mbx(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 99e2a289a7SJiawen Wu s32 ngbe_write_mbx(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 100ace44974SZaiyu Wang s32 ngbe_read_posted_mbx(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 101ace44974SZaiyu Wang s32 ngbe_write_posted_mbx(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 102e2a289a7SJiawen Wu s32 ngbe_check_for_msg(struct ngbe_hw *hw, u16 mbx_id); 103e2a289a7SJiawen Wu s32 ngbe_check_for_ack(struct ngbe_hw *hw, u16 mbx_id); 104e2a289a7SJiawen Wu s32 ngbe_check_for_rst(struct ngbe_hw *hw, u16 mbx_id); 105ace44974SZaiyu Wang void ngbe_init_mbx_params_vf(struct ngbe_hw *hw); 10660229dcfSJiawen Wu void ngbe_init_mbx_params_pf(struct ngbe_hw *hw); 10760229dcfSJiawen Wu 108e2a289a7SJiawen Wu s32 ngbe_read_mbx_pf(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); 109e2a289a7SJiawen Wu s32 ngbe_write_mbx_pf(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); 110e2a289a7SJiawen Wu s32 ngbe_check_for_msg_pf(struct ngbe_hw *hw, u16 vf_number); 111e2a289a7SJiawen Wu s32 ngbe_check_for_ack_pf(struct ngbe_hw *hw, u16 vf_number); 112e2a289a7SJiawen Wu s32 ngbe_check_for_rst_pf(struct ngbe_hw *hw, u16 vf_number); 113e2a289a7SJiawen Wu 114ace44974SZaiyu Wang s32 ngbe_read_mbx_vf(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 115ace44974SZaiyu Wang s32 ngbe_write_mbx_vf(struct ngbe_hw *hw, u32 *msg, u16 size, u16 mbx_id); 116ace44974SZaiyu Wang s32 ngbe_check_for_msg_vf(struct ngbe_hw *hw, u16 mbx_id); 117ace44974SZaiyu Wang s32 ngbe_check_for_ack_vf(struct ngbe_hw *hw, u16 mbx_id); 118ace44974SZaiyu Wang s32 ngbe_check_for_rst_vf(struct ngbe_hw *hw, u16 mbx_id); 119ace44974SZaiyu Wang 12060229dcfSJiawen Wu #endif /* _NGBE_MBX_H_ */ 121