bnxe.h revision d14abf155341d55053c76eeec58b787a456b753b
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
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 * 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 * 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 * CDDL HEADER END
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 * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
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#include "bnxe_debug.h" /* wasn't included by debug.h */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_CKSUM_DEFAULT USER_OPTION_CKSUM_L3_L4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_NUM_RINGS_MAX MAX_RSS_CHAINS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_RING_GROUPS_DEFAULT 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_MIN 10 /* usecs */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_RX_DEFAULT 20
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_INTR_COALESCE_TX_DEFAULT 40
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define USER_OPTION_RX_DCOPY_THRESH_DEFAULT 0xffffffff
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_RX_DCOPY_THRESH_DEFAULT 128
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define USER_OPTION_TX_DCOPY_THRESH_DEFAULT 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define USER_OPTION_TX_DCOPY_THRESH_DEFAULT 512
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#define BNXE_FCOE(dev) ((um_device_t *)(dev))->do_fcoe
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 * 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 * 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#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#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 Mustacchiextern ddi_device_acc_attr_t bnxeAccessAttribBAR;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern ddi_device_acc_attr_t bnxeAccessAttribBUF;
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 lm_rx_mask_t rx_filter_mask[LM_CLI_IDX_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_packet_t lm_pkt; /* must be the first entry */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ddi_dma_handle_t cbDmaHandle; /* cb = copy buffer */
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 lm_frag_t frag_list_buffer[BNXE_MAX_DMA_FRAGS_PER_PKT];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t desc_cnt; /* number of Tx descriptors */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t thresh_pdwm; /* low resource water marks */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t sentTxQ; /* bds that have been sent and are ready to be freed */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t freeTxDescQ; /* bds that are free for use */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t waitTxDescQ; /* bds that are setup and waiting for tx (lock w/ tx mutex) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_packet_t lm_pkt; /* must be first entry */
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 void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi uint64_t genNumber; /* set by mac and passed up in mac_ring_rx */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t doneRxQ; /* free bds that are ready to be posted */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t waitRxQ; /* packet waiting to be sent up */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* backpointer to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * pUM; /* reference back to um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWorkQueueInstance instq; /* instant, single thread serialized */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeWorkQueueInstance delayq; /* delayed, multi thread not serialized */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* the following are used against the clientState variable in um_device_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_HW) : \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] & CLIENT_FLG_BIND))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_DEVI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_BIND)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_BIND)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] |= CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((pUM)->clientState[(client)] &= ~CLIENT_FLG_HW)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t lm_dev; /* must be the first element */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t intrFlipMutex[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t spqMutex; /* slow path queue lock */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi kmutex_t spReqMutex; /* slow path request manager lock */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxeMemDma * statusBlocks[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* the arrays below = LM_SB_CNT() + 1 = 17 */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbNoChangeCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t intrSbPollNoChangeCnt[MAX_RSS_CHAINS + 1];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mac_resource_handle_t macRxResourceHandles[MAX_ETH_REG_CONS];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t ucastTableLen; /* number of ucast addrs in the table */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LM_MAX_UC_TABLE_SIZE 1 /* for now, fix needed to support multiple ucast addr */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi RxQueueGroup rxqGroup[USER_OPTION_RX_RING_GROUPS_MAX];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxePhyCfg hwinit; /* gathered by BnxeCfgInit */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi BnxePhyCfg curcfg; /* initialized from hwinit by BnxeCfgReset */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* mioc[ack|nak] return values from ioctl subroutines */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IOC_RESTART_REPLY /* OK, restart & reply */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* IOCTLs for get/set lldp and dcbx params */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* IOCTLs for edebug and firmware upgrade */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeEstablishHwConn(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BnxeIntrIguSbDisable(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWaitForPacketsFromClient(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimblk_t * BnxeRxRingProcess(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiint BnxeRxPktsInitPostBuffers(um_device_t * pUM,
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 Mustacchiboolean_t BnxeWorkQueueAddNoCopy(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddGeneric(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelay(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void (*pWorkCbk)(um_device_t *, void *, u32_t),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelayNoCopy(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeWorkQueueAddDelayGeneric(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeInitCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeOffloadConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeEnableConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDisableConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDestroyConnCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeDestroyCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeStatCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoeCompRequestCqe(um_device_t * pUM,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvPoll(dev_info_t * pDev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvSendWqes(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvMapMailboxq(dev_info_t * pDev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiboolean_t BnxeFcoePrvUnmapMailboxq(dev_info_t * 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/* undefine this to help with dtrace analysis */
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#else /* not BNXE_LOCKS_INLINE */
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_ENTER_PHY(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_IND(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_CID(um_device_t * pUM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid BNXE_LOCK_ENTER_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_ENTER_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#endif /* BNXE_LOCKS_INLINE */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CATC_TRIGGER_START(lmdev) CATC_TRIGGER((lmdev), 0xcafecafe)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* XXX yuck (beware return strings lengths with kstat and mdb) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline boolean_t BnxeIsClientBound(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline char * BnxeClientsHw(um_device_t * pUM)
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 Mustacchiinline char * BnxeClientsDevi(um_device_t * pUM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (CLIENT_DEVI(pUM, LM_CLI_IDX_FCOE)) { return "FCoE"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else { return "None"; }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiinline char * BnxeClientsBound(um_device_t * pUM)
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#endif /* BNXE_H */