mirror of
				https://github.com/xcat2/xNBA.git
				synced 2025-10-31 19:32:34 +00:00 
			
		
		
		
	Symbol fixups
This commit is contained in:
		| @@ -141,13 +141,17 @@ static unsigned long ioaddr; | ||||
|  | ||||
| /* transmit descriptor and buffer */ | ||||
| #define NTXD 2 | ||||
| static struct txdesc txd[NTXD] __attribute__ ((aligned(4))); | ||||
| static unsigned char txb[BUFLEN] __attribute__ ((aligned(4))); | ||||
|  | ||||
| /* receive descriptor(s) and buffer(s) */ | ||||
| #define NRXD 4 | ||||
| static struct rxdesc rxd[NRXD] __attribute__ ((aligned(4))); | ||||
| static unsigned char rxb[NRXD * BUFLEN] __attribute__ ((aligned(4))); | ||||
| struct { | ||||
| 	struct txdesc txd[NTXD] __attribute__ ((aligned(4))); | ||||
| 	unsigned char txb[BUFLEN] __attribute__ ((aligned(4))); | ||||
| 	struct rxdesc rxd[NRXD] __attribute__ ((aligned(4))); | ||||
| 	unsigned char rxb[NRXD * BUFLEN] __attribute__ ((aligned(4))); | ||||
| } davicom_bufs __shared; | ||||
| #define txd davicom_bufs.txd | ||||
| #define txb davicom_bufs.txb | ||||
| #define rxd davicom_bufs.rxd | ||||
| #define rxb davicom_bufs.rxb | ||||
| static int rxd_tail; | ||||
| static int TxPtr; | ||||
|  | ||||
|   | ||||
| @@ -150,7 +150,7 @@ struct rx_desc { | ||||
| 	 u32 /* struct rx_desc * */ next_rx_desc; | ||||
| } __attribute__ ((aligned(32))); | ||||
|  | ||||
| struct dmfe_private { | ||||
| static struct dmfe_private { | ||||
| 	u32 chip_id;		/* Chip vendor/Device ID */ | ||||
| 	u32 chip_revision;	/* Chip revision */ | ||||
| 	u32 cr0_data; | ||||
| @@ -214,26 +214,21 @@ static u8 SF_mode;		/* Special Function: 1:VLAN, 2:RX Flow Control | ||||
| /********************************************** | ||||
| * Descriptor Ring and Buffer defination | ||||
| ***********************************************/ | ||||
| /* Define the TX Descriptor */ | ||||
| static struct tx_desc txd[TX_DESC_CNT] | ||||
|     __attribute__ ((aligned(32))); | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each TX Descriptor. | ||||
|   All descriptors point to a part of this buffer */ | ||||
| static unsigned char txb[TX_BUF_ALLOC * TX_DESC_CNT] | ||||
|     __attribute__ ((aligned(32))); | ||||
|  | ||||
| /* Define the RX Descriptor */ | ||||
| static struct rx_desc rxd[RX_DESC_CNT] | ||||
| __attribute__ ((aligned(32))); | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each RX Descriptor. | ||||
|    All descriptors point to a part of this buffer */ | ||||
| static unsigned char rxb[RX_ALLOC_SIZE * RX_DESC_CNT] | ||||
| __attribute__ ((aligned(32))); | ||||
| struct { | ||||
| 	struct tx_desc txd[TX_DESC_CNT] __attribute__ ((aligned(32))); | ||||
| 	unsigned char txb[TX_BUF_ALLOC * TX_DESC_CNT] | ||||
| 	__attribute__ ((aligned(32))); | ||||
| 	struct rx_desc rxd[RX_DESC_CNT] __attribute__ ((aligned(32))); | ||||
| 	unsigned char rxb[RX_ALLOC_SIZE * RX_DESC_CNT] | ||||
| 	__attribute__ ((aligned(32))); | ||||
| } dmfe_bufs __shared; | ||||
| #define txd dmfe_bufs.txd | ||||
| #define txb dmfe_bufs.txb | ||||
| #define rxd dmfe_bufs.rxd | ||||
| #define rxb dmfe_bufs.rxb | ||||
|  | ||||
| /* NIC specific static variables go here */ | ||||
| long int BASE; | ||||
| static long int BASE; | ||||
|  | ||||
| static u16 read_srom_word(long ioaddr, int offset); | ||||
| static void dmfe_init_dm910x(struct nic *nic); | ||||
|   | ||||
| @@ -89,9 +89,12 @@ static struct nic_operations e1000_operations; | ||||
| static struct pci_driver e1000_driver; | ||||
|  | ||||
| static struct e1000_hw hw; | ||||
| static char tx_pool[128 + 16]; | ||||
| static char rx_pool[128 + 16]; | ||||
| static char packet[2096]; | ||||
|  | ||||
| struct { | ||||
| 	char tx_pool[128 + 16]; | ||||
| 	char rx_pool[128 + 16]; | ||||
| 	char packet[2096]; | ||||
| } e1000_bufs __shared; | ||||
|  | ||||
| static struct e1000_tx_desc *tx_base; | ||||
| static struct e1000_rx_desc *rx_base; | ||||
| @@ -171,13 +174,13 @@ static void e1000_irq(struct nic *nic, irq_action_t action); | ||||
|  | ||||
| #define E1000_WRITE_FLUSH(a) {uint32_t x; x = E1000_READ_REG(a, STATUS);} | ||||
|  | ||||
| uint32_t | ||||
| static inline uint32_t | ||||
| e1000_io_read(struct e1000_hw *hw __unused, uint32_t port) | ||||
| { | ||||
|         return inl(port); | ||||
| } | ||||
|  | ||||
| void | ||||
| static inline void | ||||
| e1000_io_write(struct e1000_hw *hw __unused, uint32_t port, uint32_t value) | ||||
| { | ||||
|         outl(value, port); | ||||
| @@ -724,11 +727,10 @@ e1000_clear_vfta(struct e1000_hw *hw) | ||||
| * hw - Struct containing variables accessed by shared code | ||||
| * offset - offset to write to * value - value to write | ||||
| *****************************************************************************/ | ||||
| void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, uint32_t value){ | ||||
| 	uint32_t io_addr = hw->io_base; | ||||
| 	uint32_t io_data = hw->io_base + 4; | ||||
| 	e1000_io_write(hw, io_addr, offset); | ||||
| 	e1000_io_write(hw, io_data, value); | ||||
| static inline void e1000_write_reg_io(struct e1000_hw *hw, uint32_t offset, | ||||
| 				      uint32_t value){ | ||||
| 	e1000_io_write(hw, hw->io_base, offset); | ||||
| 	e1000_io_write(hw, hw->io_base + 4, value); | ||||
| } | ||||
|  | ||||
| /****************************************************************************** | ||||
| @@ -3362,7 +3364,7 @@ static void fill_rx (void) | ||||
| 	rd = rx_base + rx_tail; | ||||
| 	rx_tail = (rx_tail + 1) % 8; | ||||
| 	memset (rd, 0, 16); | ||||
| 	rd->buffer_addr = virt_to_bus(&packet); | ||||
| 	rd->buffer_addr = virt_to_bus(&e1000_bufs.packet); | ||||
| 	E1000_WRITE_REG (&hw, RDT, rx_tail); | ||||
| } | ||||
|  | ||||
| @@ -3371,7 +3373,7 @@ static void init_descriptor (void) | ||||
| 	unsigned long ptr; | ||||
| 	unsigned long tctl; | ||||
|  | ||||
| 	ptr = virt_to_phys(tx_pool); | ||||
| 	ptr = virt_to_phys(e1000_bufs.tx_pool); | ||||
| 	if (ptr & 0xf) | ||||
| 		ptr = (ptr + 0x10) & (~0xf); | ||||
|  | ||||
| @@ -3409,7 +3411,7 @@ static void init_descriptor (void) | ||||
| 	rx_tail = 0; | ||||
| 	/* disable receive */ | ||||
| 	E1000_WRITE_REG (&hw, RCTL, 0); | ||||
| 	ptr = virt_to_phys(rx_pool); | ||||
| 	ptr = virt_to_phys(e1000_bufs.rx_pool); | ||||
| 	if (ptr & 0xf) | ||||
| 		ptr = (ptr + 0x10) & (~0xf); | ||||
| 	rx_base = phys_to_virt(ptr); | ||||
| @@ -3454,7 +3456,7 @@ e1000_poll (struct nic *nic, int retrieve) | ||||
| 	if ( ! retrieve ) return 1; | ||||
|  | ||||
| 	//      printf("recv: packet %! -> %! len=%d \n", packet+6, packet,rd->Length); | ||||
| 	memcpy (nic->packet, packet, rd->length); | ||||
| 	memcpy (nic->packet, e1000_bufs.packet, rd->length); | ||||
| 	nic->packetlen = rd->length; | ||||
| 	fill_rx (); | ||||
|  | ||||
|   | ||||
| @@ -262,7 +262,10 @@ static struct nic_operations eepro100_operations; | ||||
| static struct pci_driver eepro100_driver; | ||||
|  | ||||
| #define RXFD_COUNT 4 | ||||
| static struct RxFD rxfds[RXFD_COUNT]; | ||||
| struct { | ||||
| 	struct RxFD rxfds[RXFD_COUNT]; | ||||
| } eepro100_bufs __shared; | ||||
| #define rxfds eepro100_bufs.rxfds | ||||
| static unsigned int rxfd = 0; | ||||
|  | ||||
| static int congenb = 0;         /* Enable congestion control in the DP83840. */ | ||||
|   | ||||
| @@ -86,12 +86,18 @@ static unsigned int	cur_rx, cur_tx;		/* The next free ring entry */ | ||||
| static unsigned short	eeprom[64]; | ||||
| #endif | ||||
| static signed char	phys[4];		/* MII device addresses. */ | ||||
| static struct epic_rx_desc	rx_ring[RX_RING_SIZE] | ||||
| struct { | ||||
| 	struct epic_rx_desc	rx_ring[RX_RING_SIZE] | ||||
| 	__attribute__ ((aligned(4))); | ||||
| static struct epic_tx_desc	tx_ring[TX_RING_SIZE] | ||||
| 	struct epic_tx_desc	tx_ring[TX_RING_SIZE] | ||||
| 	__attribute__ ((aligned(4))); | ||||
| static unsigned char	 	rx_packet[PKT_BUF_SZ * RX_RING_SIZE]; | ||||
| static unsigned char		tx_packet[PKT_BUF_SZ * TX_RING_SIZE]; | ||||
| 	unsigned char	 	rx_packet[PKT_BUF_SZ * RX_RING_SIZE]; | ||||
| 	unsigned char		tx_packet[PKT_BUF_SZ * TX_RING_SIZE]; | ||||
| } epic100_bufs __shared; | ||||
| #define rx_ring epic100_bufs.rx_ring | ||||
| #define tx_ring epic100_bufs.tx_ring | ||||
| #define rx_packet epic100_bufs.rx_packet | ||||
| #define tx_packet epic100_bufs.tx_packet | ||||
|  | ||||
| /***********************************************************************/ | ||||
| /*                    Externally visible functions                     */ | ||||
|   | ||||
| @@ -71,7 +71,7 @@ typedef signed int s32; | ||||
| #define virt_to_le32desc(addr)  cpu_to_le32(virt_to_bus(addr)) | ||||
| #define le32desc_to_virt(addr)  bus_to_virt(le32_to_cpu(addr)) | ||||
|  | ||||
| unsigned long BASE; | ||||
| static unsigned long BASE; | ||||
| /* NIC specific static variables go here */ | ||||
|  | ||||
|  | ||||
| @@ -290,24 +290,20 @@ struct ring_desc { | ||||
| }; | ||||
|  | ||||
|  | ||||
| /* Define the TX Descriptor */ | ||||
| static struct ring_desc tx_ring[TX_RING]; | ||||
|  | ||||
| /* Create a static buffer of size RX_BUF_SZ for each | ||||
| TX Descriptor.  All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char txb[TX_RING * RX_NIC_BUFSIZE]; | ||||
|  | ||||
| /* Define the TX Descriptor */ | ||||
| static struct ring_desc rx_ring[RX_RING]; | ||||
|  | ||||
| /* Create a static buffer of size RX_BUF_SZ for each | ||||
| RX Descriptor   All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char rxb[RX_RING * RX_NIC_BUFSIZE]; | ||||
| /* Define the TX and RX Descriptor and Buffers */ | ||||
| struct { | ||||
| 	struct ring_desc tx_ring[TX_RING]; | ||||
| 	unsigned char txb[TX_RING * RX_NIC_BUFSIZE]; | ||||
| 	struct ring_desc rx_ring[RX_RING]; | ||||
| 	unsigned char rxb[RX_RING * RX_NIC_BUFSIZE]; | ||||
| } forcedeth_bufs __shared; | ||||
| #define tx_ring forcedeth_bufs.tx_ring | ||||
| #define rx_ring forcedeth_bufs.rx_ring | ||||
| #define txb forcedeth_bufs.txb | ||||
| #define rxb forcedeth_bufs.rxb | ||||
|  | ||||
| /* Private Storage for the NIC */ | ||||
| struct forcedeth_private { | ||||
| static struct forcedeth_private { | ||||
| 	/* General data: | ||||
| 	 * Locking: spin_lock(&np->lock); */ | ||||
| 	int in_shutdown; | ||||
| @@ -322,19 +318,13 @@ struct forcedeth_private { | ||||
| 	/* rx specific fields. | ||||
| 	 * Locking: Within irq hander or disable_irq+spin_lock(&np->lock); | ||||
| 	 */ | ||||
| 	struct ring_desc *rx_ring; | ||||
| 	unsigned int cur_rx, refill_rx; | ||||
| 	struct sk_buff *rx_skbuff[RX_RING]; | ||||
| 	u32 rx_dma[RX_RING]; | ||||
| 	unsigned int rx_buf_sz; | ||||
|  | ||||
| 	/* | ||||
| 	 * tx specific fields. | ||||
| 	 */ | ||||
| 	struct ring_desc *tx_ring; | ||||
| 	unsigned int next_tx, nic_tx; | ||||
| 	struct sk_buff *tx_skbuff[TX_RING]; | ||||
| 	u32 tx_dma[TX_RING]; | ||||
| 	u16 tx_flags; | ||||
| } npx; | ||||
|  | ||||
|   | ||||
| @@ -368,16 +368,14 @@ enum tx_desc_control_bits { | ||||
| #define LinkIsUp2 0x00040000 | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each | ||||
| TX Descriptor.  All descriptors point to a | ||||
| RX and TX Descriptor.  All descriptors point to a | ||||
| part of this buffer */ | ||||
| static u8 txb[PKT_BUF_SZ * TX_RING_SIZE] | ||||
| __attribute__ ((aligned(8))); | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each | ||||
| RX Descriptor   All descriptors point to a | ||||
| part of this buffer */ | ||||
| static u8 rxb[PKT_BUF_SZ * RX_RING_SIZE] | ||||
| __attribute__ ((aligned(8))); | ||||
| struct { | ||||
| 	u8 txb[PKT_BUF_SZ * TX_RING_SIZE] __attribute__ ((aligned(8))); | ||||
| 	u8 rxb[PKT_BUF_SZ * RX_RING_SIZE] __attribute__ ((aligned(8))); | ||||
| } mtd80x_bufs __shared; | ||||
| #define txb mtd80x_bufs.txb | ||||
| #define rxb mtd80x_bufs.rxb | ||||
|  | ||||
| /* The Tulip Rx and Tx buffer descriptors. */ | ||||
| struct mtd_desc | ||||
|   | ||||
| @@ -205,11 +205,16 @@ static unsigned int tx_config; | ||||
|    longword aligned  | ||||
| */ | ||||
|  | ||||
| static BufferDesc txd              __attribute__ ((aligned(4))); | ||||
| static BufferDesc rxd[NUM_RX_DESC] __attribute__ ((aligned(4))); | ||||
|  | ||||
| static unsigned char txb[TX_BUF_SIZE] __attribute__ ((aligned(4))); | ||||
| static unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE] __attribute__ ((aligned(4))); | ||||
| struct { | ||||
|     BufferDesc txd              __attribute__ ((aligned(4))); | ||||
|     BufferDesc rxd[NUM_RX_DESC] __attribute__ ((aligned(4))); | ||||
|     unsigned char txb[TX_BUF_SIZE] __attribute__ ((aligned(4))); | ||||
|     unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE] __attribute__ ((aligned(4))); | ||||
| } natsemi_bufs __shared; | ||||
| #define txd natsemi_bufs.txd | ||||
| #define rxd natsemi_bufs.rxd | ||||
| #define txb natsemi_bufs.txb | ||||
| #define rxb natsemi_bufs.rxb | ||||
|  | ||||
| /* Function Prototypes */ | ||||
|  | ||||
|   | ||||
| @@ -393,24 +393,18 @@ struct ns83820_private { | ||||
| } nsx; | ||||
| static struct ns83820_private *ns; | ||||
|  | ||||
| /* Define the TX Descriptor */ | ||||
| static struct ring_desc tx_ring[NR_TX_DESC] | ||||
|     __attribute__ ((aligned(8))); | ||||
|  | ||||
| /* Create a static buffer of size REAL_RX_BUF_SIZE for each | ||||
| TX Descriptor.  All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char txb[NR_TX_DESC * REAL_RX_BUF_SIZE]; | ||||
|  | ||||
| /* Define the TX Descriptor */ | ||||
| static struct ring_desc rx_ring[NR_RX_DESC] | ||||
|     __attribute__ ((aligned(8))); | ||||
|  | ||||
| /* Create a static buffer of size REAL_RX_BUF_SIZE for each | ||||
| RX Descriptor   All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char rxb[NR_RX_DESC * REAL_RX_BUF_SIZE] | ||||
|     __attribute__ ((aligned(8))); | ||||
| /* Define the TX and RX Descriptor and Buffers */ | ||||
| struct { | ||||
| 	struct ring_desc tx_ring[NR_TX_DESC] __attribute__ ((aligned(8))); | ||||
| 	unsigned char txb[NR_TX_DESC * REAL_RX_BUF_SIZE]; | ||||
| 	struct ring_desc rx_ring[NR_RX_DESC] __attribute__ ((aligned(8))); | ||||
| 	unsigned char rxb[NR_RX_DESC * REAL_RX_BUF_SIZE] | ||||
| 	__attribute__ ((aligned(8))); | ||||
| } ns83820_bufs __shared; | ||||
| #define tx_ring ns83820_bufs.tx_ring | ||||
| #define rx_ring ns83820_bufs.rx_ring | ||||
| #define txb ns83820_bufs.txb | ||||
| #define rxb ns83820_bufs.rxb | ||||
|  | ||||
| static void phy_intr(struct nic *nic __unused) | ||||
| { | ||||
|   | ||||
| @@ -182,20 +182,6 @@ static int full_duplex[MAX_UNITS]; | ||||
|  | ||||
| #define PCNET32_TOTAL_SIZE	0x20 | ||||
|  | ||||
| /* Buffers for the tx and Rx */ | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each | ||||
| TX Descriptor.  All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char txb[PKT_BUF_SZ * TX_RING_SIZE]; | ||||
| //    __attribute__ ((aligned(16))); | ||||
|  | ||||
| /* Create a static buffer of size PKT_BUF_SZ for each | ||||
| RX Descriptor   All descriptors point to a | ||||
| part of this buffer */ | ||||
| static unsigned char rxb[RX_RING_SIZE * PKT_BUF_SZ]; | ||||
| //    __attribute__ ((aligned(16))); | ||||
|  | ||||
| /* The PCNET32 Rx and Tx ring descriptors. */ | ||||
| struct pcnet32_rx_head { | ||||
| 	u32 base; | ||||
| @@ -235,14 +221,15 @@ struct pcnet32_access { | ||||
| 	void (*reset) (unsigned long); | ||||
| }; | ||||
|  | ||||
| /* Define the TX Descriptor */ | ||||
| static struct pcnet32_tx_head tx_ring[TX_RING_SIZE] | ||||
|     __attribute__ ((aligned(16))); | ||||
|  | ||||
|  | ||||
| /* Define the RX Descriptor */ | ||||
| static struct pcnet32_rx_head rx_ring[RX_RING_SIZE] | ||||
|     __attribute__ ((aligned(16))); | ||||
| /* Define the TX and RX Descriptors and Rings */ | ||||
| struct { | ||||
| 	struct pcnet32_tx_head tx_ring[TX_RING_SIZE] | ||||
| 	__attribute__ ((aligned(16))); | ||||
| 	struct pcnet32_rx_head rx_ring[RX_RING_SIZE] | ||||
| 	__attribute__ ((aligned(16))); | ||||
| 	unsigned char txb[PKT_BUF_SZ * TX_RING_SIZE]; | ||||
| 	unsigned char rxb[RX_RING_SIZE * PKT_BUF_SZ]; | ||||
| } pcnet32_bufs __shared; | ||||
|  | ||||
| /* May need to be moved to mii.h */ | ||||
| struct mii_if_info { | ||||
| @@ -411,16 +398,17 @@ static int pcnet32_init_ring(struct nic *nic) | ||||
| 	lp->cur_rx = lp->cur_tx = 0; | ||||
|  | ||||
| 	for (i = 0; i < RX_RING_SIZE; i++) { | ||||
| 		rx_ring[i].base = (u32) virt_to_le32desc(&rxb[i]); | ||||
| 		rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ); | ||||
| 		rx_ring[i].status = le16_to_cpu(0x8000); | ||||
| 		pcnet32_bufs.rx_ring[i].base = | ||||
| 			virt_to_le32desc(&pcnet32_bufs.rxb[i]); | ||||
| 		pcnet32_bufs.rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ); | ||||
| 		pcnet32_bufs.rx_ring[i].status = le16_to_cpu(0x8000); | ||||
| 	} | ||||
|  | ||||
| 	/* The Tx buffer address is filled in as needed, but we do need to clear | ||||
| 	   the upper ownership bit. */ | ||||
| 	for (i = 0; i < TX_RING_SIZE; i++) { | ||||
| 		tx_ring[i].base = 0; | ||||
| 		tx_ring[i].status = 0; | ||||
| 		pcnet32_bufs.tx_ring[i].base = 0; | ||||
| 		pcnet32_bufs.tx_ring[i].status = 0; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| @@ -428,8 +416,8 @@ static int pcnet32_init_ring(struct nic *nic) | ||||
| 	    le16_to_cpu(TX_RING_LEN_BITS | RX_RING_LEN_BITS); | ||||
| 	for (i = 0; i < 6; i++) | ||||
| 		lp->init_block.phys_addr[i] = nic->node_addr[i]; | ||||
| 	lp->init_block.rx_ring = (u32) virt_to_le32desc(&rx_ring[0]); | ||||
| 	lp->init_block.tx_ring = (u32) virt_to_le32desc(&tx_ring[0]); | ||||
| 	lp->init_block.rx_ring = virt_to_le32desc(&pcnet32_bufs.rx_ring[0]); | ||||
| 	lp->init_block.tx_ring = virt_to_le32desc(&pcnet32_bufs.tx_ring[0]); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @@ -547,11 +535,11 @@ static int pcnet32_poll(struct nic *nic __unused, int retrieve) | ||||
| 	/* nic->packet should contain data on return */ | ||||
| 	/* nic->packetlen should contain length of data */ | ||||
|  | ||||
| 	int status; | ||||
| 	signed char status; | ||||
| 	int entry; | ||||
|  | ||||
| 	entry = lp->cur_rx & RX_RING_MOD_MASK; | ||||
| 	status = ((short) le16_to_cpu(rx_ring[entry].status) >> 8); | ||||
| 	status = (le16_to_cpu(pcnet32_bufs.rx_ring[entry].status) >> 8); | ||||
|  | ||||
| 	if (status < 0) | ||||
| 		return 0; | ||||
| @@ -560,13 +548,16 @@ static int pcnet32_poll(struct nic *nic __unused, int retrieve) | ||||
|  | ||||
| 	if (status == 0x03) { | ||||
| 		nic->packetlen = | ||||
| 		    (le32_to_cpu(rx_ring[entry].msg_length) & 0xfff) - 4; | ||||
| 		memcpy(nic->packet, &rxb[entry], nic->packetlen); | ||||
| 			(le32_to_cpu(pcnet32_bufs.rx_ring[entry].msg_length) | ||||
| 			 & 0xfff) - 4; | ||||
| 		memcpy(nic->packet, &pcnet32_bufs.rxb[entry], nic->packetlen); | ||||
|  | ||||
| 		/* Andrew Boyd of QNX reports that some revs of the 79C765 | ||||
| 		 * clear the buffer length */ | ||||
| 		rx_ring[entry].buf_length = le16_to_cpu(-PKT_BUF_SZ); | ||||
| 		rx_ring[entry].status |= le16_to_cpu(0x8000);	/* prime for next receive */ | ||||
| 		pcnet32_bufs.rx_ring[entry].buf_length | ||||
| 			= le16_to_cpu(-PKT_BUF_SZ); | ||||
| 		/* prime for next receive */ | ||||
| 		pcnet32_bufs.rx_ring[entry].status |= le16_to_cpu(0x8000); | ||||
| 		/* Switch to the next Rx ring buffer */ | ||||
| 		lp->cur_rx++; | ||||
|  | ||||
| @@ -594,7 +585,7 @@ static void pcnet32_transmit(struct nic *nic __unused, const char *d,	/* Destina | ||||
|  | ||||
| 	status = 0x8300; | ||||
| 	/* point to the current txb incase multiple tx_rings are used */ | ||||
| 	ptxb = txb + (lp->cur_tx * PKT_BUF_SZ); | ||||
| 	ptxb = pcnet32_bufs.txb + (lp->cur_tx * PKT_BUF_SZ); | ||||
|  | ||||
| 	/* copy the packet to ring buffer */ | ||||
| 	memcpy(ptxb, d, ETH_ALEN);	/* dst */ | ||||
| @@ -607,12 +598,12 @@ static void pcnet32_transmit(struct nic *nic __unused, const char *d,	/* Destina | ||||
| 	while (s < ETH_ZLEN)	/* pad to min length */ | ||||
| 		ptxb[s++] = '\0'; | ||||
|  | ||||
| 	tx_ring[entry].length = le16_to_cpu(-s); | ||||
| 	tx_ring[entry].misc = 0x00000000; | ||||
| 	tx_ring[entry].base = (u32) virt_to_le32desc(ptxb); | ||||
| 	pcnet32_bufs.tx_ring[entry].length = le16_to_cpu(-s); | ||||
| 	pcnet32_bufs.tx_ring[entry].misc = 0x00000000; | ||||
| 	pcnet32_bufs.tx_ring[entry].base = (u32) virt_to_le32desc(ptxb); | ||||
|  | ||||
| 	/* we set the top byte as the very last thing */ | ||||
| 	tx_ring[entry].status = le16_to_cpu(status); | ||||
| 	pcnet32_bufs.tx_ring[entry].status = le16_to_cpu(status); | ||||
|  | ||||
|  | ||||
| 	/* Trigger an immediate send poll */ | ||||
| @@ -622,14 +613,14 @@ static void pcnet32_transmit(struct nic *nic __unused, const char *d,	/* Destina | ||||
| 	lp->cur_tx = 0;		/* (lp->cur_tx + 1); */ | ||||
| 	time = currticks() + TICKS_PER_SEC;	/* wait one second */ | ||||
| 	while (currticks() < time && | ||||
| 	       ((short) le16_to_cpu(tx_ring[entry].status) < 0)); | ||||
| 	       ((short) le16_to_cpu(pcnet32_bufs.tx_ring[entry].status) < 0)); | ||||
|  | ||||
| 	if ((short) le16_to_cpu(tx_ring[entry].status) < 0) | ||||
| 	if ((short) le16_to_cpu(pcnet32_bufs.tx_ring[entry].status) < 0) | ||||
| 		printf("PCNET32 timed out on transmit\n"); | ||||
|  | ||||
| 	/* Stop pointing at the current txb | ||||
| 	 * otherwise the card continues to send the packet */ | ||||
| 	tx_ring[entry].base = 0; | ||||
| 	pcnet32_bufs.tx_ring[entry].base = 0; | ||||
|  | ||||
| } | ||||
|  | ||||
| @@ -882,8 +873,8 @@ static int pcnet32_probe ( struct nic *nic, struct pci_device *pci ) { | ||||
| 		lp->init_block.phys_addr[i] = nic->node_addr[i]; | ||||
| 	lp->init_block.filter[0] = 0xffffffff; | ||||
| 	lp->init_block.filter[1] = 0xffffffff; | ||||
| 	lp->init_block.rx_ring = virt_to_bus(&rx_ring); | ||||
| 	lp->init_block.tx_ring = virt_to_bus(&tx_ring); | ||||
| 	lp->init_block.rx_ring = virt_to_bus(&pcnet32_bufs.rx_ring); | ||||
| 	lp->init_block.tx_ring = virt_to_bus(&pcnet32_bufs.tx_ring); | ||||
|  | ||||
| 	/* switch pcnet32 to 32bit mode */ | ||||
| 	a->write_bcr(ioaddr, 20, 2); | ||||
|   | ||||
| @@ -169,8 +169,12 @@ enum rx_mode_bits { | ||||
| static unsigned int cur_rx,cur_tx; | ||||
|  | ||||
| /* The RTL8139 can only transmit from a contiguous, aligned memory block.  */ | ||||
| static unsigned char tx_buffer[TX_BUF_SIZE] __attribute__((aligned(4))); | ||||
| static unsigned char rx_ring[RX_BUF_LEN+16] __attribute__((aligned(4))); | ||||
| struct { | ||||
| 	unsigned char tx_buffer[TX_BUF_SIZE] __attribute__((aligned(4))); | ||||
| 	unsigned char rx_ring[RX_BUF_LEN+16] __attribute__((aligned(4))); | ||||
| } rtl8139_bufs __shared; | ||||
| #define tx_buffer rtl8139_bufs.tx_buffer | ||||
| #define rx_ring rtl8139_bufs.rx_ring | ||||
|  | ||||
| static int rtl8139_probe(struct nic *nic,struct pci_device *pci); | ||||
| static int read_eeprom(struct nic *nic, int location, int addr_len); | ||||
|   | ||||
| @@ -64,10 +64,16 @@ static unsigned int cur_phy; | ||||
|  | ||||
| static unsigned int cur_rx; | ||||
|  | ||||
| static BufferDesc txd; | ||||
| static BufferDesc rxd[NUM_RX_DESC]; | ||||
| static unsigned char txb[TX_BUF_SIZE]; | ||||
| static unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE]; | ||||
| struct { | ||||
|     BufferDesc txd; | ||||
|     BufferDesc rxd[NUM_RX_DESC]; | ||||
|     unsigned char txb[TX_BUF_SIZE]; | ||||
|     unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE]; | ||||
| } sis900_bufs __shared; | ||||
| #define txd sis900_bufs.txd | ||||
| #define rxd sis900_bufs.rxd | ||||
| #define txb sis900_bufs.txb | ||||
| #define rxb sis900_bufs.rxb | ||||
|  | ||||
| #if 0 | ||||
| static struct mac_chip_info { | ||||
|   | ||||
| @@ -100,7 +100,7 @@ static void TLan_MiiSync(u16); | ||||
| static void TLan_MiiWriteReg(struct nic *nic __unused, u16, u16, u16); | ||||
|  | ||||
|  | ||||
| const char *media[] = { | ||||
| static const char *media[] = { | ||||
| 	"10BaseT-HD ", "10BaseT-FD ", "100baseTx-HD ", | ||||
| 	"100baseTx-FD", "100baseT4", 0 | ||||
| }; | ||||
| @@ -187,21 +187,26 @@ struct TLanList { | ||||
| 	} buffer[TLAN_BUFFERS_PER_LIST]; | ||||
| }; | ||||
|  | ||||
| struct TLanList tx_ring[TLAN_NUM_TX_LISTS]; | ||||
| static unsigned char txb[TLAN_MAX_FRAME_SIZE * TLAN_NUM_TX_LISTS]; | ||||
|  | ||||
| struct TLanList rx_ring[TLAN_NUM_RX_LISTS]; | ||||
| static unsigned char rxb[TLAN_MAX_FRAME_SIZE * TLAN_NUM_RX_LISTS]; | ||||
| struct { | ||||
| 	struct TLanList tx_ring[TLAN_NUM_TX_LISTS]; | ||||
| 	unsigned char txb[TLAN_MAX_FRAME_SIZE * TLAN_NUM_TX_LISTS]; | ||||
| 	struct TLanList rx_ring[TLAN_NUM_RX_LISTS]; | ||||
| 	unsigned char rxb[TLAN_MAX_FRAME_SIZE * TLAN_NUM_RX_LISTS]; | ||||
| } tlan_buffers __shared; | ||||
| #define tx_ring tlan_buffers.tx_ring | ||||
| #define txb tlan_buffers.txb | ||||
| #define rx_ring tlan_buffers.rx_ring | ||||
| #define rxb tlan_buffers.rxb | ||||
|  | ||||
| typedef u8 TLanBuffer[TLAN_MAX_FRAME_SIZE]; | ||||
|  | ||||
| int chip_idx; | ||||
| static int chip_idx; | ||||
|  | ||||
| /***************************************************************** | ||||
| * TLAN Private Information Structure | ||||
| * | ||||
| ****************************************************************/ | ||||
| struct tlan_private { | ||||
| static struct tlan_private { | ||||
| 	unsigned short vendor_id;	/* PCI Vendor code */ | ||||
| 	unsigned short dev_id;	/* PCI Device code */ | ||||
| 	const char *nic_name; | ||||
| @@ -226,7 +231,7 @@ struct tlan_private { | ||||
|  | ||||
| static struct tlan_private *priv; | ||||
|  | ||||
| u32 BASE; | ||||
| static u32 BASE; | ||||
|  | ||||
| /*************************************************************** | ||||
| *	TLan_ResetLists | ||||
| @@ -242,7 +247,7 @@ u32 BASE; | ||||
| * | ||||
| **************************************************************/ | ||||
|  | ||||
| void TLan_ResetLists(struct nic *nic __unused) | ||||
| static void TLan_ResetLists(struct nic *nic __unused) | ||||
| { | ||||
|  | ||||
| 	int i; | ||||
|   | ||||
| @@ -393,7 +393,7 @@ typedef struct tlan_adapter_entry { | ||||
|  | ||||
| /* Routines to access internal registers. */ | ||||
|  | ||||
| inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr) | ||||
| static inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	return (inb((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x3))); | ||||
| @@ -403,7 +403,7 @@ inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr) | ||||
| static inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	return (inw((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x2))); | ||||
| @@ -413,7 +413,7 @@ inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr) | ||||
| static inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	return (inl(base_addr + TLAN_DIO_DATA)); | ||||
| @@ -423,7 +423,7 @@ inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data) | ||||
| static inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	outb(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x3)); | ||||
| @@ -433,7 +433,7 @@ inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data) | ||||
| static inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	outw(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2)); | ||||
| @@ -443,7 +443,7 @@ inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data) | ||||
| static inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data) | ||||
| { | ||||
| 	outw(internal_addr, base_addr + TLAN_DIO_ADR); | ||||
| 	outl(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2)); | ||||
| @@ -453,7 +453,7 @@ inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data) | ||||
|  | ||||
|  | ||||
| #if 0 | ||||
| inline void TLan_ClearBit(u8 bit, u16 port) | ||||
| static inline void TLan_ClearBit(u8 bit, u16 port) | ||||
| { | ||||
| 	outb_p(inb_p(port) & ~bit, port); | ||||
| } | ||||
| @@ -461,7 +461,7 @@ inline void TLan_ClearBit(u8 bit, u16 port) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline int TLan_GetBit(u8 bit, u16 port) | ||||
| static inline int TLan_GetBit(u8 bit, u16 port) | ||||
| { | ||||
| 	return ((int) (inb_p(port) & bit)); | ||||
| } | ||||
| @@ -469,7 +469,7 @@ inline int TLan_GetBit(u8 bit, u16 port) | ||||
|  | ||||
|  | ||||
|  | ||||
| inline void TLan_SetBit(u8 bit, u16 port) | ||||
| static inline void TLan_SetBit(u8 bit, u16 port) | ||||
| { | ||||
| 	outb_p(inb_p(port) | bit, port); | ||||
| } | ||||
| @@ -482,7 +482,7 @@ inline void TLan_SetBit(u8 bit, u16 port) | ||||
| #ifdef I_LIKE_A_FAST_HASH_FUNCTION | ||||
| /* given 6 bytes, view them as 8 6-bit numbers and return the XOR of those */ | ||||
| /* the code below is about seven times as fast as the original code */ | ||||
| inline u32 TLan_HashFunc(u8 * a) | ||||
| static inline u32 TLan_HashFunc(u8 * a) | ||||
| { | ||||
| 	u8 hash; | ||||
|  | ||||
| @@ -498,7 +498,7 @@ inline u32 TLan_HashFunc(u8 * a) | ||||
|  | ||||
| #else				/* original code */ | ||||
|  | ||||
| inline u32 xor(u32 a, u32 b) | ||||
| static inline u32 xor(u32 a, u32 b) | ||||
| { | ||||
| 	return ((a && !b) || (!a && b)); | ||||
| } | ||||
| @@ -506,7 +506,7 @@ inline u32 xor(u32 a, u32 b) | ||||
| #define XOR8( a, b, c, d, e, f, g, h )	xor( a, xor( b, xor( c, xor( d, xor( e, xor( f, xor( g, h ) ) ) ) ) ) ) | ||||
| #define DA( a, bit )					( ( (u8) a[bit/8] ) & ( (u8) ( 1 << bit%8 ) ) ) | ||||
|  | ||||
| inline u32 TLan_HashFunc(u8 * a) | ||||
| static inline u32 TLan_HashFunc(u8 * a) | ||||
| { | ||||
| 	u32 hash; | ||||
|  | ||||
|   | ||||
| @@ -400,12 +400,17 @@ static u32 ioaddr; | ||||
|    longword divisable */ | ||||
|  | ||||
| #define TX_RING_SIZE	2 | ||||
| static struct tulip_tx_desc tx_ring[TX_RING_SIZE] __attribute__ ((aligned(4))); | ||||
| static unsigned char txb[BUFLEN] __attribute__ ((aligned(4))); | ||||
|  | ||||
| #define RX_RING_SIZE	4 | ||||
| static struct tulip_rx_desc rx_ring[RX_RING_SIZE] __attribute__ ((aligned(4))); | ||||
| static unsigned char rxb[RX_RING_SIZE * BUFLEN] __attribute__ ((aligned(4))); | ||||
| struct { | ||||
|     struct tulip_tx_desc tx_ring[TX_RING_SIZE]; | ||||
|     unsigned char txb[BUFLEN]; | ||||
|     struct tulip_rx_desc rx_ring[RX_RING_SIZE]; | ||||
|     unsigned char rxb[RX_RING_SIZE * BUFLEN]; | ||||
| } tulip_buffers __shared __attribute__ ((aligned(4))); | ||||
| #define tx_ring tulip_buffers.tx_ring | ||||
| #define txb tulip_buffers.txb | ||||
| #define rx_ring tulip_buffers.rx_ring | ||||
| #define rxb tulip_buffers.rxb | ||||
|  | ||||
| static struct tulip_private { | ||||
|     int cur_rx; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user