]> git.neil.brown.name Git - history.git/commitdiff
Import 0.99.14w 0.99.14w
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:20 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:20 +0000 (15:09 -0500)
Makefile
drivers/net/atp.c
drivers/net/ne.c
drivers/net/slip.c
drivers/scsi/wd7000.c
net/inet/packet.c
net/inet/sock.c
net/inet/tcp.c

index 504d69634fa82d9e67b57cdfd4363bfb21ea4f4c..564ea92da2b8436906cbd1bd9e10b12e025f1868 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 0.99
 PATCHLEVEL = 14
-ALPHA = v
+ALPHA = w
 
 all:   Version zImage
 
index f753c79641b72b9ff24e57d5b24d04fb70789744..e99d0249ee815ca4ed5e7763cb0b270358c8785d 100644 (file)
@@ -12,7 +12,7 @@
 */
 
 static char *version =
-       "atp.c:v0.02 12/22/93 Donald Becker (becker@super.org)\n";
+       "atp.c:v0.03 1/19/94 Donald Becker (becker@super.org)\n";
 
 /*
        This file is a device driver for the RealTek (aka AT-Lan-Tec) pocket
@@ -623,6 +623,12 @@ net_interrupt(int reg_ptr)
                        break;
     }
 
+       {
+               int i;
+               for (i = 0; i < 6; i++)
+                       write_reg_byte(ioaddr, PAR0 + i, dev->dev_addr[i]);
+       }
+
        /* Tell the adaptor that it can go back to using the output line as IRQ. */
     write_reg(ioaddr, CMR2, CMR2_IRQOUT);
        /* Enable the physical interrupt line, which is sure to be low until.. */
index e198d55755e79e79f6f18f8d7600606863148e4f..9ad85fd78c9d86706c222164d43ac9a987b119dc 100644 (file)
@@ -17,7 +17,7 @@
 /* Routines for the NatSemi-based designs (NE[12]000). */
 
 static char *version =
-    "ne.c:v0.99-14a 12/3/93 Donald Becker (becker@super.org)\n";
+    "ne.c:v0.99-15 1/19/93 Donald Becker (becker@super.org)\n";
 
 #include <linux/config.h>
 #include <linux/kernel.h>
@@ -123,6 +123,10 @@ static int neprobe1(int ioaddr, struct device *dev, int verbose)
 
     printk("NE*000 ethercard probe at %#3x:", ioaddr);
 
+    /* First hard-reset the ethercard. */
+    i = inb_p(ioaddr + NE_RESET);
+    outb_p(i, ioaddr + NE_RESET);
+
     /* Read the 16 bytes of station address prom, returning 1 for
        an eight-bit interface and 2 for a 16-bit interface.
        We must first initialize registers, similar to NS8390_init(eifdev, 0).
@@ -158,8 +162,8 @@ static int neprobe1(int ioaddr, struct device *dev, int verbose)
        /* We must set the 8390 for word mode, AND RESET IT. */
        int tmp;
        outb_p(0x49, ioaddr + EN0_DCFG);
-       tmp = inb_p(NE_BASE + NE_RESET);
-       outb(tmp, NE_BASE + NE_RESET);
+       tmp = inb_p(ioaddr + NE_RESET);
+       outb(tmp, ioaddr + NE_RESET);
        /* Un-double the SA_prom values. */
        for (i = 0; i < 16; i++)
            SA_prom[i] = SA_prom[i+i];
index fb722fdc01d67b98556f6252d9bb1226f5306034..f19a2260c8e9c988d959a081473adb6a0e34f2b9 100644 (file)
@@ -583,57 +583,8 @@ sl_header(unsigned char *buff, struct device *dev, unsigned short type,
 {
 #ifdef CONFIG_AX25
   struct slip *sl=&sl_ctrl[dev->base_addr];
-  unsigned long flags;
   if((sl->mode&SL_MODE_AX25) && type!=NET16(ETH_P_AX25))
-  {
-       /* header is an AX.25 UI frame from us to them */
-       if(chk_addr(daddr) == IS_BROADCAST)
-       {
-               *buff++=0;
-               memcpy(buff,dev->broadcast,dev->addr_len);      /* QST-0 */
-       }
-       else
-       {
-               if(type!=ETH_P_IP)
-                       printk("AX25 Encap: Non IP frame to encapsulate directed\n");
-               save_flags(flags);
-               cli();
-               *buff++=0;      /* KISS DATA */
-               memcpy(buff,&daddr,4);  /* In case arp fails */
-               if(arp_find(buff,daddr,dev, saddr))
-               {
-                       memcpy(buff+7,&saddr,4);
-                       buff+=14;
-                       *buff++=LAPB_UI;        /* UI */
-                       /* Append a suitable AX.25 PID */
-                       *buff++=PID_IP; /* AX25 IP */
-                       restore_flags(flags);
-                       return ( -dev->hard_header_len);
-               }
-       }
-       buff[6]&=~LAPB_C;
-       buff[6]&=~LAPB_E;
-       buff+=7;
-       memcpy(buff,dev->dev_addr,dev->addr_len);
-       buff[6]&=~LAPB_C;
-       buff[6]|=LAPB_E;
-       buff+=7;
-       *buff++=LAPB_UI;        /* UI */
-       /* Append a suitable AX.25 PID */
-       switch(type)
-       {
-               case ETH_P_IP:
-                       *buff++=PID_IP; /* AX25 IP */
-                       break;
-               case ETH_P_ARP:
-                       *buff++=PID_ARP;
-                       break;
-               default:
-                       *buff++=0;
-       }
-       
-       return (17);
-  }
+       return ax25_encapsulate_ip(buff,dev,type,daddr,saddr,len);
 #endif  
 
   return(0);
@@ -661,19 +612,7 @@ sl_rebuild_header(void *buff, struct device *dev)
   struct slip *sl=&sl_ctrl[dev->base_addr];
   
   if(sl->mode&SL_MODE_AX25)
-  {
-       unsigned char *bp=(unsigned char *)buff;
-       long dest=*(long *)(bp+1);
-       long src=*(long *)(bp+8);
-       if(arp_find(bp+1,dest,dev,src))
-               return 1;
-       memcpy(bp+8,dev->dev_addr,7);
-       bp[7]&=~LAPB_C;
-       bp[7]&=~LAPB_E;
-       bp[14]&=~LAPB_C;
-       bp[14]|=LAPB_E;
-       return(0);
-  }
+       return ax25_rebuild_header(buff,dev);
 #endif  
   return(0);
 }
index e0654ac8bf4ab19d28e7f975d435484b81e06d19..b64f56fed3039e4b050beb3f51d2352533ee0282 100644 (file)
@@ -508,7 +508,7 @@ void wd7000_revision(void)
 }
 
 
-static const char *wd_bases[] = {(char *)0xce000,(char *)d8000};
+static const char *wd_bases[] = {(char *)0xce000,(char *)0xd8000};
 
 typedef struct {
     char * signature;
index 98b3713bdd76497cb4371844e06965d47c230ae6..e85edeca48063f4fdfad16c6f3b2f2be64af5dbc 100644 (file)
@@ -134,6 +134,7 @@ packet_sendto(struct sock *sk, unsigned char *from, int len,
   memcpy_fromfs(skb->data, from, len);
   skb->len = len;
   skb->next = NULL;
+  skb->arp = 1;
   if (dev->flags & IFF_UP) dev->queue_xmit(skb, dev, sk->priority);
     else kfree_skb(skb, FREE_WRITE);
   return(len);
index 70a9f28ee61762f9b82f2ef419ab072836eefcbd..8001bae025ea1902f476ad5f4bc00256b49bbdc9 100644 (file)
@@ -1157,7 +1157,7 @@ inet_connect(struct socket *sock, struct sockaddr * uaddr,
        sock->state = SS_UNCONNECTED;
        err=sk->err;
        sk->err=0;
-       return(err);
+       return(-err);
   }
   return(0);
 }
index 4de3e1e893c25d724ba0412e9db1fd5691bc7487..41a32628ca4410752c97930b3108fd1bf5b94afd 100644 (file)
@@ -2926,6 +2926,10 @@ tcp_connect(struct sock *sk, struct sockaddr_in *usin, int addr_len)
        return(-ENETUNREACH);
   }
   
+  /* Connect back to the same socket: Blows up so disallow it */
+  if(sk->saddr == sin.sin_addr.s_addr && sk->num==ntohs(sin.sin_port))
+       return -EBUSY;
+
   sk->inuse = 1;
   sk->daddr = sin.sin_addr.s_addr;
   sk->send_seq = jiffies * SEQ_TICK - seq_offset;