75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/******************************************************************************
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
49b7860084dbba18bc00b29413d6182197f9fe93Robert Mustacchi Copyright (c) 2001-2015, Intel Corporation
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi All rights reserved.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi Redistribution and use in source and binary forms, with or without
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi modification, are permitted provided that the following conditions are met:
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 1. Redistributions of source code must retain the above copyright notice,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi this list of conditions and the following disclaimer.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 2. Redistributions in binary form must reproduce the above copyright
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi notice, this list of conditions and the following disclaimer in the
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi documentation and/or other materials provided with the distribution.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi 3. Neither the name of the Intel Corporation nor the names of its
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi contributors may be used to endorse or promote products derived from
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi this software without specific prior written permission.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi POSSIBILITY OF SUCH DAMAGE.
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi******************************************************************************/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/*$FreeBSD$*/
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#ifndef _E1000_VF_H_
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#define _E1000_VF_H_
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#include "e1000_osdep.h"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#include "e1000_regs.h"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#include "e1000_defines.h"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_hw;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_DEV_ID_82576_VF 0x10CA
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_DEV_ID_I350_VF 0x1520
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_VF_INIT_TIMEOUT 200 /* Num of retries to clear RSTI */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Additional Descriptor Control definitions */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_TXDCTL_QUEUE_ENABLE 0x02000000 /* Ena specific Tx Queue */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_RXDCTL_QUEUE_ENABLE 0x02000000 /* Ena specific Rx Queue */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* SRRCTL bit definitions */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL(_n) ((_n) < 4 ? (0x0280C + ((_n) * 0x100)) : \
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi (0x0C00C + ((_n) * 0x40)))
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_BSIZEPKT_SHIFT 10 /* Shift _right_ */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_BSIZEHDRSIZE_MASK 0x00000F00
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_BSIZEHDRSIZE_SHIFT 2 /* Shift _left_ */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_LEGACY 0x00000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_ADV_ONEBUF 0x02000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_HDR_SPLIT 0x04000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS 0x0A000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION 0x06000000
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT 0x08000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DESCTYPE_MASK 0x0E000000
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_DROP_EN 0x80000000
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_BSIZEPKT_MASK 0x0000007F
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_SRRCTL_BSIZEHDR_MASK 0x00003F00
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Interrupt Defines */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EICR 0x01580 /* Ext. Interrupt Cause Read - R/clr */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EITR(_n) (0x01680 + ((_n) << 2))
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EICS 0x01520 /* Ext. Intr Cause Set -W0 */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EIMS 0x01524 /* Ext. Intr Mask Set/Read -RW */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EIMC 0x01528 /* Ext. Intr Mask Clear -WO */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EIAC 0x0152C /* Ext. Intr Auto Clear -RW */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_EIAM 0x01530 /* Ext. Intr Ack Auto Clear Mask -RW */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_IVAR0 0x01700 /* Intr Vector Alloc (array) -RW */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_IVAR_MISC 0x01740 /* IVAR for "other" causes -RW */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_IVAR_VALID 0x80
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Receive Descriptor - Advanced */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiunion e1000_adv_rx_desc {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u64 pkt_addr; /* Packet buffer address */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u64 hdr_addr; /* Header buffer address */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } read;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi union {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 data;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /* RSS type, Packet type */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 pkt_info;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /* Split Header, header buffer len */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 hdr_info;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } hs_rss;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } lo_dword;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi union {
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u32 rss; /* RSS Hash */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u16 ip_id; /* IP id */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u16 csum; /* Packet Checksum */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } csum_ip;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } hi_dword;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } lower;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u32 status_error; /* ext status/error */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u16 length; /* Packet length */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi u16 vlan; /* VLAN tag */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } upper;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } wb; /* writeback */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_RXDADV_HDRBUFLEN_MASK 0x7FE0
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_RXDADV_HDRBUFLEN_SHIFT 5
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Transmit Descriptor - Advanced */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchiunion e1000_adv_tx_desc {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 buffer_addr; /* Address of descriptor's data buf */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 cmd_type_len;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 olinfo_status;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } read;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 rsvd; /* Reserved */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 nxtseq_seed;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 status;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } wb;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Adv Transmit Descriptor Config Masks */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DTYP_CTXT 0x00200000 /* Advanced Context Descriptor */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DTYP_DATA 0x00300000 /* Advanced Data Descriptor */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_EOP 0x01000000 /* End of Packet */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_IFCS 0x02000000 /* Insert FCS (Ethernet CRC) */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_RS 0x08000000 /* Report Status */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_DEXT 0x20000000 /* Descriptor extension (1=Adv) */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_VLE 0x40000000 /* VLAN pkt enable */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_DCMD_TSE 0x80000000 /* TCP Seg enable */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_PAYLEN_SHIFT 14 /* Adv desc PAYLEN shift */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* Context descriptors */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_adv_tx_context_desc {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 vlan_macip_lens;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 seqnum_seed;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 type_tucmd_mlhl;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 mss_l4len_idx;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_MACLEN_SHIFT 9 /* Adv ctxt desc mac len shift */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_TUCMD_IPV4 0x00000400 /* IP Packet Type: 1=IPv4 */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_TUCMD_L4T_TCP 0x00000800 /* L4 Packet TYPE of TCP */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_L4LEN_SHIFT 8 /* Adv ctxt L4LEN shift */
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi#define E1000_ADVTXD_MSS_SHIFT 16 /* Adv ctxt MSS shift */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchienum e1000_mac_type {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_undefined = 0,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_vfadapt,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_vfadapt_i350,
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_num_macs /* List is 1-based, so subtract 1 for TRUE count. */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_vf_stats {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gptc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gorc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gotc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_mprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gotlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gptlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gorlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 base_gprlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gptc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gorc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gotc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_mprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gotlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gptlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gorlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 last_gprlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gptc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gorc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gotc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 mprc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gotlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gptlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gorlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u64 gprlbc;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#include "e1000_mbx.h"
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_mac_operations {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi /* Function pointers for the MAC. */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*init_params)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*check_for_link)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi void (*clear_vfta)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*get_bus_info)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*reset_hw)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*init_hw)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*setup_link)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi void (*write_vfta)(struct e1000_hw *, u32, u32);
c124a83e09115de88ecccd4f689983f42a1d53bdRobert Mustacchi int (*rar_set)(struct e1000_hw *, u8*, u32);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*read_mac_addr)(struct e1000_hw *);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_mac_info {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mac_operations ops;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 addr[6];
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 perm_addr[6];
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi enum e1000_mac_type type;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 mta_reg_count;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 rar_entry_count;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi bool get_link_status;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_mbx_operations {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*init_params)(struct e1000_hw *hw);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*read)(struct e1000_hw *, u32 *, u16, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*write)(struct e1000_hw *, u32 *, u16, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*read_posted)(struct e1000_hw *, u32 *, u16, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*write_posted)(struct e1000_hw *, u32 *, u16, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*check_for_msg)(struct e1000_hw *, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*check_for_ack)(struct e1000_hw *, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi s32 (*check_for_rst)(struct e1000_hw *, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_mbx_stats {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 msgs_tx;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 msgs_rx;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 acks;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 reqs;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 rsts;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_mbx_info {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mbx_operations ops;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mbx_stats stats;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 timeout;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 usec_delay;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 size;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_dev_spec_vf {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 vf_number;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u32 v2p_mailbox;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchistruct e1000_hw {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi void *back;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 *hw_addr;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 *flash_address;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi unsigned long io_base;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mac_info mac;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_mbx_info mbx;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi union {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi struct e1000_dev_spec_vf vf;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi } dev_spec;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 device_id;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 subsystem_vendor_id;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 subsystem_device_id;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u16 vendor_id;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi u8 revision_id;
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchienum e1000_promisc_type {
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_promisc_disabled = 0, /* all promisc modes disabled */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_promisc_unicast = 1, /* unicast promiscuous enabled */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_promisc_multicast = 2, /* multicast promiscuous enabled */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_promisc_enabled = 3, /* both uni and multicast promisc */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi e1000_num_promisc_types
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi};
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi/* These functions must be implemented by drivers */
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_vfta_set_vf(struct e1000_hw *, u16, bool);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchivoid e1000_rlpml_set_vf(struct e1000_hw *, u16);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchis32 e1000_promisc_set_vf(struct e1000_hw *, enum e1000_promisc_type);
75eba5b6d79ed4d2ce3daf7b2806306b6b69a938Robert Mustacchi#endif /* _E1000_VF_H_ */