diff --git a/src/drivers/net/davicom.c b/src/drivers/net/davicom.c index de2be331..fdbf9834 100644 --- a/src/drivers/net/davicom.c +++ b/src/drivers/net/davicom.c @@ -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; diff --git a/src/drivers/net/dmfe.c b/src/drivers/net/dmfe.c index 9dba4775..4061ebfc 100644 --- a/src/drivers/net/dmfe.c +++ b/src/drivers/net/dmfe.c @@ -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); diff --git a/src/drivers/net/e1000.c b/src/drivers/net/e1000.c index 3dc8b889..d5de2cc4 100644 --- a/src/drivers/net/e1000.c +++ b/src/drivers/net/e1000.c @@ -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 (); diff --git a/src/drivers/net/eepro100.c b/src/drivers/net/eepro100.c index 37987ad5..590b37c8 100644 --- a/src/drivers/net/eepro100.c +++ b/src/drivers/net/eepro100.c @@ -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. */ diff --git a/src/drivers/net/epic100.c b/src/drivers/net/epic100.c index cbbb7ac0..574f094b 100644 --- a/src/drivers/net/epic100.c +++ b/src/drivers/net/epic100.c @@ -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 */ diff --git a/src/drivers/net/forcedeth.c b/src/drivers/net/forcedeth.c index a3204cb4..3297effd 100644 --- a/src/drivers/net/forcedeth.c +++ b/src/drivers/net/forcedeth.c @@ -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; diff --git a/src/drivers/net/mtd80x.c b/src/drivers/net/mtd80x.c index 72e4662e..3d974abc 100644 --- a/src/drivers/net/mtd80x.c +++ b/src/drivers/net/mtd80x.c @@ -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 diff --git a/src/drivers/net/natsemi.c b/src/drivers/net/natsemi.c index 7966b858..003b9798 100644 --- a/src/drivers/net/natsemi.c +++ b/src/drivers/net/natsemi.c @@ -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 */ diff --git a/src/drivers/net/ns83820.c b/src/drivers/net/ns83820.c index c29684c3..d4fafb68 100755 --- a/src/drivers/net/ns83820.c +++ b/src/drivers/net/ns83820.c @@ -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) { diff --git a/src/drivers/net/pcnet32.c b/src/drivers/net/pcnet32.c index 10a71931..5a0bb14c 100644 --- a/src/drivers/net/pcnet32.c +++ b/src/drivers/net/pcnet32.c @@ -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); diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c index da5a765e..10ca1365 100644 --- a/src/drivers/net/rtl8139.c +++ b/src/drivers/net/rtl8139.c @@ -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); diff --git a/src/drivers/net/sis900.c b/src/drivers/net/sis900.c index eb80a52d..b5ba3f08 100644 --- a/src/drivers/net/sis900.c +++ b/src/drivers/net/sis900.c @@ -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 { diff --git a/src/drivers/net/tlan.c b/src/drivers/net/tlan.c index 0f7ef198..4ae6f96d 100644 --- a/src/drivers/net/tlan.c +++ b/src/drivers/net/tlan.c @@ -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; diff --git a/src/drivers/net/tlan.h b/src/drivers/net/tlan.h index 35753e6a..e0379a7b 100644 --- a/src/drivers/net/tlan.h +++ b/src/drivers/net/tlan.h @@ -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; diff --git a/src/drivers/net/tulip.c b/src/drivers/net/tulip.c index 30df9870..ad075021 100644 --- a/src/drivers/net/tulip.c +++ b/src/drivers/net/tulip.c @@ -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;