[netdrvr ibmlana, ibmveth] trim trailing whitespace
This commit is contained in:
parent
860f242eb5
commit
d7fbeba60b
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/*
|
||||||
net-3-driver for the IBM LAN Adapter/A
|
net-3-driver for the IBM LAN Adapter/A
|
||||||
|
|
||||||
This is an extension to the Linux operating system, and is covered by the
|
This is an extension to the Linux operating system, and is covered by the
|
||||||
|
@ -11,9 +11,9 @@ This driver is based both on the SK_MCA driver, which is itself based on the
|
||||||
SK_G16 and 3C523 driver.
|
SK_G16 and 3C523 driver.
|
||||||
|
|
||||||
paper sources:
|
paper sources:
|
||||||
'PC Hardware: Aufbau, Funktionsweise, Programmierung' by
|
'PC Hardware: Aufbau, Funktionsweise, Programmierung' by
|
||||||
Hans-Peter Messmer for the basic Microchannel stuff
|
Hans-Peter Messmer for the basic Microchannel stuff
|
||||||
|
|
||||||
'Linux Geraetetreiber' by Allesandro Rubini, Kalle Dalheimer
|
'Linux Geraetetreiber' by Allesandro Rubini, Kalle Dalheimer
|
||||||
for help on Ethernet driver programming
|
for help on Ethernet driver programming
|
||||||
|
|
||||||
|
@ -27,14 +27,14 @@ paper sources:
|
||||||
|
|
||||||
special acknowledgements to:
|
special acknowledgements to:
|
||||||
- Bob Eager for helping me out with documentation from IBM
|
- Bob Eager for helping me out with documentation from IBM
|
||||||
- Jim Shorney for his endless patience with me while I was using
|
- Jim Shorney for his endless patience with me while I was using
|
||||||
him as a beta tester to trace down the address filter bug ;-)
|
him as a beta tester to trace down the address filter bug ;-)
|
||||||
|
|
||||||
Missing things:
|
Missing things:
|
||||||
|
|
||||||
-> set debug level via ioctl instead of compile-time switches
|
-> set debug level via ioctl instead of compile-time switches
|
||||||
-> I didn't follow the development of the 2.1.x kernels, so my
|
-> I didn't follow the development of the 2.1.x kernels, so my
|
||||||
assumptions about which things changed with which kernel version
|
assumptions about which things changed with which kernel version
|
||||||
are probably nonsense
|
are probably nonsense
|
||||||
|
|
||||||
History:
|
History:
|
||||||
|
@ -275,7 +275,7 @@ static void InitDscrs(struct net_device *dev)
|
||||||
priv->rrastart = raddr = priv->txbufstart + (TXBUFCNT * PKTSIZE);
|
priv->rrastart = raddr = priv->txbufstart + (TXBUFCNT * PKTSIZE);
|
||||||
priv->rdastart = addr = priv->rrastart + (priv->rxbufcnt * sizeof(rra_t));
|
priv->rdastart = addr = priv->rrastart + (priv->rxbufcnt * sizeof(rra_t));
|
||||||
priv->rxbufstart = baddr = priv->rdastart + (priv->rxbufcnt * sizeof(rda_t));
|
priv->rxbufstart = baddr = priv->rdastart + (priv->rxbufcnt * sizeof(rda_t));
|
||||||
|
|
||||||
for (z = 0; z < priv->rxbufcnt; z++) {
|
for (z = 0; z < priv->rxbufcnt; z++) {
|
||||||
rra.startlo = baddr;
|
rra.startlo = baddr;
|
||||||
rra.starthi = 0;
|
rra.starthi = 0;
|
||||||
|
@ -570,7 +570,7 @@ static void irqrx_handler(struct net_device *dev)
|
||||||
lrdaaddr = priv->rdastart + (priv->lastrxdescr * sizeof(rda_t));
|
lrdaaddr = priv->rdastart + (priv->lastrxdescr * sizeof(rda_t));
|
||||||
memcpy_fromio(&rda, priv->base + rdaaddr, sizeof(rda_t));
|
memcpy_fromio(&rda, priv->base + rdaaddr, sizeof(rda_t));
|
||||||
|
|
||||||
/* iron out upper word halves of fields we use - SONIC will duplicate
|
/* iron out upper word halves of fields we use - SONIC will duplicate
|
||||||
bits 0..15 to 16..31 */
|
bits 0..15 to 16..31 */
|
||||||
|
|
||||||
rda.status &= 0xffff;
|
rda.status &= 0xffff;
|
||||||
|
@ -836,9 +836,9 @@ static int ibmlana_tx(struct sk_buff *skb, struct net_device *dev)
|
||||||
baddr = priv->txbufstart + (priv->nexttxdescr * PKTSIZE);
|
baddr = priv->txbufstart + (priv->nexttxdescr * PKTSIZE);
|
||||||
memcpy_toio(priv->base + baddr, skb->data, skb->len);
|
memcpy_toio(priv->base + baddr, skb->data, skb->len);
|
||||||
|
|
||||||
/* copy filler into RAM - in case we're filling up...
|
/* copy filler into RAM - in case we're filling up...
|
||||||
we're filling a bit more than necessary, but that doesn't harm
|
we're filling a bit more than necessary, but that doesn't harm
|
||||||
since the buffer is far larger...
|
since the buffer is far larger...
|
||||||
Sorry Linus for the filler string but I couldn't resist ;-) */
|
Sorry Linus for the filler string but I couldn't resist ;-) */
|
||||||
|
|
||||||
if (tmplen > skb->len) {
|
if (tmplen > skb->len) {
|
||||||
|
@ -952,7 +952,7 @@ static int ibmlana_probe(struct net_device *dev)
|
||||||
priv->realirq = irq;
|
priv->realirq = irq;
|
||||||
priv->medium = medium;
|
priv->medium = medium;
|
||||||
spin_lock_init(&priv->lock);
|
spin_lock_init(&priv->lock);
|
||||||
|
|
||||||
|
|
||||||
/* set base + irq for this device (irq not allocated so far) */
|
/* set base + irq for this device (irq not allocated so far) */
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
/* media enumeration - defined in a way that it fits onto the LAN/A's
|
/* media enumeration - defined in a way that it fits onto the LAN/A's
|
||||||
POS registers... */
|
POS registers... */
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
Media_10BaseT, Media_10Base5,
|
Media_10BaseT, Media_10Base5,
|
||||||
Media_Unknown, Media_10Base2, Media_Count
|
Media_Unknown, Media_10Base2, Media_Count
|
||||||
} ibmlana_medium;
|
} ibmlana_medium;
|
||||||
|
@ -27,7 +27,7 @@ typedef enum {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned int slot; /* MCA-Slot-# */
|
unsigned int slot; /* MCA-Slot-# */
|
||||||
struct net_device_stats stat; /* packet statistics */
|
struct net_device_stats stat; /* packet statistics */
|
||||||
int realirq; /* memorizes actual IRQ, even when
|
int realirq; /* memorizes actual IRQ, even when
|
||||||
currently not allocated */
|
currently not allocated */
|
||||||
ibmlana_medium medium; /* physical cannector */
|
ibmlana_medium medium; /* physical cannector */
|
||||||
u32 tdastart, txbufstart, /* addresses */
|
u32 tdastart, txbufstart, /* addresses */
|
||||||
|
@ -41,7 +41,7 @@ typedef struct {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
} ibmlana_priv;
|
} ibmlana_priv;
|
||||||
|
|
||||||
/* this card uses quite a lot of I/O ports...luckily the MCA bus decodes
|
/* this card uses quite a lot of I/O ports...luckily the MCA bus decodes
|
||||||
a full 64K I/O range... */
|
a full 64K I/O range... */
|
||||||
|
|
||||||
#define IBM_LANA_IORANGE 0xa0
|
#define IBM_LANA_IORANGE 0xa0
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
/* for use with IBM i/pSeries LPAR Linux. It utilizes the logical LAN */
|
/* for use with IBM i/pSeries LPAR Linux. It utilizes the logical LAN */
|
||||||
/* option of the RS/6000 Platform Architechture to interface with virtual */
|
/* option of the RS/6000 Platform Architechture to interface with virtual */
|
||||||
/* ethernet NICs that are presented to the partition by the hypervisor. */
|
/* ethernet NICs that are presented to the partition by the hypervisor. */
|
||||||
/* */
|
/* */
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/*
|
/*
|
||||||
TODO:
|
TODO:
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
#else
|
#else
|
||||||
#define ibmveth_debug_printk_no_adapter(fmt, args...)
|
#define ibmveth_debug_printk_no_adapter(fmt, args...)
|
||||||
#define ibmveth_debug_printk(fmt, args...)
|
#define ibmveth_debug_printk(fmt, args...)
|
||||||
#define ibmveth_assert(expr)
|
#define ibmveth_assert(expr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int ibmveth_open(struct net_device *dev);
|
static int ibmveth_open(struct net_device *dev);
|
||||||
|
@ -148,13 +148,13 @@ static int ibmveth_alloc_buffer_pool(struct ibmveth_buff_pool *pool)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
pool->free_map = kmalloc(sizeof(u16) * pool->size, GFP_KERNEL);
|
pool->free_map = kmalloc(sizeof(u16) * pool->size, GFP_KERNEL);
|
||||||
|
|
||||||
if(!pool->free_map) {
|
if(!pool->free_map) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pool->dma_addr = kmalloc(sizeof(dma_addr_t) * pool->size, GFP_KERNEL);
|
pool->dma_addr = kmalloc(sizeof(dma_addr_t) * pool->size, GFP_KERNEL);
|
||||||
if(!pool->dma_addr) {
|
if(!pool->dma_addr) {
|
||||||
kfree(pool->free_map);
|
kfree(pool->free_map);
|
||||||
pool->free_map = NULL;
|
pool->free_map = NULL;
|
||||||
|
@ -215,7 +215,7 @@ static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter, struc
|
||||||
|
|
||||||
free_index = pool->consumer_index++ % pool->size;
|
free_index = pool->consumer_index++ % pool->size;
|
||||||
index = pool->free_map[free_index];
|
index = pool->free_map[free_index];
|
||||||
|
|
||||||
ibmveth_assert(index != IBM_VETH_INVALID_MAP);
|
ibmveth_assert(index != IBM_VETH_INVALID_MAP);
|
||||||
ibmveth_assert(pool->skbuff[index] == NULL);
|
ibmveth_assert(pool->skbuff[index] == NULL);
|
||||||
|
|
||||||
|
@ -232,10 +232,10 @@ static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter, struc
|
||||||
desc.desc = 0;
|
desc.desc = 0;
|
||||||
desc.fields.valid = 1;
|
desc.fields.valid = 1;
|
||||||
desc.fields.length = pool->buff_size;
|
desc.fields.length = pool->buff_size;
|
||||||
desc.fields.address = dma_addr;
|
desc.fields.address = dma_addr;
|
||||||
|
|
||||||
lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
|
lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
|
||||||
|
|
||||||
if(lpar_rc != H_SUCCESS) {
|
if(lpar_rc != H_SUCCESS) {
|
||||||
pool->free_map[free_index] = index;
|
pool->free_map[free_index] = index;
|
||||||
pool->skbuff[index] = NULL;
|
pool->skbuff[index] = NULL;
|
||||||
|
@ -251,13 +251,13 @@ static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter, struc
|
||||||
adapter->replenish_add_buff_success++;
|
adapter->replenish_add_buff_success++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mb();
|
mb();
|
||||||
atomic_add(buffers_added, &(pool->available));
|
atomic_add(buffers_added, &(pool->available));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* replenish routine */
|
/* replenish routine */
|
||||||
static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
|
static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
|
||||||
|
|
||||||
for(i = 0; i < IbmVethNumBufferPools; i++)
|
for(i = 0; i < IbmVethNumBufferPools; i++)
|
||||||
if(adapter->rx_buff_pool[i].active)
|
if(adapter->rx_buff_pool[i].active)
|
||||||
ibmveth_replenish_buffer_pool(adapter,
|
ibmveth_replenish_buffer_pool(adapter,
|
||||||
&adapter->rx_buff_pool[i]);
|
&adapter->rx_buff_pool[i]);
|
||||||
|
|
||||||
adapter->rx_no_buffer = *(u64*)(((char*)adapter->buffer_list_addr) + 4096 - 8);
|
adapter->rx_no_buffer = *(u64*)(((char*)adapter->buffer_list_addr) + 4096 - 8);
|
||||||
|
@ -372,7 +372,7 @@ static void ibmveth_rxq_recycle_buffer(struct ibmveth_adapter *adapter)
|
||||||
desc.fields.address = adapter->rx_buff_pool[pool].dma_addr[index];
|
desc.fields.address = adapter->rx_buff_pool[pool].dma_addr[index];
|
||||||
|
|
||||||
lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
|
lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc);
|
||||||
|
|
||||||
if(lpar_rc != H_SUCCESS) {
|
if(lpar_rc != H_SUCCESS) {
|
||||||
ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc);
|
ibmveth_debug_printk("h_add_logical_lan_buffer failed during recycle rc=%ld", lpar_rc);
|
||||||
ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator);
|
ibmveth_remove_buffer_from_pool(adapter, adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator);
|
||||||
|
@ -407,7 +407,7 @@ static void ibmveth_cleanup(struct ibmveth_adapter *adapter)
|
||||||
}
|
}
|
||||||
free_page((unsigned long)adapter->buffer_list_addr);
|
free_page((unsigned long)adapter->buffer_list_addr);
|
||||||
adapter->buffer_list_addr = NULL;
|
adapter->buffer_list_addr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(adapter->filter_list_addr != NULL) {
|
if(adapter->filter_list_addr != NULL) {
|
||||||
if(!dma_mapping_error(adapter->filter_list_dma)) {
|
if(!dma_mapping_error(adapter->filter_list_dma)) {
|
||||||
|
@ -434,7 +434,7 @@ static void ibmveth_cleanup(struct ibmveth_adapter *adapter)
|
||||||
|
|
||||||
for(i = 0; i<IbmVethNumBufferPools; i++)
|
for(i = 0; i<IbmVethNumBufferPools; i++)
|
||||||
if (adapter->rx_buff_pool[i].active)
|
if (adapter->rx_buff_pool[i].active)
|
||||||
ibmveth_free_buffer_pool(adapter,
|
ibmveth_free_buffer_pool(adapter,
|
||||||
&adapter->rx_buff_pool[i]);
|
&adapter->rx_buff_pool[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -452,10 +452,10 @@ static int ibmveth_open(struct net_device *netdev)
|
||||||
|
|
||||||
for(i = 0; i<IbmVethNumBufferPools; i++)
|
for(i = 0; i<IbmVethNumBufferPools; i++)
|
||||||
rxq_entries += adapter->rx_buff_pool[i].size;
|
rxq_entries += adapter->rx_buff_pool[i].size;
|
||||||
|
|
||||||
adapter->buffer_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
|
adapter->buffer_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
|
||||||
adapter->filter_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
|
adapter->filter_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
|
||||||
|
|
||||||
if(!adapter->buffer_list_addr || !adapter->filter_list_addr) {
|
if(!adapter->buffer_list_addr || !adapter->filter_list_addr) {
|
||||||
ibmveth_error_printk("unable to allocate filter or buffer list pages\n");
|
ibmveth_error_printk("unable to allocate filter or buffer list pages\n");
|
||||||
ibmveth_cleanup(adapter);
|
ibmveth_cleanup(adapter);
|
||||||
|
@ -503,7 +503,7 @@ static int ibmveth_open(struct net_device *netdev)
|
||||||
ibmveth_debug_printk("filter list @ 0x%p\n", adapter->filter_list_addr);
|
ibmveth_debug_printk("filter list @ 0x%p\n", adapter->filter_list_addr);
|
||||||
ibmveth_debug_printk("receive q @ 0x%p\n", adapter->rx_queue.queue_addr);
|
ibmveth_debug_printk("receive q @ 0x%p\n", adapter->rx_queue.queue_addr);
|
||||||
|
|
||||||
|
|
||||||
lpar_rc = h_register_logical_lan(adapter->vdev->unit_address,
|
lpar_rc = h_register_logical_lan(adapter->vdev->unit_address,
|
||||||
adapter->buffer_list_dma,
|
adapter->buffer_list_dma,
|
||||||
rxq_desc.desc,
|
rxq_desc.desc,
|
||||||
|
@ -518,7 +518,7 @@ static int ibmveth_open(struct net_device *netdev)
|
||||||
rxq_desc.desc,
|
rxq_desc.desc,
|
||||||
mac_address);
|
mac_address);
|
||||||
ibmveth_cleanup(adapter);
|
ibmveth_cleanup(adapter);
|
||||||
return -ENONET;
|
return -ENONET;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i<IbmVethNumBufferPools; i++) {
|
for(i = 0; i<IbmVethNumBufferPools; i++) {
|
||||||
|
@ -557,7 +557,7 @@ static int ibmveth_close(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct ibmveth_adapter *adapter = netdev->priv;
|
struct ibmveth_adapter *adapter = netdev->priv;
|
||||||
long lpar_rc;
|
long lpar_rc;
|
||||||
|
|
||||||
ibmveth_debug_printk("close starting\n");
|
ibmveth_debug_printk("close starting\n");
|
||||||
|
|
||||||
if (!adapter->pool_config)
|
if (!adapter->pool_config)
|
||||||
|
@ -705,7 +705,7 @@ static int ibmveth_start_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||||
desc[5].desc,
|
desc[5].desc,
|
||||||
correlator);
|
correlator);
|
||||||
} while ((lpar_rc == H_BUSY) && (retry_count--));
|
} while ((lpar_rc == H_BUSY) && (retry_count--));
|
||||||
|
|
||||||
if(lpar_rc != H_SUCCESS && lpar_rc != H_DROPPED) {
|
if(lpar_rc != H_SUCCESS && lpar_rc != H_DROPPED) {
|
||||||
int i;
|
int i;
|
||||||
ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc);
|
ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc);
|
||||||
|
@ -791,7 +791,7 @@ static int ibmveth_poll(struct net_device *netdev, int *budget)
|
||||||
/* more work to do - return that we are not done yet */
|
/* more work to do - return that we are not done yet */
|
||||||
netdev->quota -= frames_processed;
|
netdev->quota -= frames_processed;
|
||||||
*budget -= frames_processed;
|
*budget -= frames_processed;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we think we are done - reenable interrupts, then check once more to make sure we are done */
|
/* we think we are done - reenable interrupts, then check once more to make sure we are done */
|
||||||
|
@ -817,7 +817,7 @@ static int ibmveth_poll(struct net_device *netdev, int *budget)
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
|
static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct net_device *netdev = dev_instance;
|
struct net_device *netdev = dev_instance;
|
||||||
struct ibmveth_adapter *adapter = netdev->priv;
|
struct ibmveth_adapter *adapter = netdev->priv;
|
||||||
unsigned long lpar_rc;
|
unsigned long lpar_rc;
|
||||||
|
@ -873,7 +873,7 @@ static void ibmveth_set_multicast_list(struct net_device *netdev)
|
||||||
ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc);
|
ibmveth_error_printk("h_multicast_ctrl rc=%ld when adding an entry to the filter table\n", lpar_rc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* re-enable filtering */
|
/* re-enable filtering */
|
||||||
lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
|
lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
|
||||||
IbmVethMcastEnableFiltering,
|
IbmVethMcastEnableFiltering,
|
||||||
|
@ -915,7 +915,7 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
unsigned int *mcastFilterSize_p;
|
unsigned int *mcastFilterSize_p;
|
||||||
|
|
||||||
|
|
||||||
ibmveth_debug_printk_no_adapter("entering ibmveth_probe for UA 0x%x\n",
|
ibmveth_debug_printk_no_adapter("entering ibmveth_probe for UA 0x%x\n",
|
||||||
dev->unit_address);
|
dev->unit_address);
|
||||||
|
|
||||||
mac_addr_p = (unsigned char *) vio_get_attribute(dev, VETH_MAC_ADDR, 0);
|
mac_addr_p = (unsigned char *) vio_get_attribute(dev, VETH_MAC_ADDR, 0);
|
||||||
|
@ -924,7 +924,7 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
"attribute\n", __FILE__, __LINE__);
|
"attribute\n", __FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
mcastFilterSize_p= (unsigned int *) vio_get_attribute(dev, VETH_MCAST_FILTER_SIZE, 0);
|
mcastFilterSize_p= (unsigned int *) vio_get_attribute(dev, VETH_MCAST_FILTER_SIZE, 0);
|
||||||
if(!mcastFilterSize_p) {
|
if(!mcastFilterSize_p) {
|
||||||
printk(KERN_ERR "(%s:%3.3d) ERROR: Can't find "
|
printk(KERN_ERR "(%s:%3.3d) ERROR: Can't find "
|
||||||
|
@ -932,7 +932,7 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
netdev = alloc_etherdev(sizeof(struct ibmveth_adapter));
|
netdev = alloc_etherdev(sizeof(struct ibmveth_adapter));
|
||||||
|
|
||||||
if(!netdev)
|
if(!netdev)
|
||||||
|
@ -948,13 +948,13 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
adapter->netdev = netdev;
|
adapter->netdev = netdev;
|
||||||
adapter->mcastFilterSize= *mcastFilterSize_p;
|
adapter->mcastFilterSize= *mcastFilterSize_p;
|
||||||
adapter->pool_config = 0;
|
adapter->pool_config = 0;
|
||||||
|
|
||||||
/* Some older boxes running PHYP non-natively have an OF that
|
/* Some older boxes running PHYP non-natively have an OF that
|
||||||
returns a 8-byte local-mac-address field (and the first
|
returns a 8-byte local-mac-address field (and the first
|
||||||
2 bytes have to be ignored) while newer boxes' OF return
|
2 bytes have to be ignored) while newer boxes' OF return
|
||||||
a 6-byte field. Note that IEEE 1275 specifies that
|
a 6-byte field. Note that IEEE 1275 specifies that
|
||||||
local-mac-address must be a 6-byte field.
|
local-mac-address must be a 6-byte field.
|
||||||
The RPA doc specifies that the first byte must be 10b, so
|
The RPA doc specifies that the first byte must be 10b, so
|
||||||
we'll just look for it to solve this 8 vs. 6 byte field issue */
|
we'll just look for it to solve this 8 vs. 6 byte field issue */
|
||||||
|
|
||||||
if ((*mac_addr_p & 0x3) != 0x02)
|
if ((*mac_addr_p & 0x3) != 0x02)
|
||||||
|
@ -964,7 +964,7 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
memcpy(&adapter->mac_addr, mac_addr_p, 6);
|
memcpy(&adapter->mac_addr, mac_addr_p, 6);
|
||||||
|
|
||||||
adapter->liobn = dev->iommu_table->it_index;
|
adapter->liobn = dev->iommu_table->it_index;
|
||||||
|
|
||||||
netdev->irq = dev->irq;
|
netdev->irq = dev->irq;
|
||||||
netdev->open = ibmveth_open;
|
netdev->open = ibmveth_open;
|
||||||
netdev->poll = ibmveth_poll;
|
netdev->poll = ibmveth_poll;
|
||||||
|
@ -977,15 +977,15 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
||||||
netdev->ethtool_ops = &netdev_ethtool_ops;
|
netdev->ethtool_ops = &netdev_ethtool_ops;
|
||||||
netdev->change_mtu = ibmveth_change_mtu;
|
netdev->change_mtu = ibmveth_change_mtu;
|
||||||
SET_NETDEV_DEV(netdev, &dev->dev);
|
SET_NETDEV_DEV(netdev, &dev->dev);
|
||||||
netdev->features |= NETIF_F_LLTX;
|
netdev->features |= NETIF_F_LLTX;
|
||||||
spin_lock_init(&adapter->stats_lock);
|
spin_lock_init(&adapter->stats_lock);
|
||||||
|
|
||||||
memcpy(&netdev->dev_addr, &adapter->mac_addr, netdev->addr_len);
|
memcpy(&netdev->dev_addr, &adapter->mac_addr, netdev->addr_len);
|
||||||
|
|
||||||
for(i = 0; i<IbmVethNumBufferPools; i++) {
|
for(i = 0; i<IbmVethNumBufferPools; i++) {
|
||||||
struct kobject *kobj = &adapter->rx_buff_pool[i].kobj;
|
struct kobject *kobj = &adapter->rx_buff_pool[i].kobj;
|
||||||
ibmveth_init_buffer_pool(&adapter->rx_buff_pool[i], i,
|
ibmveth_init_buffer_pool(&adapter->rx_buff_pool[i], i,
|
||||||
pool_count[i], pool_size[i],
|
pool_count[i], pool_size[i],
|
||||||
pool_active[i]);
|
pool_active[i]);
|
||||||
kobj->parent = &dev->dev.kobj;
|
kobj->parent = &dev->dev.kobj;
|
||||||
sprintf(kobj->name, "pool%d", i);
|
sprintf(kobj->name, "pool%d", i);
|
||||||
|
@ -1047,7 +1047,7 @@ static void ibmveth_proc_unregister_driver(void)
|
||||||
remove_proc_entry(IBMVETH_PROC_DIR, NULL);
|
remove_proc_entry(IBMVETH_PROC_DIR, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *ibmveth_seq_start(struct seq_file *seq, loff_t *pos)
|
static void *ibmveth_seq_start(struct seq_file *seq, loff_t *pos)
|
||||||
{
|
{
|
||||||
if (*pos == 0) {
|
if (*pos == 0) {
|
||||||
return (void *)1;
|
return (void *)1;
|
||||||
|
@ -1062,18 +1062,18 @@ static void *ibmveth_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ibmveth_seq_stop(struct seq_file *seq, void *v)
|
static void ibmveth_seq_stop(struct seq_file *seq, void *v)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ibmveth_seq_show(struct seq_file *seq, void *v)
|
static int ibmveth_seq_show(struct seq_file *seq, void *v)
|
||||||
{
|
{
|
||||||
struct ibmveth_adapter *adapter = seq->private;
|
struct ibmveth_adapter *adapter = seq->private;
|
||||||
char *current_mac = ((char*) &adapter->netdev->dev_addr);
|
char *current_mac = ((char*) &adapter->netdev->dev_addr);
|
||||||
char *firmware_mac = ((char*) &adapter->mac_addr) ;
|
char *firmware_mac = ((char*) &adapter->mac_addr) ;
|
||||||
|
|
||||||
seq_printf(seq, "%s %s\n\n", ibmveth_driver_string, ibmveth_driver_version);
|
seq_printf(seq, "%s %s\n\n", ibmveth_driver_string, ibmveth_driver_version);
|
||||||
|
|
||||||
seq_printf(seq, "Unit Address: 0x%x\n", adapter->vdev->unit_address);
|
seq_printf(seq, "Unit Address: 0x%x\n", adapter->vdev->unit_address);
|
||||||
seq_printf(seq, "LIOBN: 0x%lx\n", adapter->liobn);
|
seq_printf(seq, "LIOBN: 0x%lx\n", adapter->liobn);
|
||||||
seq_printf(seq, "Current MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
seq_printf(seq, "Current MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||||
|
@ -1082,7 +1082,7 @@ static int ibmveth_seq_show(struct seq_file *seq, void *v)
|
||||||
seq_printf(seq, "Firmware MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
seq_printf(seq, "Firmware MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||||
firmware_mac[0], firmware_mac[1], firmware_mac[2],
|
firmware_mac[0], firmware_mac[1], firmware_mac[2],
|
||||||
firmware_mac[3], firmware_mac[4], firmware_mac[5]);
|
firmware_mac[3], firmware_mac[4], firmware_mac[5]);
|
||||||
|
|
||||||
seq_printf(seq, "\nAdapter Statistics:\n");
|
seq_printf(seq, "\nAdapter Statistics:\n");
|
||||||
seq_printf(seq, " TX: skbuffs linearized: %ld\n", adapter->tx_linearized);
|
seq_printf(seq, " TX: skbuffs linearized: %ld\n", adapter->tx_linearized);
|
||||||
seq_printf(seq, " multi-descriptor sends: %ld\n", adapter->tx_multidesc_send);
|
seq_printf(seq, " multi-descriptor sends: %ld\n", adapter->tx_multidesc_send);
|
||||||
|
@ -1094,7 +1094,7 @@ static int ibmveth_seq_show(struct seq_file *seq, void *v)
|
||||||
seq_printf(seq, " add buffer failures: %ld\n", adapter->replenish_add_buff_failure);
|
seq_printf(seq, " add buffer failures: %ld\n", adapter->replenish_add_buff_failure);
|
||||||
seq_printf(seq, " invalid buffers: %ld\n", adapter->rx_invalid_buffer);
|
seq_printf(seq, " invalid buffers: %ld\n", adapter->rx_invalid_buffer);
|
||||||
seq_printf(seq, " no buffers: %ld\n", adapter->rx_no_buffer);
|
seq_printf(seq, " no buffers: %ld\n", adapter->rx_no_buffer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static struct seq_operations ibmveth_seq_ops = {
|
static struct seq_operations ibmveth_seq_ops = {
|
||||||
|
@ -1152,11 +1152,11 @@ static void ibmveth_proc_unregister_adapter(struct ibmveth_adapter *adapter)
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* CONFIG_PROC_FS */
|
#else /* CONFIG_PROC_FS */
|
||||||
static void ibmveth_proc_register_adapter(struct ibmveth_adapter *adapter)
|
static void ibmveth_proc_register_adapter(struct ibmveth_adapter *adapter)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ibmveth_proc_unregister_adapter(struct ibmveth_adapter *adapter)
|
static void ibmveth_proc_unregister_adapter(struct ibmveth_adapter *adapter)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
static void ibmveth_proc_register_driver(void)
|
static void ibmveth_proc_register_driver(void)
|
||||||
|
@ -1175,7 +1175,7 @@ static struct attribute veth_size_attr;
|
||||||
static ssize_t veth_pool_show(struct kobject * kobj,
|
static ssize_t veth_pool_show(struct kobject * kobj,
|
||||||
struct attribute * attr, char * buf)
|
struct attribute * attr, char * buf)
|
||||||
{
|
{
|
||||||
struct ibmveth_buff_pool *pool = container_of(kobj,
|
struct ibmveth_buff_pool *pool = container_of(kobj,
|
||||||
struct ibmveth_buff_pool,
|
struct ibmveth_buff_pool,
|
||||||
kobj);
|
kobj);
|
||||||
|
|
||||||
|
@ -1191,10 +1191,10 @@ static ssize_t veth_pool_show(struct kobject * kobj,
|
||||||
static ssize_t veth_pool_store(struct kobject * kobj, struct attribute * attr,
|
static ssize_t veth_pool_store(struct kobject * kobj, struct attribute * attr,
|
||||||
const char * buf, size_t count)
|
const char * buf, size_t count)
|
||||||
{
|
{
|
||||||
struct ibmveth_buff_pool *pool = container_of(kobj,
|
struct ibmveth_buff_pool *pool = container_of(kobj,
|
||||||
struct ibmveth_buff_pool,
|
struct ibmveth_buff_pool,
|
||||||
kobj);
|
kobj);
|
||||||
struct net_device *netdev =
|
struct net_device *netdev =
|
||||||
container_of(kobj->parent, struct device, kobj)->driver_data;
|
container_of(kobj->parent, struct device, kobj)->driver_data;
|
||||||
struct ibmveth_adapter *adapter = netdev->priv;
|
struct ibmveth_adapter *adapter = netdev->priv;
|
||||||
long value = simple_strtol(buf, NULL, 10);
|
long value = simple_strtol(buf, NULL, 10);
|
||||||
|
@ -1323,7 +1323,7 @@ static void __exit ibmveth_module_exit(void)
|
||||||
{
|
{
|
||||||
vio_unregister_driver(&ibmveth_driver);
|
vio_unregister_driver(&ibmveth_driver);
|
||||||
ibmveth_proc_unregister_driver();
|
ibmveth_proc_unregister_driver();
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(ibmveth_module_init);
|
module_init(ibmveth_module_init);
|
||||||
module_exit(ibmveth_module_exit);
|
module_exit(ibmveth_module_exit);
|
||||||
|
|
|
@ -139,7 +139,7 @@ struct ibmveth_adapter {
|
||||||
spinlock_t stats_lock;
|
spinlock_t stats_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ibmveth_buf_desc_fields {
|
struct ibmveth_buf_desc_fields {
|
||||||
u32 valid : 1;
|
u32 valid : 1;
|
||||||
u32 toggle : 1;
|
u32 toggle : 1;
|
||||||
u32 reserved : 6;
|
u32 reserved : 6;
|
||||||
|
@ -148,7 +148,7 @@ struct ibmveth_buf_desc_fields {
|
||||||
};
|
};
|
||||||
|
|
||||||
union ibmveth_buf_desc {
|
union ibmveth_buf_desc {
|
||||||
u64 desc;
|
u64 desc;
|
||||||
struct ibmveth_buf_desc_fields fields;
|
struct ibmveth_buf_desc_fields fields;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue