Commit bfeedc98 authored by Linus Torvalds's avatar Linus Torvalds

Import 0.99.14u

parent 50a32c2c
VERSION = 0.99
PATCHLEVEL = 14
ALPHA = t
ALPHA = u
all: Version zImage
......
This diff is collapsed.
......@@ -5,9 +5,9 @@
* Visionary Computing
* (Unix consulting and custom programming)
* drew@colorado.edu
* +1 (303) 440-4894
* +1 (303) 666-5836
*
* DISTRIBUTION RELEASE 3
* DISTRIBUTION RELEASE 4
*
* For more information, please consult
*
......@@ -23,12 +23,23 @@
/*
* $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
#define NCR5380_H
#define NCR5380_PUBLIC_RELEASE 3
#define NCR5380_PUBLIC_RELEASE 4
#define NDEBUG_ARBITRATION 0x1
#define NDEBUG_AUTOSENSE 0x2
......@@ -47,6 +58,7 @@
#define NDEBUG_RESELECTION 0x4000
#define NDEBUG_SELECTION 0x8000
#define NDEBUG_USLEEP 0x10000
#define NDEBUG_LAST_BYTE_SENT 0x20000
/*
* The contents of the OUTPUT DATA register are asserted on the bus when
......@@ -141,7 +153,7 @@
* Used in DMA transfer mode, data is latched from the SCSI bus on
* 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 */
#define START_DMA_TARGET_RECIEVE_REG 6 /* wo */
......@@ -192,26 +204,31 @@
*/
/*
* These are "special" values for the irq field of the instance structure
* and returns from NCR5380_probe_irq.
* These are "special" values for the irq and dma_channel fields of the
* Scsi_Host structure
*/
#define IRQ_NONE 255
#define DMA_NONE 255
#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
struct NCR5380_hostdata {
NCR5380_implementation_fields; /* implmenentation specific */
unsigned char id_mask, id_higher_mask; /* 1 << id, all bits greater */
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 */
#endif
volatile unsigned char last_message; /* last message OUT */
volatile Scsi_Cmnd *connected; /* currently connected command */
volatile Scsi_Cmnd *issue_queue; /* waiting to be issued */
volatile Scsi_Cmnd *disconnected_queue; /* waiting for reconnect */
int flags;
#ifdef USLEEP
unsigned long time_expires; /* in jiffies, set prior to sleeping */
struct Scsi_Host *next_timer;
......@@ -236,7 +253,7 @@ int NCR5380_abort (Scsi_Cmnd *cmd, int code);
#ifndef NCR5380_reset
static
#endif
int NCR5380_reset (Scsi_Cmnd *);
int NCR5380_reset (Scsi_Cmnd *cmd);
#ifndef NCR5380_queue_command
static
#endif
......@@ -245,13 +262,62 @@ int NCR5380_queue_command (Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *));
static void NCR5380_reselect (struct Scsi_Host *instance);
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,
unsigned char *phase, int *count, unsigned char **data);
#endif
static int NCR5380_transfer_pio (struct Scsi_Host *instance,
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 /* ndef ASM */
#endif /* NCR5380_H */
......@@ -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");
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;
}
......
/* fdomain.c -- Future Domain TMC-16x0 SCSI driver
* 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
* 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
* under the terms of the GNU General Public License as published by the
......@@ -144,7 +144,7 @@
#include <linux/string.h>
#include <linux/ioport.h>
#define VERSION "$Revision: 5.8 $"
#define VERSION "$Revision: 5.9 $"
/* START OF USER DEFINABLE OPTIONS */
......@@ -305,6 +305,7 @@ struct signature {
/* 1 2 3 4 5 6 */
/* 123456789012345678901234567890123456789012345678901234567890 */
{ "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 TMC-18XX (C) 1993 V3.203/12/93", 5, 44, 3, 2 },
{ "FUTURE DOMAIN TMC-18XX", 5, 22, -1, -1 },
......
......@@ -977,8 +977,10 @@ int ultrastor_biosparam(int size, int dev, int * dkinfo)
dkinfo[0] = config.heads;
dkinfo[1] = config.sectors;
dkinfo[2] = size / s; /* Ignore partial cylinders */
#if 0
if (dkinfo[2] > 1024)
dkinfo[2] = 1024;
#endif
return 0;
}
......
/* $Id: $
/* $Id: wd7000.c,v 1.2 1994/01/15 06:02:32 drew Exp $
* linux/kernel/wd7000.c
*
* Copyright (C) 1992 Thomas Wuensche
......@@ -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 {
char * signature;
unsigned offset;
......
-bad
-bap
-fca
-fc1
-cdb
-sc
-bl
-psl
-di16
-lp
-ip5
......@@ -22,5 +22,6 @@
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 {
#define MSG_OOB 1
#define MSG_PEEK 2
/* Setsockoptions(2) level. */
/* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
#define SOL_SOCKET 1
#define SOL_IP 2
#define SOL_IPX 3
#define SOL_AX25 4
#define SOL_TCP 5
#define SOL_IP 0
#define SOL_IPX 256
#define SOL_AX25 257
#define SOL_TCP 6
#define SOL_UDP 17
/* For setsockoptions(2) */
#define SO_DEBUG 1
......@@ -64,19 +65,23 @@ struct linger {
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_LINGER 13
/* IP options */
#define IP_TOS 1
#define IPTOS_LOWDELAY 0x10
#define IPTOS_THROUGHPUT 0x08
#define IPTOS_RELIABILITY 0x04
#define IP_TTL 2
/* IPX options */
#define IPX_TYPE 1
/* AX.25 options */
#define AX25_WINDOW 1
/* TCP options */
#define TCP_MSS 1
#define TCP_NODELAY 2
/* TCP options - this way around because someone left a set in the c library includes */
#define TCP_NODELAY 1
#define TCP_MAXSEG 2
/* The various priorities. */
#define SOPRI_INTERACTIVE 0
......
......@@ -94,7 +94,7 @@ asmlinkage void alignment_check(void);
printk("ds: %04x es: %04x fs: %04x gs: %04x\n",
regs->ds, regs->es, regs->fs, regs->gs);
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++)
printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip)));
printk("\n");
......
......@@ -67,6 +67,7 @@ static int free_area_pages(unsigned long dindex, unsigned long index, unsigned l
set_pgdir(dindex,0);
mem_map[MAP_NR(page)] = 1;
free_page(page);
invalidate();
return 0;
}
......@@ -98,6 +99,7 @@ static int alloc_area_pages(unsigned long dindex, unsigned long index, unsigned
*pte = pg | PAGE_SHARED;
pte++;
} while (--nr);
invalidate();
return 0;
}
......
......@@ -529,7 +529,7 @@ arp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
tbl->last_used = jiffies;
} else {
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);
return(0);
} else {
......@@ -798,6 +798,7 @@ arp_get_info(char *buffer)
req->arp_ha.sa_family = apt->htype;
memcpy((char *) req->arp_ha.sa_data,
(char *) &apt->ha, apt->hlen);
req->arp_flags = apt->flags;
}
pos += sizeof(struct arpreq);
cli();
......
......@@ -119,7 +119,7 @@ packet_sendto(struct sock *sk, unsigned char *from, int len,
return -EMSGSIZE;
/* 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. */
if (skb == NULL) {
......
......@@ -187,7 +187,7 @@ raw_sendto(struct sock *sk, unsigned char *from, int len,
return(err);
}
skb = (struct sk_buff *) sk->prot->wmalloc(sk,
skb = sk->prot->wmalloc(sk,
len+sizeof(*skb) + sk->prot->max_header,
0, GFP_KERNEL);
if (skb == NULL) {
......
......@@ -205,6 +205,7 @@ void rt_add(short flags, unsigned long dst, unsigned long mask,
rt->rt_dev = dev;
rt->rt_gateway = gw;
rt->rt_mask = mask;
rt->rt_mtu = dev->mtu;
rt_print(rt);
/*
* What we have to do is loop though this until we have
......
......@@ -28,10 +28,11 @@ struct rtable {
unsigned long rt_dst;
unsigned long rt_mask;
unsigned long rt_gateway;
u_char rt_flags;
u_char rt_metric;
unsigned char rt_flags;
unsigned char rt_metric;
short rt_refcnt;
u_long rt_use;
unsigned long rt_use;
unsigned short rt_mss, rt_mtu;
struct device *rt_dev;
};
......
......@@ -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,
int priority)
{
......@@ -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)
{
if (sk) {
......
......@@ -160,10 +160,10 @@ struct sock {
};
struct proto {
void *(*wmalloc)(struct sock *sk,
struct sk_buff * (*wmalloc)(struct sock *sk,
unsigned long size, int force,
int priority);
void *(*rmalloc)(struct sock *sk,
struct sk_buff * (*rmalloc)(struct sock *sk,
unsigned long size, int force,
int priority);
void (*wfree)(struct sock *sk, void *mem,
......@@ -192,7 +192,7 @@ struct proto {
struct options *opt, int len, int tos, int ttl);
int (*connect)(struct sock *sk,
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,
struct device *dev, struct sk_buff *skb,
int free);
......@@ -215,7 +215,7 @@ struct proto {
char *optval, int *option);
unsigned short max_header;
unsigned long retransmits;
struct sock *sock_array[SOCK_ARRAY_SIZE];
struct sock * sock_array[SOCK_ARRAY_SIZE];
char name[80];
};
......@@ -224,6 +224,7 @@ struct proto {
#define TIME_KEEPOPEN 3
#define TIME_DESTROY 4
#define TIME_DONE 5 /* used to absorb those last few packets */
#define TIME_PROBE0 6
#define SOCK_DESTROY_TIME 1000 /* about 10 seconds */
#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,
unsigned long, unsigned short,
unsigned long);
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,
int priority);
extern void *sock_rmalloc(struct sock *sk,
extern struct sk_buff *sock_rmalloc(struct sock *sk,
unsigned long size, int force,
int priority);
extern void sock_wfree(struct sock *sk, void *mem,
......
This diff is collapsed.
......@@ -41,9 +41,9 @@
* 90 minutes to time out.
*/
#define TCP_TIMEOUT_LEN 5000 /* should be about 5 mins */
#define TCP_TIMEWAIT_LEN 1000 /* how long to wait to sucessfully
* close the socket, about 60 seconds */
#define TCP_TIMEOUT_LEN (5*60*HZ)/* should be about 5 mins */
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to sucessfully
* close the socket, about 60 seconds */
#define TCP_ACK_TIME 3000 /* time to delay before sending an ACK */
#define TCP_DONE_TIME 250 /* maximum time to wait before actually
* destroying a socket */
......
......@@ -148,6 +148,10 @@ net_timer (unsigned long data)
reset_timer (sk, TIME_DESTROY, TCP_DONE_TIME);
release_sock (sk);
break;
case TIME_PROBE0:
tcp_send_probe0(sk);
release_sock (sk);
break;
case TIME_WRITE: /* try to retransmit. */
/* It could be we got here because we needed to send an ack.
* So we need to check for that.
......
......@@ -234,7 +234,7 @@ udp_send(struct sock *sk, struct sockaddr_in *sin,
/* Allocate a copy of the packet. */
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);
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