1dee1ad47SJeff Kirsher /******************************************************************************* 2dee1ad47SJeff Kirsher 3dee1ad47SJeff Kirsher Intel 10 Gigabit PCI Express Linux driver 437689010SMark Rustad Copyright(c) 1999 - 2016 Intel Corporation. 5dee1ad47SJeff Kirsher 6dee1ad47SJeff Kirsher This program is free software; you can redistribute it and/or modify it 7dee1ad47SJeff Kirsher under the terms and conditions of the GNU General Public License, 8dee1ad47SJeff Kirsher version 2, as published by the Free Software Foundation. 9dee1ad47SJeff Kirsher 10dee1ad47SJeff Kirsher This program is distributed in the hope it will be useful, but WITHOUT 11dee1ad47SJeff Kirsher ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12dee1ad47SJeff Kirsher FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13dee1ad47SJeff Kirsher more details. 14dee1ad47SJeff Kirsher 15dee1ad47SJeff Kirsher You should have received a copy of the GNU General Public License along with 16dee1ad47SJeff Kirsher this program; if not, write to the Free Software Foundation, Inc., 17dee1ad47SJeff Kirsher 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18dee1ad47SJeff Kirsher 19dee1ad47SJeff Kirsher The full GNU General Public License is included in this distribution in 20dee1ad47SJeff Kirsher the file called "COPYING". 21dee1ad47SJeff Kirsher 22dee1ad47SJeff Kirsher Contact Information: 23b89aae71SJacob Keller Linux NICS <linux.nics@intel.com> 24dee1ad47SJeff Kirsher e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> 25dee1ad47SJeff Kirsher Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 26dee1ad47SJeff Kirsher 27dee1ad47SJeff Kirsher *******************************************************************************/ 28dee1ad47SJeff Kirsher 29dee1ad47SJeff Kirsher #ifndef _IXGBE_MBX_H_ 30dee1ad47SJeff Kirsher #define _IXGBE_MBX_H_ 31dee1ad47SJeff Kirsher 32dee1ad47SJeff Kirsher #include "ixgbe_type.h" 33dee1ad47SJeff Kirsher 34dee1ad47SJeff Kirsher #define IXGBE_VFMAILBOX_SIZE 16 /* 16 32 bit words - 64 bytes */ 35dee1ad47SJeff Kirsher #define IXGBE_ERR_MBX -100 36dee1ad47SJeff Kirsher 37dee1ad47SJeff Kirsher #define IXGBE_VFMAILBOX 0x002FC 38dee1ad47SJeff Kirsher #define IXGBE_VFMBMEM 0x00200 39dee1ad47SJeff Kirsher 40dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_STS 0x00000001 /* Initiate message send to VF */ 41dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_ACK 0x00000002 /* Ack message recv'd from VF */ 42dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_VFU 0x00000004 /* VF owns the mailbox buffer */ 43dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_PFU 0x00000008 /* PF owns the mailbox buffer */ 44dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_RVFU 0x00000010 /* Reset VFU - used when VF stuck */ 45dee1ad47SJeff Kirsher 46dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFREQ_MASK 0x0000FFFF /* bits for VF messages */ 47dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFREQ_VF1 0x00000001 /* bit for VF 1 message */ 48dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFACK_MASK 0xFFFF0000 /* bits for VF acks */ 49dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFACK_VF1 0x00010000 /* bit for VF 1 ack */ 50dee1ad47SJeff Kirsher 51dee1ad47SJeff Kirsher 52dee1ad47SJeff Kirsher /* If it's a IXGBE_VF_* msg then it originates in the VF and is sent to the 53dee1ad47SJeff Kirsher * PF. The reverse is true if it is IXGBE_PF_*. 54dee1ad47SJeff Kirsher * Message ACK's are the value or'd with 0xF0000000 55dee1ad47SJeff Kirsher */ 56dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_ACK 0x80000000 /* Messages below or'd with 57dee1ad47SJeff Kirsher * this are the ACK */ 58dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_NACK 0x40000000 /* Messages below or'd with 59dee1ad47SJeff Kirsher * this are the NACK */ 60dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_CTS 0x20000000 /* Indicates that VF is still 61dee1ad47SJeff Kirsher clear to send requests */ 62dee1ad47SJeff Kirsher #define IXGBE_VT_MSGINFO_SHIFT 16 63dee1ad47SJeff Kirsher /* bits 23:16 are used for exra info for certain messages */ 64dee1ad47SJeff Kirsher #define IXGBE_VT_MSGINFO_MASK (0xFF << IXGBE_VT_MSGINFO_SHIFT) 65dee1ad47SJeff Kirsher 66374c65d6SAlexander Duyck /* definitions to support mailbox API version negotiation */ 67374c65d6SAlexander Duyck 68374c65d6SAlexander Duyck /* 69374c65d6SAlexander Duyck * Each element denotes a version of the API; existing numbers may not 70374c65d6SAlexander Duyck * change; any additions must go at the end 71374c65d6SAlexander Duyck */ 72374c65d6SAlexander Duyck enum ixgbe_pfvf_api_rev { 73374c65d6SAlexander Duyck ixgbe_mbox_api_10, /* API version 1.0, linux/freebsd VF driver */ 74374c65d6SAlexander Duyck ixgbe_mbox_api_20, /* API version 2.0, solaris Phase1 VF driver */ 75f591cd9dSAlexander Duyck ixgbe_mbox_api_11, /* API version 1.1, linux/freebsd VF driver */ 764ce37a4cSVlad Zolotarov ixgbe_mbox_api_12, /* API version 1.2, linux/freebsd VF driver */ 77374c65d6SAlexander Duyck /* This value should always be last */ 78374c65d6SAlexander Duyck ixgbe_mbox_api_unknown, /* indicates that API version is not known */ 79374c65d6SAlexander Duyck }; 80374c65d6SAlexander Duyck 81374c65d6SAlexander Duyck /* mailbox API, legacy requests */ 82dee1ad47SJeff Kirsher #define IXGBE_VF_RESET 0x01 /* VF requests reset */ 83dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MAC_ADDR 0x02 /* VF requests PF to set MAC addr */ 84dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MULTICAST 0x03 /* VF requests PF to set MC addr */ 85dee1ad47SJeff Kirsher #define IXGBE_VF_SET_VLAN 0x04 /* VF requests PF to set VLAN */ 86374c65d6SAlexander Duyck 87374c65d6SAlexander Duyck /* mailbox API, version 1.0 VF requests */ 88dee1ad47SJeff Kirsher #define IXGBE_VF_SET_LPE 0x05 /* VF requests PF to set VMOLR.LPE */ 89dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MACVLAN 0x06 /* VF requests PF for unicast filter */ 90374c65d6SAlexander Duyck #define IXGBE_VF_API_NEGOTIATE 0x08 /* negotiate API version */ 91dee1ad47SJeff Kirsher 92f591cd9dSAlexander Duyck /* mailbox API, version 1.1 VF requests */ 93f591cd9dSAlexander Duyck #define IXGBE_VF_GET_QUEUES 0x09 /* get queue configuration */ 94f591cd9dSAlexander Duyck 95f591cd9dSAlexander Duyck /* GET_QUEUES return data indices within the mailbox */ 96f591cd9dSAlexander Duyck #define IXGBE_VF_TX_QUEUES 1 /* number of Tx queues supported */ 97f591cd9dSAlexander Duyck #define IXGBE_VF_RX_QUEUES 2 /* number of Rx queues supported */ 98f591cd9dSAlexander Duyck #define IXGBE_VF_TRANS_VLAN 3 /* Indication of port vlan */ 99f591cd9dSAlexander Duyck #define IXGBE_VF_DEF_QUEUE 4 /* Default queue offset */ 100f591cd9dSAlexander Duyck 1014ce37a4cSVlad Zolotarov /* mailbox API, version 1.2 VF requests */ 1024ce37a4cSVlad Zolotarov #define IXGBE_VF_GET_RETA 0x0a /* VF request for RETA */ 1033c0841a9SVlad Zolotarov #define IXGBE_VF_GET_RSS_KEY 0x0b /* get RSS key */ 1044ce37a4cSVlad Zolotarov 1058443c1a4SHiroshi Shimamoto #define IXGBE_VF_UPDATE_XCAST_MODE 0x0c 1068443c1a4SHiroshi Shimamoto 107dee1ad47SJeff Kirsher /* length of permanent address message returned from PF */ 108dee1ad47SJeff Kirsher #define IXGBE_VF_PERMADDR_MSG_LEN 4 109dee1ad47SJeff Kirsher /* word in permanent address message with the current multicast type */ 110dee1ad47SJeff Kirsher #define IXGBE_VF_MC_TYPE_WORD 3 111dee1ad47SJeff Kirsher 112dee1ad47SJeff Kirsher #define IXGBE_PF_CONTROL_MSG 0x0100 /* PF control message */ 113dee1ad47SJeff Kirsher 114dee1ad47SJeff Kirsher #define IXGBE_VF_MBX_INIT_TIMEOUT 2000 /* number of retries on mailbox */ 115dee1ad47SJeff Kirsher #define IXGBE_VF_MBX_INIT_DELAY 500 /* microseconds between retries */ 116dee1ad47SJeff Kirsher 117dee1ad47SJeff Kirsher s32 ixgbe_read_mbx(struct ixgbe_hw *, u32 *, u16, u16); 118dee1ad47SJeff Kirsher s32 ixgbe_write_mbx(struct ixgbe_hw *, u32 *, u16, u16); 119dee1ad47SJeff Kirsher s32 ixgbe_check_for_msg(struct ixgbe_hw *, u16); 120dee1ad47SJeff Kirsher s32 ixgbe_check_for_ack(struct ixgbe_hw *, u16); 121dee1ad47SJeff Kirsher s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16); 122dee1ad47SJeff Kirsher #ifdef CONFIG_PCI_IOV 123dee1ad47SJeff Kirsher void ixgbe_init_mbx_params_pf(struct ixgbe_hw *); 124dee1ad47SJeff Kirsher #endif /* CONFIG_PCI_IOV */ 125dee1ad47SJeff Kirsher 12637689010SMark Rustad extern const struct ixgbe_mbx_operations mbx_ops_generic; 127dee1ad47SJeff Kirsher 128dee1ad47SJeff Kirsher #endif /* _IXGBE_MBX_H_ */ 129