1dee1ad47SJeff Kirsher /*******************************************************************************
2dee1ad47SJeff Kirsher 
3dee1ad47SJeff Kirsher   Intel 10 Gigabit PCI Express Linux driver
4dee1ad47SJeff Kirsher   Copyright(c) 1999 - 2011 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:
23dee1ad47SJeff Kirsher   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
24dee1ad47SJeff Kirsher   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
25dee1ad47SJeff Kirsher 
26dee1ad47SJeff Kirsher *******************************************************************************/
27dee1ad47SJeff Kirsher 
28dee1ad47SJeff Kirsher #ifndef _IXGBE_MBX_H_
29dee1ad47SJeff Kirsher #define _IXGBE_MBX_H_
30dee1ad47SJeff Kirsher 
31dee1ad47SJeff Kirsher #include "ixgbe_type.h"
32dee1ad47SJeff Kirsher 
33dee1ad47SJeff Kirsher #define IXGBE_VFMAILBOX_SIZE        16 /* 16 32 bit words - 64 bytes */
34dee1ad47SJeff Kirsher #define IXGBE_ERR_MBX               -100
35dee1ad47SJeff Kirsher 
36dee1ad47SJeff Kirsher #define IXGBE_VFMAILBOX             0x002FC
37dee1ad47SJeff Kirsher #define IXGBE_VFMBMEM               0x00200
38dee1ad47SJeff Kirsher 
39dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_STS   0x00000001 /* Initiate message send to VF */
40dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_ACK   0x00000002 /* Ack message recv'd from VF */
41dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_VFU   0x00000004 /* VF owns the mailbox buffer */
42dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_PFU   0x00000008 /* PF owns the mailbox buffer */
43dee1ad47SJeff Kirsher #define IXGBE_PFMAILBOX_RVFU  0x00000010 /* Reset VFU - used when VF stuck */
44dee1ad47SJeff Kirsher 
45dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFREQ_MASK 0x0000FFFF /* bits for VF messages */
46dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFREQ_VF1  0x00000001 /* bit for VF 1 message */
47dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFACK_MASK 0xFFFF0000 /* bits for VF acks */
48dee1ad47SJeff Kirsher #define IXGBE_MBVFICR_VFACK_VF1  0x00010000 /* bit for VF 1 ack */
49dee1ad47SJeff Kirsher 
50dee1ad47SJeff Kirsher 
51dee1ad47SJeff Kirsher /* If it's a IXGBE_VF_* msg then it originates in the VF and is sent to the
52dee1ad47SJeff Kirsher  * PF.  The reverse is true if it is IXGBE_PF_*.
53dee1ad47SJeff Kirsher  * Message ACK's are the value or'd with 0xF0000000
54dee1ad47SJeff Kirsher  */
55dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_ACK      0x80000000  /* Messages below or'd with
56dee1ad47SJeff Kirsher                                                * this are the ACK */
57dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_NACK     0x40000000  /* Messages below or'd with
58dee1ad47SJeff Kirsher                                                * this are the NACK */
59dee1ad47SJeff Kirsher #define IXGBE_VT_MSGTYPE_CTS      0x20000000  /* Indicates that VF is still
60dee1ad47SJeff Kirsher                                                  clear to send requests */
61dee1ad47SJeff Kirsher #define IXGBE_VT_MSGINFO_SHIFT    16
62dee1ad47SJeff Kirsher /* bits 23:16 are used for exra info for certain messages */
63dee1ad47SJeff Kirsher #define IXGBE_VT_MSGINFO_MASK     (0xFF << IXGBE_VT_MSGINFO_SHIFT)
64dee1ad47SJeff Kirsher 
65dee1ad47SJeff Kirsher #define IXGBE_VF_RESET            0x01 /* VF requests reset */
66dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MAC_ADDR     0x02 /* VF requests PF to set MAC addr */
67dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MULTICAST    0x03 /* VF requests PF to set MC addr */
68dee1ad47SJeff Kirsher #define IXGBE_VF_SET_VLAN         0x04 /* VF requests PF to set VLAN */
69dee1ad47SJeff Kirsher #define IXGBE_VF_SET_LPE          0x05 /* VF requests PF to set VMOLR.LPE */
70dee1ad47SJeff Kirsher #define IXGBE_VF_SET_MACVLAN      0x06 /* VF requests PF for unicast filter */
71dee1ad47SJeff Kirsher 
72dee1ad47SJeff Kirsher /* length of permanent address message returned from PF */
73dee1ad47SJeff Kirsher #define IXGBE_VF_PERMADDR_MSG_LEN 4
74dee1ad47SJeff Kirsher /* word in permanent address message with the current multicast type */
75dee1ad47SJeff Kirsher #define IXGBE_VF_MC_TYPE_WORD     3
76dee1ad47SJeff Kirsher 
77dee1ad47SJeff Kirsher #define IXGBE_PF_CONTROL_MSG      0x0100 /* PF control message */
78dee1ad47SJeff Kirsher 
79dee1ad47SJeff Kirsher #define IXGBE_VF_MBX_INIT_TIMEOUT 2000 /* number of retries on mailbox */
80dee1ad47SJeff Kirsher #define IXGBE_VF_MBX_INIT_DELAY   500  /* microseconds between retries */
81dee1ad47SJeff Kirsher 
82dee1ad47SJeff Kirsher s32 ixgbe_read_mbx(struct ixgbe_hw *, u32 *, u16, u16);
83dee1ad47SJeff Kirsher s32 ixgbe_write_mbx(struct ixgbe_hw *, u32 *, u16, u16);
84dee1ad47SJeff Kirsher s32 ixgbe_check_for_msg(struct ixgbe_hw *, u16);
85dee1ad47SJeff Kirsher s32 ixgbe_check_for_ack(struct ixgbe_hw *, u16);
86dee1ad47SJeff Kirsher s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16);
87dee1ad47SJeff Kirsher #ifdef CONFIG_PCI_IOV
88dee1ad47SJeff Kirsher void ixgbe_init_mbx_params_pf(struct ixgbe_hw *);
89dee1ad47SJeff Kirsher #endif /* CONFIG_PCI_IOV */
90dee1ad47SJeff Kirsher 
91dee1ad47SJeff Kirsher extern struct ixgbe_mbx_operations mbx_ops_generic;
92dee1ad47SJeff Kirsher 
93dee1ad47SJeff Kirsher #endif /* _IXGBE_MBX_H_ */
94