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