patch-2.4.21 linux-2.4.21/drivers/net/3c507.c
Next file: linux-2.4.21/drivers/net/3c509.c
Previous file: linux-2.4.21/drivers/net/3c505.c
Back to the patch index
Back to the overall index
- Lines: 51
- Date:
2003-06-13 07:51:34.000000000 -0700
- Orig file:
linux-2.4.20/drivers/net/3c507.c
- Orig date:
2002-02-25 11:37:58.000000000 -0800
diff -urN linux-2.4.20/drivers/net/3c507.c linux-2.4.21/drivers/net/3c507.c
@@ -303,7 +303,7 @@
static struct net_device_stats *el16_get_stats(struct net_device *dev);
static void el16_tx_timeout (struct net_device *dev);
-static void hardware_send_packet(struct net_device *dev, void *buf, short length);
+static void hardware_send_packet(struct net_device *dev, void *buf, short length, short pad);
static void init_82586_mem(struct net_device *dev);
static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
@@ -505,7 +505,7 @@
/* Disable the 82586's input to the interrupt line. */
outb (0x80, ioaddr + MISC_CTRL);
- hardware_send_packet (dev, buf, length);
+ hardware_send_packet (dev, buf, skb->len, length - skb->len);
dev->trans_start = jiffies;
/* Enable the 82586 interrupt input. */
@@ -758,12 +758,13 @@
return;
}
-static void hardware_send_packet(struct net_device *dev, void *buf, short length)
+static void hardware_send_packet(struct net_device *dev, void *buf, short length, short pad)
{
struct net_local *lp = (struct net_local *)dev->priv;
short ioaddr = dev->base_addr;
ushort tx_block = lp->tx_head;
unsigned long write_ptr = dev->mem_start + tx_block;
+ static char padding[ETH_ZLEN];
/* Set the write pointer to the Tx block, and put out the header. */
isa_writew(0x0000,write_ptr); /* Tx status */
@@ -772,7 +773,7 @@
isa_writew(tx_block+8,write_ptr+=2); /* Data Buffer offset. */
/* Output the data buffer descriptor. */
- isa_writew(length | 0x8000,write_ptr+=2); /* Byte count parameter. */
+ isa_writew((pad + length) | 0x8000,write_ptr+=2); /* Byte count parameter. */
isa_writew(-1,write_ptr+=2); /* No next data buffer. */
isa_writew(tx_block+22+SCB_BASE,write_ptr+=2); /* Buffer follows the NoOp command. */
isa_writew(0x0000,write_ptr+=2); /* Buffer address high bits (always zero). */
@@ -784,6 +785,8 @@
/* Output the packet at the write pointer. */
isa_memcpy_toio(write_ptr+2, buf, length);
+ if(pad)
+ isa_memcpy_toio(write_ptr+length+2, padding, pad);
/* Set the old command link pointing to this send packet. */
isa_writew(tx_block,dev->mem_start + lp->tx_cmd_link);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)