Module Name:    src
Committed By:   sborrill
Date:           Mon Nov  9 12:35:32 UTC 2015

Added Files:
        src/sys/dev/pci [netbsd-5]: if_bnxvar.h

Log Message:
Pull up the following revisions(s) (requested by msaitoh in ticket #1983):
        sys/dev/pci/pcidevs:            revisions 1.1079, 1.1134, 
1.1148-1.1149, 1.1151
        sys/dev/pci/pcidevs.h:          regen
        sys/dev/pci/pcidevs_data.h:     regen
        sys/dev/pci/if_bge.c:           revisions 1.183-1.185, 1.187, 
1.189-1.193, 1.195-1.199, 1.202-1.226, 1.228-1.237, 1.240-1.264, 1.267-1.276, 
1.278-1.280, 1.283-1.287 via patch
        sys/dev/pci/if_bgereg.h:        revisions 1.57-1.74, 1.76-1.90 via patch
        sys/dev/pci/if_bgevar.h:        revisions 1.6, 1.10-1.13, 1.15-1.17 via 
patch
        sys/dev/pci/if_bnx.c:           revisions 1.32, 1.34-1.43, 1.48-1.49, 
1.52
        sys/dev/pci/if_bnxreg.h:        revisions 1.8, 1.11-1.14
        sys/dev/pci/if_bnxvar.h:        revisions 1.1-1.3
        sys/dev/mii/brgphy.c:           revisions 1.53-1.63, 1.65-69, 1.72-1.74 
via patch
        sys/dev/mii/brgphyreg.h:        revisions 1.5-1.8
        sys/dev/mii/miivar.h:           revisions 1.61
        sys/dev/pci/pcireg.h:           patch

Sync bge(4) up to if_bge.c rev. 1.287. Sync brgphy(4) up to 1.74.
Fix some bugs on bnx(4).

Common:
- Add device IDs for Broadcom BCM57710, BCM57711(E), BCM57712(E) and
  BCM57766 (pcidevs only).
- Fix BCM5709 PHY detection.
- Fix detection of BGEPHYF_FIBER_{MII|TBI}
- Add BCM5708S support in brgphy(4).
- Don't use the WIRESPEED function for fiber devices.
bge(4):
- Add some Fujitsu's device support from Michael Moll.
- Add BCM57762 support (PR#46961 from Ryo Onodera).
- Add Altima AC1003, APPLE BCM5701, Broadcom BCM5785F. BCM5785G,
  BCM5787F, BCM5719, BCM5720, BCM57766, BCM57782 and BCM57786.
- Fix DMA setting for read/write on conventional PCI bus devices.
  This bug was added in rev. 1.166.
- Fix printing "discarding oversize frame (len=-4)" message and
  crash by NULL pointer dereferencing.
- The BCM5785 is a PCIe chip but does not report PCIe capabilities.
  Check for this chip explicitely and enable PCIe. Fixes
  'firmware handshake timeout'.
- Allow disabling interrupt mitigation.
- Workaround for BCM5906 silicon bug. When auto-negotiation results
  in half-duplex operation, excess collision on the ethernet link may
  cause internal chip delays that may result in subsequent valid
  frames being dropped due to insufficient receive buffer resources.
  (FreeBSD: r214219, r214251, r214292).
- Allow write DMA to request larger DMA burst size to get better
  performance on BCM5785. (FreeBSD r213333: OpenBSD 1.294)
- Enable TX MAC state machine lockup fix for both BCM5755 or higher
  and BCM5906. Publicly available data sheet just says it may happen
  due to corrupted TxMbuf. (FreeBSD r214216)
- Follow Broadcom datasheet:
  Delay 100 microseconds after enabling transmit MAC.
  Delay 10 microseconds after enabling receive MAC. (FreeBSD
  r241220)
- Insert the completion barrier between register write and the
  consecutive delay(). It will fix some device timeout problems we have
  seen before.
- Add DELAY(40) after turning on write DMA state machine.
- Add some workarounds for 5717 A0 and 5776[56] to be stable.
- Check BGE_RXBDFLAG_IPV6 flag for 5717_PLUS case. Note that
  {tcp,udp}6csum flag is currently not added in the capability.
- Add delay after clearing BGE_MACMODE_TBI_SEND_CFGS for the link
  checking.
- Do not touch the jumbo replenish threshold register on chips that do
  not have jumbo support.
- Wait for the bootcode to complete initialization for 5717 and newer
  devices.
- 5718 and 57785 document say we should wait 100us in init.
- Fix a bug that chips which have BCM5906 ASIC touch GPIO wrongly.
- Fix the setting of Tx Random Backoff Register.
- Check the hardware config words and print them.
- Set BGE_MISC_CTL's byte/word swap options before using
  bge_readmem_ind(). Fixes PR#47716.
- For BGE_IS_575X_PLUS() devices, don't set
  BGE_RXLPSTATCONTROL_DACK_FIX bits because these bits are reserved.
- Document says 5717 and newer chips have no
  BGE_PCISTATE_INTR_NOT_ACTIVE bit, so don't use the bit on those
  chips. Same as OpenBSD.
- Fix a bug that the PHY address bits in MI_MODE register is wrongly
  cleard. Set the PHY address correctly.
- Use BGE_SETBIT() instead of CSR_WRITE_4() for the BGE_MISC_LOCAL_CTL
  register to not to modify some GPIO bits.
- Set DMA watermark depend on the PCI max payload size.
- Set BGE_JUMBO_CAPABLE correctly.
- Fix a link detect bug on non-autopoll systems.
- Change the TX ring size for 5717 series and 57764 series.
- Set maximum read byte count to 2048 for PCI-X BCM5703/5704 devices.
- For PCI-X BCM5704, set maximum outstanding split transactions to 0.
- Add 40bit DMA bug workaround(BGEF_40BIT_BUG) from FreeBSD.
  This workaround is for 5714/5715 controllers and is not actually a
  MAC controller bug but an issue with the embedded PCIe to PCI-X
  bridge in the device. This change uses bus_dmatag_subregion(),
  so this workaround won't work on some archs which doesn't support
  bus_dmatag_subregion().
- Add 2500SX support (not tested).
- Don't use the PHY Auto Poll Mode on many chips. This fixes a bug
  that MII Fiber NIC drop packet about 50%. Tested on HP Moonshot.
- Add workaround for PR#48451. Some BCM5717-5720 based systems getNMI
  on boot. This problem doesn't occur when we don't use prefetchable
  memory in the APE area. Tested with HP MicroServer Gen8.
- In the BCM5703, the DMA read watermark should be set to less than
  or equal to the maximum memory read byte count of the PCI-X command
  register.
- Fix a bug that BGE_PHY_TEST_CTRL_REG isn't set correctly on some
  PCIe devices.
- Use another firmware command in bge_asf_driver_up(). Same as Linux.
  This change fixes a bug that watchdog timeout occurs every 25-30
  minutes on HP ML110 G6 reported enami@ in PR#49657.
- Fix mbuf leak on failure.
- Remove PCI_PRODUCT_BROADCOM_BCM5724 and
  PCI_PRODUCT_BROADCOM_BCM5750M. These devices have not released to
  public.
- Add some workaround code for BGE_ASICREV_BCM5784 from Linux.
- Change some printf() to aprint_*().
- Fix typo in comments.
- Cleanup.
brgphy(4):
- Fix bit definition of BRGPHY_MRBE_MSG_PG5_NP_T2 from FreeBSD.
- Add BCM5481, BCM5709S, BCM5756, BCM5717C, BCM5720C, BCM5785,
  BCM57765(PR#46961), BCM57780
- In brgphyattach(), set sc_isbge, sc_isbnx and sc_phyflags before
  PHY_RESET() because brgphy_reset() refers those flags.
- Call brgpy specific autonego function in MII_TICK. Before this
  commit, only MII_MEDIACHG calls brgphy_mii_phy_auto() and MII_TICK
  calls MI mii_phy_auto(). That was not intended.
- Remove extra delay in brgphy_mii_phy_auto. Same as {Free,Open}BSD.
bnx(4):
- Add missing ifmedia_delete_instance() in bnx_detach().
- Fix a bug that BNX_NO_WOL_FLAG isn't correctly set on some chips.
  Reported by From Henning Petersen in PR#44151.
- Fix SERDES initialization.
- Get out of the interrupt handler early if !IFF_RUNNING.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.6.8.2 src/sys/dev/pci/if_bnxvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Added files:

Index: src/sys/dev/pci/if_bnxvar.h
diff -u /dev/null src/sys/dev/pci/if_bnxvar.h:1.6.8.2
--- /dev/null	Mon Nov  9 12:35:32 2015
+++ src/sys/dev/pci/if_bnxvar.h	Mon Nov  9 12:35:32 2015
@@ -0,0 +1,1329 @@
+/* $NetBSD */
+/*-
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jean-Yves Migeon <j...@netbsd.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/bce/if_bcereg.h,v 1.4 2006/05/04 00:34:07 mjacob Exp $
+ */
+
+#ifndef	_DEV_PCI_IF_BNXVAR_H_
+#define _DEV_PCI_IF_BNXVAR_H_
+
+#ifdef _KERNEL_OPT
+#include "bpfilter.h"
+#include "opt_inet.h"
+#endif
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sockio.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+//#include <sys/workqueue.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_ether.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/in_var.h>
+#include <netinet/ip.h>
+#include <netinet/if_inarp.h>
+#endif
+
+#include <net/if_vlanvar.h>
+
+#if NBPFILTER > 0
+#include <net/bpf.h>
+#endif
+
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcidevs.h>
+
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+#include <dev/mii/miidevs.h>
+#include <dev/mii/brgphyreg.h>
+
+/*
+ * PCI registers defined in the PCI 2.2 spec.
+ */
+#define BNX_PCI_BAR0			0x10
+#define BNX_PCI_PCIX_CMD		0x40
+
+/****************************************************************************/
+/* Convenience definitions.                                                 */
+/****************************************************************************/
+#define REG_WR(sc, reg, val)		bus_space_write_4(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_WR16(sc, reg, val)		bus_space_write_2(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_RD(sc, reg)			bus_space_read_4(sc->bnx_btag, sc->bnx_bhandle, reg)
+#define REG_RD_IND(sc, offset)		bnx_reg_rd_ind(sc, offset)
+#define REG_WR_IND(sc, offset, val)	bnx_reg_wr_ind(sc, offset, val)
+#define CTX_WR(sc, cid_addr, offset, val)	bnx_ctx_wr(sc, cid_addr, offset, val)
+#define BNX_SETBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) | (x)))
+#define BNX_CLRBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) & ~(x)))
+#define	PCI_SETBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) | (x)))
+#define PCI_CLRBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) & ~(x)))
+
+/****************************************************************************/
+/* BNX Device State Data Structure                                          */
+/****************************************************************************/
+
+#define BNX_STATUS_BLK_SZ		sizeof(struct status_block)
+#define BNX_STATS_BLK_SZ		sizeof(struct statistics_block)
+#define BNX_TX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+#define BNX_RX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+
+struct bnx_pkt {
+	TAILQ_ENTRY(bnx_pkt)     pkt_entry;
+	bus_dmamap_t             pkt_dmamap;
+	struct mbuf             *pkt_mbuf;
+	u_int16_t                pkt_end_desc;
+};
+
+TAILQ_HEAD(bnx_pkt_list, bnx_pkt);
+
+struct bnx_softc
+{
+	device_t bnx_dev;
+	struct ethercom			bnx_ec;
+	struct pci_attach_args		bnx_pa;
+
+	struct ifmedia		bnx_ifmedia;		/* TBI media info */
+
+	bus_space_tag_t		bnx_btag;		/* Device bus tag */
+	bus_space_handle_t	bnx_bhandle;		/* Device bus handle */
+	bus_size_t		bnx_size;
+
+	void			*bnx_intrhand;		/* Interrupt handler */
+
+	/* ASIC Chip ID. */
+	u_int32_t		bnx_chipid;
+
+	/* General controller flags. */
+	u_int32_t		bnx_flags;
+
+	/* PHY specific flags. */
+	u_int32_t		bnx_phy_flags;
+
+	/* Values that need to be shared with the PHY driver. */
+	u_int32_t		bnx_shared_hw_cfg;
+	u_int32_t		bnx_port_hw_cfg;
+
+	u_int16_t		bus_speed_mhz;		/* PCI bus speed */
+	struct flash_spec	*bnx_flash_info;	/* Flash NVRAM settings */
+	u_int32_t		bnx_flash_size;		/* Flash NVRAM size */
+	u_int32_t		bnx_shmem_base;		/* Shared Memory base address */
+	char *			bnx_name;		/* Name string */
+
+	/* Tracks the version of bootcode firmware. */
+	u_int32_t		bnx_fw_ver;
+
+	/* Tracks the state of the firmware.  0 = Running while any     */
+	/* other value indicates that the firmware is not responding.   */
+	u_int16_t		bnx_fw_timed_out;
+
+	/* An incrementing sequence used to coordinate messages passed   */
+	/* from the driver to the firmware.                              */
+	u_int16_t		bnx_fw_wr_seq;
+
+	/* An incrementing sequence used to let the firmware know that   */
+	/* the driver is still operating.  Without the pulse, management */
+	/* firmware such as IPMI or UMP will operate in OS absent state. */
+	u_int16_t		bnx_fw_drv_pulse_wr_seq;
+
+	/* Ethernet MAC address. */
+	u_char			eaddr[6];
+
+	/* These setting are used by the host coalescing (HC) block to   */
+	/* to control how often the status block, statistics block and   */
+	/* interrupts are generated.                                     */
+	u_int16_t		bnx_tx_quick_cons_trip_int;
+	u_int16_t		bnx_tx_quick_cons_trip;
+	u_int16_t		bnx_rx_quick_cons_trip_int;
+	u_int16_t		bnx_rx_quick_cons_trip;
+	u_int16_t		bnx_comp_prod_trip_int;
+	u_int16_t		bnx_comp_prod_trip;
+	u_int16_t		bnx_tx_ticks_int;
+	u_int16_t		bnx_tx_ticks;
+	u_int16_t		bnx_rx_ticks_int;
+	u_int16_t		bnx_rx_ticks;
+	u_int16_t		bnx_com_ticks_int;
+	u_int16_t		bnx_com_ticks;
+	u_int16_t		bnx_cmd_ticks_int;
+	u_int16_t		bnx_cmd_ticks;
+	u_int32_t		bnx_stats_ticks;
+
+	/* The address of the integrated PHY on the MII bus. */
+	int			bnx_phy_addr;
+
+	/* The device handle for the MII bus child device. */
+	struct mii_data		bnx_mii;
+
+	/* Driver maintained TX chain pointers and byte counter. */
+	u_int16_t		rx_prod;
+	u_int16_t		rx_cons;
+	u_int32_t		rx_prod_bseq;	/* Counts the bytes used.  */
+	u_int16_t		tx_prod;
+	u_int16_t		tx_cons;
+	u_int32_t		tx_prod_bseq;	/* Counts the bytes used.  */
+
+	struct callout		bnx_timeout;
+
+	/* Frame size and mbuf allocation size for RX frames. */
+	u_int32_t		max_frame_size;
+	int			mbuf_alloc_size;
+
+	/* Receive mode settings (i.e promiscuous, multicast, etc.). */
+	u_int32_t		rx_mode;
+
+	/* Bus tag for the bnx controller. */
+	bus_dma_tag_t		bnx_dmatag;
+
+	/* H/W maintained TX buffer descriptor chain structure. */
+	bus_dma_segment_t	tx_bd_chain_seg[TX_PAGES];
+	int			tx_bd_chain_rseg[TX_PAGES];
+	bus_dmamap_t		tx_bd_chain_map[TX_PAGES];
+	struct tx_bd		*tx_bd_chain[TX_PAGES];
+	bus_addr_t		tx_bd_chain_paddr[TX_PAGES];
+
+	/* H/W maintained RX buffer descriptor chain structure. */
+	bus_dma_segment_t	rx_bd_chain_seg[RX_PAGES];
+	int			rx_bd_chain_rseg[RX_PAGES];
+	bus_dmamap_t		rx_bd_chain_map[RX_PAGES];
+	struct rx_bd		*rx_bd_chain[RX_PAGES];
+	bus_addr_t		rx_bd_chain_paddr[RX_PAGES];
+
+	/* H/W maintained status block. */
+	bus_dma_segment_t	status_seg;
+	int			status_rseg;
+	bus_dmamap_t		status_map;
+	struct status_block	*status_block;		/* virtual address */
+	bus_addr_t		status_block_paddr;	/* Physical address */
+
+	/* H/W maintained context block */
+	int			ctx_pages;
+	bus_dma_segment_t	ctx_segs[4];
+	int			ctx_rsegs[4];
+	bus_dmamap_t		ctx_map[4];
+	void			*ctx_block[4];
+
+	/* Driver maintained status block values. */
+	u_int16_t		last_status_idx;
+	u_int16_t		hw_rx_cons;
+	u_int16_t		hw_tx_cons;
+
+	/* H/W maintained statistics block. */
+	bus_dma_segment_t	stats_seg;
+	int			stats_rseg;
+	bus_dmamap_t		stats_map;
+	struct statistics_block *stats_block;		/* Virtual address */
+	bus_addr_t		stats_block_paddr;	/* Physical address */
+
+	/* Bus tag for RX/TX mbufs. */
+	bus_dma_segment_t	rx_mbuf_seg;
+	int			rx_mbuf_rseg;
+	bus_dma_segment_t	tx_mbuf_seg;
+	int			tx_mbuf_rseg;
+
+	/* S/W maintained mbuf TX chain structure. */
+	kmutex_t		tx_pkt_mtx;
+	u_int			tx_pkt_count;
+	struct bnx_pkt_list	tx_free_pkts;
+	struct bnx_pkt_list	tx_used_pkts;
+
+	/* S/W maintained mbuf RX chain structure. */
+	bus_dmamap_t		rx_mbuf_map[TOTAL_RX_BD];
+	struct mbuf		*rx_mbuf_ptr[TOTAL_RX_BD];
+
+	/* Track the number of rx_bd and tx_bd's in use. */
+	u_int16_t 		free_rx_bd;
+	u_int16_t		max_rx_bd;
+	u_int16_t		used_tx_bd;
+	u_int16_t		max_tx_bd;
+
+	/* Provides access to hardware statistics through sysctl. */
+	u_int64_t 	stat_IfHCInOctets;
+	u_int64_t 	stat_IfHCInBadOctets;
+	u_int64_t 	stat_IfHCOutOctets;
+	u_int64_t 	stat_IfHCOutBadOctets;
+	u_int64_t 	stat_IfHCInUcastPkts;
+	u_int64_t 	stat_IfHCInMulticastPkts;
+	u_int64_t 	stat_IfHCInBroadcastPkts;
+	u_int64_t 	stat_IfHCOutUcastPkts;
+	u_int64_t 	stat_IfHCOutMulticastPkts;
+	u_int64_t 	stat_IfHCOutBroadcastPkts;
+
+	u_int32_t	stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
+	u_int32_t	stat_Dot3StatsCarrierSenseErrors;
+	u_int32_t	stat_Dot3StatsFCSErrors;
+	u_int32_t	stat_Dot3StatsAlignmentErrors;
+	u_int32_t	stat_Dot3StatsSingleCollisionFrames;
+	u_int32_t	stat_Dot3StatsMultipleCollisionFrames;
+	u_int32_t	stat_Dot3StatsDeferredTransmissions;
+	u_int32_t	stat_Dot3StatsExcessiveCollisions;
+	u_int32_t	stat_Dot3StatsLateCollisions;
+	u_int32_t	stat_EtherStatsCollisions;
+	u_int32_t	stat_EtherStatsFragments;
+	u_int32_t	stat_EtherStatsJabbers;
+	u_int32_t	stat_EtherStatsUndersizePkts;
+	u_int32_t	stat_EtherStatsOverrsizePkts;
+	u_int32_t	stat_EtherStatsPktsRx64Octets;
+	u_int32_t	stat_EtherStatsPktsRx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsRx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsRx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsRx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsRx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsRx1523Octetsto9022Octets;
+	u_int32_t	stat_EtherStatsPktsTx64Octets;
+	u_int32_t	stat_EtherStatsPktsTx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsTx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsTx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsTx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsTx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsTx1523Octetsto9022Octets;
+	u_int32_t	stat_XonPauseFramesReceived;
+	u_int32_t	stat_XoffPauseFramesReceived;
+	u_int32_t	stat_OutXonSent;
+	u_int32_t	stat_OutXoffSent;
+	u_int32_t	stat_FlowControlDone;
+	u_int32_t	stat_MacControlFramesReceived;
+	u_int32_t	stat_XoffStateEntered;
+	u_int32_t	stat_IfInFramesL2FilterDiscards;
+	u_int32_t	stat_IfInRuleCheckerDiscards;
+	u_int32_t	stat_IfInFTQDiscards;
+	u_int32_t	stat_IfInMBUFDiscards;
+	u_int32_t	stat_IfInRuleCheckerP4Hit;
+	u_int32_t	stat_CatchupInRuleCheckerDiscards;
+	u_int32_t	stat_CatchupInFTQDiscards;
+	u_int32_t	stat_CatchupInMBUFDiscards;
+	u_int32_t	stat_CatchupInRuleCheckerP4Hit;
+
+	/* Mbuf allocation failure counter. */
+	u_int32_t		mbuf_alloc_failed;
+
+	/* TX DMA mapping failure counter. */
+	u_int32_t		tx_dma_map_failures;
+
+#ifdef BNX_DEBUG
+	/* Track the number of enqueued mbufs. */
+	int			tx_mbuf_alloc;
+	int			rx_mbuf_alloc;
+
+	/* Track the distribution buffer segments. */
+	u_int32_t		rx_mbuf_segs[BNX_MAX_SEGMENTS+1];
+
+	/* Track how many and what type of interrupts are generated. */
+	u_int32_t		interrupts_generated;
+	u_int32_t		interrupts_handled;
+	u_int32_t		rx_interrupts;
+	u_int32_t		tx_interrupts;
+
+	u_int32_t rx_low_watermark;	/* Lowest number of rx_bd's free. */
+	u_int32_t rx_empty_count;	/* Number of times the RX chain was empty. */
+	u_int32_t tx_hi_watermark;	/* Greatest number of tx_bd's used. */
+	u_int32_t tx_full_count;	/* Number of times the TX chain was full. */
+	u_int32_t mbuf_sim_alloc_failed;/* Mbuf simulated allocation failure counter. */
+	u_int32_t l2fhdr_status_errors;
+	u_int32_t unexpected_attentions;
+	u_int32_t lost_status_block_updates;
+#endif
+};
+
+struct bnx_firmware_header {
+	int		bnx_COM_FwReleaseMajor;
+	int		bnx_COM_FwReleaseMinor;
+	int		bnx_COM_FwReleaseFix;
+	u_int32_t	bnx_COM_FwStartAddr;
+	u_int32_t	bnx_COM_FwTextAddr;
+	int		bnx_COM_FwTextLen;
+	u_int32_t	bnx_COM_FwDataAddr;
+	int		bnx_COM_FwDataLen;
+	u_int32_t	bnx_COM_FwRodataAddr;
+	int		bnx_COM_FwRodataLen;
+	u_int32_t	bnx_COM_FwBssAddr;
+	int		bnx_COM_FwBssLen;
+	u_int32_t	bnx_COM_FwSbssAddr;
+	int		bnx_COM_FwSbssLen;
+
+	int		bnx_RXP_FwReleaseMajor;
+	int		bnx_RXP_FwReleaseMinor;
+	int		bnx_RXP_FwReleaseFix;
+	u_int32_t	bnx_RXP_FwStartAddr;
+	u_int32_t	bnx_RXP_FwTextAddr;
+	int		bnx_RXP_FwTextLen;
+	u_int32_t	bnx_RXP_FwDataAddr;
+	int		bnx_RXP_FwDataLen;
+	u_int32_t	bnx_RXP_FwRodataAddr;
+	int		bnx_RXP_FwRodataLen;
+	u_int32_t	bnx_RXP_FwBssAddr;
+	int		bnx_RXP_FwBssLen;
+	u_int32_t	bnx_RXP_FwSbssAddr;
+	int		bnx_RXP_FwSbssLen;
+	
+	int		bnx_TPAT_FwReleaseMajor;
+	int		bnx_TPAT_FwReleaseMinor;
+	int		bnx_TPAT_FwReleaseFix;
+	u_int32_t	bnx_TPAT_FwStartAddr;
+	u_int32_t	bnx_TPAT_FwTextAddr;
+	int		bnx_TPAT_FwTextLen;
+	u_int32_t	bnx_TPAT_FwDataAddr;
+	int		bnx_TPAT_FwDataLen;
+	u_int32_t	bnx_TPAT_FwRodataAddr;
+	int		bnx_TPAT_FwRodataLen;
+	u_int32_t	bnx_TPAT_FwBssAddr;
+	int		bnx_TPAT_FwBssLen;
+	u_int32_t	bnx_TPAT_FwSbssAddr;
+	int		bnx_TPAT_FwSbssLen;
+
+	int		bnx_TXP_FwReleaseMajor;
+	int		bnx_TXP_FwReleaseMinor;
+	int		bnx_TXP_FwReleaseFix;
+	u_int32_t	bnx_TXP_FwStartAddr;
+	u_int32_t	bnx_TXP_FwTextAddr;
+	int		bnx_TXP_FwTextLen;
+	u_int32_t	bnx_TXP_FwDataAddr;
+	int		bnx_TXP_FwDataLen;
+	u_int32_t	bnx_TXP_FwRodataAddr;
+	int		bnx_TXP_FwRodataLen;
+	u_int32_t	bnx_TXP_FwBssAddr;
+	int		bnx_TXP_FwBssLen;
+	u_int32_t	bnx_TXP_FwSbssAddr;
+	int		bnx_TXP_FwSbssLen;
+
+	/* Followed by blocks of data, each sized according to
+	 * the (rather obvious) block length stated above.
+	 *
+	 * bnx_COM_FwText, bnx_COM_FwData, bnx_COM_FwRodata,
+	 * bnx_COM_FwBss, bnx_COM_FwSbss,
+	 * 
+	 * bnx_RXP_FwText, bnx_RXP_FwData, bnx_RXP_FwRodata,
+	 * bnx_RXP_FwBss, bnx_RXP_FwSbss,
+	 * 
+	 * bnx_TPAT_FwText, bnx_TPAT_FwData, bnx_TPAT_FwRodata,
+	 * bnx_TPAT_FwBss, bnx_TPAT_FwSbss,
+	 * 
+	 * bnx_TXP_FwText, bnx_TXP_FwData, bnx_TXP_FwRodata,
+	 * bnx_TXP_FwBss, bnx_TXP_FwSbss,
+	 */
+};
+
+#endif /* _DEV_PCI_IF_BNXVAR_H_ */
+/* $NetBSD */
+/*-
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jean-Yves Migeon <j...@netbsd.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/bce/if_bcereg.h,v 1.4 2006/05/04 00:34:07 mjacob Exp $
+ */
+
+#ifndef	_DEV_PCI_IF_BNXVAR_H_
+#define _DEV_PCI_IF_BNXVAR_H_
+
+#ifdef _KERNEL_OPT
+#include "bpfilter.h"
+#include "opt_inet.h"
+#endif
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sockio.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+//#include <sys/workqueue.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_ether.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/in_var.h>
+#include <netinet/ip.h>
+#include <netinet/if_inarp.h>
+#endif
+
+#include <net/if_vlanvar.h>
+
+#if NBPFILTER > 0
+#include <net/bpf.h>
+#endif
+
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcidevs.h>
+
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+#include <dev/mii/miidevs.h>
+#include <dev/mii/brgphyreg.h>
+
+/*
+ * PCI registers defined in the PCI 2.2 spec.
+ */
+#define BNX_PCI_BAR0			0x10
+#define BNX_PCI_PCIX_CMD		0x40
+
+/****************************************************************************/
+/* Convenience definitions.                                                 */
+/****************************************************************************/
+#define REG_WR(sc, reg, val)		bus_space_write_4(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_WR16(sc, reg, val)		bus_space_write_2(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_RD(sc, reg)			bus_space_read_4(sc->bnx_btag, sc->bnx_bhandle, reg)
+#define REG_RD_IND(sc, offset)		bnx_reg_rd_ind(sc, offset)
+#define REG_WR_IND(sc, offset, val)	bnx_reg_wr_ind(sc, offset, val)
+#define CTX_WR(sc, cid_addr, offset, val)	bnx_ctx_wr(sc, cid_addr, offset, val)
+#define BNX_SETBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) | (x)))
+#define BNX_CLRBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) & ~(x)))
+#define	PCI_SETBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) | (x)))
+#define PCI_CLRBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) & ~(x)))
+
+/****************************************************************************/
+/* BNX Device State Data Structure                                          */
+/****************************************************************************/
+
+#define BNX_STATUS_BLK_SZ		sizeof(struct status_block)
+#define BNX_STATS_BLK_SZ		sizeof(struct statistics_block)
+#define BNX_TX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+#define BNX_RX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+
+struct bnx_pkt {
+	TAILQ_ENTRY(bnx_pkt)     pkt_entry;
+	bus_dmamap_t             pkt_dmamap;
+	struct mbuf             *pkt_mbuf;
+	u_int16_t                pkt_end_desc;
+};
+
+TAILQ_HEAD(bnx_pkt_list, bnx_pkt);
+
+struct bnx_softc
+{
+	device_t bnx_dev;
+	struct ethercom			bnx_ec;
+	struct pci_attach_args		bnx_pa;
+
+	struct ifmedia		bnx_ifmedia;		/* TBI media info */
+
+	bus_space_tag_t		bnx_btag;		/* Device bus tag */
+	bus_space_handle_t	bnx_bhandle;		/* Device bus handle */
+	bus_size_t		bnx_size;
+
+	void			*bnx_intrhand;		/* Interrupt handler */
+
+	/* ASIC Chip ID. */
+	u_int32_t		bnx_chipid;
+
+	/* General controller flags. */
+	u_int32_t		bnx_flags;
+
+	/* PHY specific flags. */
+	u_int32_t		bnx_phy_flags;
+
+	/* Values that need to be shared with the PHY driver. */
+	u_int32_t		bnx_shared_hw_cfg;
+	u_int32_t		bnx_port_hw_cfg;
+
+	u_int16_t		bus_speed_mhz;		/* PCI bus speed */
+	struct flash_spec	*bnx_flash_info;	/* Flash NVRAM settings */
+	u_int32_t		bnx_flash_size;		/* Flash NVRAM size */
+	u_int32_t		bnx_shmem_base;		/* Shared Memory base address */
+	char *			bnx_name;		/* Name string */
+
+	/* Tracks the version of bootcode firmware. */
+	u_int32_t		bnx_fw_ver;
+
+	/* Tracks the state of the firmware.  0 = Running while any     */
+	/* other value indicates that the firmware is not responding.   */
+	u_int16_t		bnx_fw_timed_out;
+
+	/* An incrementing sequence used to coordinate messages passed   */
+	/* from the driver to the firmware.                              */
+	u_int16_t		bnx_fw_wr_seq;
+
+	/* An incrementing sequence used to let the firmware know that   */
+	/* the driver is still operating.  Without the pulse, management */
+	/* firmware such as IPMI or UMP will operate in OS absent state. */
+	u_int16_t		bnx_fw_drv_pulse_wr_seq;
+
+	/* Ethernet MAC address. */
+	u_char			eaddr[6];
+
+	/* These setting are used by the host coalescing (HC) block to   */
+	/* to control how often the status block, statistics block and   */
+	/* interrupts are generated.                                     */
+	u_int16_t		bnx_tx_quick_cons_trip_int;
+	u_int16_t		bnx_tx_quick_cons_trip;
+	u_int16_t		bnx_rx_quick_cons_trip_int;
+	u_int16_t		bnx_rx_quick_cons_trip;
+	u_int16_t		bnx_comp_prod_trip_int;
+	u_int16_t		bnx_comp_prod_trip;
+	u_int16_t		bnx_tx_ticks_int;
+	u_int16_t		bnx_tx_ticks;
+	u_int16_t		bnx_rx_ticks_int;
+	u_int16_t		bnx_rx_ticks;
+	u_int16_t		bnx_com_ticks_int;
+	u_int16_t		bnx_com_ticks;
+	u_int16_t		bnx_cmd_ticks_int;
+	u_int16_t		bnx_cmd_ticks;
+	u_int32_t		bnx_stats_ticks;
+
+	/* The address of the integrated PHY on the MII bus. */
+	int			bnx_phy_addr;
+
+	/* The device handle for the MII bus child device. */
+	struct mii_data		bnx_mii;
+
+	/* Driver maintained TX chain pointers and byte counter. */
+	u_int16_t		rx_prod;
+	u_int16_t		rx_cons;
+	u_int32_t		rx_prod_bseq;	/* Counts the bytes used.  */
+	u_int16_t		tx_prod;
+	u_int16_t		tx_cons;
+	u_int32_t		tx_prod_bseq;	/* Counts the bytes used.  */
+
+	struct callout		bnx_timeout;
+
+	/* Frame size and mbuf allocation size for RX frames. */
+	u_int32_t		max_frame_size;
+	int			mbuf_alloc_size;
+
+	/* Receive mode settings (i.e promiscuous, multicast, etc.). */
+	u_int32_t		rx_mode;
+
+	/* Bus tag for the bnx controller. */
+	bus_dma_tag_t		bnx_dmatag;
+
+	/* H/W maintained TX buffer descriptor chain structure. */
+	bus_dma_segment_t	tx_bd_chain_seg[TX_PAGES];
+	int			tx_bd_chain_rseg[TX_PAGES];
+	bus_dmamap_t		tx_bd_chain_map[TX_PAGES];
+	struct tx_bd		*tx_bd_chain[TX_PAGES];
+	bus_addr_t		tx_bd_chain_paddr[TX_PAGES];
+
+	/* H/W maintained RX buffer descriptor chain structure. */
+	bus_dma_segment_t	rx_bd_chain_seg[RX_PAGES];
+	int			rx_bd_chain_rseg[RX_PAGES];
+	bus_dmamap_t		rx_bd_chain_map[RX_PAGES];
+	struct rx_bd		*rx_bd_chain[RX_PAGES];
+	bus_addr_t		rx_bd_chain_paddr[RX_PAGES];
+
+	/* H/W maintained status block. */
+	bus_dma_segment_t	status_seg;
+	int			status_rseg;
+	bus_dmamap_t		status_map;
+	struct status_block	*status_block;		/* virtual address */
+	bus_addr_t		status_block_paddr;	/* Physical address */
+
+	/* H/W maintained context block */
+	int			ctx_pages;
+	bus_dma_segment_t	ctx_segs[4];
+	int			ctx_rsegs[4];
+	bus_dmamap_t		ctx_map[4];
+	void			*ctx_block[4];
+
+	/* Driver maintained status block values. */
+	u_int16_t		last_status_idx;
+	u_int16_t		hw_rx_cons;
+	u_int16_t		hw_tx_cons;
+
+	/* H/W maintained statistics block. */
+	bus_dma_segment_t	stats_seg;
+	int			stats_rseg;
+	bus_dmamap_t		stats_map;
+	struct statistics_block *stats_block;		/* Virtual address */
+	bus_addr_t		stats_block_paddr;	/* Physical address */
+
+	/* Bus tag for RX/TX mbufs. */
+	bus_dma_segment_t	rx_mbuf_seg;
+	int			rx_mbuf_rseg;
+	bus_dma_segment_t	tx_mbuf_seg;
+	int			tx_mbuf_rseg;
+
+	/* S/W maintained mbuf TX chain structure. */
+	kmutex_t		tx_pkt_mtx;
+	u_int			tx_pkt_count;
+	struct bnx_pkt_list	tx_free_pkts;
+	struct bnx_pkt_list	tx_used_pkts;
+
+	/* S/W maintained mbuf RX chain structure. */
+	bus_dmamap_t		rx_mbuf_map[TOTAL_RX_BD];
+	struct mbuf		*rx_mbuf_ptr[TOTAL_RX_BD];
+
+	/* Track the number of rx_bd and tx_bd's in use. */
+	u_int16_t 		free_rx_bd;
+	u_int16_t		max_rx_bd;
+	u_int16_t		used_tx_bd;
+	u_int16_t		max_tx_bd;
+
+	/* Provides access to hardware statistics through sysctl. */
+	u_int64_t 	stat_IfHCInOctets;
+	u_int64_t 	stat_IfHCInBadOctets;
+	u_int64_t 	stat_IfHCOutOctets;
+	u_int64_t 	stat_IfHCOutBadOctets;
+	u_int64_t 	stat_IfHCInUcastPkts;
+	u_int64_t 	stat_IfHCInMulticastPkts;
+	u_int64_t 	stat_IfHCInBroadcastPkts;
+	u_int64_t 	stat_IfHCOutUcastPkts;
+	u_int64_t 	stat_IfHCOutMulticastPkts;
+	u_int64_t 	stat_IfHCOutBroadcastPkts;
+
+	u_int32_t	stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
+	u_int32_t	stat_Dot3StatsCarrierSenseErrors;
+	u_int32_t	stat_Dot3StatsFCSErrors;
+	u_int32_t	stat_Dot3StatsAlignmentErrors;
+	u_int32_t	stat_Dot3StatsSingleCollisionFrames;
+	u_int32_t	stat_Dot3StatsMultipleCollisionFrames;
+	u_int32_t	stat_Dot3StatsDeferredTransmissions;
+	u_int32_t	stat_Dot3StatsExcessiveCollisions;
+	u_int32_t	stat_Dot3StatsLateCollisions;
+	u_int32_t	stat_EtherStatsCollisions;
+	u_int32_t	stat_EtherStatsFragments;
+	u_int32_t	stat_EtherStatsJabbers;
+	u_int32_t	stat_EtherStatsUndersizePkts;
+	u_int32_t	stat_EtherStatsOverrsizePkts;
+	u_int32_t	stat_EtherStatsPktsRx64Octets;
+	u_int32_t	stat_EtherStatsPktsRx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsRx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsRx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsRx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsRx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsRx1523Octetsto9022Octets;
+	u_int32_t	stat_EtherStatsPktsTx64Octets;
+	u_int32_t	stat_EtherStatsPktsTx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsTx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsTx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsTx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsTx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsTx1523Octetsto9022Octets;
+	u_int32_t	stat_XonPauseFramesReceived;
+	u_int32_t	stat_XoffPauseFramesReceived;
+	u_int32_t	stat_OutXonSent;
+	u_int32_t	stat_OutXoffSent;
+	u_int32_t	stat_FlowControlDone;
+	u_int32_t	stat_MacControlFramesReceived;
+	u_int32_t	stat_XoffStateEntered;
+	u_int32_t	stat_IfInFramesL2FilterDiscards;
+	u_int32_t	stat_IfInRuleCheckerDiscards;
+	u_int32_t	stat_IfInFTQDiscards;
+	u_int32_t	stat_IfInMBUFDiscards;
+	u_int32_t	stat_IfInRuleCheckerP4Hit;
+	u_int32_t	stat_CatchupInRuleCheckerDiscards;
+	u_int32_t	stat_CatchupInFTQDiscards;
+	u_int32_t	stat_CatchupInMBUFDiscards;
+	u_int32_t	stat_CatchupInRuleCheckerP4Hit;
+
+	/* Mbuf allocation failure counter. */
+	u_int32_t		mbuf_alloc_failed;
+
+	/* TX DMA mapping failure counter. */
+	u_int32_t		tx_dma_map_failures;
+
+#ifdef BNX_DEBUG
+	/* Track the number of enqueued mbufs. */
+	int			tx_mbuf_alloc;
+	int			rx_mbuf_alloc;
+
+	/* Track the distribution buffer segments. */
+	u_int32_t		rx_mbuf_segs[BNX_MAX_SEGMENTS+1];
+
+	/* Track how many and what type of interrupts are generated. */
+	u_int32_t		interrupts_generated;
+	u_int32_t		interrupts_handled;
+	u_int32_t		rx_interrupts;
+	u_int32_t		tx_interrupts;
+
+	u_int32_t rx_low_watermark;	/* Lowest number of rx_bd's free. */
+	u_int32_t rx_empty_count;	/* Number of times the RX chain was empty. */
+	u_int32_t tx_hi_watermark;	/* Greatest number of tx_bd's used. */
+	u_int32_t tx_full_count;	/* Number of times the TX chain was full. */
+	u_int32_t mbuf_sim_alloc_failed;/* Mbuf simulated allocation failure counter. */
+	u_int32_t l2fhdr_status_errors;
+	u_int32_t unexpected_attentions;
+	u_int32_t lost_status_block_updates;
+#endif
+};
+
+struct bnx_firmware_header {
+	int		bnx_COM_FwReleaseMajor;
+	int		bnx_COM_FwReleaseMinor;
+	int		bnx_COM_FwReleaseFix;
+	u_int32_t	bnx_COM_FwStartAddr;
+	u_int32_t	bnx_COM_FwTextAddr;
+	int		bnx_COM_FwTextLen;
+	u_int32_t	bnx_COM_FwDataAddr;
+	int		bnx_COM_FwDataLen;
+	u_int32_t	bnx_COM_FwRodataAddr;
+	int		bnx_COM_FwRodataLen;
+	u_int32_t	bnx_COM_FwBssAddr;
+	int		bnx_COM_FwBssLen;
+	u_int32_t	bnx_COM_FwSbssAddr;
+	int		bnx_COM_FwSbssLen;
+
+	int		bnx_RXP_FwReleaseMajor;
+	int		bnx_RXP_FwReleaseMinor;
+	int		bnx_RXP_FwReleaseFix;
+	u_int32_t	bnx_RXP_FwStartAddr;
+	u_int32_t	bnx_RXP_FwTextAddr;
+	int		bnx_RXP_FwTextLen;
+	u_int32_t	bnx_RXP_FwDataAddr;
+	int		bnx_RXP_FwDataLen;
+	u_int32_t	bnx_RXP_FwRodataAddr;
+	int		bnx_RXP_FwRodataLen;
+	u_int32_t	bnx_RXP_FwBssAddr;
+	int		bnx_RXP_FwBssLen;
+	u_int32_t	bnx_RXP_FwSbssAddr;
+	int		bnx_RXP_FwSbssLen;
+	
+	int		bnx_TPAT_FwReleaseMajor;
+	int		bnx_TPAT_FwReleaseMinor;
+	int		bnx_TPAT_FwReleaseFix;
+	u_int32_t	bnx_TPAT_FwStartAddr;
+	u_int32_t	bnx_TPAT_FwTextAddr;
+	int		bnx_TPAT_FwTextLen;
+	u_int32_t	bnx_TPAT_FwDataAddr;
+	int		bnx_TPAT_FwDataLen;
+	u_int32_t	bnx_TPAT_FwRodataAddr;
+	int		bnx_TPAT_FwRodataLen;
+	u_int32_t	bnx_TPAT_FwBssAddr;
+	int		bnx_TPAT_FwBssLen;
+	u_int32_t	bnx_TPAT_FwSbssAddr;
+	int		bnx_TPAT_FwSbssLen;
+
+	int		bnx_TXP_FwReleaseMajor;
+	int		bnx_TXP_FwReleaseMinor;
+	int		bnx_TXP_FwReleaseFix;
+	u_int32_t	bnx_TXP_FwStartAddr;
+	u_int32_t	bnx_TXP_FwTextAddr;
+	int		bnx_TXP_FwTextLen;
+	u_int32_t	bnx_TXP_FwDataAddr;
+	int		bnx_TXP_FwDataLen;
+	u_int32_t	bnx_TXP_FwRodataAddr;
+	int		bnx_TXP_FwRodataLen;
+	u_int32_t	bnx_TXP_FwBssAddr;
+	int		bnx_TXP_FwBssLen;
+	u_int32_t	bnx_TXP_FwSbssAddr;
+	int		bnx_TXP_FwSbssLen;
+
+	/* Followed by blocks of data, each sized according to
+	 * the (rather obvious) block length stated above.
+	 *
+	 * bnx_COM_FwText, bnx_COM_FwData, bnx_COM_FwRodata,
+	 * bnx_COM_FwBss, bnx_COM_FwSbss,
+	 *
+	 * bnx_RXP_FwText, bnx_RXP_FwData, bnx_RXP_FwRodata,
+	 * bnx_RXP_FwBss, bnx_RXP_FwSbss,
+	 *
+	 * bnx_TPAT_FwText, bnx_TPAT_FwData, bnx_TPAT_FwRodata,
+	 * bnx_TPAT_FwBss, bnx_TPAT_FwSbss,
+	 *
+	 * bnx_TXP_FwText, bnx_TXP_FwData, bnx_TXP_FwRodata,
+	 * bnx_TXP_FwBss, bnx_TXP_FwSbss,
+	 */
+};
+
+#endif /* _DEV_PCI_IF_BNXVAR_H_ */
+/* $NetBSD */
+/*-
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jean-Yves Migeon <j...@netbsd.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/dev/bce/if_bcereg.h,v 1.4 2006/05/04 00:34:07 mjacob Exp $
+ */
+
+#ifndef	_DEV_PCI_IF_BNXVAR_H_
+#define _DEV_PCI_IF_BNXVAR_H_
+
+#ifdef _KERNEL_OPT
+#include "bpfilter.h"
+#include "opt_inet.h"
+#endif
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sockio.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+//#include <sys/workqueue.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_ether.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/in_var.h>
+#include <netinet/ip.h>
+#include <netinet/if_inarp.h>
+#endif
+
+#include <net/if_vlanvar.h>
+
+#if NBPFILTER > 0
+#include <net/bpf.h>
+#endif
+
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcidevs.h>
+
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+#include <dev/mii/miidevs.h>
+#include <dev/mii/brgphyreg.h>
+
+/*
+ * PCI registers defined in the PCI 2.2 spec.
+ */
+#define BNX_PCI_BAR0			0x10
+#define BNX_PCI_PCIX_CMD		0x40
+
+/****************************************************************************/
+/* Convenience definitions.                                                 */
+/****************************************************************************/
+#define REG_WR(sc, reg, val)		bus_space_write_4(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_WR16(sc, reg, val)		bus_space_write_2(sc->bnx_btag, sc->bnx_bhandle, reg, val)
+#define REG_RD(sc, reg)			bus_space_read_4(sc->bnx_btag, sc->bnx_bhandle, reg)
+#define REG_RD_IND(sc, offset)		bnx_reg_rd_ind(sc, offset)
+#define REG_WR_IND(sc, offset, val)	bnx_reg_wr_ind(sc, offset, val)
+#define CTX_WR(sc, cid_addr, offset, val)	bnx_ctx_wr(sc, cid_addr, offset, val)
+#define BNX_SETBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) | (x)))
+#define BNX_CLRBIT(sc, reg, x)		REG_WR(sc, reg, (REG_RD(sc, reg) & ~(x)))
+#define	PCI_SETBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) | (x)))
+#define PCI_CLRBIT(pc, tag, reg, x)	pci_conf_write(pc, tag, reg, (pci_conf_read(pc, tag, reg) & ~(x)))
+
+/****************************************************************************/
+/* BNX Device State Data Structure                                          */
+/****************************************************************************/
+
+#define BNX_STATUS_BLK_SZ		sizeof(struct status_block)
+#define BNX_STATS_BLK_SZ		sizeof(struct statistics_block)
+#define BNX_TX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+#define BNX_RX_CHAIN_PAGE_SZ	BCM_PAGE_SIZE
+
+struct bnx_pkt {
+	TAILQ_ENTRY(bnx_pkt)     pkt_entry;
+	bus_dmamap_t             pkt_dmamap;
+	struct mbuf             *pkt_mbuf;
+	u_int16_t                pkt_end_desc;
+};
+
+TAILQ_HEAD(bnx_pkt_list, bnx_pkt);
+
+struct bnx_softc
+{
+	device_t bnx_dev;
+	struct ethercom			bnx_ec;
+	struct pci_attach_args		bnx_pa;
+
+	struct ifmedia		bnx_ifmedia;		/* TBI media info */
+
+	bus_space_tag_t		bnx_btag;		/* Device bus tag */
+	bus_space_handle_t	bnx_bhandle;		/* Device bus handle */
+	bus_size_t		bnx_size;
+
+	void			*bnx_intrhand;		/* Interrupt handler */
+
+	/* ASIC Chip ID. */
+	u_int32_t		bnx_chipid;
+
+	/* General controller flags. */
+	u_int32_t		bnx_flags;
+
+	/* PHY specific flags. */
+	u_int32_t		bnx_phy_flags;
+
+	/* Values that need to be shared with the PHY driver. */
+	u_int32_t		bnx_shared_hw_cfg;
+	u_int32_t		bnx_port_hw_cfg;
+
+	u_int16_t		bus_speed_mhz;		/* PCI bus speed */
+	struct flash_spec	*bnx_flash_info;	/* Flash NVRAM settings */
+	u_int32_t		bnx_flash_size;		/* Flash NVRAM size */
+	u_int32_t		bnx_shmem_base;		/* Shared Memory base address */
+	char *			bnx_name;		/* Name string */
+
+	/* Tracks the version of bootcode firmware. */
+	u_int32_t		bnx_fw_ver;
+
+	/* Tracks the state of the firmware.  0 = Running while any     */
+	/* other value indicates that the firmware is not responding.   */
+	u_int16_t		bnx_fw_timed_out;
+
+	/* An incrementing sequence used to coordinate messages passed   */
+	/* from the driver to the firmware.                              */
+	u_int16_t		bnx_fw_wr_seq;
+
+	/* An incrementing sequence used to let the firmware know that   */
+	/* the driver is still operating.  Without the pulse, management */
+	/* firmware such as IPMI or UMP will operate in OS absent state. */
+	u_int16_t		bnx_fw_drv_pulse_wr_seq;
+
+	/* Ethernet MAC address. */
+	u_char			eaddr[6];
+
+	/* These setting are used by the host coalescing (HC) block to   */
+	/* to control how often the status block, statistics block and   */
+	/* interrupts are generated.                                     */
+	u_int16_t		bnx_tx_quick_cons_trip_int;
+	u_int16_t		bnx_tx_quick_cons_trip;
+	u_int16_t		bnx_rx_quick_cons_trip_int;
+	u_int16_t		bnx_rx_quick_cons_trip;
+	u_int16_t		bnx_comp_prod_trip_int;
+	u_int16_t		bnx_comp_prod_trip;
+	u_int16_t		bnx_tx_ticks_int;
+	u_int16_t		bnx_tx_ticks;
+	u_int16_t		bnx_rx_ticks_int;
+	u_int16_t		bnx_rx_ticks;
+	u_int16_t		bnx_com_ticks_int;
+	u_int16_t		bnx_com_ticks;
+	u_int16_t		bnx_cmd_ticks_int;
+	u_int16_t		bnx_cmd_ticks;
+	u_int32_t		bnx_stats_ticks;
+
+	/* The address of the integrated PHY on the MII bus. */
+	int			bnx_phy_addr;
+
+	/* The device handle for the MII bus child device. */
+	struct mii_data		bnx_mii;
+
+	/* Driver maintained TX chain pointers and byte counter. */
+	u_int16_t		rx_prod;
+	u_int16_t		rx_cons;
+	u_int32_t		rx_prod_bseq;	/* Counts the bytes used.  */
+	u_int16_t		tx_prod;
+	u_int16_t		tx_cons;
+	u_int32_t		tx_prod_bseq;	/* Counts the bytes used.  */
+
+	struct callout		bnx_timeout;
+
+	/* Frame size and mbuf allocation size for RX frames. */
+	u_int32_t		max_frame_size;
+	int			mbuf_alloc_size;
+
+	/* Receive mode settings (i.e promiscuous, multicast, etc.). */
+	u_int32_t		rx_mode;
+
+	/* Bus tag for the bnx controller. */
+	bus_dma_tag_t		bnx_dmatag;
+
+	/* H/W maintained TX buffer descriptor chain structure. */
+	bus_dma_segment_t	tx_bd_chain_seg[TX_PAGES];
+	int			tx_bd_chain_rseg[TX_PAGES];
+	bus_dmamap_t		tx_bd_chain_map[TX_PAGES];
+	struct tx_bd		*tx_bd_chain[TX_PAGES];
+	bus_addr_t		tx_bd_chain_paddr[TX_PAGES];
+
+	/* H/W maintained RX buffer descriptor chain structure. */
+	bus_dma_segment_t	rx_bd_chain_seg[RX_PAGES];
+	int			rx_bd_chain_rseg[RX_PAGES];
+	bus_dmamap_t		rx_bd_chain_map[RX_PAGES];
+	struct rx_bd		*rx_bd_chain[RX_PAGES];
+	bus_addr_t		rx_bd_chain_paddr[RX_PAGES];
+
+	/* H/W maintained status block. */
+	bus_dma_segment_t	status_seg;
+	int			status_rseg;
+	bus_dmamap_t		status_map;
+	struct status_block	*status_block;		/* virtual address */
+	bus_addr_t		status_block_paddr;	/* Physical address */
+
+	/* H/W maintained context block */
+	int			ctx_pages;
+	bus_dma_segment_t	ctx_segs[4];
+	int			ctx_rsegs[4];
+	bus_dmamap_t		ctx_map[4];
+	void			*ctx_block[4];
+
+	/* Driver maintained status block values. */
+	u_int16_t		last_status_idx;
+	u_int16_t		hw_rx_cons;
+	u_int16_t		hw_tx_cons;
+
+	/* H/W maintained statistics block. */
+	bus_dma_segment_t	stats_seg;
+	int			stats_rseg;
+	bus_dmamap_t		stats_map;
+	struct statistics_block *stats_block;		/* Virtual address */
+	bus_addr_t		stats_block_paddr;	/* Physical address */
+
+	/* Bus tag for RX/TX mbufs. */
+	bus_dma_segment_t	rx_mbuf_seg;
+	int			rx_mbuf_rseg;
+	bus_dma_segment_t	tx_mbuf_seg;
+	int			tx_mbuf_rseg;
+
+	/* S/W maintained mbuf TX chain structure. */
+	kmutex_t		tx_pkt_mtx;
+	u_int			tx_pkt_count;
+	struct bnx_pkt_list	tx_free_pkts;
+	struct bnx_pkt_list	tx_used_pkts;
+
+	/* S/W maintained mbuf RX chain structure. */
+	bus_dmamap_t		rx_mbuf_map[TOTAL_RX_BD];
+	struct mbuf		*rx_mbuf_ptr[TOTAL_RX_BD];
+
+	/* Track the number of rx_bd and tx_bd's in use. */
+	u_int16_t 		free_rx_bd;
+	u_int16_t		max_rx_bd;
+	u_int16_t		used_tx_bd;
+	u_int16_t		max_tx_bd;
+
+	/* Provides access to hardware statistics through sysctl. */
+	u_int64_t 	stat_IfHCInOctets;
+	u_int64_t 	stat_IfHCInBadOctets;
+	u_int64_t 	stat_IfHCOutOctets;
+	u_int64_t 	stat_IfHCOutBadOctets;
+	u_int64_t 	stat_IfHCInUcastPkts;
+	u_int64_t 	stat_IfHCInMulticastPkts;
+	u_int64_t 	stat_IfHCInBroadcastPkts;
+	u_int64_t 	stat_IfHCOutUcastPkts;
+	u_int64_t 	stat_IfHCOutMulticastPkts;
+	u_int64_t 	stat_IfHCOutBroadcastPkts;
+
+	u_int32_t	stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
+	u_int32_t	stat_Dot3StatsCarrierSenseErrors;
+	u_int32_t	stat_Dot3StatsFCSErrors;
+	u_int32_t	stat_Dot3StatsAlignmentErrors;
+	u_int32_t	stat_Dot3StatsSingleCollisionFrames;
+	u_int32_t	stat_Dot3StatsMultipleCollisionFrames;
+	u_int32_t	stat_Dot3StatsDeferredTransmissions;
+	u_int32_t	stat_Dot3StatsExcessiveCollisions;
+	u_int32_t	stat_Dot3StatsLateCollisions;
+	u_int32_t	stat_EtherStatsCollisions;
+	u_int32_t	stat_EtherStatsFragments;
+	u_int32_t	stat_EtherStatsJabbers;
+	u_int32_t	stat_EtherStatsUndersizePkts;
+	u_int32_t	stat_EtherStatsOverrsizePkts;
+	u_int32_t	stat_EtherStatsPktsRx64Octets;
+	u_int32_t	stat_EtherStatsPktsRx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsRx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsRx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsRx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsRx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsRx1523Octetsto9022Octets;
+	u_int32_t	stat_EtherStatsPktsTx64Octets;
+	u_int32_t	stat_EtherStatsPktsTx65Octetsto127Octets;
+	u_int32_t	stat_EtherStatsPktsTx128Octetsto255Octets;
+	u_int32_t	stat_EtherStatsPktsTx256Octetsto511Octets;
+	u_int32_t	stat_EtherStatsPktsTx512Octetsto1023Octets;
+	u_int32_t	stat_EtherStatsPktsTx1024Octetsto1522Octets;
+	u_int32_t	stat_EtherStatsPktsTx1523Octetsto9022Octets;
+	u_int32_t	stat_XonPauseFramesReceived;
+	u_int32_t	stat_XoffPauseFramesReceived;
+	u_int32_t	stat_OutXonSent;
+	u_int32_t	stat_OutXoffSent;
+	u_int32_t	stat_FlowControlDone;
+	u_int32_t	stat_MacControlFramesReceived;
+	u_int32_t	stat_XoffStateEntered;
+	u_int32_t	stat_IfInFramesL2FilterDiscards;
+	u_int32_t	stat_IfInRuleCheckerDiscards;
+	u_int32_t	stat_IfInFTQDiscards;
+	u_int32_t	stat_IfInMBUFDiscards;
+	u_int32_t	stat_IfInRuleCheckerP4Hit;
+	u_int32_t	stat_CatchupInRuleCheckerDiscards;
+	u_int32_t	stat_CatchupInFTQDiscards;
+	u_int32_t	stat_CatchupInMBUFDiscards;
+	u_int32_t	stat_CatchupInRuleCheckerP4Hit;
+
+	/* Mbuf allocation failure counter. */
+	u_int32_t		mbuf_alloc_failed;
+
+	/* TX DMA mapping failure counter. */
+	u_int32_t		tx_dma_map_failures;
+
+#ifdef BNX_DEBUG
+	/* Track the number of enqueued mbufs. */
+	int			tx_mbuf_alloc;
+	int			rx_mbuf_alloc;
+
+	/* Track the distribution buffer segments. */
+	u_int32_t		rx_mbuf_segs[BNX_MAX_SEGMENTS+1];
+
+	/* Track how many and what type of interrupts are generated. */
+	u_int32_t		interrupts_generated;
+	u_int32_t		interrupts_handled;
+	u_int32_t		rx_interrupts;
+	u_int32_t		tx_interrupts;
+
+	u_int32_t rx_low_watermark;	/* Lowest number of rx_bd's free. */
+	u_int32_t rx_empty_count;	/* Number of times the RX chain was empty. */
+	u_int32_t tx_hi_watermark;	/* Greatest number of tx_bd's used. */
+	u_int32_t tx_full_count;	/* Number of times the TX chain was full. */
+	u_int32_t mbuf_sim_alloc_failed;/* Mbuf simulated allocation failure counter. */
+	u_int32_t l2fhdr_status_errors;
+	u_int32_t unexpected_attentions;
+	u_int32_t lost_status_block_updates;
+#endif
+};
+
+struct bnx_firmware_header {
+	int		bnx_COM_FwReleaseMajor;
+	int		bnx_COM_FwReleaseMinor;
+	int		bnx_COM_FwReleaseFix;
+	u_int32_t	bnx_COM_FwStartAddr;
+	u_int32_t	bnx_COM_FwTextAddr;
+	int		bnx_COM_FwTextLen;
+	u_int32_t	bnx_COM_FwDataAddr;
+	int		bnx_COM_FwDataLen;
+	u_int32_t	bnx_COM_FwRodataAddr;
+	int		bnx_COM_FwRodataLen;
+	u_int32_t	bnx_COM_FwBssAddr;
+	int		bnx_COM_FwBssLen;
+	u_int32_t	bnx_COM_FwSbssAddr;
+	int		bnx_COM_FwSbssLen;
+
+	int		bnx_RXP_FwReleaseMajor;
+	int		bnx_RXP_FwReleaseMinor;
+	int		bnx_RXP_FwReleaseFix;
+	u_int32_t	bnx_RXP_FwStartAddr;
+	u_int32_t	bnx_RXP_FwTextAddr;
+	int		bnx_RXP_FwTextLen;
+	u_int32_t	bnx_RXP_FwDataAddr;
+	int		bnx_RXP_FwDataLen;
+	u_int32_t	bnx_RXP_FwRodataAddr;
+	int		bnx_RXP_FwRodataLen;
+	u_int32_t	bnx_RXP_FwBssAddr;
+	int		bnx_RXP_FwBssLen;
+	u_int32_t	bnx_RXP_FwSbssAddr;
+	int		bnx_RXP_FwSbssLen;
+	
+	int		bnx_TPAT_FwReleaseMajor;
+	int		bnx_TPAT_FwReleaseMinor;
+	int		bnx_TPAT_FwReleaseFix;
+	u_int32_t	bnx_TPAT_FwStartAddr;
+	u_int32_t	bnx_TPAT_FwTextAddr;
+	int		bnx_TPAT_FwTextLen;
+	u_int32_t	bnx_TPAT_FwDataAddr;
+	int		bnx_TPAT_FwDataLen;
+	u_int32_t	bnx_TPAT_FwRodataAddr;
+	int		bnx_TPAT_FwRodataLen;
+	u_int32_t	bnx_TPAT_FwBssAddr;
+	int		bnx_TPAT_FwBssLen;
+	u_int32_t	bnx_TPAT_FwSbssAddr;
+	int		bnx_TPAT_FwSbssLen;
+
+	int		bnx_TXP_FwReleaseMajor;
+	int		bnx_TXP_FwReleaseMinor;
+	int		bnx_TXP_FwReleaseFix;
+	u_int32_t	bnx_TXP_FwStartAddr;
+	u_int32_t	bnx_TXP_FwTextAddr;
+	int		bnx_TXP_FwTextLen;
+	u_int32_t	bnx_TXP_FwDataAddr;
+	int		bnx_TXP_FwDataLen;
+	u_int32_t	bnx_TXP_FwRodataAddr;
+	int		bnx_TXP_FwRodataLen;
+	u_int32_t	bnx_TXP_FwBssAddr;
+	int		bnx_TXP_FwBssLen;
+	u_int32_t	bnx_TXP_FwSbssAddr;
+	int		bnx_TXP_FwSbssLen;
+
+	/* Followed by blocks of data, each sized according to
+	 * the (rather obvious) block length stated above.
+	 *
+	 * bnx_COM_FwText, bnx_COM_FwData, bnx_COM_FwRodata,
+	 * bnx_COM_FwBss, bnx_COM_FwSbss,
+	 *
+	 * bnx_RXP_FwText, bnx_RXP_FwData, bnx_RXP_FwRodata,
+	 * bnx_RXP_FwBss, bnx_RXP_FwSbss,
+	 *
+	 * bnx_TPAT_FwText, bnx_TPAT_FwData, bnx_TPAT_FwRodata,
+	 * bnx_TPAT_FwBss, bnx_TPAT_FwSbss,
+	 *
+	 * bnx_TXP_FwText, bnx_TXP_FwData, bnx_TXP_FwRodata,
+	 * bnx_TXP_FwBss, bnx_TXP_FwSbss,
+	 */
+};
+
+#endif /* _DEV_PCI_IF_BNXVAR_H_ */

Reply via email to