Commit bfeedc98 authored by Linus Torvalds's avatar Linus Torvalds

Import 0.99.14u

parent 50a32c2c
VERSION = 0.99 VERSION = 0.99
PATCHLEVEL = 14 PATCHLEVEL = 14
ALPHA = t ALPHA = u
all: Version zImage all: Version zImage
......
This diff is collapsed.
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
* Visionary Computing * Visionary Computing
* (Unix consulting and custom programming) * (Unix consulting and custom programming)
* drew@colorado.edu * drew@colorado.edu
* +1 (303) 440-4894 * +1 (303) 666-5836
* *
* DISTRIBUTION RELEASE 3 * DISTRIBUTION RELEASE 4
* *
* For more information, please consult * For more information, please consult
* *
...@@ -23,12 +23,23 @@ ...@@ -23,12 +23,23 @@
/* /*
* $Log: NCR5380.h,v $ * $Log: NCR5380.h,v $
* Revision 1.3 1994/01/19 05:24:40 drew
* Added support for TCR LAST_BYTE_SENT bit.
*
* Revision 1.3 1994/01/19 05:24:40 drew
* Added support for TCR LAST_BYTE_SENT bit.
*
* Revision 1.2 1994/01/15 06:14:11 drew
* REAL DMA support, bug fixes.
*
* Revision 1.1 1994/01/15 06:00:54 drew
* Initial revision
*/ */
#ifndef NCR5380_H #ifndef NCR5380_H
#define NCR5380_H #define NCR5380_H
#define NCR5380_PUBLIC_RELEASE 3 #define NCR5380_PUBLIC_RELEASE 4
#define NDEBUG_ARBITRATION 0x1 #define NDEBUG_ARBITRATION 0x1
#define NDEBUG_AUTOSENSE 0x2 #define NDEBUG_AUTOSENSE 0x2
...@@ -47,6 +58,7 @@ ...@@ -47,6 +58,7 @@
#define NDEBUG_RESELECTION 0x4000 #define NDEBUG_RESELECTION 0x4000
#define NDEBUG_SELECTION 0x8000 #define NDEBUG_SELECTION 0x8000
#define NDEBUG_USLEEP 0x10000 #define NDEBUG_USLEEP 0x10000
#define NDEBUG_LAST_BYTE_SENT 0x20000
/* /*
* The contents of the OUTPUT DATA register are asserted on the bus when * The contents of the OUTPUT DATA register are asserted on the bus when
...@@ -141,7 +153,7 @@ ...@@ -141,7 +153,7 @@
* Used in DMA transfer mode, data is latched from the SCSI bus on * Used in DMA transfer mode, data is latched from the SCSI bus on
* the falling edge of REQ (ini) or ACK (tgt) * the falling edge of REQ (ini) or ACK (tgt)
*/ */
#define INPUT_DATA_REGISTER 6 /* ro */ #define INPUT_DATA_REG 6 /* ro */
/* Write any value to this register to start a DMA recieve */ /* Write any value to this register to start a DMA recieve */
#define START_DMA_TARGET_RECIEVE_REG 6 /* wo */ #define START_DMA_TARGET_RECIEVE_REG 6 /* wo */
...@@ -192,26 +204,31 @@ ...@@ -192,26 +204,31 @@
*/ */
/* /*
* These are "special" values for the irq field of the instance structure * These are "special" values for the irq and dma_channel fields of the
* and returns from NCR5380_probe_irq. * Scsi_Host structure
*/ */
#define IRQ_NONE 255 #define IRQ_NONE 255
#define DMA_NONE 255
#define IRQ_AUTO 254 #define IRQ_AUTO 254
#define DMA_AUTO 254
#define FLAG_HAS_LAST_BYTE_SENT 1 /* NCR53c81 or better */
#define FLAG_CHECK_LAST_BYTE_SENT 2 /* Only test once */
#ifndef ASM #ifndef ASM
struct NCR5380_hostdata { struct NCR5380_hostdata {
NCR5380_implementation_fields; /* implmenentation specific */ NCR5380_implementation_fields; /* implmenentation specific */
unsigned char id_mask, id_higher_mask; /* 1 << id, all bits greater */ unsigned char id_mask, id_higher_mask; /* 1 << id, all bits greater */
volatile unsigned char busy[8]; /* index = target, bit = lun */ volatile unsigned char busy[8]; /* index = target, bit = lun */
#ifdef REAL_DMA #if defined(REAL_DMA) || defined(REAL_DMA_POLL)
volatile int dma_len; /* requested length of DMA */ volatile int dma_len; /* requested length of DMA */
#endif #endif
volatile unsigned char last_message; /* last message OUT */ volatile unsigned char last_message; /* last message OUT */
volatile Scsi_Cmnd *connected; /* currently connected command */ volatile Scsi_Cmnd *connected; /* currently connected command */
volatile Scsi_Cmnd *issue_queue; /* waiting to be issued */ volatile Scsi_Cmnd *issue_queue; /* waiting to be issued */
volatile Scsi_Cmnd *disconnected_queue; /* waiting for reconnect */ volatile Scsi_Cmnd *disconnected_queue; /* waiting for reconnect */
int flags;
#ifdef USLEEP #ifdef USLEEP
unsigned long time_expires; /* in jiffies, set prior to sleeping */ unsigned long time_expires; /* in jiffies, set prior to sleeping */
struct Scsi_Host *next_timer; struct Scsi_Host *next_timer;
...@@ -236,7 +253,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd, int code); ...@@ -236,7 +253,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd, int code);
#ifndef NCR5380_reset #ifndef NCR5380_reset
static static
#endif #endif
int NCR5380_reset (Scsi_Cmnd *); int NCR5380_reset (Scsi_Cmnd *cmd);
#ifndef NCR5380_queue_command #ifndef NCR5380_queue_command
static static
#endif #endif
...@@ -245,13 +262,62 @@ int NCR5380_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *)); ...@@ -245,13 +262,62 @@ int NCR5380_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *));
static void NCR5380_reselect (struct Scsi_Host *instance); static void NCR5380_reselect (struct Scsi_Host *instance);
static int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, int tag); static int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, int tag);
#if defined(PSEUDO_DMA) || defined(REAL_DMA) #if defined(PSEUDO_DMA) || defined(REAL_DMA) || defined(REAL_DMA_POLL)
static int NCR5380_transfer_dma (struct Scsi_Host *instance, static int NCR5380_transfer_dma (struct Scsi_Host *instance,
unsigned char *phase, int *count, unsigned char **data); unsigned char *phase, int *count, unsigned char **data);
#endif #endif
static int NCR5380_transfer_pio (struct Scsi_Host *instance, static int NCR5380_transfer_pio (struct Scsi_Host *instance,
unsigned char *phase, int *count, unsigned char **data); unsigned char *phase, int *count, unsigned char **data);
#if (defined(REAL_DMA) || defined(REAL_DMA_POLL)) && defined(i386)
static __inline__ int NCR5380_i386_dma_setup (struct Scsi_Host *instance,
unsigned char *ptr, unsigned int count, unsigned char mode) {
unsigned limit;
if (instance->dma_channel <=3) {
if (count > 65536)
count = 65536;
limit = 65536 - (((unsigned) ptr) & 0xFFFF);
} else {
if (count > 65536 * 2)
count = 65536 * 2;
limit = 65536* 2 - (((unsigned) ptr) & 0x1FFFF);
}
if (count > limit) count = limit;
if ((count & 1) || (((unsigned) ptr) & 1))
panic ("scsi%d : attmpted unaligned DMA transfer\n", instance->host_no);
cli();
disable_dma(instance->dma_channel);
clear_dma_ff(instance->dma_channel);
set_dma_addr(instance->dma_channel, (unsigned int) ptr);
set_dma_count(instance->dma_channel, count);
set_dma_mode(instance->dma_channel, mode);
enable_dma(instance->dma_channel);
sti();
return count;
}
static __inline__ int NCR5380_i386_dma_write_setup (struct Scsi_Host *instance,
unsigned char *src, unsigned int count) {
return NCR5380_i386_dma_setup (instance, src, count, DMA_MODE_WRITE);
}
static __inline__ int NCR5380_i386_dma_read_setup (struct Scsi_Host *instance,
unsigned char *src, unsigned int count) {
return NCR5380_i386_dma_setup (instance, src, count, DMA_MODE_READ);
}
static __inline__ int NCR5380_i386_dma_residual (struct Scsi_Host *instance) {
register int tmp;
cli();
clear_dma_ff(instance->dma_channel);
tmp = get_dma_residue(instance->dma_channel);
sti();
return tmp;
}
#endif /* defined(REAL_DMA) && defined(i386) */
#endif __KERNEL_ #endif __KERNEL_
#endif /* ndef ASM */ #endif /* ndef ASM */
#endif /* NCR5380_H */ #endif /* NCR5380_H */
...@@ -722,9 +722,12 @@ static int aha1542_query(int base_io, int * transl) ...@@ -722,9 +722,12 @@ static int aha1542_query(int base_io, int * transl)
printk("aha1542.c: Emulation mode not supported for AHA 174N hardware.\n"); printk("aha1542.c: Emulation mode not supported for AHA 174N hardware.\n");
return 1; return 1;
}; };
if (inquiry_result[0] == 0x44) { /* Detect 1542C */
*transl = aha1542_mbenable(base_io); /* 1542C returns 0x44, 1542CF returns 0x45 */
}; if (inquiry_result[0] == 0x44 || inquiry_result[0] == 0x45)
{ /* Detect 1542C */
*transl = aha1542_mbenable(base_io);
};
return 0; return 0;
} }
......
/* fdomain.c -- Future Domain TMC-16x0 SCSI driver /* fdomain.c -- Future Domain TMC-16x0 SCSI driver
* Created: Sun May 3 18:53:19 1992 by faith@cs.unc.edu * Created: Sun May 3 18:53:19 1992 by faith@cs.unc.edu
* Revised: Tue Jan 4 20:43:57 1994 by faith@cs.unc.edu * Revised: Sun Jan 23 08:59:04 1994 by faith@cs.unc.edu
* Author: Rickard E. Faith, faith@cs.unc.edu * Author: Rickard E. Faith, faith@cs.unc.edu
* Copyright 1992, 1993, 1994 Rickard E. Faith * Copyright 1992, 1993, 1994 Rickard E. Faith
* *
* $Id: fdomain.c,v 5.8 1994/01/05 01:44:16 root Exp $ * $Id: fdomain.c,v 5.9 1994/01/23 13:59:14 root Exp $
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#define VERSION "$Revision: 5.8 $" #define VERSION "$Revision: 5.9 $"
/* START OF USER DEFINABLE OPTIONS */ /* START OF USER DEFINABLE OPTIONS */
...@@ -305,6 +305,7 @@ struct signature { ...@@ -305,6 +305,7 @@ struct signature {
/* 1 2 3 4 5 6 */ /* 1 2 3 4 5 6 */
/* 123456789012345678901234567890123456789012345678901234567890 */ /* 123456789012345678901234567890123456789012345678901234567890 */
{ "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V2.07/28/89", 5, 50, 2, 0 }, { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V2.07/28/89", 5, 50, 2, 0 },
{ "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V1.07/28/89", 5, 50, 2, 0 },
{ "FUTURE DOMAIN CORP. (C) 1992 V3.00.004/02/92", 5, 44, 3, 0 }, { "FUTURE DOMAIN CORP. (C) 1992 V3.00.004/02/92", 5, 44, 3, 0 },
{ "FUTURE DOMAIN TMC-18XX (C) 1993 V3.203/12/93", 5, 44, 3, 2 }, { "FUTURE DOMAIN TMC-18XX (C) 1993 V3.203/12/93", 5, 44, 3, 2 },
{ "FUTURE DOMAIN TMC-18XX", 5, 22, -1, -1 }, { "FUTURE DOMAIN TMC-18XX", 5, 22, -1, -1 },
......
...@@ -977,8 +977,10 @@ int ultrastor_biosparam(int size, int dev, int * dkinfo) ...@@ -977,8 +977,10 @@ int ultrastor_biosparam(int size, int dev, int * dkinfo)
dkinfo[0] = config.heads; dkinfo[0] = config.heads;
dkinfo[1] = config.sectors; dkinfo[1] = config.sectors;
dkinfo[2] = size / s; /* Ignore partial cylinders */ dkinfo[2] = size / s; /* Ignore partial cylinders */
#if 0
if (dkinfo[2] > 1024) if (dkinfo[2] > 1024)
dkinfo[2] = 1024; dkinfo[2] = 1024;
#endif
return 0; return 0;
} }
......
/* $Id: $ /* $Id: wd7000.c,v 1.2 1994/01/15 06:02:32 drew Exp $
* linux/kernel/wd7000.c * linux/kernel/wd7000.c
* *
* Copyright (C) 1992 Thomas Wuensche * Copyright (C) 1992 Thomas Wuensche
...@@ -508,7 +508,8 @@ void wd7000_revision(void) ...@@ -508,7 +508,8 @@ void wd7000_revision(void)
} }
static const char *wd_bases[] = {(char *)0xce000}; static const char *wd_bases[] = {(char *)0xce000,(char *)d8000};
typedef struct { typedef struct {
char * signature; char * signature;
unsigned offset; unsigned offset;
......
-bad
-bap
-fca
-fc1
-cdb
-sc
-bl
-psl
-di16
-lp
-ip5
...@@ -22,5 +22,6 @@ ...@@ -22,5 +22,6 @@
asmlinkage void iABI_emulate(struct pt_regs * regs) asmlinkage void iABI_emulate(struct pt_regs * regs)
{ {
printk("lcall 7,xxx: eax = %08lx\n",regs->eax); printk("iBCS2 binaries not supported yet\n");
do_exit(SIGSEGV);
} }
...@@ -43,12 +43,13 @@ struct linger { ...@@ -43,12 +43,13 @@ struct linger {
#define MSG_OOB 1 #define MSG_OOB 1
#define MSG_PEEK 2 #define MSG_PEEK 2
/* Setsockoptions(2) level. */ /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
#define SOL_SOCKET 1 #define SOL_SOCKET 1
#define SOL_IP 2 #define SOL_IP 0
#define SOL_IPX 3 #define SOL_IPX 256
#define SOL_AX25 4 #define SOL_AX25 257
#define SOL_TCP 5 #define SOL_TCP 6
#define SOL_UDP 17
/* For setsockoptions(2) */ /* For setsockoptions(2) */
#define SO_DEBUG 1 #define SO_DEBUG 1
...@@ -64,19 +65,23 @@ struct linger { ...@@ -64,19 +65,23 @@ struct linger {
#define SO_NO_CHECK 11 #define SO_NO_CHECK 11
#define SO_PRIORITY 12 #define SO_PRIORITY 12
#define SO_LINGER 13 #define SO_LINGER 13
/* IP options */ /* IP options */
#define IP_TOS 1 #define IP_TOS 1
#define IPTOS_LOWDELAY 0x10 #define IPTOS_LOWDELAY 0x10
#define IPTOS_THROUGHPUT 0x08 #define IPTOS_THROUGHPUT 0x08
#define IPTOS_RELIABILITY 0x04 #define IPTOS_RELIABILITY 0x04
#define IP_TTL 2 #define IP_TTL 2
/* IPX options */ /* IPX options */
#define IPX_TYPE 1 #define IPX_TYPE 1
/* AX.25 options */ /* AX.25 options */
#define AX25_WINDOW 1 #define AX25_WINDOW 1
/* TCP options */
#define TCP_MSS 1 /* TCP options - this way around because someone left a set in the c library includes */
#define TCP_NODELAY 2 #define TCP_NODELAY 1
#define TCP_MAXSEG 2
/* The various priorities. */ /* The various priorities. */
#define SOPRI_INTERACTIVE 0 #define SOPRI_INTERACTIVE 0
......
...@@ -94,7 +94,7 @@ asmlinkage void alignment_check(void); ...@@ -94,7 +94,7 @@ asmlinkage void alignment_check(void);
printk("ds: %04x es: %04x fs: %04x gs: %04x\n", printk("ds: %04x es: %04x fs: %04x gs: %04x\n",
regs->ds, regs->es, regs->fs, regs->gs); regs->ds, regs->es, regs->fs, regs->gs);
store_TR(i); store_TR(i);
printk("Pid: %d, process nr: %d\n", current->pid, 0xffff & i); printk("Pid: %d, process nr: %d (%s)\n", current->pid, 0xffff & i, current->comm);
for(i=0;i<20;i++) for(i=0;i<20;i++)
printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip))); printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
printk("\n"); printk("\n");
......
...@@ -67,6 +67,7 @@ static int free_area_pages(unsigned long dindex, unsigned long index, unsigned l ...@@ -67,6 +67,7 @@ static int free_area_pages(unsigned long dindex, unsigned long index, unsigned l
set_pgdir(dindex,0); set_pgdir(dindex,0);
mem_map[MAP_NR(page)] = 1; mem_map[MAP_NR(page)] = 1;
free_page(page); free_page(page);
invalidate();
return 0; return 0;
} }
...@@ -98,6 +99,7 @@ static int alloc_area_pages(unsigned long dindex, unsigned long index, unsigned ...@@ -98,6 +99,7 @@ static int alloc_area_pages(unsigned long dindex, unsigned long index, unsigned
*pte = pg | PAGE_SHARED; *pte = pg | PAGE_SHARED;
pte++; pte++;
} while (--nr); } while (--nr);
invalidate();
return 0; return 0;
} }
......
...@@ -529,7 +529,7 @@ arp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt) ...@@ -529,7 +529,7 @@ arp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
tbl->last_used = jiffies; tbl->last_used = jiffies;
} else { } else {
memcpy(&dst, ptr + (arp->ar_hln * 2) + arp->ar_pln, arp->ar_pln); memcpy(&dst, ptr + (arp->ar_hln * 2) + arp->ar_pln, arp->ar_pln);
if (chk_addr(dst) != IS_MYADDR) { if (chk_addr(dst) != IS_MYADDR && arp_proxies == 0) {
kfree_skb(skb, FREE_READ); kfree_skb(skb, FREE_READ);
return(0); return(0);
} else { } else {
...@@ -798,6 +798,7 @@ arp_get_info(char *buffer) ...@@ -798,6 +798,7 @@ arp_get_info(char *buffer)
req->arp_ha.sa_family = apt->htype; req->arp_ha.sa_family = apt->htype;
memcpy((char *) req->arp_ha.sa_data, memcpy((char *) req->arp_ha.sa_data,
(char *) &apt->ha, apt->hlen); (char *) &apt->ha, apt->hlen);
req->arp_flags = apt->flags;
} }
pos += sizeof(struct arpreq); pos += sizeof(struct arpreq);
cli(); cli();
......
...@@ -119,7 +119,7 @@ packet_sendto(struct sock *sk, unsigned char *from, int len, ...@@ -119,7 +119,7 @@ packet_sendto(struct sock *sk, unsigned char *from, int len,
return -EMSGSIZE; return -EMSGSIZE;
/* Now allocate the buffer, knowing 4K pagelimits wont break this line */ /* Now allocate the buffer, knowing 4K pagelimits wont break this line */
skb = (struct sk_buff *) sk->prot->wmalloc(sk, len+sizeof(*skb), 0, GFP_KERNEL); skb = sk->prot->wmalloc(sk, len+sizeof(*skb), 0, GFP_KERNEL);
/* This shouldn't happen, but it could. */ /* This shouldn't happen, but it could. */
if (skb == NULL) { if (skb == NULL) {
......
...@@ -187,7 +187,7 @@ raw_sendto(struct sock *sk, unsigned char *from, int len, ...@@ -187,7 +187,7 @@ raw_sendto(struct sock *sk, unsigned char *from, int len,
return(err); return(err);
} }
skb = (struct sk_buff *) sk->prot->wmalloc(sk, skb = sk->prot->wmalloc(sk,
len+sizeof(*skb) + sk->prot->max_header, len+sizeof(*skb) + sk->prot->max_header,
0, GFP_KERNEL); 0, GFP_KERNEL);
if (skb == NULL) { if (skb == NULL) {
......
...@@ -205,6 +205,7 @@ void rt_add(short flags, unsigned long dst, unsigned long mask, ...@@ -205,6 +205,7 @@ void rt_add(short flags, unsigned long dst, unsigned long mask,
rt->rt_dev = dev; rt->rt_dev = dev;
rt->rt_gateway = gw; rt->rt_gateway = gw;
rt->rt_mask = mask; rt->rt_mask = mask;
rt->rt_mtu = dev->mtu;
rt_print(rt); rt_print(rt);
/* /*
* What we have to do is loop though this until we have * What we have to do is loop though this until we have
......
...@@ -28,10 +28,11 @@ struct rtable { ...@@ -28,10 +28,11 @@ struct rtable {
unsigned long rt_dst; unsigned long rt_dst;
unsigned long rt_mask; unsigned long rt_mask;
unsigned long rt_gateway; unsigned long rt_gateway;
u_char rt_flags; unsigned char rt_flags;
u_char rt_metric; unsigned char rt_metric;
short rt_refcnt; short rt_refcnt;
u_long rt_use; unsigned long rt_use;
unsigned short rt_mss, rt_mtu;
struct device *rt_dev; struct device *rt_dev;
}; };
......
...@@ -1569,7 +1569,7 @@ inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ...@@ -1569,7 +1569,7 @@ inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
} }
void * struct sk_buff *
sock_wmalloc(struct sock *sk, unsigned long size, int force, sock_wmalloc(struct sock *sk, unsigned long size, int force,
int priority) int priority)
{ {
...@@ -1588,7 +1588,7 @@ sock_wmalloc(struct sock *sk, unsigned long size, int force, ...@@ -1588,7 +1588,7 @@ sock_wmalloc(struct sock *sk, unsigned long size, int force,
} }
void * struct sk_buff *
sock_rmalloc(struct sock *sk, unsigned long size, int force, int priority) sock_rmalloc(struct sock *sk, unsigned long size, int force, int priority)
{ {
if (sk) { if (sk) {
......
...@@ -160,10 +160,10 @@ struct sock { ...@@ -160,10 +160,10 @@ struct sock {
}; };
struct proto { struct proto {
void *(*wmalloc)(struct sock *sk, struct sk_buff * (*wmalloc)(struct sock *sk,
unsigned long size, int force, unsigned long size, int force,
int priority); int priority);
void *(*rmalloc)(struct sock *sk, struct sk_buff * (*rmalloc)(struct sock *sk,
unsigned long size, int force, unsigned long size, int force,
int priority); int priority);
void (*wfree)(struct sock *sk, void *mem, void (*wfree)(struct sock *sk, void *mem,
...@@ -192,7 +192,7 @@ struct proto { ...@@ -192,7 +192,7 @@ struct proto {
struct options *opt, int len, int tos, int ttl); struct options *opt, int len, int tos, int ttl);
int (*connect)(struct sock *sk, int (*connect)(struct sock *sk,
struct sockaddr_in *usin, int addr_len); struct sockaddr_in *usin, int addr_len);
struct sock *(*accept) (struct sock *sk, int flags); struct sock * (*accept) (struct sock *sk, int flags);
void (*queue_xmit)(struct sock *sk, void (*queue_xmit)(struct sock *sk,
struct device *dev, struct sk_buff *skb, struct device *dev, struct sk_buff *skb,
int free); int free);
...@@ -215,7 +215,7 @@ struct proto { ...@@ -215,7 +215,7 @@ struct proto {
char *optval, int *option); char *optval, int *option);
unsigned short max_header; unsigned short max_header;
unsigned long retransmits; unsigned long retransmits;
struct sock *sock_array[SOCK_ARRAY_SIZE]; struct sock * sock_array[SOCK_ARRAY_SIZE];
char name[80]; char name[80];
}; };
...@@ -224,6 +224,7 @@ struct proto { ...@@ -224,6 +224,7 @@ struct proto {
#define TIME_KEEPOPEN 3 #define TIME_KEEPOPEN 3
#define TIME_DESTROY 4 #define TIME_DESTROY 4
#define TIME_DONE 5 /* used to absorb those last few packets */ #define TIME_DONE 5 /* used to absorb those last few packets */
#define TIME_PROBE0 6
#define SOCK_DESTROY_TIME 1000 /* about 10 seconds */ #define SOCK_DESTROY_TIME 1000 /* about 10 seconds */
#define PROT_SOCK 1024 /* Sockets 0-1023 can't be bound too unless you are superuser */ #define PROT_SOCK 1024 /* Sockets 0-1023 can't be bound too unless you are superuser */
...@@ -241,10 +242,10 @@ extern struct sock *get_sock(struct proto *, unsigned short, ...@@ -241,10 +242,10 @@ extern struct sock *get_sock(struct proto *, unsigned short,
unsigned long, unsigned short, unsigned long, unsigned short,
unsigned long); unsigned long);
extern void print_sk(struct sock *); extern void print_sk(struct sock *);
extern void *sock_wmalloc(struct sock *sk, extern struct sk_buff *sock_wmalloc(struct sock *sk,
unsigned long size, int force, unsigned long size, int force,
int priority); int priority);
extern void *sock_rmalloc(struct sock *sk, extern struct sk_buff *sock_rmalloc(struct sock *sk,
unsigned long size, int force, unsigned long size, int force,
int priority); int priority);
extern void sock_wfree(struct sock *sk, void *mem, extern void sock_wfree(struct sock *sk, void *mem,
......
This diff is collapsed.
...@@ -41,9 +41,9 @@ ...@@ -41,9 +41,9 @@
* 90 minutes to time out. * 90 minutes to time out.
*/ */
#define TCP_TIMEOUT_LEN 5000 /* should be about 5 mins */ #define TCP_TIMEOUT_LEN (5*60*HZ)/* should be about 5 mins */
#define TCP_TIMEWAIT_LEN 1000 /* how long to wait to sucessfully #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to sucessfully
* close the socket, about 60 seconds */ * close the socket, about 60 seconds */
#define TCP_ACK_TIME 3000 /* time to delay before sending an ACK */ #define TCP_ACK_TIME 3000 /* time to delay before sending an ACK */
#define TCP_DONE_TIME 250 /* maximum time to wait before actually #define TCP_DONE_TIME 250 /* maximum time to wait before actually
* destroying a socket */ * destroying a socket */
......
...@@ -148,6 +148,10 @@ net_timer (unsigned long data) ...@@ -148,6 +148,10 @@ net_timer (unsigned long data)
reset_timer (sk, TIME_DESTROY, TCP_DONE_TIME); reset_timer (sk, TIME_DESTROY, TCP_DONE_TIME);
release_sock (sk); release_sock (sk);
break; break;
case TIME_PROBE0:
tcp_send_probe0(sk);
release_sock (sk);
break;
case TIME_WRITE: /* try to retransmit. */ case TIME_WRITE: /* try to retransmit. */
/* It could be we got here because we needed to send an ack. /* It could be we got here because we needed to send an ack.
* So we need to check for that. * So we need to check for that.
......
...@@ -234,7 +234,7 @@ udp_send(struct sock *sk, struct sockaddr_in *sin, ...@@ -234,7 +234,7 @@ udp_send(struct sock *sk, struct sockaddr_in *sin,
/* Allocate a copy of the packet. */ /* Allocate a copy of the packet. */
size = sizeof(struct sk_buff) + sk->prot->max_header + len; size = sizeof(struct sk_buff) + sk->prot->max_header + len;
skb = (struct sk_buff *) sk->prot->wmalloc(sk, size, 0, GFP_KERNEL); skb = sk->prot->wmalloc(sk, size, 0, GFP_KERNEL);
if (skb == NULL) return(-ENOMEM); if (skb == NULL) return(-ENOMEM);
skb->mem_addr = skb; skb->mem_addr = skb;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment