📄 sunqe.h
字号:
#define MREGS_IREG_MPKTCO 0x04 /* IRQ missed packet cnt overflow */#define MREGS_IREG_RXIRQ 0x02 /* IRQ RX'd a packet */#define MREGS_IREG_TXIRQ 0x01 /* IRQ TX'd a packet */#define MREGS_IMASK_BABBLE 0x40 /* IMASK Babble errors */#define MREGS_IMASK_COLL 0x20 /* IMASK Collision errors */#define MREGS_IMASK_MPKTCO 0x04 /* IMASK Missed pkt cnt overflow */#define MREGS_IMASK_RXIRQ 0x02 /* IMASK RX interrupts */#define MREGS_IMASK_TXIRQ 0x01 /* IMASK TX interrupts */#define MREGS_POLL_TXVALID 0x80 /* TX is valid */#define MREGS_POLL_TDTR 0x40 /* TX data transfer request */#define MREGS_POLL_RDTR 0x20 /* RX data transfer request */#define MREGS_BCONFIG_BSWAP 0x40 /* Byte Swap */#define MREGS_BCONFIG_4TS 0x00 /* 4byte transmit start point */#define MREGS_BCONFIG_16TS 0x10 /* 16byte transmit start point */#define MREGS_BCONFIG_64TS 0x20 /* 64byte transmit start point */#define MREGS_BCONFIG_112TS 0x30 /* 112byte transmit start point */#define MREGS_BCONFIG_RESET 0x01 /* SW-Reset the MACE */#define MREGS_FCONFIG_TXF8 0x00 /* TX fifo 8 write cycles */#define MREGS_FCONFIG_TXF32 0x80 /* TX fifo 32 write cycles */#define MREGS_FCONFIG_TXF16 0x40 /* TX fifo 16 write cycles */#define MREGS_FCONFIG_RXF64 0x20 /* RX fifo 64 write cycles */#define MREGS_FCONFIG_RXF32 0x10 /* RX fifo 32 write cycles */#define MREGS_FCONFIG_RXF16 0x00 /* RX fifo 16 write cycles */#define MREGS_FCONFIG_TFWU 0x08 /* TX fifo watermark update */#define MREGS_FCONFIG_RFWU 0x04 /* RX fifo watermark update */#define MREGS_FCONFIG_TBENAB 0x02 /* TX burst enable */#define MREGS_FCONFIG_RBENAB 0x01 /* RX burst enable */#define MREGS_MCONFIG_PROMISC 0x80 /* Promiscuous mode enable */#define MREGS_MCONFIG_TPDDISAB 0x40 /* TX 2part deferral enable */#define MREGS_MCONFIG_MBAENAB 0x20 /* Modified backoff enable */#define MREGS_MCONFIG_RPADISAB 0x08 /* RX physical addr disable */#define MREGS_MCONFIG_RBDISAB 0x04 /* RX broadcast disable */#define MREGS_MCONFIG_TXENAB 0x02 /* Enable transmitter */#define MREGS_MCONFIG_RXENAB 0x01 /* Enable receiver */#define MREGS_PLSCONFIG_TXMS 0x08 /* TX mode select */#define MREGS_PLSCONFIG_GPSI 0x06 /* Use GPSI connector */#define MREGS_PLSCONFIG_DAI 0x04 /* Use DAI connector */#define MREGS_PLSCONFIG_TP 0x02 /* Use TwistedPair connector */#define MREGS_PLSCONFIG_AUI 0x00 /* Use AUI connector */#define MREGS_PLSCONFIG_IOENAB 0x01 /* PLS I/O enable */#define MREGS_PHYCONFIG_LSTAT 0x80 /* Link status */#define MREGS_PHYCONFIG_LTESTDIS 0x40 /* Disable link test logic */#define MREGS_PHYCONFIG_RXPOLARITY 0x20 /* RX polarity */#define MREGS_PHYCONFIG_APCDISAB 0x10 /* AutoPolarityCorrect disab */#define MREGS_PHYCONFIG_LTENAB 0x08 /* Select low threshold */#define MREGS_PHYCONFIG_AUTO 0x04 /* Connector port auto-sel */#define MREGS_PHYCONFIG_RWU 0x02 /* Remote WakeUp */#define MREGS_PHYCONFIG_AW 0x01 /* Auto Wakeup */#define MREGS_IACONFIG_ACHNGE 0x80 /* Do address change */#define MREGS_IACONFIG_PARESET 0x04 /* Physical address reset */#define MREGS_IACONFIG_LARESET 0x02 /* Logical address reset */#define MREGS_UTEST_RTRENAB 0x80 /* Enable resv test register */#define MREGS_UTEST_RTRDISAB 0x40 /* Disab resv test register */#define MREGS_UTEST_RPACCEPT 0x20 /* Accept runt packets */#define MREGS_UTEST_FCOLL 0x10 /* Force collision status */#define MREGS_UTEST_FCSENAB 0x08 /* Enable FCS on RX */#define MREGS_UTEST_INTLOOPM 0x06 /* Intern lpback w/MENDEC */#define MREGS_UTEST_INTLOOP 0x04 /* Intern lpback */#define MREGS_UTEST_EXTLOOP 0x02 /* Extern lpback */#define MREGS_UTEST_NOLOOP 0x00 /* No loopback */struct qe_rxd { unsigned int rx_flags; unsigned int rx_addr;};#define RXD_OWN 0x80000000 /* Ownership. */#define RXD_UPDATE 0x10000000 /* Being Updated? */#define RXD_LENGTH 0x000007ff /* Packet Length. */struct qe_txd { unsigned int tx_flags; unsigned int tx_addr;};#define TXD_OWN 0x80000000 /* Ownership. */#define TXD_SOP 0x40000000 /* Start Of Packet */#define TXD_EOP 0x20000000 /* End Of Packet */#define TXD_UPDATE 0x10000000 /* Being Updated? */#define TXD_LENGTH 0x000007ff /* Packet Length. */#define TX_RING_MAXSIZE 256#define RX_RING_MAXSIZE 256#define TX_RING_SIZE 256#define RX_RING_SIZE 256#define NEXT_RX(num) (((num) + 1) & (RX_RING_SIZE - 1))#define NEXT_TX(num) (((num) + 1) & (TX_RING_SIZE - 1))#define PREV_RX(num) (((num) - 1) & (RX_RING_SIZE - 1))#define PREV_TX(num) (((num) - 1) & (TX_RING_SIZE - 1))#define TX_BUFFS_AVAIL(qp) \ (((qp)->tx_old <= (qp)->tx_new) ? \ (qp)->tx_old + (TX_RING_SIZE - 1) - (qp)->tx_new : \ (qp)->tx_old - (qp)->tx_new - 1)#define SUN4C_TX_BUFFS_AVAIL(qp) \ (((qp)->tx_old <= (qp)->tx_new) ? \ (qp)->tx_old + (SUN4C_TX_RING_SIZE - 1) - (qp)->tx_new : \ (qp)->tx_old - (qp)->tx_new - (TX_RING_SIZE - SUN4C_TX_RING_SIZE))#define RX_COPY_THRESHOLD 256#define RX_BUF_ALLOC_SIZE (1546 + 64)struct qe_init_block { struct qe_rxd qe_rxd[RX_RING_MAXSIZE]; struct qe_txd qe_txd[TX_RING_MAXSIZE];};#define qib_offset(mem, elem) \((__u32)((unsigned long)(&(((struct qe_init_block *)0)->mem[elem]))))struct sunqe;struct sunqec { struct qe_globreg *gregs; /* QEC Global Registers */ struct sunqe *qes[4]; unsigned int qec_bursts; struct linux_sbus_device *qec_sbus_dev; struct sunqec *next_module;};#define SUN4C_PKT_BUF_SZ 1544#define SUN4C_RX_BUFF_SIZE SUN4C_PKT_BUF_SZ#define SUN4C_TX_BUFF_SIZE SUN4C_PKT_BUF_SZ#define SUN4C_RX_RING_SIZE 16#define SUN4C_TX_RING_SIZE 16struct sunqe_buffers { char tx_buf[SUN4C_TX_RING_SIZE][SUN4C_TX_BUFF_SIZE]; char pad[2]; /* Align rx_buf for copy_and_sum(). */ char rx_buf[SUN4C_RX_RING_SIZE][SUN4C_RX_BUFF_SIZE];};#define qebuf_offset(mem, elem) \((__u32)((unsigned long)(&(((struct sunqe_buffers *)0)->mem[elem][0]))))#define SUN4C_NEXT_RX(num) (((num) + 1) & (SUN4C_RX_RING_SIZE - 1))#define SUN4C_NEXT_TX(num) (((num) + 1) & (SUN4C_TX_RING_SIZE - 1))#define SUN4C_PREV_RX(num) (((num) - 1) & (SUN4C_RX_RING_SIZE - 1))#define SUN4C_PREV_TX(num) (((num) - 1) & (SUN4C_TX_RING_SIZE - 1))struct sunqe { struct qe_creg *qcregs; /* QEC per-channel Registers */ struct qe_mregs *mregs; /* Per-channel MACE Registers */ struct qe_init_block *qe_block; /* RX and TX descriptors */ __u32 qblock_dvma; /* RX and TX descriptors */ struct sk_buff *rx_skbs[RX_RING_SIZE]; struct sk_buff *tx_skbs[TX_RING_SIZE]; int rx_new, tx_new, rx_old, tx_old; struct sunqe_buffers *sun4c_buffers; /* CPU visible address. */ __u32 s4c_buf_dvma; /* DVMA visible address. */ struct sunqec *parent; struct net_device_stats net_stats; /* Statistical counters */ struct linux_sbus_device *qe_sbusdev; /* QE's SBUS device struct */ struct device *dev; /* QE's netdevice struct */ int channel; /* Who am I? */};/* We use this to acquire receive skb's that we can DMA directly into. */#define ALIGNED_RX_SKB_ADDR(addr) \ ((((unsigned long)(addr) + (64 - 1)) & ~(64 - 1)) - (unsigned long)(addr))static inline struct sk_buff *qe_alloc_skb(unsigned int length, int gfp_flags){ struct sk_buff *skb; skb = alloc_skb(length + 64, gfp_flags); if(skb) { int offset = ALIGNED_RX_SKB_ADDR(skb->data); if(offset) skb_reserve(skb, offset); } return skb;}#endif /* !(_SUNQE_H) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -