patch-2.4.21 linux-2.4.21/drivers/net/atp.c
Next file: linux-2.4.21/drivers/net/bagetlance.c
Previous file: linux-2.4.21/drivers/net/atarilance.c
Back to the patch index
Back to the overall index
- Lines: 56
- Date:
2003-06-13 07:51:34.000000000 -0700
- Orig file:
linux-2.4.20/drivers/net/atp.c
- Orig date:
2002-08-02 17:39:44.000000000 -0700
diff -urN linux-2.4.20/drivers/net/atp.c linux-2.4.21/drivers/net/atp.c
@@ -203,7 +203,7 @@
static unsigned short eeprom_op(long ioaddr, unsigned int cmd);
static int net_open(struct net_device *dev);
static void hardware_init(struct net_device *dev);
-static void write_packet(long ioaddr, int length, unsigned char *packet, int mode);
+static void write_packet(long ioaddr, int length, unsigned char *packet, int pad, int mode);
static void trigger_send(long ioaddr, int length);
static int atp_send_packet(struct sk_buff *skb, struct net_device *dev);
static void atp_interrupt(int irq, void *dev_id, struct pt_regs *regs);
@@ -500,15 +500,23 @@
write_reg(ioaddr, CMR1, CMR1_Xmit);
}
-static void write_packet(long ioaddr, int length, unsigned char *packet, int data_mode)
+static void write_packet(long ioaddr, int length, unsigned char *packet, int pad_len, int data_mode)
{
- length = (length + 1) & ~1; /* Round up to word length. */
+ if(length & 1)
+ {
+ length++;
+ pad_len++;
+ }
+
outb(EOC+MAR, ioaddr + PAR_DATA);
if ((data_mode & 1) == 0) {
/* Write the packet out, starting with the write addr. */
outb(WrAddr+MAR, ioaddr + PAR_DATA);
do {
write_byte_mode0(ioaddr, *packet++);
+ } while (--length > pad_len) ;
+ do {
+ write_byte_mode0(ioaddr, 0);
} while (--length > 0) ;
} else {
/* Write the packet out in slow mode. */
@@ -522,8 +530,10 @@
outbyte >>= 4;
outb(outbyte & 0x0f, ioaddr + PAR_DATA);
outb(Ctrl_HNibWrite + Ctrl_IRQEN, ioaddr + PAR_CONTROL);
- while (--length > 0)
+ while (--length > pad_len)
write_byte_mode1(ioaddr, *packet++);
+ while (--length > 0)
+ write_byte_mode1(ioaddr, 0);
}
/* Terminate the Tx frame. End of write: ECB. */
outb(0xff, ioaddr + PAR_DATA);
@@ -565,7 +575,7 @@
write_reg_high(ioaddr, IMR, 0);
spin_unlock_irqrestore(&lp->lock, flags);
- write_packet(ioaddr, length, skb->data, dev->if_port);
+ write_packet(ioaddr, length, skb->data, length-skb->len, dev->if_port);
lp->pac_cnt_in_tx_buf++;
if (lp->tx_unit_busy == 0) {
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)