]> git.neil.brown.name Git - history.git/commitdiff
Import 1.1.70 1.1.70
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:46 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:46 +0000 (15:09 -0500)
24 files changed:
Makefile
arch/i386/Makefile
arch/i386/config.in
drivers/char/console.c
drivers/scsi/ChangeLog
drivers/scsi/st.c
fs/msdos/mmap.c [deleted file]
fs/proc/net.c
fs/sysv/mmap.c [deleted file]
include/asm-alpha/types.h
include/asm-i386/types.h
include/linux/ip.h
include/linux/proc_fs.h
include/linux/tcp.h
kernel/bios32.c
kernel/ksyms.c
net/inet/af_inet.c
net/inet/dev.c
net/inet/igmp.c
net/inet/igmp.h
net/inet/ip.c
net/inet/ip_fw.c
net/inet/route.c
net/inet/udp.c

index 3aeaa1c17f44bed89871e56deda0be43476e0e54..035206caf76b908f93ad231deb9e59f24c9bb8e7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 69
+SUBLEVEL = 70
 
 ARCH = i386
 
index 1b878067ada2afcfd0841860414c356a2039f912..0003cfd24e2132f082ff2c55cbf085c88fe0df57 100644 (file)
@@ -22,8 +22,12 @@ STRIP   =strip
 ifdef CONFIG_M486
 CFLAGS := $(CFLAGS) -m486
 else
+ifdef CONFIG_M586
+CFLAGS := $(CFLAGS) -mpentium
+else
 CFLAGS := $(CFLAGS) -m386
 endif
+endif
 
 zBoot/zSystem: zBoot/*.c zBoot/*.S tools/zSystem
        $(MAKE) -C zBoot
index e88fad8a34983761d23ed06edf0cf0634937993a..2f1ba4012b0372d208f1e85fd8fa745abd0f0517 100644 (file)
@@ -11,9 +11,20 @@ bool 'Normal harddisk support' CONFIG_BLK_DEV_HD y
 bool 'XT harddisk support' CONFIG_BLK_DEV_XD n
 bool 'Networking support' CONFIG_NET y
 bool 'Limit memory to low 16MB' CONFIG_MAX_16M n
+bool 'PCI bios support' CONFIG_PCI n
 bool 'System V IPC' CONFIG_SYSVIPC y
 bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF y
+#bool 'Use -mpentium flag for Pentium-specific optimizations' CONFIG_M586 n
+#if [ "$CONFIG_M586" = "n" ]; then
 bool 'Use -m486 flag for 486-specific optimizations' CONFIG_M486 y
+#fi
+
+comment 'Screen saver mode'
+
+bool 'VESA Power Saving Protocol Support' CONFIG_VESA_PSPM n
+if [ "$CONFIG_VESA_PSPM" = "y" ]; then
+bool 'VESA PSPM Force Off' CONFIG_PSPM_FORCE_OFF n
+fi
 
 if [ "$CONFIG_NET" = "y" ]; then
 comment 'Networking options'
@@ -60,7 +71,9 @@ bool 'BusLogic SCSI support' CONFIG_SCSI_BUSLOGIC n
 bool 'UltraStor 14F/34F support' CONFIG_SCSI_U14_34F n
 bool 'Future Domain 16xx SCSI support' CONFIG_SCSI_FUTURE_DOMAIN n
 bool 'Generic NCR5380 SCSI support' CONFIG_SCSI_GENERIC_NCR5380 n
-bool 'NCR53c7,8xx SCSI support'  CONFIG_SCSI_NCR53C7xx n
+if [ "$CONFIG_PCI" = "y" ]; then
+  bool 'NCR53c7,8xx SCSI support'  CONFIG_SCSI_NCR53C7xx n
+fi
 bool 'Always IN2000 SCSI support (test release)' CONFIG_SCSI_IN2000 n
 bool 'PAS16 SCSI support' CONFIG_SCSI_PAS16 n
 bool 'QLOGIC SCSI support' CONFIG_SCSI_QLOGIC n
index 7a48e787167e62e5637c1071a8e6b0178ee50e43..eb6e2251a86d56d8a2930782ad867f43602679dc 100644 (file)
@@ -160,7 +160,9 @@ static unsigned short *vc_scrbuf[MAX_NR_CONSOLES];
 
 static int console_blanked = 0;
 static int blankinterval = 10*60*HZ;
+#ifndef CONFIG_VESA_PSPM
 static long blank_origin, blank__origin, unblank_origin;
+#endif
 
 struct vc_data {
        unsigned long   vc_screenbuf_size;
@@ -288,6 +290,159 @@ static struct vc {
 #define vcmode         (vt_cons[currcons]->vc_mode)
 #define structsize     (sizeof(struct vc_data) + sizeof(struct vt_struct))
 
+#ifdef CONFIG_VESA_PSPM
+/*
+ * This section(s) handles the VESA Power Saving Protocol that let a   *
+ * monitor be powered down whenever not needed for a longer time.      *
+ * VESA protocol defines:                                              *
+ *                                                                     *
+ *  Mode/Status                HSync   VSync   Video                           *
+ *  ----------------------------------------------                     *
+ *  "On"               on      on      active                          *
+ *  "Suspend" {either} on      off     blank                           *
+ *            {  or  } off     on      blank                           *
+ *  "Off"               off    off     blank   <<  PSPM_FORCE_OFF      *
+ *                                                                     *
+ * Original code taken from the Power Management Utility (PMU) of      *
+ * Huang shi chao, delivered together with many new monitor models     *
+ * capable of the VESA Power Saving Protocol.                          *
+ * Adapted to Linux by Christoph Rimek (chrimek@toppoint.de)  15-may-94        *
+ * Re-Adapted by Nicholas Leon (nicholas@neko.binary9.com) 10/94 *
+ *                 (with minor reorganization/changes)                          *
+ */
+
+
+static void vesa_blank(void);
+static void vesa_unblank(void);
+
+#define seq_port_reg   (0x3c4)         /* Sequencer register select port       */
+#define seq_port_val   (0x3c5)         /* Sequencer register value port        */
+#define video_misc_rd  (0x3cc)         /* Video misc. read port        */
+#define video_misc_wr  (0x3c2)         /* Video misc. write port       */
+
+/* structure holding original VGA register settings */
+static struct {
+       unsigned char   SeqCtrlIndex;           /* Sequencer Index reg.   */
+       unsigned char   CrtCtrlIndex;           /* CRT-Contr. Index reg.  */
+       unsigned char   CrtMiscIO;              /* Miscellaneous register */
+#ifdef CONFIG_PSPM_FORCE_OFF
+       unsigned char   HorizontalTotal;        /* CRT-Controller:00h */
+       unsigned char   HorizDisplayEnd;        /* CRT-Controller:01h */
+       unsigned char   StartHorizRetrace;      /* CRT-Controller:04h */
+       unsigned char   EndHorizRetrace;        /* CRT-Controller:05h */
+#endif
+       unsigned char   Overflow;               /* CRT-Controller:07h */
+       unsigned char   StartVertRetrace;       /* CRT-Controller:10h */
+       unsigned char   EndVertRetrace;         /* CRT-Controller:11h */
+       unsigned char   ModeControl;            /* CRT-Controller:17h */
+       unsigned char   ClockingMode;           /* Seq-Controller:01h */
+} vga;
+
+/* routine to blank a vesa screen */
+static void vesa_blank(void)
+{
+       /* save original values of VGA controller registers */
+       cli();
+       vga.SeqCtrlIndex = inb_p(seq_port_reg);
+       vga.CrtCtrlIndex = inb_p(video_port_reg);
+       vga.CrtMiscIO = inb_p(video_misc_rd);
+       sti();
+#ifdef CONFIG_PSPM_FORCE_OFF
+       outb_p(0x00,video_port_reg);                    /* HorizontalTotal */
+       vga.HorizontalTotal = inb_p(video_port_val);
+       outb_p(0x01,video_port_reg);                    /* HorizDisplayEnd */
+       vga.HorizDisplayEnd = inb_p(video_port_val);
+       outb_p(0x04,video_port_reg);                    /* StartHorizRetrace */
+       vga.StartHorizRetrace = inb_p(video_port_val);
+       outb_p(0x05,video_port_reg);                    /* EndHorizRetrace */
+       vga.EndHorizRetrace = inb_p(video_port_val);
+#endif
+       outb_p(0x07,video_port_reg);                    /* Overflow */
+       vga.Overflow = inb_p(video_port_val);
+       outb_p(0x10,video_port_reg);                    /* StartVertRetrace */
+       vga.StartVertRetrace = inb_p(video_port_val);
+       outb_p(0x11,video_port_reg);                    /* EndVertRetrace */
+       vga.EndVertRetrace = inb_p(video_port_val);
+       outb_p(0x17,video_port_reg);                    /* ModeControl */
+       vga.ModeControl = inb_p(video_port_val);
+       outb_p(0x01,seq_port_reg);                      /* ClockingMode */
+       vga.ClockingMode = inb_p(seq_port_val);
+
+       /* assure that video is enabled */
+       /* "0x20" is VIDEO_ENABLE_bit in register 01 of sequencer */
+       cli();
+       outb_p(0x01,seq_port_reg);
+       outb_p(vga.ClockingMode | 0x20,seq_port_val);
+
+/*     sti(); 
+       cli(); */
+       
+       /* test for vertical retrace in process.... */
+       if ((vga.CrtMiscIO & 0x80) == 0x80)
+               outb_p(vga.CrtMiscIO & 0xef,video_misc_wr);
+
+       /*  Set <End of vertical retrace> to minimum (0) and            *
+        *  <Start of vertical Retrace> to maximum (incl. overflow)     *
+        *  Result: turn off vertical sync (VSync) pulse                */
+       outb_p(0x10,video_port_reg);            /* StartVertRetrace */
+       outb_p(0xff,video_port_val);            /* maximum value */
+       outb_p(0x11,video_port_reg);            /* EndVertRetrace */
+       outb_p(0x40,video_port_val);            /* minimum (bits 0..3)  */
+       outb_p(0x07,video_port_reg);            /* Overflow */
+       outb_p(vga.Overflow | 0x84,video_port_val);     /* bits 9,10 of  */
+                                                       /* vert. retrace */
+#ifdef CONFIG_PSPM_FORCE_OFF
+       /*  Set <End of horizontal retrace> to minimum (0) and  *
+        *  <Start of horizontal Retrace> to maximum            *
+        *  Result: turn off horizontal sync (HSync) pulse      */
+       outb_p(0x04,video_port_reg);            /* StartHorizRetrace */
+       outb_p(0xff,video_port_val);            /* maximum */
+       outb_p(0x05,video_port_reg);            /* EndHorizRetrace */
+       outb_p(0x00,video_port_val);            /* minimum (0) */
+#endif
+       /* restore both index registers */
+       outb_p(vga.SeqCtrlIndex,seq_port_reg);
+       outb_p(vga.CrtCtrlIndex,video_port_reg);
+       sti();
+
+}      
+
+/* routine to unblank a vesa screen */
+static void vesa_unblank(void)
+{
+       /* restore original values of VGA controller registers */
+       cli();
+       outb_p(vga.CrtMiscIO,video_misc_wr);
+#ifdef CONFIG_PSPM_FORCE_OFF
+       outb_p(0x00,video_port_reg);            /* HorizontalTotal */
+       outb_p(vga.HorizontalTotal,video_port_val);
+       outb_p(0x01,video_port_reg);            /* HorizDisplayEnd */
+       outb_p(vga.HorizDisplayEnd,video_port_val);
+       outb_p(0x04,video_port_reg);            /* StartHorizRetrace */
+       outb_p(vga.StartHorizRetrace,video_port_val);
+       outb_p(0x05,video_port_reg);            /* EndHorizRetrace */
+       outb_p(vga.EndHorizRetrace,video_port_val);
+#endif
+       outb_p(0x07,video_port_reg);            /* Overflow */
+       outb_p(vga.Overflow,video_port_val);
+       outb_p(0x10,video_port_reg);            /* StartVertRetrace */
+       outb_p(vga.StartVertRetrace,video_port_val);
+       outb_p(0x11,video_port_reg);            /* EndVertRetrace */
+       outb_p(vga.EndVertRetrace,video_port_val);
+       outb_p(0x17,video_port_reg);            /* ModeControl */
+       outb_p(vga.ModeControl,video_port_val);
+       outb_p(0x01,seq_port_reg);              /* ClockingMode */
+       outb_p(vga.ClockingMode,seq_port_val);
+
+       /* restore index/control registers */
+       outb_p(vga.SeqCtrlIndex,seq_port_reg);
+       outb_p(vga.CrtCtrlIndex,video_port_reg);
+       sti();
+}
+
+#endif /* CONFIG_VESA_PSPM */
+
+
 static void * memsetw(void * s, unsigned short c, unsigned int count)
 {
 __asm__("cld\n\t"
@@ -2032,7 +2187,9 @@ static void set_scrmem(int currcons, long offset)
 
 void blank_screen(void)
 {
+#ifndef CONFIG_VESA_PSPM
        int currcons;
+#endif
 
        if (console_blanked)
                return;
@@ -2043,6 +2200,9 @@ void blank_screen(void)
        }
        timer_table[BLANK_TIMER].fn = unblank_screen;
 
+#ifdef CONFIG_VESA_PSPM
+       vesa_blank();
+#else
        /* try not to lose information by blanking, and not to waste memory */
        currcons = fg_console;
        has_scrolled = 0;
@@ -2053,14 +2213,17 @@ void blank_screen(void)
        unblank_origin = origin;
        memsetw((void *)blank_origin, BLANK, video_mem_term-blank_origin);
        hide_cursor();
+#endif 
        console_blanked = fg_console + 1;
 }
 
 void unblank_screen(void)
 {
        int currcons;
+#ifndef CONFIG_VESA_PSPM
        int resetorg;
        long offset;
+#endif
 
        if (!console_blanked)
                return;
@@ -2075,6 +2238,10 @@ void unblank_screen(void)
                timer_active |= 1<<BLANK_TIMER;
        }
        currcons = fg_console;
+#ifdef CONFIG_VESA_PSPM
+       vesa_unblank();
+       console_blanked=0;
+#else
        offset = 0;
        resetorg = 0;
        if (console_blanked == fg_console + 1 && origin == unblank_origin
@@ -2091,6 +2258,7 @@ void unblank_screen(void)
        set_cursor(fg_console);
        if (resetorg)
                __set_origin(blank__origin);
+#endif
 }
 
 void update_screen(int new_console)
index cda10334432c273538315239e0520ed96fbbb7bd..2ccdc9668ec3421556d06687608309ff90562cf7 100644 (file)
@@ -3,7 +3,7 @@ Tue Nov 29 15:43:50 1994  Eric Youngdale  (eric@andante.aib.com)
        * Linux 1.1.68 released.
 
        Add support for 12 byte vendor specific commands in scsi-generics,
-       more (i.e. the last manditory) low-level changes to support
+       more (i.e. the last mandatory) low-level changes to support
        loadable modules, plus a few other changes people have requested
        lately.  Changes by me (ERY) unless otherwise noted.  Spelling
        changes appear from some unknown corner of the universe.
index 10f260ef040b62b2c76b46ed5903781f6c070861..9fa6b8748ad30e2411d4d31bd2f7170f99bf77d1 100644 (file)
@@ -472,7 +472,7 @@ scsi_tape_open(struct inode * inode, struct file * filp)
       SCpnt->request.dev = -1;  /* Mark as not busy */
       (STp->buffer)->in_use = 0;
       STp->buffer = NULL;
-      STp->density = 0;   /* Clear the errorneus "residue" */
+      STp->density = 0;   /* Clear the erroneous "residue" */
       STp->write_prot = 0;
       STp->block_size = 0;
       STp->eof = ST_NOEOF;
diff --git a/fs/msdos/mmap.c b/fs/msdos/mmap.c
deleted file mode 100644 (file)
index 0e85584..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *     fs/msdos/mmap.c
- *
- *     Written by Jacques Gelinas (jacques@solucorp.qc.ca)
- *     Inspired by fs/nfs/mmap.c (Jaon Tombs 15 Aug 1993)
- *
- *     msdos mmap handling
- */
-#include <linux/stat.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/shm.h>
-#include <linux/errno.h>
-#include <linux/mman.h>
-#include <linux/string.h>
-#include <linux/malloc.h>
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <linux/msdos_fs.h>
-
-/*
- * Fill in the supplied page for mmap
- */
-static unsigned long msdos_file_mmap_nopage(
-       struct vm_area_struct * area,
-       unsigned long address,
-       unsigned long page,
-       int error_code)
-{
-       struct inode * inode = area->vm_inode;
-       unsigned int clear;
-       int pos;
-       long gap;       /* distance from eof to pos */
-
-       address &= PAGE_MASK;
-       pos = address - area->vm_start + area->vm_offset;
-
-       clear = 0;
-       gap = inode->i_size - pos;
-       if (gap <= 0){
-               /* mmaping beyond end of file */
-               clear = PAGE_SIZE;
-       }else{
-               int cur_read;
-               int need_read;
-               struct file filp;
-               if (gap < PAGE_SIZE){
-                       clear = PAGE_SIZE - gap;
-               }
-               filp.f_pos = pos;
-               need_read = PAGE_SIZE - clear;
-               {
-                       unsigned long cur_fs = get_fs();
-                       set_fs (KERNEL_DS);
-                       cur_read = msdos_file_read (inode,&filp,(char*)page
-                               ,need_read);
-                       set_fs (cur_fs);
-               }
-               if (cur_read != need_read){
-                       printk ("MSDOS: Error while reading an mmap file %d <> %d\n"
-                               ,cur_read,need_read);
-               }
-       }
-       if (clear > 0){
-               memset ((char*)page+PAGE_SIZE-clear,0,clear);
-       }
-       return page;
-}
-
-struct vm_operations_struct msdos_file_mmap = {
-       NULL,                   /* open */
-       NULL,                   /* close */
-       msdos_file_mmap_nopage, /* nopage */
-       NULL,                   /* wppage */
-       NULL,                   /* share */
-       NULL,                   /* unmap */
-};
-
-/*
- * This is used for a general mmap of an msdos file
- * Returns 0 if ok, or a negative error code if not.
- */
-int msdos_mmap(struct inode * inode, struct file * file, struct vm_area_struct * vma)
-{
-       if (vma->vm_page_prot & PAGE_RW)        /* only PAGE_COW or read-only supported now */
-               return -EINVAL;
-       if (vma->vm_offset & (inode->i_sb->s_blocksize - 1))
-               return -EINVAL;
-       if (!inode->i_sb || !S_ISREG(inode->i_mode))
-               return -EACCES;
-       if (!IS_RDONLY(inode)) {
-               inode->i_atime = CURRENT_TIME;
-               inode->i_dirt = 1;
-       }
-
-       vma->vm_inode = inode;
-       inode->i_count++;
-       vma->vm_ops = &msdos_file_mmap;
-       return 0;
-}
-
index 601f590d3e326266260906d2fdf8e4e08f3be444..5bd2fe9588e95375e6ed0d469250a528741a569b 100644 (file)
@@ -50,6 +50,10 @@ extern int rarp_get_info(char *, char **, off_t, int);
 extern int dev_get_info(char *, char **, off_t, int);
 extern int rt_get_info(char *, char **, off_t, int);
 extern int snmp_get_info(char *, char **, off_t, int);
+extern int ip_acct_procinfo(char *, char **, off_t, int);
+extern int ip_fw_blk_procinfo(char *, char **, off_t, int);
+extern int ip_fw_fwd_procinfo(char *, char **, off_t, int);
+extern int ip_mc_procinfo(char *, char **, off_t, int);
 #endif /* CONFIG_INET */
 #ifdef CONFIG_IPX
 extern int ipx_get_info(char *, char **, off_t, int);
@@ -115,6 +119,16 @@ static struct proc_dir_entry net_dir[] = {
 #ifdef CONFIG_INET_RARP
        { PROC_NET_RARP,        4, "rarp"},
 #endif
+#ifdef CONFIG_IP_MULTICAST
+       { PROC_NET_IGMP,        4, "igmp"},
+#endif
+#ifdef CONFIG_IP_FIREWALL
+       { PROC_NET_IPFWFWD,     10, "ip_forward"},
+       { PROC_NET_IPBLFWD,     8,  "ip_block"},
+#endif
+#ifdef CONFIG_IP_ACCT
+       { PROC_NET_IPACCT,      7,  "ip_acct"},
+#endif
 #endif /* CONFIG_INET */
 #ifdef CONFIG_IPX
        { PROC_NET_IPX_ROUTE,   9, "ipx_route" },
@@ -237,6 +251,24 @@ static int proc_readnet(struct inode * inode, struct file * file,
                        case PROC_NET_SNMP:
                                length = snmp_get_info(page, &start, file->f_pos,thistime);
                                break;
+#ifdef CONFIG_IP_MULTICAST
+                       case PROC_NET_IGMP:
+                               length = ip_mc_procinfo(page, &start, file->f_pos,thistime);
+                               break;
+#endif
+#ifdef CONFIG_IP_FIREWALL
+                       case PROC_NET_IPFWFWD:
+                               length = ip_fw_fwd_procinfo(page, &start, file->f_pos,thistime);
+                               break;
+                       case PROC_NET_IPBLFWD:
+                               length = ip_fw_blk_procinfo(page, &start, file->f_pos,thistime);
+                               break;
+#endif
+#ifdef CONFIG_IP_ACCT
+                       case PROC_NET_IPACCT:
+                               length = ip_acct_procinfo(page, &start, file->f_pos,thistime);
+                               break;
+#endif
 #ifdef CONFIG_INET_RARP                                
                        case PROC_NET_RARP:
                                length = rarp_get_info(page,&start,file->f_pos,thistime);
diff --git a/fs/sysv/mmap.c b/fs/sysv/mmap.c
deleted file mode 100644 (file)
index 3ec3867..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *  linux/fs/sysv/mmap.c
- *
- *  mm/memory.c, mm/mmap.c
- *  Copyright (C) 1991, 1992, 1993  Linus Torvalds
- *
- *  nfs/mmap.c
- *  Copyright (C) 1993  Jon Tombs
- *
- *  fs/msdos/mmap.c
- *  Copyright (C) 1994  Jacques Gelinas
- *
- *  fs/sysv/mmap.c
- *  Copyright (C) 1994  Bruno Haible
- *
- *  SystemV/Coherent mmap handling
- */
-
-#include <asm/segment.h>
-
-#include <linux/fs.h>
-#include <linux/sysv_fs.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/sched.h>
-#include <linux/errno.h>
-#include <linux/malloc.h>
-
-/*
- * Fill in the supplied page for mmap
- */
-static unsigned long sysv_file_mmap_nopage (struct vm_area_struct * area,
-       unsigned long address, unsigned long page, int no_share)
-{
-       int remaining, count, old_fs;
-       struct file filp;
-
-       address &= PAGE_MASK;
-       /* prepare a file pointer */
-       filp.f_pos = address - area->vm_start + area->vm_offset;
-       filp.f_reada = 0;
-       remaining = area->vm_end - address;
-       if (remaining > PAGE_SIZE)
-               remaining = PAGE_SIZE;
-       /* read from the file. page is in kernel space, not user space. */
-       old_fs = get_fs(); set_fs(get_ds());
-       count = sysv_file_read (area->vm_inode, &filp, (char *)page, remaining);
-       set_fs(old_fs);
-       if (count < 0)
-               count = 0;      /* do nothing on I/O error ?? */
-       else
-               remaining -= count;
-       if (remaining > 0)
-               memset((char *)page + count, 0, remaining);
-       return page;
-}
-
-static struct vm_operations_struct sysv_file_mmap = {
-       NULL,                   /* open */
-       NULL,                   /* close */
-       sysv_file_mmap_nopage,  /* nopage */
-       NULL,                   /* wppage */
-       NULL,                   /* share */
-       NULL,                   /* unmap */
-};
-
-int sysv_mmap(struct inode * inode, struct file * file, struct vm_area_struct * vma)
-{
-       if (vma->vm_page_prot & PAGE_RW)        /* only PAGE_COW or read-only supported right now */
-               return -EINVAL;
-       if (vma->vm_offset & (inode->i_sb->s_blocksize - 1))
-               return -EINVAL;
-       if (!inode->i_sb || !S_ISREG(inode->i_mode))
-               return -EACCES;
-       if (!IS_RDONLY(inode)) {
-               inode->i_atime = CURRENT_TIME;
-               inode->i_dirt = 1;
-       }
-
-       vma->vm_inode = inode;
-       inode->i_count++;
-       vma->vm_ops = &sysv_file_mmap;
-       return 0;
-}
index b532a6641e83416a312dd22d461cc79cd5b24725..0cfafa43e9344663b109d25c70f3beb9464f57b9 100644 (file)
@@ -1,6 +1,35 @@
 #ifndef _ALPHA_TYPES_H
 #define _ALPHA_TYPES_H
 
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef signed char __s8;
+typedef unsigned char __u8;
+
+typedef signed short __s16;
+typedef unsigned short __u16;
+
+typedef signed int __s32;
+typedef unsigned int __u32;
+
+/*
+ * There are 32-bit compilers for the alpha out there..
+ */
+#if ((~0UL) == 0xffffffff)
+
+typedef signed long long __s64;
+typedef unsigned long long __u64;
+
+#else
+
+typedef signed long __s64;
+typedef unsigned long __u64;
+
+#endif
+
 /*
  * These aren't exported outside the kernel to avoid name space clashes
  */
index 129bd4918ea898791523999775740973e0b8944b..a5197c3340e81b45a873cd285a69856d6d1575f7 100644 (file)
@@ -1,6 +1,23 @@
 #ifndef _I386_TYPES_H
 #define _I386_TYPES_H
 
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef signed char __s8;
+typedef unsigned char __u8;
+
+typedef signed short __s16;
+typedef unsigned short __u16;
+
+typedef signed long __s32;
+typedef unsigned long __u32;
+
+typedef signed long long __s64;
+typedef unsigned long long __u64;
+
 /*
  * These aren't exported outside the kernel to avoid name space clashes
  */
index 1d3789638f12f3941add42fceb429dc764c7308e..f7768e621397c5acf69b7da4c9dfdf926cb454a3 100644 (file)
 
 
 struct timestamp {
-       u8      len;
-       u8      ptr;
+       __u8    len;
+       __u8    ptr;
        union {
 #if defined(__i386__)  
-               u8      flags:4,
+               __u8    flags:4,
                        overflow:4;
 #elif defined(__mc68000__)
-               u8      overflow:4,
+               __u8    overflow:4,
                        flags:4;
 #elif defined(__alpha__)
-               u8      flags:4,
+               __u8    flags:4,
                        overflow:4;
 #else
 #error "Adjust this structure to match your CPU"
 #endif                                         
-               u8      full_char;
+               __u8    full_char;
        } x;
-       u32     data[9];
+       __u32   data[9];
 };
 
 
@@ -74,26 +74,26 @@ struct options {
 
 struct iphdr {
 #if defined(__i386__)
-       u8      ihl:4,
+       __u8    ihl:4,
                version:4;
 #elif defined (__mc68000__)
-       u8      version:4,
+       __u8    version:4,
                ihl:4;
 #elif defined (__alpha__)
-       u8      ihl:4,
+       __u8    ihl:4,
                version:4;
 #else
 #error "Adjust this structure to match your CPU"
 #endif
-       u8      tos;
-       u16     tot_len;
-       u16     id;
-       u16     frag_off;
-       u8      ttl;
-       u8      protocol;
-       u16     check;
-       u32     saddr;
-       u32     daddr;
+       __u8    tos;
+       __u16   tot_len;
+       __u16   id;
+       __u16   frag_off;
+       __u8    ttl;
+       __u8    protocol;
+       __u16   check;
+       __u32   saddr;
+       __u32   daddr;
        /*The options start here. */
 };
 
index 70e25bf4234367aa40444e7061ca967c4d94c6e6..fe40f4b4e4bd5b26ecfc70f70d8137adc813b091 100644 (file)
@@ -58,6 +58,16 @@ enum net_directory_inos {
 #ifdef CONFIG_INET_RARP
        PROC_NET_RARP,
 #endif
+#ifdef CONFIG_IP_MULTICAST
+       PROC_NET_IGMP,
+#endif
+#ifdef CONFIG_IP_FIREWALL
+       PROC_NET_IPFWFWD,
+       PROC_NET_IPBLFWD,
+#endif
+#ifdef CONFIG_IP_ACCT
+       PROC_NET_IPACCT,
+#endif
 #endif
 #ifdef CONFIG_IPX
        PROC_NET_IPX_ROUTE,
index 4acc22cae1da90f7e2c72e90665c971f507d90cb..938a201d82470ea54324b86903e46c86d573be07 100644 (file)
 
 
 struct tcphdr {
-       u16     source;
-       u16     dest;
-       u32     seq;
-       u32     ack_seq;
+       __u16   source;
+       __u16   dest;
+       __u32   seq;
+       __u32   ack_seq;
 #if defined(__i386__)
-       u16     res1:4,
+       __u16   res1:4,
                doff:4,
                fin:1,
                syn:1,
@@ -38,7 +38,7 @@ struct tcphdr {
                urg:1,
                res2:2;
 #elif defined(__mc68000__)
-       u16     res2:2,
+       __u16   res2:2,
                urg:1,
                ack:1,
                psh:1,
@@ -48,7 +48,7 @@ struct tcphdr {
                doff:4,
                res1:4;
 #elif defined(__alpha__)
-       u16     res1:4,
+       __u16   res1:4,
                doff:4,
                fin:1,
                syn:1,
@@ -60,9 +60,9 @@ struct tcphdr {
 #else
 #error "Adjust this structure for your cpu alignment rules"
 #endif 
-       u16     window;
-       u16     check;
-       u16     urg_ptr;
+       __u16   window;
+       __u16   check;
+       __u16   urg_ptr;
 };
 
 
index 311dd111e95e4d9e947b534c069f27ae42083602..e81faff1a9d9410aa85319194f50f7b95a6ce083 100644 (file)
 
 #include <asm/segment.h>
 
-/*
- * It would seem some PCI bioses are buggy, so we don't actually use these
- * routines unless we need to..
- */
-#ifdef CONFIG_SCSI_NCR53C7xx
- #define CONFIG_PCI
-#else
- #undef CONFIG_PCI
-#endif
-
 #define PCIBIOS_PCI_FUNCTION_ID        0xb1XX
 #define PCIBIOS_PCI_BIOS_PRESENT       0xb101
 #define PCIBIOS_FIND_PCI_DEVICE                0xb102
index 274e81870f20978ec2d5a1727900f00c034bd493..22a748eaefa243088b2dd3f7ebba53d537a628d0 100644 (file)
 #include <linux/net.h>
 #include <linux/netdevice.h>
 #endif
+#ifdef CONFIG_PCI
+#include <pci.h>
+#endif
 
 #include <asm/irq.h>
 extern char floppy_track_buffer[];
 extern void set_device_ro(int dev,int flag);
-#include <linux/delay.h>
-#include <linux/locks.h>
   
 extern void *sys_call_table;
 
@@ -70,6 +71,18 @@ struct symbol_table symbol_table = { 0, 0, 0, /* for stacked module support */
        X(EISA_bus),
        X(wp_works_ok),
 
+#ifdef CONFIG_PCI
+       /* PCI BIOS support */
+       X(pcibios_find_class),
+       X(pcibios_find_device),
+       X(pcibios_read_config_byte),
+       X(pcibios_read_config_word),
+       X(pcibios_read_config_dword),
+       X(pcibios_write_config_byte),
+       X(pcibios_write_config_word),
+       X(pcibios_write_config_dword),
+#endif
+
        /* process memory management */
        X(verify_area),
        X(do_mmap),
index ef211f8f48fd24da5c1aa5a2b10047d2b6d274ed..87699a990d13d0548c5efaf15bb2f13a688588f6 100644 (file)
@@ -444,8 +444,15 @@ static int inet_listen(struct socket *sock, int backlog)
                return -EAGAIN;
 
        /* We might as well re use these. */ 
+       /*
+        * note that the backlog is "unsigned char", so truncate it
+        * somewhere. We might as well truncate it to what everybody
+        * else does..
+        */
+       if (backlog > 5)
+               backlog = 5;
        sk->max_ack_backlog = backlog;
-       if (sk->state != TCP_LISTEN) 
+       if (sk->state != TCP_LISTEN)
        {
                sk->ack_backlog = 0;
                sk->state = TCP_LISTEN;
@@ -656,6 +663,7 @@ static int inet_create(struct socket *sock, int protocol)
        sk->ip_mc_loop=0;
        sk->ip_mc_ttl=1;
        *sk->ip_mc_name=0;
+       sk->ip_mc_list=NULL;
 #endif
        
        sk->state_change = def_callback1;
index 7fd20cc9b9d42edf17149caad7cbe17f06c5ff6f..1f8c9c93ec63ab4f78507fc42c7f6e743b2ab132 100644 (file)
@@ -1442,6 +1442,8 @@ int dev_ioctl(unsigned int cmd, void *arg)
                case SIOCSIFMEM:
                case SIOCSIFMAP:
                case SIOCSIFSLAVE:
+               case SIOCADDMULTI:
+               case SIOCDELMULTI:
                        if (!suser())
                                return -EPERM;
                        return dev_ifsioc(arg, cmd);
index 0825813c654fcb38e4ff74447b80829fdedb420a..f921c685da61ec31ac53c4cc196f40871e300235 100644 (file)
@@ -5,7 +5,7 @@
  *             Alan Cox <Alan.Cox@linux.org>   
  *
  *     WARNING:
- *             This is a 'prelimary' implementation... on your own head
+ *             This is a 'preliminary' implementation... on your own head
  *     be it.
  *
  *     This program is free software; you can redistribute it and/or
index 8c9aca36376f8b5e72679d52c54726ff15d04a2b..f4e213773976861e2eb0fd8f478edf9ab9e092dc 100644 (file)
@@ -5,7 +5,7 @@
  *             Alan Cox <Alan.Cox@linux.org>   
  *
  *     WARNING:
- *             This is a 'prelimary' implementation... on your own head
+ *             This is a 'preliminary' implementation... on your own head
  *     be it.
  *
  *     This program is free software; you can redistribute it and/or
index dea0dacb08af1ad101f42650a79772055c0a1e2e..b85336590e82102223f3145081f1ab747b24600f 100644 (file)
@@ -876,7 +876,7 @@ static struct sk_buff *ip_glue(struct ipq *qp)
        fp = qp->fragments;
        while(fp != NULL)
        {
-               if(count+fp->len>skb->len)
+               if(count+fp->len > skb->len)
                {
                        printk("Invalid fragment list: Fragment over size.\n");
                        ip_free(qp);
@@ -1610,6 +1610,7 @@ int ip_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
                skb=ip_defrag(iph,skb,dev);
                if(skb==NULL)
                        return 0;
+               skb->dev = dev;
                iph=skb->h.iph;
        }
        
index adad2e6032e64216872d57efc1bde1316fe3e807..34810303edfe3fd76bdf2bf6ddf7d3fb15e16d73 100644 (file)
@@ -214,7 +214,7 @@ int ip_fw_chk(struct iphdr *ip, struct ip_fw *chain)
                                } 
                                /*
                                 * At this moment we surely know the protocol of this
-                                * packet and we'll check if it matches,then proceed futher..
+                                * packet and we'll check if it matches,then proceed further..
                                 */
                                if (proto==frwl_proto) 
                                {
@@ -387,7 +387,7 @@ addr_match:
                        } 
                        /*
                         * At this moment we surely know the protocol of this
-                        * packet and we'll check if it matches,then proceed futher..
+                        * packet and we'll check if it matches,then proceed further..
                         */
                        if (proto==frwl_proto) 
                        {
@@ -628,10 +628,7 @@ skip_check:
        if (chtmp_prev)
                chtmp_prev->next=ftmp;
        else
-       {
                *chainptr=ftmp;
-               printk("ip_fw: add_to_chain: Can't happen");
-       }
        restore_flags(flags);
        return(0);
 }
@@ -866,7 +863,7 @@ int ip_fw_ctl(int stage, void *m, int len)
 
 /*
  *     Here we really working hard-adding new elements
- *     to blocking/forwarding chains or deleting'em
+ *     to blocking/forwarding chains or deleting 'em
  */
 
        if ( stage == IP_FW_ADD_BLK || stage == IP_FW_ADD_FWD
@@ -905,3 +902,73 @@ int ip_fw_ctl(int stage, void *m, int len)
        return(EINVAL);
 }
 #endif /* CONFIG_IP_FIREWALL */
+
+#if defined(CONFIG_IP_FIREWALL) || defined(CONFIG_IP_ACCT)
+
+static int ip_chain_procinfo(struct ip_fw *chain, char *buffer, char **start, off_t offset, int length)
+{
+       off_t pos=0, begin=0;
+       struct ip_fw *i;
+       unsigned long flags;
+       int len=0;
+       
+       
+       len=sprintf(buffer,"Firewall Rules\n");  
+       save_flags(flags);
+       cli();
+       
+       i=chain;
+       
+       while(i!=NULL)
+       {
+               len+=sprintf(buffer+len,"%08lX/%08lX->%08lX/%08lX %X ",
+                       ntohl(i->src.s_addr),ntohl(i->src_mask.s_addr),
+                       ntohl(i->dst.s_addr),ntohl(i->dst_mask.s_addr),
+                       i->flags);
+               len+=sprintf(buffer+len,"%u %u %lu %lu ",
+                       i->n_src_p,i->n_dst_p, i->p_cnt,i->b_cnt);
+               len+=sprintf(buffer+len,"%u %u %u %u %u %u %u %u %u %u\n",
+                       i->ports[0],i->ports[1],i->ports[2],i->ports[3],        
+                       i->ports[4],i->ports[5],i->ports[6],i->ports[7],        
+                       i->ports[8],i->ports[9]);       
+               pos=begin+len;
+               if(pos<offset)
+               {
+                       len=0;
+                       begin=pos;
+               }
+               if(pos>offset+length)
+                       break;
+               i=i->next;
+       }
+       restore_flags(flags);
+       *start=buffer+(offset-begin);
+       len-=(offset-begin);
+       if(len>length)
+               len=length;     
+       return len;
+}
+#endif
+
+#ifdef CONFIG_IP_ACCT
+
+int ip_acct_procinfo(char *buffer, char **start, off_t offset, int length)
+{
+       return ip_chain_procinfo(ip_acct_chain, buffer,start,offset,length);
+}
+
+#endif
+
+#ifdef CONFIG_IP_FIREWALL
+
+int ip_fw_blk_procinfo(char *buffer, char **start, off_t offset, int length)
+{
+       return ip_chain_procinfo(ip_fw_blk_chain, buffer,start,offset,length);
+}
+
+int ip_fw_fwd_procinfo(char *buffer, char **start, off_t offset, int length)
+{
+       return ip_chain_procinfo(ip_fw_fwd_chain, buffer,start,offset,length);
+}
+
+#endif
index 58401d742c301eaf4900edd51152270f59a76140..e2aa3aeb2d952986ea34d2f2107a0fad524781df 100644 (file)
@@ -23,6 +23,7 @@
  *             Alan Cox        :       MTU in route table
  *             Alan Cox        :       MSS actually. Also added the window
  *                                     clamper.
+ *             Sam Lantinga    :       Fixed route matching in rt_del()
  *
  *             This program is free software; you can redistribute it and/or
  *             modify it under the terms of the GNU General Public License
@@ -66,7 +67,7 @@ static struct rtable *rt_loopback = NULL;
  *     Remove a routing table entry.
  */
 
-static void rt_del(unsigned long dst)
+static void rt_del(unsigned long dst, char *devname)
 {
        struct rtable *r, **rp;
        unsigned long flags;
@@ -82,7 +83,9 @@ static void rt_del(unsigned long dst)
        cli();
        while((r = *rp) != NULL) 
        {
-               if (r->rt_dst != dst) 
+               /* Make sure both the destination and the device match */
+               if ( r->rt_dst != dst ||
+               (devname != NULL && strcmp((r->rt_dev)->name,devname) != 0) )
                {
                        rp = &r->rt_next;
                        continue;
@@ -467,9 +470,19 @@ static int rt_new(struct rtentry *r)
 static int rt_kill(struct rtentry *r)
 {
        struct sockaddr_in *trg;
+       char *devname;
+       int err;
 
        trg = (struct sockaddr_in *) &r->rt_dst;
-       rt_del(trg->sin_addr.s_addr);
+       if ((devname = r->rt_dev) != NULL) 
+       {
+               err = getname(devname, &devname);
+               if (err)
+                       return err;
+       }
+       rt_del(trg->sin_addr.s_addr, devname);
+       if ( devname != NULL )
+               putname(devname);
        return 0;
 }
 
index 1a8316b173a37866955aae8c1854339d3bb18848..49dadf4229eac63359ea4c5f39f833bfb34ea8dc 100644 (file)
@@ -563,9 +563,9 @@ int udp_rcv(struct sk_buff *skb, struct device *dev, struct options *opt,
        struct sock *sk;
        struct udphdr *uh;
        unsigned short ulen;
-       int addr_type=IS_MYADDR;
+       int addr_type = IS_MYADDR;
        
-       if(skb->dev->pa_addr!=daddr)
+       if(!dev || dev->pa_addr!=daddr)
                addr_type=ip_chk_addr(daddr);
                
        /*
@@ -621,7 +621,7 @@ int udp_rcv(struct sk_buff *skb, struct device *dev, struct options *opt,
                                else
                                        skb1=skb;
                                if(skb1)
-                                       udp_deliver(sk, uh, skb1,skb->dev,saddr,daddr,len);
+                                       udp_deliver(sk, uh, skb1, dev,saddr,daddr,len);
                                sk=sknext;
                        }
                        while(sknext!=NULL);
@@ -648,7 +648,7 @@ int udp_rcv(struct sk_buff *skb, struct device *dev, struct options *opt,
                return(0);
        }
 
-       return udp_deliver(sk,uh,skb,skb->dev, saddr, daddr, len);
+       return udp_deliver(sk,uh,skb,dev, saddr, daddr, len);
 }
 
 static int udp_deliver(struct sock *sk, struct udphdr *uh, struct sk_buff *skb, struct device *dev, long saddr, long daddr, int len)