⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 if_wxvar.h

📁 国产CPU-龙芯(loongson)BIOS源代码
💻 H
字号:
/*                   * Principal Author: Matthew Jacob * Copyright (c) 1999, 2001 by Traakan Software * All rights reserved. *               * 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 unmodified, 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 AUTHOR 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 AUTHOR 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. * * Additional Copyright (c) 2001 by Parag Patel * under same licence for MII PHY code. *//* * Softc definitions for the Intel Gigabit Ethernet driver. * * Guidance and inspiration from David Greenman's * if_fxp driver gratefully acknowledged here. *//* * Platform specific defines and inline functions go here. * Look further below for more generic structures. */#include <sys/param.h>#include <sys/systm.h>#include <sys/mbuf.h>#include <sys/protosw.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <sys/errno.h>#include <sys/malloc.h>#include <sys/kernel.h>#include <sys/proc.h>#include <sys/device.h>#include <net/if.h>#include <net/if_dl.h>#include <net/if_types.h>#include <net/if_media.h>#ifdef INET#include <netinet/in.h>#include <netinet/in_systm.h>#include <netinet/in_var.h>#include <netinet/ip.h>#include <netinet/if_ether.h>#endif#ifdef NS#include <netns/ns.h>#include <netns/ns_if.h>#endif#include "bpfilter.h"#if NBPFILTER > 0#include <net/bpf.h>#include <net/bpfdesc.h>#endif#include <machine/bus.h>#include <machine/intr.h>#include <dev/pci/pcireg.h>#include <dev/pci/pcivar.h>#include <dev/pci/pcidevs.h>#include <dev/pci/if_wxreg.h>#include <dev/mii/mii.h>#include <dev/mii/miivar.h>struct wxmdvar {	struct device 		dev;		/* generic device structures */	void *			ih;		/* interrupt handler cookie */	struct arpcom		arpcom;		/* ethernet common part */	pci_chipset_tag_t	pci_pc;	pcitag_t		pci_tag;	u_int32_t		cmdw;#ifndef PMON	struct timeout		tmo;	/* handle for timeouts */#endif	bus_space_tag_t		st;		/* bus space tag */	bus_space_handle_t	sh;		/* bus space handle */	struct ifmedia 		ifm;	int			locked;	struct mii_data		mii_data;	int			spl;};#define	wx_dev		w.dev#define	wx_enaddr	w.arpcom.ac_enaddr#define	wx_cmdw		w.cmdw#define	wx_media	w.ifm#define	wx_tmo		w.tmo#define	wx_if		w.arpcom.ac_if#define	wx_name		w.dev.dv_xname#define	IOCTL_CMD_TYPE			u_long#define	WXMALLOC(len)			malloc(len, M_DEVBUF, M_NOWAIT)#define	WXFREE(ptr)			free(ptr, M_DEVBUF)#define	SOFTC_IFP(ifp)			ifp->if_softc#define	WX_BPFTAP_ARG(ifp)		(ifp)->if_bpf#ifndef PMON#define	TIMEOUT(sc, func, arg, time)	VTIMEOUT(sc, func, arg, time)#define	VTIMEOUT(sc, func, arg, time)	{timeout_set(&(sc)->wx_tmo, func, arg); timeout_add(&(sc)->wx_tmo, time);}#define	UNTIMEOUT(f, arg, sc)		timeout_del(&(sc)->wx_tmo)#else#define	TIMEOUT(sc, func, arg, time)	timeout(func, arg, time)#define	UNTIMEOUT(f, arg, sc)		untimeout(f, sc);#endif#define	INLINE				inline#define	WX_LOCK(wx)	if (wx->w.locked++ == 0) wx->w.spl = splimp()#define	WX_UNLOCK(wx)	if (wx->w.locked) {				\				if (--wx->w.locked == 0)		\					splx(wx->w.spl);		\			}#define	WX_ILOCK(_sc)#define	WX_IUNLK(_sc)#define	WX_SOFTC_FROM_MII_ARG(x)	(wx_softc_t *) x#define	WX_MII_FROM_SOFTC(x)		(&x->w.mii_data)#define	vm_offset_t		vaddr_t#define	READ_CSR	_read_csr#define	WRITE_CSR	_write_csrtypedef	unsigned long intptr_t;/* * Transmit soft descriptor, used to manage packets as they come in. */typedef struct rxpkt {	struct mbuf *dptr;	/* pointer to receive frame */	u_int32_t dma_addr;	/* dma address */} rxpkt_t;	/* * Transmit soft descriptor, used to manage packets as they are transmitted. */typedef struct txpkt {	struct txpkt *next;	/* next in a chain */	struct mbuf *dptr;	/* pointer to mbuf being sent */	u_int32_t sidx;		/* start index */	u_int32_t eidx;		/* end index */} txpkt_t;typedef struct wx_softc {	/*	 * OS dependent storage... must be first...	 */	struct wxmdvar w;	/*	 * misc goodies	 */	u_int32_t		:	22,		wx_needreinit	:	1,		wx_mii		:	1,	/* non-zero if we have a PHY */		wx_no_flow 	:	1,		wx_ilos		:	1,		wx_no_ilos	:	1,		wx_verbose	:	1,		wx_debug	:	1,		ane_failed	:	1,		linkup		:	1,		all_mcasts	:	1;	u_int32_t wx_idnrev;		/* chip revision && PCI ID */	u_int16_t wx_cfg1;	u_int16_t wx_unused;	u_int32_t wx_ienable;		/* current ienable to use */	u_int32_t wx_dcr;		/* dcr used */	u_int32_t wx_icr;		/* last icr */	/*	 * Statistics, soft && hard	 */	u_int32_t	wx_intr;	u_int32_t	wx_linkintr;	u_int32_t	wx_rxintr;	u_int32_t	wx_txqe;	u_int32_t	wx_xmitgc;	u_int32_t	wx_xmitpullup;	u_int32_t	wx_xmitcluster;	u_int32_t	wx_xmitputback;	u_int32_t	wx_xmitwanted;	u_int32_t	wx_xmitblocked;	u_int32_t	wx_xmitrunt;	u_int32_t	wx_rxnobuf;	u_int32_t	wx_oddpkt;	/*	 * Soft copies of multicast addresses. We're only	 * using (right now) the rest of the receive address	 * registers- not the hashed multicast table.	 */	u_int8_t	wx_mcaddr[WX_RAL_TAB_SIZE-1][6];	u_int8_t	wx_nmca;		/* # active multicast addrs */	/* 	 * Receive Management	 * We have software and shared memory rings in a buddy store format.	 */	wxrd_t	*rdescriptors;		/* receive descriptor ring */	rxpkt_t *rbase;			/* base of soft rdesc list */	u_int16_t rnxt;			/* next descriptor to check */	u_int16_t _pad;	struct mbuf *rpending;		/* pending partial packet */	/* 	 * Transmit Management	 * We have software and shared memory rings in a buddy store format.	 */	txpkt_t *tbase;			/* base of soft soft management */	txpkt_t *tbsyf, *tbsyl;		/* linked busy list */	wxtd_t	*tdescriptors;		/* transmit descriptor ring */	u_int16_t tnxtfree;		/* next free index (circular) */	u_int16_t tactive;		/* # active */} wx_softc_t;/* * We offset the the receive frame header by two bytes so that the actual * payload is 32 bit aligned. On platforms that require strict structure * alignment, this means that the ethernet frame header may have to be shifted * to align it at interrupt time, but because it's such a small amount * (fourteen bytes) and processors have gotten pretty fast, that's okay. * It may even turn out on some platforms that this doesn't have to happen. */#define	WX_RX_OFFSET_VALUE	2/* * Tunable Parameters. * * Descriptor lengths must be in multiples of 8. */#define	WX_MAX_TDESC	16	/* number of transmit descriptors */#define	T_NXT_IDX(x)	((x + 1) & (WX_MAX_TDESC - 1))#define	T_PREV_IDX(x)	((x - 1) & (WX_MAX_TDESC - 1))#define	WX_MAX_RDESC	16	/* number of receive descriptors */#ifdef	PADDED_CELL#define	RXINCR		2#else#define	RXINCR		1#endif#define	R_NXT_IDX(x)	((x + RXINCR) & (WX_MAX_RDESC - 1))#define	R_PREV_IDX(x)	((x - RXINCR) & (WX_MAX_RDESC - 1))/* * Link Up timeout, in milliseconds. */#define	WX_LINK_UP_TIMEOUT	500

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -