d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Common Development and Distribution License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * or http://www.opensolaris.org/os/licensing.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner]
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER END
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright 2014 QLogic Corporation
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic End User License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic_End_User_Software_License.txt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef BNXE_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/types.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/stream.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/stropts.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/errno.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/cred.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/poll.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/modctl.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/mac.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/mac_provider.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/stat.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/ddi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/sunddi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/sunndi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/ddifm.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/fm/protocol.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/fm/util.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/fm/io/ddi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/pattr.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/sysmacros.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/ethernet.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#include <sys/vlan.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/strsun.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/ksynch.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/kstat.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <netinet/in.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <netinet/ip.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <netinet/udp.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <netinet/tcp.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <inet/common.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <inet/ip.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <inet/ip_if.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/strsubr.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/pci.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/gld.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This really ticks me off! We use 'u' for naming unions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * within structures. Why is 'u' a reserved word!?!?!?
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://bugs.opensolaris.org/view_bug.do?bug_id=4340073
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This undef has been moved to bnxe_debug.h.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#undef u
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "version.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "debug.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bcmtype.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "lm_defs.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "listq.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "lm5710.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "lm.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bd_chain.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if !defined(__SunOS_MDB)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "command.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bnxe_binding.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if !defined(DBG) && !defined(__SunOS_MDB)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bnxe_debug.h" /* wasn't included by debug.h */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef VLAN_TAGSZ
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VLAN_TAGSZ 4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_RINGS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define RSS_ID_NONE -1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_CKSUM_NONE 0x0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_CKSUM_L3 0x1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_CKSUM_L3_L4 0x2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_CKSUM_DEFAULT USER_OPTION_CKSUM_L3_L4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_MTU_MIN 60
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_MTU_MAX 9216
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_MTU_DEFAULT 1500
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_MIN 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_MAX MAX_RSS_CHAINS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_DEFAULT_MF 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_DEFAULT_SF 4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_DEFAULT 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_RING_GROUPS_MIN 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_RING_GROUPS_MAX 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_RING_GROUPS_DEFAULT 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_BDS_MIN 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_BDS_MAX 32767
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_BDS_DEFAULT 1024
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_TX_BDS_DEFAULT 1024
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_MF_BDS_DIVISOR 4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_MIN 10 /* usecs */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_MAX 1000
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_RX_DEFAULT 20
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_TX_DEFAULT 40
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_TX_MAX_FREE_DEFAULT 32
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_MAX_FREE_DEFAULT 32
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define USER_OPTION_RX_DCOPY_THRESH_DEFAULT 0xffffffff
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_DCOPY_THRESH_DEFAULT 128
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define USER_OPTION_TX_DCOPY_THRESH_DEFAULT 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_TX_DCOPY_THRESH_DEFAULT 512
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define BNXE_IP_MAXLEN 65535
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_IP_MAXLEN 32768 /* 32768 = PAGESIZE * (BNXE_MAX_DMA_FRAGS_PER_PKT - 2 ) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_OPTION_LEN 80 /* room for IP/TCP options (max 40 bytes each) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_PKTHDR_LEN (sizeof(struct ether_vlan_header) + sizeof(struct ip) + sizeof(struct tcphdr) + BNXE_OPTION_LEN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LSO_MAXLEN (BNXE_IP_MAXLEN + sizeof(struct ether_vlan_header) - BNXE_PKTHDR_LEN) /* maximum payload */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_MAGIC 0x0feedead
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_MEM_CHECK_LEN 16
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_STR_SIZE 32
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXEF_NAME "bnxef"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_FCOE(dev) ((um_device_t *)(dev))->do_fcoe
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef __sparc
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_DMA_ALIGNMENT 0x2000UL
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_DMA_ALIGNMENT 0x1000UL
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Adding a two byte offset to the receive buffer aligns the IP header on a
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 16 byte boundary and it would put the TCP payload (assuming a 20 byte IP
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * header and 20 byte TCP header) on an 8 byte boundary.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_DMA_RX_OFFSET 2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The following two defines are used for defining limits on Tx packets.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * BNXE_MAX_DMA_HANDLES_PER_PKT is the maximum number of DMA handles that are
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * pre-allocated for every Tx buffer descriptor. These DMA handles are used
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * for mapping each mblk in the chain when not double copying the packet data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * into the copy buffer. BNXE_MAX_DMA_FRAGS_PER_PKT is based on the hardware
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and represents the maximum number of fragments an outgoing packet can have.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Note that a single DMA handle can be comprised of multiple fragments which
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * is very likely with LSO.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * As seen below BNXE_MAX_DMA_FRAGS_PER_PKT is set to 10. The actual firmware
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * limit is 13 but 10 is chosen specifically for the case of LSO packets that
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * are broken up across a long mblk chain. The firmware utilizes a sliding
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * window on a packet's assigned buffer descriptors for LSO. The window is 10
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * bds and each window (i.e. bds 1-10, 2-11, 3-12, etc), except the window
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * containing the last bd, must contains at least MSS bytes. There are 'rare'
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * cases where a packet sent down by the stack will not satisfy this window
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * size requirement. Therefore, setting the frag limit to 10 results in any
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * long chained packet (i.e. greater than 10 mblks), the trailing mblks will
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * get double copied into a single copy buffer and will be pointed to by the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * last bd. This simple change will ensure the sliding window requirement is
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * always satisfied. Note, LSO packets with long mblk chains are a rare
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * occurance (nicdrv test01 can trigger it).
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_MAX_DMA_HANDLES_PER_PKT 11 /* go easy on DMA resources */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_MAX_DMA_FRAGS_PER_PKT 10 /* set BNXE_IP_MAXLEN above accordingly */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_MAX_DMA_SGLLEN 20 /* for partial dma mapping */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_PDWM_THRESHOLD 8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_RESOURCES_NO_CREDIT 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_RESOURCES_NO_DESC 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_RESOURCES_NO_DRV_DMA_RES 0x04 /* Out of Tx DMA handles */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_RESOURCES_NO_OS_DMA_RES 0x08 /* Unable to allocate DMA resources. (e.g. bind error) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_RESOURCES_TOO_MANY_FRAGS 0x10
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_GOODXMIT 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_LINKDOWN 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_DEFERPKT 2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_HDWRFULL 3
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_TX_PKTERROR 4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_ROUTE_RING_NONE 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_ROUTE_RING_TCPUDP 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_ROUTE_RING_DEST_MAC 2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_ROUTE_RING_MSG_PRIO 3
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#undef BNXE_DEBUG_DMA_LIST
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern ddi_device_acc_attr_t bnxeAccessAttribBAR;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern ddi_device_acc_attr_t bnxeAccessAttribBUF;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeDevParams
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t fw_ver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t mtu[LM_CLI_IDX_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t routeTxRingPolicy;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t numRings; /* number of rings */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t numRxDesc[LM_CLI_IDX_MAX]; /* number of RX descriptors */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t numTxDesc[LM_CLI_IDX_MAX]; /* number of TX descriptors */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t maxRxFree; /* max free allowed before posting back */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t maxTxFree; /* max free allowed before posting back */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t intrCoalesce;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t intrRxPerSec;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t intrTxPerSec;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t disableMsix;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t l2_fw_flow_ctrl;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t autogreeenEnable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxCopyThreshold;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txCopyThreshold;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_rx_mask_t rx_filter_mask[LM_CLI_IDX_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int checksum;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_offload_t enabled_oflds;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t lsoEnable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t logEnable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t fcoeEnable;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t linkRemoteFaultDetect;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_status_t lastIndLink;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_medium_t lastIndMedium;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi uint32_t debug_level;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeDevParams;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeLinkCfg
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t link_autoneg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_20000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_10000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_2500fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_1000fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_100fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_100hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_10fdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_10hdx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_txpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t param_rxpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeLinkCfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxePhyCfg
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg lnkcfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t flow_autoneg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t supported[ELINK_LINK_CONFIG_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t phy_cfg_size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxePhyCfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeProps
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t link_speed;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t link_duplex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t link_txpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t link_rxpause;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi time_t uptime;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeProps;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeMemBlock
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t link;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pBuf;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char fileName[128];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t fileLine;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeMemBlock;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeMemDma
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t link;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pDmaVirt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_dma_handle_t dmaHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t dmaAccHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t physAddr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char fileName[128];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t fileLine;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeMemDma;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeMemRegion
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_entry_t link;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t baseAddr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t regNumber;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi offset_t offset;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t size;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t regAccess;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi caddr_t pRegAddr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeMemRegion;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _um_txpacket_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_packet_t lm_pkt; /* must be the first entry */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_pkt_tx_info_t tx_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mblk_t * pMblk;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_dma_handle_t cbDmaHandle; /* cb = copy buffer */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t cbDmaAccHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi caddr_t pCbBuf;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t cbPhysAddr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cbLength;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t num_handles; /* number of handles used for pkt */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_dma_handle_t dmaHandles[BNXE_MAX_DMA_HANDLES_PER_PKT];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_frag_list_t frag_list;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_frag_t frag_list_buffer[BNXE_MAX_DMA_FRAGS_PER_PKT];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} um_txpacket_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _TxQueue
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx; /* this ring's index */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_ring_handle_t ringHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t desc_cnt; /* number of Tx descriptors */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txFailed;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txDiscards;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txRecycle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txCopied;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txBlocked;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txWait;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txLowWater;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t thresh_pdwm; /* low resource water marks */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t txMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t sentTxQ; /* bds that have been sent and are ready to be freed */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t freeTxDescMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t freeTxDescQ; /* bds that are free for use */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t waitTxDescQ; /* bds that are setup and waiting for tx (lock w/ tx mutex) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t noTxCredits;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} TxQueue;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _um_rxpacket_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_packet_t lm_pkt; /* must be first entry */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_pkt_rx_info_t rx_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t hash_value;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi frtn_t freeRtn;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t for free routine */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int idx; /* chain index used by the free routine */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t signature;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_dma_handle_t dmaHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t dmaAccHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} um_rxpacket_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _RxQueue
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx; /* this ring's index */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_ring_handle_t ringHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi uint64_t genNumber; /* set by mac and passed up in mac_ring_rx */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi volatile u32_t inPollMode;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t intrDisableCnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t intrEnableCnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t pollCnt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxDiscards;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxCopied;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxLowWater;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxBufUpInStack;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t rxMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t doneRxMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t doneRxQ; /* free bds that are ready to be posted */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t waitRxQ; /* packet waiting to be sent up */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} RxQueue;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _RxQueueGroup
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx; /* this group's index */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_group_handle_t groupHandle;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} RxQueueGroup;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _KstatRingMap
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx; /* ring index */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* reference back to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} KstatRingMap;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeFcoeState
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_fcoe_state_t lm_fcoe;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeFcoeState;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeClientStats
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t initWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t initWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t initCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t initCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offloadConnWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offloadConnWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offloadConnCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offloadConnCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t enableConnWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t enableConnWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t enableConnCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t enableConnCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t disableConnWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t disableConnWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t disableConnCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t disableConnCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyConnWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyConnWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyConnCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyConnCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t destroyCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t compRequestCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t compRequestCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t statWqeTx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t statWqeTxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t statCqeRx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t statCqeRxErr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeClientStats;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeFcoeData
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi dev_info_t * pDev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeBinding bind;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeClientStats stats;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWwnInfo wwn;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeFcoeData;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeIntrBlock
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int intrCount;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int intrCapability;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t intrPriority;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t intrHandleBlockSize;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_intr_handle_t * pIntrHandleBlockAlloc;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_intr_handle_t * pIntrHandleBlock;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeIntrBlock;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeWorkQueueInstance
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char taskqName[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_taskq_t * pTaskq;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t workQueueMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t workQueue;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t workItemQueued;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t workItemError;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t workItemComplete;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t highWater;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeWorkQueueInstance;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _BnxeWorkQueues
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWorkQueueInstance instq; /* instant, single thread serialized */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWorkQueueInstance delayq; /* delayed, multi thread not serialized */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} BnxeWorkQueues;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* the following are used against the clientState variable in um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_FLG_DEVI 0x001
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_FLG_BIND 0x002
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_FLG_HW 0x004
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_DEVI(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_HW(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_BOUND(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (((client) == LM_CLI_IDX_NDIS) ? \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_HW) : \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_BIND))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_DEVI_SET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_DEVI_RESET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_BIND_SET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_BIND)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_BIND_RESET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_BIND)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_HW_SET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CLIENT_HW_RESET(pUM, client) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _um_device
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t lm_dev; /* must be the first element */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t magic;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi dev_info_t * pDev;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t hwInitDone;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t chipStarted;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t clientState[LM_CLI_IDX_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t memBlockList;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t memDmaList;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t memRegionList;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef BNXE_DEBUG_DMA_LIST
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t memDmaListSaved;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int instance;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char devName[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char version[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char versionLM[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char versionFW[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char versionBC[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char chipName[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char chipID[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char intrAlloc[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char bus_dev_func[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char vendor_device[BNXE_STR_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi volatile u32_t plumbed;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t pPciCfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t intrMutex[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t intrFlipMutex[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t sbMutex[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t ethConMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t mcpMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t phyMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t indMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t cidMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t spqMutex; /* slow path queue lock */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t spReqMutex; /* slow path request manager lock */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t rrReqMutex; /* ramrod request */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t islesCtrlMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t toeMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t memMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t offloadMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t hwInitMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t gldMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi krwlock_t gldTxMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t timerMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi volatile u32_t timerEnabled;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi timeout_id_t timerID;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWorkQueues workqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeMemDma * statusBlocks[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi volatile u32_t intrEnabled;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrFired;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* the arrays below = LM_SB_CNT() + 1 = 17 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbNoChangeCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbPollCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbPollNoChangeCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int intrType;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t intrPriority;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeIntrBlock defIntr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeIntrBlock rssIntr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeIntrBlock fcoeIntr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeDevParams devParams;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_handle_t pMac;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_resource_handle_t macRxResourceHandles[MAX_ETH_REG_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t gldMac[ETHERNET_ADDRESS_SIZE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t mcast_l2;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t mcast_fcoe;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t ucastTableLen; /* number of ucast addrs in the table */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef LM_MAX_UC_TABLE_SIZE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LM_MAX_UC_TABLE_SIZE 1 /* for now, fix needed to support multiple ucast addr */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi TxQueue txq[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RxQueue rxq[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RxQueueGroup rxqGroup[USER_OPTION_RX_RING_GROUPS_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t rxBufSignature[LM_CLI_IDX_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t txMsgPullUp;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeProps props;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxePhyCfg hwinit; /* gathered by BnxeCfgInit */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxePhyCfg curcfg; /* initialized from hwinit by BnxeCfgReset */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeLinkCfg remote;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t phyInitialized;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstats;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsLink;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsIntr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsL2Chip;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsL2Driver;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsL2Stats;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsFcoe;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstatsDcbx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstats_rxq[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi KstatRingMap kstats_rxq_map[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kstat_t * kstats_txq[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi KstatRingMap kstats_txq_map[MAX_ETH_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t kstatMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int fmCapabilities; /* FMA capabilities */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t do_fcoe;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeFcoeData fcoe;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi iscsi_info_block_hdr_t iscsiInfo;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} um_device_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* mioc[ack|nak] return values from ioctl subroutines */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchienum ioc_reply
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_INVAL = -1, /* bad, NAK with EINVAL */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_DONE, /* OK, reply sent */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_ACK, /* OK, just send ACK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_REPLY, /* OK, just send reply */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_RESTART_ACK, /* OK, restart & ACK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_RESTART_REPLY /* OK, restart & reply */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_IOC_BASE ('X' << 8)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* IOCTLs for get/set lldp and dcbx params */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXELLDP (BNXE_IOC_BASE + 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXEDCBX (BNXE_IOC_BASE + 1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SIOCBNXEDCBX (BNXE_IOC_BASE + 2)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* IOCTLs for edebug and firmware upgrade */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXEREG (BNXE_IOC_BASE + 3)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SIOCBNXEREG (BNXE_IOC_BASE + 4)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXENVRM (BNXE_IOC_BASE + 5)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SIOCBNXENVRM (BNXE_IOC_BASE + 6)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXEPCI (BNXE_IOC_BASE + 7)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define GIOCBNXESTATS (BNXE_IOC_BASE + 8)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bnxe_reg_data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offset;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t value;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct bnxe_nvram_data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offset;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t num_of_u32;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t value[1]; /* variable */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi};
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_cfg.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeCfgInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeCfgReset(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_mm.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeInitBdCnts(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cli_idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_gld.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeGldInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeGldFini(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeGldLink(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi link_state_t state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_hw.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeEstablishHwConn(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cid);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwStartFCOE(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwStartL2(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwStartCore(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeHwStopFCOE(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeHwStopL2(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeHwStopCore(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeUpdatePhy(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeMacAddress(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t flag,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi const uint8_t * pMacAddr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeMulticast(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t flag,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi const uint8_t * pMcastAddr,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t hwSet);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeRxMask(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_rx_mask_t mask);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwResume(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwSuspend(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if (DEVO_REV > 3)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeHwQuiesce(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_intr.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeIntrIguSbEnable(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t fromISR);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeIntrIguSbDisable(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t fromISR);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxePollRxRing(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t * pPktsRxed,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t * pPktsTxed);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxePollRxRingFCOE(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeIntrEnable(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeIntrDisable(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeIntrInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeIntrFini(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_kstat.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeKstatInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeKstatFini(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_rr.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeRouteTxRing(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mblk_t * pMblk);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_rx.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWaitForPacketsFromClient(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimblk_t * BnxeRxRingProcess(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t polling,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int numBytes);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeRxPktsAbort(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeRxPktsInitPostBuffers(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeRxPktsInit(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeRxPktsFini(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_tx.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTxPktsReclaim(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t * pPktList);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTxRingProcess(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeTxSendMblk(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mblk_t * pMblk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t flags,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t vlan_tag);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTxPktsAbort(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeTxPktsInit(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTxPktsFini(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cliIdx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_timer.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTimerStart(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeTimerStop(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_workq.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeWorkQueueWaitAndDestroy(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeWorkQueueStartPending(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAdd(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbk)(um_device_t *, void *, u32_t),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pWorkData,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t workDataLen);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddNoCopy(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbk)(um_device_t *, void *),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pWorkData);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddGeneric(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbkGeneric)(um_device_t *));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelay(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbk)(um_device_t *, void *, u32_t),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pWorkData,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t workDataLen,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t delayMs);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelayNoCopy(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbk)(um_device_t *, void *),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pWorkData,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t delayMs);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelayGeneric(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbkGeneric)(um_device_t *),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t delayMs);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_fcoe.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeInitCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeOffloadConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeFcoeState * pFcoeState,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeEnableConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeFcoeState * pFcoeState,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDisableConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeFcoeState * pFcoeState,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDestroyConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeFcoeState * pFcoeState,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDestroyCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeStatCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqe);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeCompRequestCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct fcoe_kcqe * kcqes,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t num_kcqes);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvCtl(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int cmd,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pData,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int dataLen);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimblk_t * BnxeFcoePrvTx(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mblk_t * pMblk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t flags,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t vlan_tag);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvPoll(dev_info_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvSendWqes(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * wqes[],
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi int wqeCnt);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvMapMailboxq(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void ** ppMap,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t * pAccHandle);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvUnmapMailboxq(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pMap,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_acc_handle_t accHandle);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeFcoeInit(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeFcoeFini(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeFcoeStartStop(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* bnxe_main.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t BnxeInstance(void * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar * BnxeDevName(void * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeProtoSupport(um_device_t * pUM, int proto);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeProtoFcoeAfex(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeCheckAccHandle(ddi_acc_handle_t handle);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeCheckDmaHandle(ddi_dma_handle_t handle);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeFmErrorReport(um_device_t * pUM, char * detail);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern kmutex_t bnxeLoaderMutex;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern u32_t bnxeNumPlumbed;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern BnxeLinkCfg bnxeLinkCfg;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* undefine this to help with dtrace analysis */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCKS_INLINE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef BNXE_LOCKS_INLINE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_INTR(pUM, idx) mutex_enter(&(pUM)->intrMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_INTR(pUM, idx) mutex_exit(&(pUM)->intrMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_INTR_FLIP(pUM, idx) mutex_enter(&(pUM)->intrFlipMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_INTR_FLIP(pUM, idx) mutex_exit(&(pUM)->intrFlipMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_TX(pUM, idx) mutex_enter(&(pUM)->txq[(idx)].txMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_TX(pUM, idx) mutex_exit(&(pUM)->txq[(idx)].txMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_FREETX(pUM, idx) mutex_enter(&(pUM)->txq[(idx)].freeTxDescMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_FREETX(pUM, idx) mutex_exit(&(pUM)->txq[(idx)].freeTxDescMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_RX(pUM, idx) mutex_enter(&(pUM)->rxq[(idx)].rxMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_RX(pUM, idx) mutex_exit(&(pUM)->rxq[(idx)].rxMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_DONERX(pUM, idx) mutex_enter(&(pUM)->rxq[(idx)].doneRxMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_DONERX(pUM, idx) mutex_exit(&(pUM)->rxq[(idx)].doneRxMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_SB(pUM, idx) mutex_enter(&(pUM)->sbMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_SB(pUM, idx) mutex_exit(&(pUM)->sbMutex[(idx)])
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_ETH_CON(pUM) mutex_enter(&(pUM)->ethConMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_ETH_CON(pUM) mutex_exit(&(pUM)->ethConMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_MCP(pUM) mutex_enter(&(pUM)->mcpMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_MCP(pUM) mutex_exit(&(pUM)->mcpMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_PHY(pUM) mutex_enter(&(pUM)->phyMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_PHY(pUM) mutex_exit(&(pUM)->phyMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_IND(pUM) mutex_enter(&(pUM)->indMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_IND(pUM) mutex_exit(&(pUM)->indMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_CID(pUM) mutex_enter(&(pUM)->cidMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_CID(pUM) mutex_exit(&(pUM)->cidMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_SPQ(pUM) mutex_enter(&(pUM)->spqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_SPQ(pUM) mutex_exit(&(pUM)->spqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_SPREQ(pUM) mutex_enter(&(pUM)->spReqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_SPREQ(pUM) mutex_exit(&(pUM)->spReqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_RRREQ(pUM) mutex_enter(&(pUM)->rrReqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_RRREQ(pUM) mutex_exit(&(pUM)->rrReqMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_ISLES_CONTROL(pUM) mutex_enter(&(pUM)->islesCtrlMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_ISLES_CONTROL(pUM) mutex_exit(&(pUM)->islesCtrlMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_TOE(pUM) mutex_enter(&(pUM)->toeMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_TOE(pUM) mutex_exit(&(pUM)->toeMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_MEM(pUM) mutex_enter(&(pUM)->memMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_MEM(pUM) mutex_exit(&(pUM)->memMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_OFFLOAD(pUM) mutex_enter(&(pUM)->offloadMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_OFFLOAD(pUM) mutex_exit(&(pUM)->offloadMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_HWINIT(pUM) mutex_enter(&(pUM)->hwInitMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_HWINIT(pUM) mutex_exit(&(pUM)->hwInitMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_GLD(pUM) mutex_enter(&(pUM)->gldMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_GLD(pUM) mutex_exit(&(pUM)->gldMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_GLDTX(pUM, rw) rw_enter(&(pUM)->gldTxMutex, (rw))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_GLDTX(pUM) rw_exit(&(pUM)->gldTxMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_TIMER(pUM) mutex_enter(&(pUM)->timerMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_TIMER(pUM) mutex_exit(&(pUM)->timerMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_ENTER_STATS(pUM) mutex_enter(&(pUM)->kstatMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define BNXE_LOCK_EXIT_STATS(pUM) mutex_exit(&(pUM)->kstatMutex)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* not BNXE_LOCKS_INLINE */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_INTR(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_INTR(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_INTR_FLIP(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_INTR_FLIP(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_TX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_TX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_FREETX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_FREETX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_RX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_RX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_DONERX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_DONERX(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_SB(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_SB(um_device_t * pUM, int idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_ETH_CON(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_ETH_CON(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_MCP(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_MCP(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_PHY(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_PHY(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_IND(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_IND(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_CID(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_CID(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_SPQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_SPQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_SPREQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_SPREQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_RRREQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_RRREQ(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_ISLES_CONTROL(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_ISLES_CONTROL(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_MEM(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_MEM(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_GLD(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_GLD(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_GLDTX(um_device_t * pUM, krw_t rw);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_GLDTX(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_TIMER(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_TIMER(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_STATS(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_EXIT_STATS(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BNXE_LOCKS_INLINE */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CATC_TRIGGER(lmdev, data) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi REG_WR((lmdev), 0x2000, (data)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CATC_TRIGGER_START(lmdev) CATC_TRIGGER((lmdev), 0xcafecafe)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeDumpMem(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char * pTag,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t * pMem,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t len);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeDumpPkt(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char * pTag,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mblk_t * pMblk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi boolean_t contents);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* XXX yuck (beware return strings lengths with kstat and mdb) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline boolean_t BnxeIsClientBound(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return (CLIENT_HW(pUM, LM_CLI_IDX_NDIS) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CLIENT_BOUND(pUM, LM_CLI_IDX_FCOE));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline char * BnxeClientsHw(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (CLIENT_HW(pUM, LM_CLI_IDX_NDIS) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CLIENT_HW(pUM, LM_CLI_IDX_FCOE)) { return "L2,FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (CLIENT_HW(pUM, LM_CLI_IDX_NDIS)) { return "L2"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (CLIENT_HW(pUM, LM_CLI_IDX_FCOE)) { return "FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else { return "None"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline char * BnxeClientsDevi(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (CLIENT_DEVI(pUM, LM_CLI_IDX_FCOE)) { return "FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else { return "None"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline char * BnxeClientsBound(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (CLIENT_HW(pUM, LM_CLI_IDX_NDIS) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CLIENT_BOUND(pUM, LM_CLI_IDX_FCOE)) { return "L2,FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (CLIENT_HW(pUM, LM_CLI_IDX_NDIS)) { return "L2"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else if (CLIENT_BOUND(pUM, LM_CLI_IDX_FCOE)) { return "FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else { return "None"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* BNXE_H */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi