]> git.neil.brown.name Git - history.git/commitdiff
Import 2.0.31pre8 2.0.31pre8
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 23 Nov 2007 20:11:31 +0000 (15:11 -0500)
committerAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 23 Nov 2007 20:11:31 +0000 (15:11 -0500)
31 files changed:
Documentation/Changes
Documentation/memory-tuning.txt
drivers/char/pcwd.c
drivers/isdn/avmb1/b1capi.c
drivers/isdn/avmb1/b1lli.c
drivers/isdn/avmb1/capidrv.c
drivers/pci/pci.c
drivers/scsi/ncr53c8xx.c
drivers/scsi/ncr53c8xx.h
drivers/scsi/scsi_ioctl.c
drivers/scsi/sr_ioctl.c
drivers/sound/.blurb
drivers/sound/Readme
drivers/sound/Readme.cards
drivers/sound/Readme.linux
drivers/sound/Readme.v30
drivers/sound/sequencer.c
fs/buffer.c
fs/locks.c
fs/super.c
include/linux/fs.h
include/linux/isdn.h
include/linux/mm.h
include/linux/pci.h
kernel/exit.c
kernel/time.c
mm/filemap.c
mm/page_alloc.c
mm/vmscan.c
net/bridge/br.c
net/ipv4/route.c

index 4f471c6fcff8e4aff2cd2a39b8dfe4aa1ad418df..25bce10c4a29fcec51cc12c140fe2d2e06ae652c 100644 (file)
@@ -142,7 +142,7 @@ obtain a precompiled binary is at the end of this file).
 rlogin.  Libc-5.3.12 fixes this, so if you're going to run an
 experimental libc, be sure to upgrade to 5.3.12.  Libc-5.4.33 is
 currently available as well, but it may have problems, so caveat
-emptor.  It fixes lots of problems, but make break even more programs
+emptor.  It fixes lots of problems, but may break even more programs
 than 5.3.12.
 
    If you're getting an error message that is something to the effect of
index 04c67d650e9081b9ecfce636e5230ff42ea4d628..a7efde5380b96cc78065e80420cca41bb79678bb 100644 (file)
@@ -12,7 +12,7 @@ free_pages_high.
 
 You can adjust these with a command such as:
 
-# echo 128 256 512 > /proc/sys/vm/freepages
+# echo "128 256 512" > /proc/sys/vm/freepages
 
 Free memory never goes down below min_free_pages except for atomic
 allocation.  Background swapping is started if the number of free
@@ -38,7 +38,7 @@ ready for this purpose is probably a good idea.
 
 I've found that
 
-# echo 128 256 1024 > /proc/sys/vm/freepages
+# echo "128 256 1024" > /proc/sys/vm/freepages
 
 gives good performance for a 32 Meg system used as a small server and
 personal workstation.
index dbeb6bd17c2a82aabee36d7009a1ff8fab825709..ea4e13d28eccbebd3a0f88d1847e8652e2ed3907 100644 (file)
@@ -15,6 +15,9 @@
  *             check_region command due to Alan's suggestion.
  * 960821      Made changes to compile in newer 2.0.x kernels.  Added
  *             "cold reboot sense" entry.
+ * 970819      Fixed use of is_open flag so pcwd_write does not always return
+ *             -EIO; this prevented tickling. Enabled board on open and
+ *             disabled on close.
  */
 
 #include <linux/module.h>
 #define WD_TIMERRESET_PORT2     0x370  /* Reset port - second choice */
 #define WD_CTLSTAT_PORT1        0x271  /* Control port - first choice */
 #define WD_CTLSTAT_PORT2        0x371  /* Control port - second choice */
-#define        WD_PORT_EXTENT          2       /* Takes up two addresses */
+#define WD_CTLSTAT2_PORT1       0x272   /* Control port#2 - first choice */
+#define WD_CTLSTAT2_PORT2       0x372   /* Control port#2 - second choice */
+#define WD_DISABLE_PORT1        0x273   /* Disable port - first choice  */
+#define WD_DISABLE_PORT2        0x373   /* Disable port - second choice  */
+#define        WD_PORT_EXTENT          4       /* Takes up four addresses */
 
 #define WD_WDRST                0x01   /* Previously reset state */
 #define WD_T110                 0x02   /* Temperature overheat sense */
@@ -54,7 +61,9 @@
 #define WD_RLY2                 0x08   /* External relay triggered */
 #define WD_SRLY2                0x80   /* Software external relay triggered */
 
+
 static int current_ctlport, current_readport;
+static int current_ctlport2, current_disport;
 static int is_open, is_eof;
 
 int pcwd_checkcard(void)
@@ -193,7 +202,7 @@ static int pcwd_write(struct inode *inode, struct file *file, const char *data,
 
        outb_p(wdrst_stat, current_ctlport);
 
-       return(1);
+       return(len);
 }
 
 static int pcwd_ioctl(struct inode *inode, struct file *file,
@@ -235,10 +244,22 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
 static int pcwd_open(struct inode *ino, struct file *filep)
 {
 #ifdef DEBUG
-       printk("pcwd: open request\n");
+       int before, after;
+
+       before = inb_p (current_ctlport2);
+#endif
+       if (is_open)
+               return -EIO;
+
+       /*  Enable the port  */
+       outb_p (0, current_disport);
+#ifdef DEBUG
+       after = inb_p (current_ctlport2);
+       printk ("pcwd: open: control status #2 (b,a): %x, %x\n", before,after);
 #endif
 
        MOD_INC_USE_COUNT;
+       is_open = 1;
        is_eof = 0;
        return(0);
 }
@@ -249,6 +270,10 @@ static void pcwd_close(struct inode *ino, struct file *filep)
        printk("pcwd: close request\n");
 #endif
 
+       is_open = 0;
+       /*  Disable the board  */
+       outb_p (0xa5, current_disport);
+       outb_p (0xa5, current_disport);
        MOD_DEC_USE_COUNT;
 }
 
@@ -290,6 +315,8 @@ int pcwatchdog_init(void)
 
        current_ctlport = WD_TIMERRESET_PORT1;
        current_readport = WD_CTLSTAT_PORT1;
+       current_ctlport2 = WD_CTLSTAT2_PORT1;
+       current_disport = WD_DISABLE_PORT1;
 
        if (!pcwd_checkcard()) {
 #ifdef DEBUG
@@ -298,6 +325,8 @@ int pcwatchdog_init(void)
 
                current_ctlport = WD_TIMERRESET_PORT2;
                current_readport = WD_CTLSTAT_PORT2;
+               current_ctlport2 = WD_CTLSTAT2_PORT2;
+               current_disport = WD_DISABLE_PORT2;
 
                if (!pcwd_checkcard()) {
                        printk("pcwd: No card detected, or wrong port assigned.\n");
@@ -327,8 +356,11 @@ int pcwatchdog_init(void)
 #ifdef MODULE
 void cleanup_module(void)
 {
+       /*  Disable the board  */
+       outb_p (0xa5, current_disport);
+       outb_p (0xa5, current_disport);
        misc_deregister(&pcwd_miscdev);
-       release_region(current_ctlport, 2);
+       release_region(current_ctlport, WD_PORT_EXTENT);
 #ifdef DEBUG
        printk("pcwd: Cleanup successful.\n");
 #endif
index b379d8f7dae80f931032fafb3bfcda38595c3001..84723ea1704ea22b2dd75170d34e562b63eb3294 100644 (file)
@@ -1,11 +1,15 @@
 /*
- * $Id: b1capi.c,v 1.4 1997/05/27 15:17:45 fritz Exp $
+ * $Id: b1capi.c,v 1.4.2.1 1997/07/12 08:18:59 calle Exp $
  * 
  * CAPI 2.0 Module for AVM B1-card.
  * 
  * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  * 
  * $Log: b1capi.c,v $
+ * Revision 1.4.2.1  1997/07/12 08:18:59  calle
+ * Correct bug in CARD_NR macro, so now more than one card will work.
+ * Allow card reset, even if card is in running state.
+ *
  * Revision 1.4  1997/05/27 15:17:45  fritz
  * Added changes for recent 2.1.x kernels:
  *   changed return type of isdn_close
@@ -48,7 +52,7 @@
 #include "capicmd.h"
 #include "capiutil.h"
 
-static char *revision = "$Revision: 1.4 $";
+static char *revision = "$Revision: 1.4.2.1 $";
 
 /* ------------------------------------------------------------- */
 
@@ -109,7 +113,7 @@ static char capi_manufakturer[64] = "AVM Berlin";
 
 #define VALID_CARD(c)     ((c) > 0 && (c) <= ncards)
 #define CARD(c)                   (&cards[(c)-1])
-#define CARDNR(cp)        ((cards-(cp))+1)
+#define CARDNR(cp)        (((cp)-cards)+1)
 
 static avmb1_appl applications[CAPI_MAXAPPL];
 static avmb1_card cards[CAPI_MAXCONTR];
@@ -285,6 +289,8 @@ static avmb1_ncci *find_ncci(avmb1_appl * app, __u32 ncci)
        return 0;
 }
 
+
+
 /* -------- Receiver ------------------------------------------ */
 
 
@@ -365,6 +371,7 @@ static void notify_up(__u16 contr)
 {
        struct capi_interface_user *p;
 
+        printk(KERN_NOTICE "b1capi: notify up contr %d\n", contr);
        for (p = capi_users; p; p = p->next) {
                if (p->callback)
                        (*p->callback) (KCI_CONTRUP, contr,
@@ -376,6 +383,7 @@ static void notify_up(__u16 contr)
 static void notify_down(__u16 contr)
 {
        struct capi_interface_user *p;
+        printk(KERN_NOTICE "b1capi: notify down contr %d\n", contr);
        for (p = capi_users; p; p = p->next) {
                if (p->callback)
                        (*p->callback) (KCI_CONTRDOWN, contr, 0);
@@ -422,6 +430,32 @@ void avmb1_card_ready(avmb1_card * card)
 
         set_bit(CARDNR(card), &notify_up_set);
         queue_task(&tq_state_notify, &tq_scheduler);
+        printk(KERN_NOTICE "b1capi: card %d ready.\n", CARDNR(card));
+}
+
+static void avmb1_card_down(avmb1_card * card)
+{
+       __u16 appl;
+
+        card->cardstate = CARD_DETECTED;
+
+       for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
+               avmb1_ncci **pp, **nextpp;
+               for (pp = &APPL(appl)->nccilist; *pp; pp = nextpp) {
+                       if (NCCI2CTRL((*pp)->ncci) == card->cnr) {
+                               avmb1_ncci *np = *pp;
+                               *pp = np->next;
+                               printk(KERN_INFO "b1capi: appl %d ncci 0x%x forced down!\n", appl, np->ncci);
+                               kfree(np);
+                               nextpp = pp;
+                       } else {
+                               nextpp = &(*pp)->next;
+                       }
+               }
+       }
+       set_bit(CARDNR(card), &notify_down_set);
+       queue_task(&tq_state_notify, &tq_scheduler);
+       printk(KERN_NOTICE "b1capi: card %d down.\n", CARDNR(card));
 }
 
 /* ------------------------------------------------------------- */
@@ -537,8 +571,9 @@ static __u16 capi_release(__u16 applid)
        while ((skb = skb_dequeue(&APPL(applid)->recv_queue)) != 0)
                kfree_skb(skb, FREE_READ);
        for (i = 0; i < ncards; i++) {
-               if (cards[i].cardstate != CARD_RUNNING)
+               if (cards[i].cardstate != CARD_RUNNING) {
                        continue;
+               }
                APPL(applid)->releasing++;
                B1_send_release(cards[i].port, applid);
        }
@@ -775,12 +810,13 @@ static int capi_manufacturer(unsigned int cmd, void *data)
                card = CARD(rdef.contr);
 
                if (card->cardstate == CARD_RUNNING)
-                       return -EBUSY;
+                       avmb1_card_down(card);
+
+               card->cardstate = CARD_DETECTED;
 
                B1_reset(card->port);
                B1_reset(card->port);
 
-               card->cardstate = CARD_DETECTED;
                return 0;
        }
        return -EINVAL;
index bc1cb1cd34f9fffd4334d7e7fd7c043ce50e3be3..7028b5d399774ebd188595f0d094a938efe5ebe4 100644 (file)
@@ -1,11 +1,14 @@
 /*
- * $Id: b1lli.c,v 1.1 1997/03/04 21:50:28 calle Exp $
+ * $Id: b1lli.c,v 1.1.2.1 1997/07/13 12:16:46 calle Exp $
  * 
  * ISDN lowlevel-module for AVM B1-card.
  * 
  * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  * 
  * $Log: b1lli.c,v $
+ * Revision 1.1.2.1  1997/07/13 12:16:46  calle
+ * bug fix for more than one controller in connect_req.
+ *
  * Revision 1.1  1997/03/04 21:50:28  calle
  * Frirst version in isdn4linux
  *
@@ -428,7 +431,9 @@ void B1_send_message(unsigned short port, struct sk_buff *skb)
                                       CAPIMSG_APPID(skb->data),
                                       capi_cmd2str(cmd, subcmd), len);
                        } else {
-                               printk(KERN_DEBUG "b1lli: Put %s\n", capi_message2str(skb->data));
+                               printk(KERN_DEBUG "b1lli: Put [0x%lx] %s\n",
+                                               (unsigned long) contr,
+                                               capi_message2str(skb->data));
                        }
 
                }
@@ -447,7 +452,7 @@ void B1_send_message(unsigned short port, struct sk_buff *skb)
                                       CAPIMSG_APPID(skb->data),
                                       capi_cmd2str(cmd, subcmd), len);
                        } else {
-                               printk(KERN_DEBUG "b1lli: Put %s\n", capi_message2str(skb->data));
+                               printk(KERN_DEBUG "b1lli: Put [0x%lx] %s\n", (unsigned long)contr, capi_message2str(skb->data));
                        }
                }
                save_flags(flags);
@@ -499,7 +504,7 @@ void B1_handle_interrupt(avmb1_card * card)
                                       capi_cmd2str(cmd, subcmd),
                                       MsgLen, DataB3Len);
                        } else {
-                               printk(KERN_DEBUG "b1lli: Got %s\n", capi_message2str(card->msgbuf));
+                               printk(KERN_DEBUG "b1lli: Got [0x%lx] %s\n", (unsigned long)contr, capi_message2str(card->msgbuf));
                        }
                }
                if (!(skb = dev_alloc_skb(DataB3Len + MsgLen))) {
@@ -528,7 +533,9 @@ void B1_handle_interrupt(avmb1_card * card)
                                       capi_cmd2str(cmd, subcmd),
                                       MsgLen);
                        } else {
-                               printk(KERN_DEBUG "b1lli: Got %s\n", capi_message2str(card->msgbuf));
+                               printk(KERN_DEBUG "b1lli: Got [0x%lx] %s\n",
+                                               (unsigned long) contr,
+                                               capi_message2str(card->msgbuf));
                        }
 
                }
index f6bb51f136358c71db45cc8fb23b35b1a4e66a19..b818a85a4e097b92a6b409a30830908208d1f57f 100644 (file)
@@ -1,11 +1,14 @@
 /*
- * $Id: capidrv.c,v 1.3 1997/05/18 09:24:15 calle Exp $
+ * $Id: capidrv.c,v 1.3.2.1 1997/07/13 12:16:48 calle Exp $
  *
  * ISDN4Linux Driver, using capi20 interface (kernelcapi)
  *
  * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capidrv.c,v $
+ * Revision 1.3.2.1  1997/07/13 12:16:48  calle
+ * bug fix for more than one controller in connect_req.
+ *
  * Revision 1.3  1997/05/18 09:24:15  calle
  * added verbose disconnect reason reporting to avmb1.
  * some fixes in capi20 interface.
@@ -48,7 +51,7 @@
 #include "capicmd.h"
 #include "capidrv.h"
 
-static char *revision = "$Revision: 1.3 $";
+static char *revision = "$Revision: 1.3.2.1 $";
 int debugmode = 0;
 
 #ifdef HAS_NEW_SYMTAB
@@ -1270,7 +1273,7 @@ static int capidrv_command(isdn_ctrl * c, capidrv_contr * card)
                        capi_fill_CONNECT_REQ(&cmdcmsg,
                                              global.appid,
                                              card->msgid++,
-                                             1,        /* adr */
+                                             card->contrnr,    /* adr */
                                          si2cip(bchan->si1, bchan->si2),       /* cipvalue */
                                              called,   /* CalledPartyNumber */
                                              calling,  /* CallingPartyNumber */
index bec424d01789d141f04587bb1a1b9f2645ce4260..e3e4ab6f1d2ab39ee25128ef1b942a19c928fc76 100644 (file)
@@ -42,6 +42,9 @@ struct pci_dev *pci_devices = 0;
  */
 struct pci_dev_info dev_info[] = {
        DEVICE( COMPAQ,         COMPAQ_1280,    "QVision 1280/p"),
+       DEVICE( COMPAQ,         COMPAQ_NETELL100,"Netelligent 10/100"),
+       DEVICE( COMPAQ,         COMPAQ_NETELL10,"Netelligent 10"),
+       DEVICE( COMPAQ,         COMPAQ_NETFLEX3,"NetFlex 3"),
        DEVICE( COMPAQ,         COMPAQ_THUNDER, "ThunderLAN"),
        DEVICE( NCR,            NCR_53C810,     "53c810"),
        DEVICE( NCR,            NCR_53C820,     "53c820"),
@@ -57,10 +60,12 @@ struct pci_dev_info dev_info[] = {
        DEVICE( ATI,            ATI_210888CX,   "210888CX"),
        DEVICE( ATI,            ATI_215GT,      "Mach64 GT (Rage II)"),
        DEVICE( ATI,            ATI_210888GX,   "210888GX"),
+       DEVICE( ATI,            ATI_264VT,      "Mach64 VT"),
        DEVICE( VLSI,           VLSI_82C592,    "82C592-FC1"),
        DEVICE( VLSI,           VLSI_82C593,    "82C593-FC1"),
        DEVICE( VLSI,           VLSI_82C594,    "82C594-AFC2"),
        DEVICE( VLSI,           VLSI_82C597,    "82C597-AFC2"),
+       DEVICE( VLSI,           VLSI_VAS96011,  "VAS96011 PowerPC"),
        DEVICE( ADL,            ADL_2301,       "2301"),
        DEVICE( NS,             NS_87410,       "87410"),
        DEVICE( TSENG,          TSENG_W32P_2,   "ET4000W32P"),
@@ -85,10 +90,15 @@ struct pci_dev_info dev_info[] = {
        DEVICE( CIRRUS,         CIRRUS_5434_8,  "GD 5434"),
        DEVICE( CIRRUS,         CIRRUS_5436,    "GD 5436"),
        DEVICE( CIRRUS,         CIRRUS_5446,    "GD 5446"),
+       DEVICE( CIRRUS,         CIRRUS_5480,    "GD 5480"),
+       DEVICE( CIRRUS,         CIRRUS_5464,    "GD 5464"),
+       DEVICE( CIRRUS,         CIRRUS_5465,    "GD 5465"),
        DEVICE( CIRRUS,         CIRRUS_6729,    "CL 6729"),
+       DEVICE( CIRRUS,         CIRRUS_6832,    "PD 6832"),
        DEVICE( CIRRUS,         CIRRUS_7542,    "CL 7542"),
        DEVICE( CIRRUS,         CIRRUS_7543,    "CL 7543"),
        DEVICE( CIRRUS,         CIRRUS_7541,    "CL 7541"),
+       DEVICE( IBM,            IBM_FIRE_CORAL, "Fire Coral"),
        DEVICE( IBM,            IBM_82G2675,    "82G2675"),
        DEVICE( IBM,            IBM_82351,      "82351"),
        DEVICE( WD,             WD_7197,        "WD 7197"),
@@ -101,6 +111,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( MATROX,         MATROX_MGA_2,   "Atlas PX2085"),
        DEVICE( MATROX,         MATROX_MIL,     "Millennium"),
        DEVICE( MATROX,         MATROX_MYS,     "Mystique"),
+       DEVICE( MATROX,         MATROX_MIL_2,   "Millennium II"),
        DEVICE( MATROX,         MATROX_MGA_IMP, "MGA Impression"),
        DEVICE( CT,             CT_65545,       "65545"),
        DEVICE( CT,             CT_65548,       "65548"),
@@ -115,6 +126,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( SI,             SI_501,         "85C501"),
        DEVICE( SI,             SI_496,         "85C496"),
        DEVICE( SI,             SI_601,         "85C601"),
+       DEVICE( SI,             SI_5107,        "5107"),
        DEVICE( SI,             SI_5511,                "85C5511"),
        DEVICE( SI,             SI_5513,                "85C5513"),
        DEVICE( SI,             SI_5571,        "5571"),
@@ -134,6 +146,8 @@ struct pci_dev_info dev_info[] = {
        DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER_NC, "MultiMaster NC"),
        DEVICE( BUSLOGIC,       BUSLOGIC_MULTIMASTER,    "MultiMaster"),
        DEVICE( BUSLOGIC,       BUSLOGIC_FLASHPOINT,     "FlashPoint"),
+       DEVICE( TI,             TI_PCI1130,     "PCI1130"),
+       DEVICE( TI,             TI_PCI1131,     "PCI1131"),
        DEVICE( OAK,            OAK_OTI107,     "OTI107"),
        DEVICE( WINBOND2,       WINBOND2_89C940,"NE2000-PCI"),
        DEVICE( MOTOROLA,       MOTOROLA_MPC105,"MPC105 Eagle"),
@@ -152,13 +166,24 @@ struct pci_dev_info dev_info[] = {
        DEVICE( UMC,            UMC_UM8886N,    "UM8886N"),
        DEVICE( UMC,            UMC_UM8891N,    "UM8891N"),
        DEVICE( X,              X_AGX016,       "ITT AGX016"),
+       DEVICE( APPLE,          APPLE_BANDIT,   "Bandit"),
+       DEVICE( APPLE,          APPLE_GC,       "Grand Central"),
+       DEVICE( APPLE,          APPLE_HYDRA,    "Hydra"),
        DEVICE( NEXGEN,         NEXGEN_82C501,  "82C501"),
        DEVICE( QLOGIC,         QLOGIC_ISP1020, "ISP1020"),
        DEVICE( QLOGIC,         QLOGIC_ISP1022, "ISP1022"),
        DEVICE( LEADTEK,        LEADTEK_805,    "S3 805"),
        DEVICE( CONTAQ,         CONTAQ_82C599,  "82C599"),
+       DEVICE( OLICOM,         OLICOM_OC3136,  "OC-3136/3137"),
+       DEVICE( OLICOM,         OLICOM_OC2315,  "OC-2315"),
+       DEVICE( OLICOM,         OLICOM_OC2325,  "OC-2325"),
+       DEVICE( OLICOM,         OLICOM_OC2183,  "OC-2183/2185"),
+       DEVICE( OLICOM,         OLICOM_OC2326,  "OC-2326"),
+       DEVICE( OLICOM,         OLICOM_OC6151,  "OC-6151/6152"),
        DEVICE( CMD,            CMD_640,        "640 (buggy)"),
+       DEVICE( CMD,            CMD_643,        "643"),
        DEVICE( CMD,            CMD_646,        "646"),
+       DEVICE( CMD,            CMD_670,        "670"),
        DEVICE( VISION,         VISION_QD8500,  "QD-8500"),
        DEVICE( VISION,         VISION_QD8580,  "QD-8580"),
        DEVICE( BROOKTREE,      BROOKTREE_848,  "Bt848"),
@@ -167,6 +192,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( WINBOND,        WINBOND_83769,  "W83769F"),
        DEVICE( WINBOND,        WINBOND_82C105, "SL82C105"),
        DEVICE( WINBOND,        WINBOND_83C553, "W83C553"),
+       DEVICE( DATABOOK,       DATABOOK_87144, "DB87144"),
        DEVICE( 3COM,           3COM_3C590,     "3C590 10bT"),
        DEVICE( 3COM,           3COM_3C595TX,   "3C595 100bTX"),
        DEVICE( 3COM,           3COM_3C595T4,   "3C595 100bT4"),
@@ -183,6 +209,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( AL,             AL_M1513,       "M1513"),
        DEVICE( AL,             AL_M4803,       "M4803"),
        DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2070,     "Magicgraph NM2070"),
+       DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_128V, "MagicGraph 128V"),
        DEVICE( ASP,            ASP_ABP940,     "ABP940"),
        DEVICE( ASP,            ASP_ABP940U,    "ABP940U"),
        DEVICE( CERN,           CERN_SPSB_PMC,  "STAR/RD24 SCI-PCI (PMC)"),
@@ -195,6 +222,8 @@ struct pci_dev_info dev_info[] = {
        DEVICE( INTERG,         INTERG_1680,    "IGA-1680"),
        DEVICE( INTERG,         INTERG_1682,    "IGA-1682"),
        DEVICE( REALTEK,        REALTEK_8029,   "8029"),
+       DEVICE( REALTEK,        REALTEK_8129,   "8129"),
+       DEVICE( TRUEVISION,     TRUEVISION_T1000,"TARGA 1000"),
        DEVICE( INIT,           INIT_320P,      "320 P"),
        DEVICE( VIA,            VIA_82C505,     "VT 82C505"),
        DEVICE( VIA,            VIA_82C561,     "VT 82C561"),
@@ -203,6 +232,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( VIA,            VIA_82C585,     "VT 82C585VP Apollo VP-1"),
        DEVICE( VIA,            VIA_82C586_0,   "VT 82C586 Apollo VP-1"),
        DEVICE( VIA,            VIA_82C416,     "VT 82C416MV"),
+       DEVICE( VIA,            VIA_82C926,     "VT 82C926 Amazon"),
        DEVICE( VORTEX,         VORTEX_GDT60x0, "GDT 60x0"),
        DEVICE( VORTEX,         VORTEX_GDT6000B,"GDT 6000b"),
        DEVICE( VORTEX,         VORTEX_GDT6x10, "GDT 6110/6510"),
@@ -219,22 +249,28 @@ struct pci_dev_info dev_info[] = {
        DEVICE( VORTEX,         VORTEX_GDT6555, "GDT 6555"),
        DEVICE( EF,             EF_ATM_FPGA,            "155P-MF1 (FPGA)"),
        DEVICE( EF,             EF_ATM_ASIC,    "155P-MF1 (ASIC)"),
-       DEVICE( IMAGINGTECH,    IMAGINGTECH_ICPCI, "MVC IC-PCI"),
        DEVICE( FORE,           FORE_PCA200PC, "PCA-200PC"),
        DEVICE( FORE,           FORE_PCA200E,    "PCA-200E"),
        DEVICE( IMAGINGTECH,    IMAGINGTECH_ICPCI, "MVC IC-PCI"),
+       DEVICE( PHILIPS,        PHILIPS_SAA7146,"SAA7146"),
        DEVICE( PLX,            PLX_9060,       "PCI9060 i960 bridge"),
        DEVICE( ALLIANCE,       ALLIANCE_PROMOTIO, "Promotion-6410"),
        DEVICE( ALLIANCE,       ALLIANCE_PROVIDEO, "Provideo"),
        DEVICE( VMIC,           VMIC_VME,       "VMIVME-7587"),
        DEVICE( DIGI,           DIGI_RIGHTSWITCH, "RightSwitch SE-6"),
        DEVICE( MUTECH,         MUTECH_MV1000,  "MV-1000"),
+       DEVICE( RENDITION,      RENDITION_VERITE,"Verite 1000"),
        DEVICE( TOSHIBA,        TOSHIBA_601,    "Laptop"),
+       DEVICE( RICOH,          RICOH_RL5C466,  "RL5C466"),
        DEVICE( ZEITNET,        ZEITNET_1221,   "1221"),
        DEVICE( ZEITNET,        ZEITNET_1225,   "1225"),
-       DEVICE( OMEGA,          OMEGA_PCMCIA,   "PCMCIA"),
+       DEVICE( OMEGA,          OMEGA_82C092G,  "82C092G"),
+       DEVICE( NP,             NP_PCI_FDDI,    "NP-PCI"),       
        DEVICE( SPECIALIX,      SPECIALIX_XIO,  "XIO/SIO host"),
        DEVICE( SPECIALIX,      SPECIALIX_RIO,  "RIO host"),
+       DEVICE( IKON,           IKON_10115,     "10115 Greensheet"),
+       DEVICE( IKON,           IKON_10117,     "10117 Greensheet"),
+       DEVICE( ZORAN,          ZORAN_36057,    "ZR36057"),
        DEVICE( ZORAN,          ZORAN_36120,    "ZR36120"),
        DEVICE( COMPEX,         COMPEX_ENET100VG4, "Readylink ENET100-VG4"),
        DEVICE( COMPEX,         COMPEX_RL2000,  "ReadyLink 2000"),
@@ -247,7 +283,7 @@ struct pci_dev_info dev_info[] = {
        DEVICE( CYCLADES,       CYCLOM_Z_Lo,    "Cyclom-Z below 1Mbyte"),
        DEVICE( CYCLADES,       CYCLOM_Z_Hi,    "Cyclom-Z above 1Mbyte"),
        DEVICE( 3DFX,           3DFX_VOODOO,    "Voodoo"),
-       DEVICE( SIGMA_DESIGNS,  SD_REALMAGIC64GX, "REALmagic64/GX (SD 6425)"),
+       DEVICE( SIGMADES,       SIGMADES_6425,  "REALmagic64/GX"),
        DEVICE( OPTIBASE,       OPTIBASE_FORGE, "MPEG Forge"),
        DEVICE( OPTIBASE,       OPTIBASE_FUSION,"MPEG Fusion"),
        DEVICE( OPTIBASE,       OPTIBASE_VPLEX, "VideoPlex"),
@@ -256,9 +292,12 @@ struct pci_dev_info dev_info[] = {
        DEVICE( SYMPHONY,       SYMPHONY_101,   "82C101"),
        DEVICE( TEKRAM,         TEKRAM_DC290,   "DC-290"),
        DEVICE( 3DLABS,         3DLABS_300SX,   "GLINT 300SX"),
-       DEVICE( 3DLABS,         3DLABS_DELTA,   "GLINT Delta"),
-       DEVICE( 3DLABS,         3DLABS_PERMEDIA,"PERMEDIA"),
+       DEVICE( 3DLABS,         3DLABS_500TX,   "GLINT 500TX"),
+       DEVICE( 3DLABS,         3DLABS_DELTA,   "GLINT Delta"),
+       DEVICE( 3DLABS,         3DLABS_PERMEDIA,"PERMEDIA"),
+       DEVICE( AVANCE,         AVANCE_ALG2064, "ALG2064i"),
        DEVICE( AVANCE,         AVANCE_2302,    "ALG-2302"),
+       DEVICE( NETVIN,         NETVIN_NV5000SC,"NV5000"),
        DEVICE( S3,             S3_PLATO_PXS,   "PLATO/PX (system)"),
        DEVICE( S3,             S3_ViRGE,       "ViRGE"),
        DEVICE( S3,             S3_TRIO,        "Trio32/Trio64"),
@@ -289,8 +328,8 @@ struct pci_dev_info dev_info[] = {
        DEVICE( INTEL,          INTEL_82437,    "82437"),
        DEVICE( INTEL,          INTEL_82371_0,  "82371 Triton PIIX"),
        DEVICE( INTEL,          INTEL_82371_1,  "82371 Triton PIIX"),
-       DEVICE( INTEL,          INTEL_82371MX,  "82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)"),
-       DEVICE( INTEL,          INTEL_82430MX,  "82430MX Mobile PCIset"),
+       DEVICE( INTEL,          INTEL_82371MX,  "430MX - 82371MX MPIIX"),
+       DEVICE( INTEL,          INTEL_82437MX,  "430MX - 82437MX MTSC"),
        DEVICE( INTEL,          INTEL_82441,    "82441FX Natoma"),
        DEVICE( INTEL,          INTEL_82439,    "82439HX Triton II"),
        DEVICE( INTEL,          INTEL_82371SB_0,"82371SB Natoma/Triton II PIIX3"),
@@ -299,11 +338,11 @@ struct pci_dev_info dev_info[] = {
        DEVICE( INTEL,          INTEL_82437VX,  "82437VX Triton II"),
        DEVICE( INTEL,          INTEL_82439TX,  "82439TX"),
        DEVICE( INTEL,          INTEL_82371AB_0,"82371AB PIIX4"),
-       DEVICE( INTEL,          INTEL_82371AB,  "82371AB PIIX4"),
+       DEVICE( INTEL,          INTEL_82371AB,  "82371AB 430TX PIIX4"),
        DEVICE( INTEL,          INTEL_82371AB_2,"82371AB PIIX4"),
        DEVICE( INTEL,          INTEL_82371AB_3,"82371AB PIIX4 Power Management"),
        DEVICE( INTEL,          INTEL_P6,       "Orion P6"),
-       DEVICE( INTEL,          INTEL_82450GX,  "82450GX Orion"),
+       DEVICE( INTEL,          INTEL_82450GX,  "82450GX Orion P6"),
        DEVICE( KTI,            KTI_ET32P2,     "ET32P2"),
        DEVICE( ADAPTEC,        ADAPTEC_7850,   "AIC-7850"),
        DEVICE( ADAPTEC,        ADAPTEC_7855,   "AIC-7855"),
@@ -541,13 +580,15 @@ const char *pci_strvendor(unsigned int vendor)
              case PCI_VENDOR_ID_HP:            return "Hewlett Packard";
              case PCI_VENDOR_ID_PCTECH:        return "PCTECH";
              case PCI_VENDOR_ID_DPT:           return "DPT";
-             case PCI_VENDOR_ID_OPTI:          return "OPTI";
+             case PCI_VENDOR_ID_OPTI:          return "OPTi";
              case PCI_VENDOR_ID_SGS:           return "SGS Thomson";
              case PCI_VENDOR_ID_BUSLOGIC:      return "BusLogic";
+             case PCI_VENDOR_ID_TI:            return "Texas Instruments";
              case PCI_VENDOR_ID_OAK:           return "OAK";
              case PCI_VENDOR_ID_WINBOND2:      return "Winbond";
              case PCI_VENDOR_ID_MOTOROLA:      return "Motorola";
              case PCI_VENDOR_ID_PROMISE:       return "Promise Technology";
+             case PCI_VENDOR_ID_APPLE:         return "Apple";
              case PCI_VENDOR_ID_N9:            return "Number Nine";
              case PCI_VENDOR_ID_UMC:           return "UMC";
              case PCI_VENDOR_ID_X:             return "X TECHNOLOGY";
@@ -563,8 +604,11 @@ const char *pci_strvendor(unsigned int vendor)
              case PCI_VENDOR_ID_SIERRA:        return "Sierra";
              case PCI_VENDOR_ID_ACC:           return "ACC MICROELECTRONICS";
              case PCI_VENDOR_ID_WINBOND:       return "Winbond";
+             case PCI_VENDOR_ID_DATABOOK:      return "Databook";
              case PCI_VENDOR_ID_3COM:          return "3Com";
+             case PCI_VENDOR_ID_SMC:           return "SMC";
              case PCI_VENDOR_ID_AL:            return "Acer Labs";
+             case PCI_VENDOR_ID_MITSUBISHI:    return "Mitsubishi";
              case PCI_VENDOR_ID_NEOMAGIC:      return "Neomagic";
              case PCI_VENDOR_ID_ASP:           return "Advanced System Products";
              case PCI_VENDOR_ID_CERN:          return "CERN";
@@ -574,37 +618,45 @@ const char *pci_strvendor(unsigned int vendor)
              case PCI_VENDOR_ID_AMCC:          return "AMCC";
              case PCI_VENDOR_ID_INTERG:        return "Intergraphics";
              case PCI_VENDOR_ID_REALTEK:       return "Realtek";
+             case PCI_VENDOR_ID_TRUEVISION:    return "Truevision";
              case PCI_VENDOR_ID_INIT:          return "Initio Corp";
              case PCI_VENDOR_ID_VIA:           return "VIA Technologies";
              case PCI_VENDOR_ID_VORTEX:        return "VORTEX";
              case PCI_VENDOR_ID_EF:            return "Efficient Networks";
              case PCI_VENDOR_ID_FORE:          return "Fore Systems";
              case PCI_VENDOR_ID_IMAGINGTECH:   return "Imaging Technology";
+             case PCI_VENDOR_ID_PHILIPS:       return "Philips";
              case PCI_VENDOR_ID_PLX:           return "PLX";
              case PCI_VENDOR_ID_ALLIANCE:      return "Alliance";
              case PCI_VENDOR_ID_VMIC:          return "VMIC";
              case PCI_VENDOR_ID_DIGI:          return "Digi Intl.";
              case PCI_VENDOR_ID_MUTECH:        return "Mutech";
+             case PCI_VENDOR_ID_RENDITION:     return "Rendition";
              case PCI_VENDOR_ID_TOSHIBA:       return "Toshiba";
+             case PCI_VENDOR_ID_RICOH:         return "Ricoh";
              case PCI_VENDOR_ID_ZEITNET:       return "ZeitNet";
+             case PCI_VENDOR_ID_OMEGA:         return "Omega Micro";
+             case PCI_VENDOR_ID_NP:            return "Network Peripherals";
              case PCI_VENDOR_ID_SPECIALIX:     return "Specialix";
+             case PCI_VENDOR_ID_IKON:          return "Ikon";
+             case PCI_VENDOR_ID_ZORAN:         return "Zoran";
              case PCI_VENDOR_ID_COMPEX:        return "Compex";
              case PCI_VENDOR_ID_RP:            return "Comtrol";
              case PCI_VENDOR_ID_CYCLADES:      return "Cyclades";
-             case PCI_VENDOR_ID_3DFX:          return "3DFX";
-             case PCI_VENDOR_ID_SIGMA_DESIGNS: return "Sigma Designs";
-             case PCI_VENDOR_ID_OPTIBASE:      return "Optibase Inc.";
+             case PCI_VENDOR_ID_3DFX:          return "3Dfx";
+             case PCI_VENDOR_ID_SIGMADES:      return "Sigma Designs";
+             case PCI_VENDOR_ID_OPTIBASE:      return "Optibase";
              case PCI_VENDOR_ID_SYMPHONY:      return "Symphony";
              case PCI_VENDOR_ID_TEKRAM:        return "Tekram";
              case PCI_VENDOR_ID_3DLABS:        return "3Dlabs";
              case PCI_VENDOR_ID_AVANCE:        return "Avance";
+             case PCI_VENDOR_ID_NETVIN:        return "NetVin";
              case PCI_VENDOR_ID_S3:            return "S3 Inc.";
              case PCI_VENDOR_ID_INTEL:         return "Intel";
+             case PCI_VENDOR_ID_KTI:           return "KTI";
              case PCI_VENDOR_ID_ADAPTEC:       return "Adaptec";
              case PCI_VENDOR_ID_ATRONICS:      return "Atronics";
-#if 0
-             case PCI_VENDOR_ID_HER:           return "Hercules";
-#endif
+             case PCI_VENDOR_ID_ARK:           return "ARK Logic";
              default:                          return "Unknown vendor";
        }
 }
index 997e658ee2259d7b3c439d4c7c6df2b38266ee04..d9179494f4c48d76958244a05ea67116ee1bd618 100644 (file)
@@ -64,7 +64,7 @@
 */
 
 /*
-**     26 July 1997, version 2.4
+**     21 August 1997, version 2.4a
 **
 **     Supported SCSI-II features:
 **         Synchronous negotiation
@@ -8801,7 +8801,7 @@ void ncr53c8xx_setup(char *str, int *ints)
                else if (!strncmp(cur, "safe:", 5) && val)
                        memcpy(&driver_setup, &driver_safe_setup, sizeof(driver_setup));
                else
-                       printf("ncr53c8xx_setup: unexpected boot option '%.*s' ignored\n", pc-cur+1, cur);
+                       printf("ncr53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
 
                if ((cur = strchr(cur, ',')) != NULL)
                        ++cur;
@@ -9293,7 +9293,7 @@ static int ncr53c8xx_pci_init(Scsi_Host_Template *tpnt,
        */
 #ifdef NCR_IOMAPPED
        request_region(io_port, 128, "ncr53c8xx");
-       device->slot.port = ioport;
+       device->slot.port = io_port;
 #else
        device->slot.reg = (struct ncr_reg *) remap_pci_mem((ulong) base, 128);
        if (!device->slot.reg)
index ba78224cc07f5db2a4ded6fcd08a92055b4a9563..6f8be172ddcd659a751fed281106c6464f13b6d4 100644 (file)
@@ -45,7 +45,7 @@
 /*
 **     Name and revision of the driver
 */
-#define SCSI_NCR_DRIVER_NAME           "ncr53c8xx - revision 2.4"
+#define SCSI_NCR_DRIVER_NAME           "ncr53c8xx - revision 2.4a"
 
 /*
 **     Check supported Linux versions
@@ -416,7 +416,7 @@ typedef struct {
  FE_WIDE|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM}           \
  ,                                                                     \
  {PCI_DEVICE_ID_NCR_53C860, 0xff, "860",  4,  8, 5,                    \
- FE_WIDE|FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_LDSTR|FE_PFEN|FE_RAM}        \
+ FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_LDSTR|FE_PFEN}               \
  ,                                                                     \
  {PCI_DEVICE_ID_NCR_53C875, 0x01, "875",  7, 16, 5,                    \
  FE_WIDE|FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM}\
index b4f73ebb1851f10b4ad36874082ea4d50441425a..ce385eba2d66bf5b43f8b635b58002b7eabec661 100644 (file)
@@ -9,6 +9,7 @@
 #include <asm/io.h>
 #include <asm/segment.h>
 #include <asm/system.h>
+#include <asm/page.h>
 
 #include <linux/errno.h>
 #include <linux/kernel.h>
@@ -28,7 +29,7 @@
 #define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ)
 #define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ)
 
-#define MAX_BUF 4096
+#define MAX_BUF PAGE_SIZE
 
 #define max(a,b) (((a) > (b)) ? (a) : (b))
 
@@ -78,12 +79,9 @@ static int ioctl_probe(struct Scsi_Host * host, void *buffer)
  * 
  * *(char *) ((int *) arg)[2] the actual command byte.   
  * 
- * Note that no more than MAX_BUF data bytes will be transfered.  Since
- * SCSI block device size is 512 bytes, I figured 1K was good.
- * but (WDE) changed it to 8192 to handle large bad track buffers.
- * ERY: I changed this to a dynamic allocation using scsi_malloc - we were
- * getting a kernel stack overflow which was crashing the system when we
- * were using 8192 bytes.
+ * Note that if more than MAX_BUF bytes are requested to be transfered,
+ * the ioctl will fail with error EINVAL.  MAX_BUF can be increased in
+ * the future by increasing the size that scsi_malloc will accept.
  * 
  * This size *does not* include the initial lengths that were passed.
  * 
@@ -205,8 +203,8 @@ static int ioctl_command(Scsi_Device *dev, void *buffer)
      * If the user needs to transfer more data than this, they
      * should use scsi_generics instead.
      */
-    if( inlen > MAX_BUF ) inlen = MAX_BUF;
-    if( outlen > MAX_BUF ) outlen = MAX_BUF;
+    if( inlen > MAX_BUF )  return -EINVAL;
+    if( outlen > MAX_BUF )  return -EINVAL;
 
     cmd_in = (char *) ( ((int *)buffer) + 2);
     opcode = get_user(cmd_in); 
index 229bc908781e0257a810ab083b59d04118f93bc3..b840acd67d52b40d39a8ffa64215f94911e107d0 100644 (file)
@@ -66,7 +66,9 @@ static int do_ioctl(int target, unsigned char * sr_cmd, void * buffer, unsigned
            printk("CDROM not ready.  Make sure there is a disc in the drive.\n");
            break;
        case ILLEGAL_REQUEST:
-           printk("CDROM (ioctl) reports ILLEGAL REQUEST.\n");
+         /* CDROMCLOSETRAY should not print an error for caddy drives. */
+           if (!(sr_cmd[0] == START_STOP && sr_cmd[4] == 0x03))
+             printk("CDROM (ioctl) reports ILLEGAL REQUEST.\n");
            break;
        default:
            printk("SCSI CD error: host %d id %d lun %d return code = %03x\n", 
index cdb6f9e9052859706ad7728394bd1564f286b7ff..eeb204d1eb05577b03b0aea0ee3a0849d9928dfc 100644 (file)
@@ -1,9 +1,8 @@
 *********************************************************
 * Readme.cards (this directory) contains some card     *
 * specific instructions.                               *
-* See http://www.4front-tech.com/usslite for most up    *
+* See http://www.4front-tech.com/ossfree for most up    *
 * to date info.                                         *
-* (European mirror http://personal.eunet.fi/pp/voxware) *
 *                                                      *
 * DON'T USE PROGRAMS FROM SND_UTIL PACKAGE EARLIER THAN *
 * snd-util-3.5 WITH THIS SOUND DRIVER VERSION.          *
index 19dbc96bd30637bd9551a94576603fcbebb712d9..faf1b40517ca02ef75221761cb6b8460f72237c9 100644 (file)
@@ -2,8 +2,7 @@ USS Lite version 3.5.4 release notes
 ------------------------------------
 
 Most up to date information about this driver is available from 
-http://www.4front-tech.com/usslite or http://personal.eunet.fi/pp/voxware
-(European mirror).
+http://www.4front-tech.com/ossfree.
 
 
 
@@ -24,7 +23,7 @@ Linux versions later than 2.0.x.
 
 Packages "snd-util-3.5.tar.gz" and "snd-data-0.1.tar.Z"
 contain useful utilities to be used with this driver.
-See http://www.4front-tech.com/usslite/getting.html for
+See http://www.4front-tech.com/ossfree/getting.html for
 download instructions.
 
 If you are looking for the installation instructions, please
@@ -35,7 +34,7 @@ Supported soundcards
 
 See Readme.cards.
 
-Please check http://www.4front-tech.com/usslite if you don't find
+Please check http://www.4front-tech.com/ossfree if you don't find
 your soundcard there.
 
 Contributors
@@ -113,7 +112,7 @@ If you have some problems
 =========================
 
 Read the sound HOWTO (sunsite.unc.edu:/pub/Linux/docs/...?).
-Also look at the home page (http://www.4front-tech.com/usslite). It may
+Also look at the home page (http://www.4front-tech.com/ossfree). It may
 contain info about some recent bug fixes.
 
 It's likely that you have some problems when trying to use the sound driver
@@ -167,8 +166,8 @@ Best regards,
 Hannu
 
 Hannu Savolainen
-hannu@voxware.pp.fi, hannu@4front-tech.com     
-(Please check http://www.4front-tech.com/usslite before mailing me).
+hannu@4front-tech.com  
+(Please check http://www.4front-tech.com/ossfree before mailing me).
 
 Snail mail:    Hannu Savolainen
                Hiekkalaiturintie 3 A 8
index 528c256adadaa15883636d07f5a34dad74acd851..ece7fe22429c55069c6a935450b38a6959ff6613 100644 (file)
@@ -3,7 +3,7 @@ Configuring version 3.5.4 (for Linux) with some most common soundcards
 
 IMPORTANT!     This document covers only cards that were "known" when
                this driver version was released. Please look at
-               http://www.4front-tech.com/usslite for info about
+               http://www.4front-tech.com/ossfree for info about
                cards introduced recently.
 
                The following covers mainly the "old" configuration
@@ -25,18 +25,18 @@ Cards that are not (fully) supported by this driver
 There are many soundcards which don't work with this driver
 version (v3.5). Support for some of them is expected to be
 available during/after summer 1996 (in version 3.6). Please check
-http://www.4front-tech.com/usslite for latest news. Please don't
+http://www.4front-tech.com/ossfree for latest news. Please don't
 mail me and ask about these cards. The unsupported cards are:
 
        - All PnP soundcards (SB PnP, GUS PnP, Soundscape PnP etc.)
                Schedule for availability of PnP soundcard support in
-               USS/Lite depends on progress made by kernel PnP team
+               OSS/Free depends on progress made by kernel PnP team
                (probably in Linux 2.1.xx versions). With Linux 2.0.x
                versions there are two ways to get PnP soundcards to work:
                - Use isapnptools, DOS, Win95 or PnP aware BIOS to wake up the
                card before starting the sound driver. See "Configuring PnP 
                soundcards" below for some hints.
-               - Support for SB PnP and GUS PnP is present in USS/Linux (the
+               - Support for SB PnP and GUS PnP is present in OSS/Linux (the
                commercial version of this driver).
        - Mwave soundcards and motherboards
                (Version 3.6 or 3.7. Depends on how fast I get
@@ -49,7 +49,7 @@ mail me and ask about these cards. The unsupported cards are:
        - Compaq Deskpro
                (Version 3.5.4-beta6 (already released))
        - Sound Galaxy Washington/Waverider
-               (Audio features already in USS/Linux (USS/Lite soon). 
+               (Audio features already in OSS/Linux (OSS/Free soon). 
                Can't promise the waverider synth since
                availability of chip specs is uncertain).
        - Yamaha OPL4 (on cards having _RAM_ for samples)
@@ -77,7 +77,7 @@ available for it (see information about CS4232 later in this document).
 PnP soundcards (as well as most other PnP ISA cards) are not supported
 by version 3.5 of this driver (Linux 1.3.xx and Linux 2.0.x). Proper
 support for them should be released during spring 96 
-(see http://www.4front-tech.com/usslite for latest info).
+(see http://www.4front-tech.com/ossfree for latest info).
 
 There is a method to get most of the PnP cards to work. The basic method
 is the following:
@@ -719,7 +719,7 @@ itself so you don't need to enable other drivers than SoundScape
 !!!!!      purposes. It WAS required to change /dev/dsp (a symlink) to !!!!
 !!!!!      point to /dev/dsp1.                                         !!!!
 !!!!!                                                                   !!!!
-!!!!!      This is not required with USS versions 3.5-beta6 and later  !!!!
+!!!!!      This is not required with OSS versions 3.5-beta6 and later  !!!!
 !!!!!      since there is now just one audio device file. Please       !!!!
 !!!!!      change /dev/dsp to point back to /dev/dsp0 if you are       !!!!
 !!!!!      upgrading from an earlier driver version using              !!!!
@@ -999,7 +999,7 @@ modular so making separately distributed drivers will be easier with it.
 Writing a driver for a new card is not possible if there are no 
 programming information available about the card. If you don't
 find your new card from this file, look from the home page 
-(http://www.4front-tech.com/usslite). Then please contact
+(http://www.4front-tech.com/ossfree). Then please contact
 manufacturer of the card and ask if they have (or are willing to)
 released technical details of the card. Do this before contacting me. I
 can only answer 'no' if there are no programming information available.
@@ -1020,7 +1020,7 @@ of this driver (see http://www.4Front-tech.com/uss.html for more info).
 There are some common audio chipsets that are not supported yet. For example
 Sierra Aria and IBM Mwave. It's possible that these architectures
 get some support in future but I can't make any promises. Just look
-at the home page (http://www.4front-tech.com/usslite/new_cards.html)
+at the home page (http://www.4front-tech.com/ossfree/new_cards.html)
 for latest info.
 
 Information about unsupported soundcards and chipsets is welcome as well
@@ -1029,12 +1029,11 @@ as free copies of soundcards, SDKs and operating systems.
 If you have any corrections and/or comments, please contact me.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
 
-Personal home page:       http://personal.eunet.fi/pp/voxware/hannu.html
-www home page of USS/Lite: http://www.4front-tech.com/usslite
-  European/Finnish mirror: http://personal.eunet.fi/pp/voxware
+Personal home page:       http://www.4front-tech.com/hannu.html
+www home page of OSS/Free: http://www.4front-tech.com/ossfree
 
 www home page of commercial
-Open Sound System drivers: http://www.4front-tech.com/uss.html
+Open Sound System drivers: http://www.4front-tech.com/oss.html
 
index 3f41060276f0bb247c54befc70f5a87e766db4ee..44b0273dcfe9f04eea0518fc3ff75dc1e2376f78 100644 (file)
@@ -67,13 +67,18 @@ Readme.cards for info about configuring the driver with your card. Also
 check for possible boot (insmod) time error messages in /var/adm/messages.
 
 - Other messages or problems
-Please check http://www.4front-tech.com/usslite for more info.
+Please check http://www.4front-tech.com/ossfree for more info.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
 
 ----------------- cut here ------------------------------
 #!/bin/sh
+echo Error: Read the notice in the beginning of this script before executing.
+exit -1
+Notice! Remove this notice and the above two lines before trying to execute.
+        Trying to run this script is normally useless. The device files are
+        almost certainly already set up correctly. 
 # *****************************************
 # * NOTICE!
 # *
index 2b48ee002d43f82da295986c41e4d3fcb57d17fd..a12da12726fd12ebfaf26fcb92c44bc69c56834d 100644 (file)
@@ -137,4 +137,4 @@ appear in the Hacker's Guide later.
 Don't hesitate to contact me in case you have questions or comments.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
index 546d81f8a86db4880c16a0fe4b0a0dbc3c3da476..6e42e5431a3190a17eec9c30e423574ed996b7e7 100644 (file)
@@ -1592,7 +1592,7 @@ sequencer_ioctl (int dev, struct fileinfo *file,
        return -(EIO);
 
       midi_dev = get_user ((int *) arg);
-      if (midi_dev >= max_mididev)
+      if (midi_dev < 0 || midi_dev >= max_mididev)
        return -(ENXIO);
 
       if (!midi_opened[midi_dev])
index da0e556afc25f9956c37eec842165b8c1315b036..a547a571d11f7a38c7086aea4e9be7aa7eec47d7 100644 (file)
@@ -543,14 +543,11 @@ void set_blocksize(kdev_t dev, int size)
 static inline int can_reclaim(struct buffer_head *bh, int size)
 {
        if (bh->b_count || 
-           buffer_protected(bh) || buffer_locked(bh))
+           buffer_protected(bh) ||
+           buffer_locked(bh) ||
+           mem_map[MAP_NR((unsigned long) bh->b_data)].count != 1 ||
+           buffer_dirty(bh))
                return 0;
-                        
-       if (mem_map[MAP_NR((unsigned long) bh->b_data)].count != 1 ||
-           buffer_dirty(bh)) {
-               /* WSH: don't attempt to refile here! */
-               return 0;
-       }
 
        if (bh->b_size != size)
                return 0;
@@ -559,13 +556,15 @@ static inline int can_reclaim(struct buffer_head *bh, int size)
 }
 
 /* find a candidate buffer to be reclaimed */
-static struct buffer_head *find_candidate(struct buffer_head *list,int *list_len,int size)
+static struct buffer_head *find_candidate(struct buffer_head *bh,
+                                         int *list_len, int size)
 {
-       struct buffer_head *bh;
+       int behind = 0;
+
+       if (!bh)
+               goto no_candidate;
        
-       for (bh = list; 
-            bh && (*list_len) > 0; 
-            bh = bh->b_next_free, (*list_len)--) {
+       for (; (*list_len) > 0; bh = bh->b_next_free, (*list_len)--) {
                if (size != bh->b_size) {
                        /* this provides a mechanism for freeing blocks
                           of other sizes, this is necessary now that we
@@ -575,21 +574,18 @@ static struct buffer_head *find_candidate(struct buffer_head *list,int *list_len
                                break;
                        continue;
                }
-
-               if (buffer_locked(bh) && 
-                   (bh->b_list == BUF_LOCKED || bh->b_list == BUF_LOCKED1)) {
-                       /* Buffers are written in the order they are placed 
-                          on the locked list. If we encounter a locked
-                          buffer here, this means that the rest of them
-                          are also locked */
-                       (*list_len) = 0;
-                       return NULL;
+               else if (buffer_locked(bh) && 
+                        (bh->b_list == BUF_LOCKED || bh->b_list == BUF_LOCKED1)) {
+                       if (behind++ > 10) {
+                               (*list_len) = 0;
+                               goto no_candidate;
+                       }
                }
-
-               if (can_reclaim(bh,size))
-                   return bh;
+               else if (can_reclaim(bh,size))
+                       return bh;
        }
 
+no_candidate:
        return NULL;
 }
 
@@ -662,6 +658,12 @@ repeat:
                }
                goto repeat;
        }
+
+       /* Dirty buffers should not overtake, wakeup_bdflush(1) calls
+          bdflush and sleeps, therefore kswapd does his important work. */
+       if ((nr_buffers_type[BUF_DIRTY] > nr_buffers * bdf_prm.b_un.nfract/100) ||
+           (nr_free_pages < min_free_pages))
+               wakeup_bdflush(1);
        
        /* Too bad, that was not enough. Try a little harder to grow some. */
        
@@ -672,18 +674,7 @@ repeat:
                };
        }
 
-#if 0
-       /*
-        * In order to protect our reserved pages, 
-        * return now if we got any buffers.
-        */
-       if (free_list[BUFSIZE_INDEX(size)])
-               return;
-
        /* and repeat until we find something good */
-       if (!grow_buffers(GFP_ATOMIC, size))
-               wakeup_bdflush(1);
-#endif
        wakeup_bdflush(1);
 
        /* decrease needed even if there is no success */
@@ -1717,7 +1708,7 @@ int bdflush(void * unused)
                 * dirty buffers, then make the next write to a
                 * loop device to be a blocking write.
                 * This lets us block--which we _must_ do! */
-               if (ndirty == 0 && nr_buffers_type[BUF_DIRTY] > 0) {
+               if (ndirty == 0 && nr_buffers_type[BUF_DIRTY] > 0 && wrta_cmd != WRITE) {
                        wrta_cmd = WRITE;
                        continue;
                }
@@ -1725,7 +1716,7 @@ int bdflush(void * unused)
                
                /* If there are still a lot of dirty buffers around, skip the sleep
                   and flush some more */
-               if(nr_buffers_type[BUF_DIRTY] <= nr_buffers * bdf_prm.b_un.nfract/100) {
+               if(ndirty == 0 || nr_buffers_type[BUF_DIRTY] <= nr_buffers * bdf_prm.b_un.nfract/100) {
                        wake_up(&bdflush_done);
                        current->signal = 0;
                        interruptible_sleep_on(&bdflush_wait);
index 9622a043d50cfbe56632892e62ed56c2e873d265..334c742314e43318e0689e8b0469cf76d4d80cd3 100644 (file)
@@ -128,6 +128,8 @@ static int posix_lock_file(struct file *filp, struct file_lock *caller,
                           unsigned int wait);
 static int posix_locks_deadlock(struct task_struct *my_task,
                                struct task_struct *blocked_task);
+static void posix_remove_locks(struct file_lock **before, struct task_struct *task);
+static void flock_remove_locks(struct file_lock **before, struct file *filp);
 
 static struct file_lock *locks_alloc_lock(struct file_lock *fl);
 static void locks_insert_lock(struct file_lock **pos, struct file_lock *fl);
@@ -281,7 +283,7 @@ int fcntl_getlk(unsigned int fd, struct flock *l)
 
        for (fl = filp->f_inode->i_flock; fl != NULL; fl = fl->fl_next) {
                if (!(fl->fl_flags & FL_POSIX))
-                       continue;
+                       break;
                if (posix_locks_conflict(&file_lock, fl)) {
                        flock.l_pid = fl->fl_owner->pid;
                        flock.l_start = fl->fl_start;
@@ -301,6 +303,8 @@ int fcntl_getlk(unsigned int fd, struct flock *l)
 
 /* Apply the lock described by l to an open file descriptor.
  * This implements both the F_SETLK and F_SETLKW commands of fcntl().
+ * It also emulates flock() in a pretty broken way for older C
+ * libraries.
  */
 int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l)
 {
@@ -354,9 +358,21 @@ int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l)
                break;
        case F_SHLCK:
        case F_EXLCK:
+#if 1
+/* warn a bit for now, but don't overdo it */
+{
+       static int count = 0;
+       if (!count) {
+               count=1;
                printk(KERN_WARNING
-                      "fcntl_setlk(): process %d (%s) requested broken flock() emulation\n",
+                      "fcntl_setlk() called by process %d (%s) with broken flock() emulation\n",
                       current->pid, current->comm);
+       }
+}
+#endif
+               if (!(filp->f_mode & 3))
+                       return (-EBADF);
+               break;
        default:
                return (-EINVAL);
        }
@@ -369,18 +385,27 @@ int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l)
 void locks_remove_locks(struct task_struct *task, struct file *filp)
 {
        struct file_lock *fl;
-       struct file_lock **before;
 
        /* For POSIX locks we free all locks on this file for the given task.
         * For FLOCK we only free locks on this *open* file if it is the last
         * close on that file.
         */
-       before = &filp->f_inode->i_flock;
+       if ((fl = filp->f_inode->i_flock) != NULL) {
+               if (fl->fl_flags & FL_POSIX)
+                       posix_remove_locks(&filp->f_inode->i_flock, task);
+               else
+                       flock_remove_locks(&filp->f_inode->i_flock, filp);
+       }
+
+       return;
+}
+
+static void posix_remove_locks(struct file_lock **before, struct task_struct *task)
+{
+       struct file_lock *fl;
 
        while ((fl = *before) != NULL) {
-               if (((fl->fl_flags & FL_POSIX) && (fl->fl_owner == task)) ||
-                   ((fl->fl_flags & FL_FLOCK) && (fl->fl_file == filp) &&
-                    (filp->f_count == 1)))
+               if (fl->fl_owner == task)
                        locks_delete_lock(before, 0);
                else
                        before = &fl->fl_next;
@@ -389,6 +414,20 @@ void locks_remove_locks(struct task_struct *task, struct file *filp)
        return;
 }
 
+static void flock_remove_locks(struct file_lock **before, struct file *filp)
+{
+       struct file_lock *fl;
+
+       while ((fl = *before) != NULL) {
+               if ((fl->fl_file == filp) && (filp->f_count == 1))
+                       locks_delete_lock(before, 0);
+               else
+                       before = &fl->fl_next;
+       }
+
+       return;
+}
+
 int locks_verify_locked(struct inode *inode)
 {
        /* Candidates for mandatory locking have the setgid bit set
@@ -417,13 +456,16 @@ int locks_mandatory_locked(struct inode *inode)
 {
        struct file_lock *fl;
 
+       /* If there are no FL_POSIX locks then go ahead. */
+       if (!(fl = inode->i_flock) || !(fl->fl_flags & FL_POSIX))
+               return (0);
+
        /* Search the lock list for this inode for any POSIX locks.
         */
-       for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
-               if (!(fl->fl_flags & FL_POSIX))
-                       continue;
+       while (fl != NULL) {
                if (fl->fl_owner != current)
                        return (-EAGAIN);
+               fl = fl->fl_next;
        }
        return (0);
 }
@@ -445,12 +487,14 @@ int locks_mandatory_area(int read_write, struct inode *inode,
        tfl.fl_end = offset + count - 1;
 
 repeat:
+       /* If there are no FL_POSIX locks then go ahead. */
+       if (!(fl = inode->i_flock) || !(fl->fl_flags & FL_POSIX))
+               return (0);
+
        /* Search the lock list for this inode for locks that conflict with
         * the proposed read/write.
         */
-       for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
-               if (!(fl->fl_flags & FL_POSIX))
-                       continue;
+       while (fl != NULL) {
                /* Block for writes against a "read" lock,
                 * and both reads and writes against a "write" lock.
                 */
@@ -475,6 +519,7 @@ repeat:
                                break;
                        goto repeat;
                }
+               fl = fl->fl_next;
        }
        return (0);
 }
@@ -497,6 +542,14 @@ static int posix_make_lock(struct file *filp, struct file_lock *fl,
        case F_UNLCK:
                fl->fl_type = l->l_type;
                break;
+       case F_SHLCK :
+               fl->fl_type = F_RDLCK;
+               fl->fl_flags |= FL_BROKEN;
+               break;
+       case F_EXLCK :
+               fl->fl_type = F_WRLCK;
+               fl->fl_flags |= FL_BROKEN;
+               break;
        default:
                return (0);
        }
@@ -569,8 +622,7 @@ static int posix_locks_conflict(struct file_lock *caller_fl, struct file_lock *s
        /* POSIX locks owned by the same process do not conflict with
         * each other.
         */
-       if (!(sys_fl->fl_flags & FL_POSIX) ||
-           (caller_fl->fl_owner == sys_fl->fl_owner))
+       if (caller_fl->fl_owner == sys_fl->fl_owner)
                return (0);
 
        return (locks_conflict(caller_fl, sys_fl));
@@ -584,8 +636,7 @@ static int flock_locks_conflict(struct file_lock *caller_fl, struct file_lock *s
        /* FLOCK locks referring to the same filp do not conflict with
         * each other.
         */
-       if (!(sys_fl->fl_flags & FL_FLOCK) ||
-           (caller_fl->fl_file == sys_fl->fl_file))
+       if (caller_fl->fl_file == sys_fl->fl_file)
                return (0);
 
        return (locks_conflict(caller_fl, sys_fl));
@@ -662,7 +713,11 @@ static int flock_lock_file(struct file *filp, struct file_lock *caller,
        int change = 0;
 
        before = &filp->f_inode->i_flock;
-       while (((fl = *before) != NULL) && (fl->fl_flags & FL_FLOCK)) {
+
+       if ((fl = *before) && (fl->fl_flags & FL_POSIX))
+               return (-EBUSY);
+
+       while ((fl = *before) != NULL) {
                if (caller->fl_file == fl->fl_file) {
                        if (caller->fl_type == fl->fl_type)
                                return (0);
@@ -681,10 +736,16 @@ static int flock_lock_file(struct file *filp, struct file_lock *caller,
        if ((new_fl = locks_alloc_lock(caller)) == NULL)
                return (-ENOLCK);
 repeat:
-       for (fl = filp->f_inode->i_flock; (fl != NULL) && (fl->fl_flags & FL_FLOCK);
-            fl = fl->fl_next) {
-               if (!flock_locks_conflict(new_fl, fl))
+       if ((fl = filp->f_inode->i_flock) && (fl->fl_flags & FL_POSIX)) {
+               locks_free_lock(new_fl);
+               return (-EBUSY);
+       }
+
+       while (fl != NULL) {
+               if (!flock_locks_conflict(new_fl, fl)) {
+                       fl = fl->fl_next;
                        continue;
+               }
                if (!wait) {
                        locks_free_lock(new_fl);
                        return (-EAGAIN);
@@ -738,11 +799,14 @@ static int posix_lock_file(struct file *filp, struct file_lock *caller,
 
        if (caller->fl_type != F_UNLCK) {
   repeat:
-               for (fl = filp->f_inode->i_flock; fl != NULL; fl = fl->fl_next) {
-                       if (!(fl->fl_flags & FL_POSIX))
-                               continue;
-                       if (!posix_locks_conflict(caller, fl))
+               if ((fl = filp->f_inode->i_flock) && (fl->fl_flags & FL_FLOCK))
+                       return (-EBUSY);
+
+               while (fl != NULL) {
+                       if (!posix_locks_conflict(caller, fl)) {
+                               fl = fl->fl_next;
                                continue;
+                       }
                        if (!wait)
                                return (-EAGAIN);
                        if (current->signal & ~current->blocked)
@@ -763,10 +827,12 @@ static int posix_lock_file(struct file *filp, struct file_lock *caller,
        
        before = &filp->f_inode->i_flock;
 
+       if ((*before != NULL) && ((*before)->fl_flags & FL_FLOCK))
+               return (-EBUSY);
+
        /* First skip locks owned by other processes.
         */
-       while ((fl = *before) && (!(fl->fl_flags & FL_POSIX) ||
-                                 (caller->fl_owner != fl->fl_owner))) {
+       while ((fl = *before) && (caller->fl_owner != fl->fl_owner)) {
                before = &fl->fl_next;
        }
 
@@ -964,6 +1030,7 @@ static char *lock_get_status(struct file_lock *fl, int id, char *pfx)
        p += sprintf(p, "%d:%s ", id, pfx);
        if (fl->fl_flags & FL_POSIX) {
                p += sprintf(p, "%6s %s ",
+                            (fl->fl_flags & FL_BROKEN) ? "BROKEN" :
                             (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ",
                             (IS_MANDLOCK(inode) &&
                              (inode->i_mode & (S_IXGRP | S_ISGID)) == S_ISGID) ?
index 446d5be9d81e102110fa936cd44f1dd7df83ae1e..689963337b9be9865ad1f30c35c0d9fe8e99962d 100644 (file)
@@ -764,8 +764,7 @@ static int do_remount_sb(struct super_block *sb, int flags, char *data)
                if (retval)
                        return retval;
        }
-       sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) |
-               (flags & MS_RMT_MASK);
+       sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
        vfsmnt = lookup_vfsmnt(sb->s_dev);
        if (vfsmnt)
                vfsmnt->mnt_flags = sb->s_flags;
index 05f7d789e5bc0c89b9100b8d865c1a641000f49d..4fe28f511b5a0b3e6704b41f16a80287fe181f5e 100644 (file)
@@ -79,7 +79,7 @@ extern int max_files, nr_files;
 /*
  * Flags that can be altered by MS_REMOUNT
  */
-#define MS_RMT_MASK (MS_RDONLY|MS_MANDLOCK)
+#define MS_RMT_MASK (MS_RDONLY|MS_MANDLOCK|MS_NOATIME)
 
 /*
  * Magic mount flag number. Has to be or-ed to the flag values.
index 5e8f35b6ada0484fcdde76640e0251be44143104..dba8330295a39ac15872d48419763061475d65db 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: isdn.h,v 1.30 1997/06/17 13:07:23 hipp Exp $
+/* $Id: isdn.h,v 1.32 1997/08/21 09:49:46 fritz Exp $
  *
  * Main header for the Linux ISDN subsystem (linklevel).
  *
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
  * $Log: isdn.h,v $
+ * Revision 1.32  1997/08/21 09:49:46  fritz
+ * Increased NET_DV
+ *
+ * Revision 1.31  1997/06/22 11:57:07  fritz
+ * Added ability to adjust slave triggerlevel.
+ *
  * Revision 1.30  1997/06/17 13:07:23  hipp
  * compression changes , MP changes
  *
@@ -222,7 +228,7 @@ typedef struct {
   int  outgoing;
 } isdn_net_ioctl_phone;
 
-#define NET_DV 0x03 /* Data version for net_cfg     */
+#define NET_DV 0x04 /* Data version for net_cfg     */
 #define TTY_DV 0x04 /* Data version for iprofd etc. */
 
 typedef struct {
@@ -239,7 +245,6 @@ typedef struct {
   int  exclusive;    /* Channel, if bound exclusive           */
   int  dialmax;      /* Dial Retry-Counter                    */
   int  slavedelay;   /* Delay until slave starts up           */
-  int  triggercps;   /* BogoCPS needed for triggering slave   */
   int  cbdelay;      /* Delay before Callback                 */
   int  chargehup;    /* Flag: Charge-Hangup                   */
   int  ihup;         /* Flag: Hangup-Timeout on incoming line */
@@ -248,6 +253,7 @@ typedef struct {
   int  cbhup;        /* Flag: Reject Call before Callback     */
   int  pppbind;      /* ippp device for bindings              */
   int  chargeint;    /* Use fixed charge interval length      */
+  int  triggercps;   /* BogoCPS needed for triggering slave   */
 } isdn_net_ioctl_cfg;
 
 #ifdef __KERNEL__
index ab5a759fcf4053ac3675f96e6082a5ddd1dcd7f6..9a87ec069d739c392c511b49e190a2fe8520dc05 100644 (file)
@@ -295,7 +295,7 @@ extern unsigned long get_unmapped_area(unsigned long, unsigned long);
 
 /* filemap.c */
 extern unsigned long page_unuse(unsigned long);
-extern int shrink_mmap(int, int);
+extern int shrink_mmap(int, int, int);
 extern void truncate_inode_pages(struct inode *, unsigned long);
 
 #define GFP_BUFFER     0x00
index ec81a7778532c16703f1f0972dc2ce9628137902..2a29a90f24881ab584f8778aa5940619b9eafb62 100644 (file)
  */
 #define PCI_VENDOR_ID_COMPAQ           0x0e11
 #define PCI_DEVICE_ID_COMPAQ_1280      0x3033
+#define PCI_DEVICE_ID_COMPAQ_NETELL100 0xae32
+#define PCI_DEVICE_ID_COMPAQ_NETELL10  0xae34
+#define PCI_DEVICE_ID_COMPAQ_NETFLEX3  0xae35
 #define PCI_DEVICE_ID_COMPAQ_THUNDER   0xf130
 
 #define PCI_VENDOR_ID_NCR              0x1000
 #define PCI_DEVICE_ID_ATI_210888CX     0x4358
 #define PCI_DEVICE_ID_ATI_215GT                0x4754
 #define PCI_DEVICE_ID_ATI_210888GX     0x4758
+#define PCI_DEVICE_ID_ATI_264VT                0x5654
 
 #define PCI_VENDOR_ID_VLSI             0x1004
 #define PCI_DEVICE_ID_VLSI_82C592      0x0005
 #define PCI_DEVICE_ID_VLSI_82C593      0x0006
 #define PCI_DEVICE_ID_VLSI_82C594      0x0007
 #define PCI_DEVICE_ID_VLSI_82C597      0x0009
+#define PCI_DEVICE_ID_VLSI_VAS96011    0x0702
 
 #define PCI_VENDOR_ID_ADL              0x1005
 #define PCI_DEVICE_ID_ADL_2301         0x2301
 #define PCI_DEVICE_ID_CIRRUS_5434_8    0x00a8
 #define PCI_DEVICE_ID_CIRRUS_5436      0x00ac
 #define PCI_DEVICE_ID_CIRRUS_5446      0x00b8
+#define PCI_DEVICE_ID_CIRRUS_5480      0x00bc
+#define PCI_DEVICE_ID_CIRRUS_5464      0x00d4
+#define PCI_DEVICE_ID_CIRRUS_5465      0x00d6
 #define PCI_DEVICE_ID_CIRRUS_6729      0x1100
+#define PCI_DEVICE_ID_CIRRUS_6832      0x1110
 #define PCI_DEVICE_ID_CIRRUS_7542      0x1200
 #define PCI_DEVICE_ID_CIRRUS_7543      0x1202
 #define PCI_DEVICE_ID_CIRRUS_7541      0x1204
 
 #define PCI_VENDOR_ID_IBM              0x1014
+#define PCI_DEVICE_ID_IBM_FIRE_CORAL   0x000a
 #define PCI_DEVICE_ID_IBM_82G2675      0x001d
 #define PCI_DEVICE_ID_IBM_82351                0x0022
 
 #define PCI_DEVICE_ID_MATROX_MGA_2     0x0518
 #define PCI_DEVICE_ID_MATROX_MIL       0x0519
 #define PCI_DEVICE_ID_MATROX_MYS       0x051A
+#define PCI_DEVICE_ID_MATROX_MIL_2     0x051b
 #define PCI_DEVICE_ID_MATROX_MGA_IMP   0x0d10
 
 #define PCI_VENDOR_ID_CT               0x102c
 #define PCI_DEVICE_ID_SI_501           0x0406
 #define PCI_DEVICE_ID_SI_496           0x0496
 #define PCI_DEVICE_ID_SI_601           0x0601
+#define PCI_DEVICE_ID_SI_5107          0x5107
 #define PCI_DEVICE_ID_SI_5511          0x5511
 #define PCI_DEVICE_ID_SI_5513          0x5513
 #define PCI_DEVICE_ID_SI_5571          0x5571
 #define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER    0x1040
 #define PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT     0x8130
 
+#define PCI_VENDOR_ID_TI               0x104c
+#define PCI_DEVICE_ID_TI_PCI1130       0xac12
+#define PCI_DEVICE_ID_TI_PCI1131       0xac15
+
 #define PCI_VENDOR_ID_OAK              0x104e
 #define PCI_DEVICE_ID_OAK_OTI107       0x0107
 
 #define PCI_VENDOR_ID_X                        0x1061
 #define PCI_DEVICE_ID_X_AGX016         0x0001
 
+#define PCI_VENDOR_ID_APPLE            0x106b
+#define PCI_DEVICE_ID_APPLE_BANDIT     0x0001
+#define PCI_DEVICE_ID_APPLE_GC         0x0002
+#define PCI_DEVICE_ID_APPLE_HYDRA      0x000e
+
 #define PCI_VENDOR_ID_NEXGEN           0x1074
 #define PCI_DEVICE_ID_NEXGEN_82C501    0x4e78
 
 #define PCI_VENDOR_ID_FOREX            0x1083
 
 #define PCI_VENDOR_ID_OLICOM           0x108d
+#define PCI_DEVICE_ID_OLICOM_OC3136    0x0001
+#define PCI_DEVICE_ID_OLICOM_OC2315    0x0011
+#define PCI_DEVICE_ID_OLICOM_OC2325    0x0012
+#define PCI_DEVICE_ID_OLICOM_OC2183    0x0013
+#define PCI_DEVICE_ID_OLICOM_OC2326    0x0014
+#define PCI_DEVICE_ID_OLICOM_OC6151    0x0021
 
 #define PCI_VENDOR_ID_CMD              0x1095
 #define PCI_DEVICE_ID_CMD_640          0x0640
+#define PCI_DEVICE_ID_CMD_643          0x0643
 #define PCI_DEVICE_ID_CMD_646          0x0646
+#define PCI_DEVICE_ID_CMD_670          0x0670
 
 #define PCI_VENDOR_ID_VISION           0x1098
 #define PCI_DEVICE_ID_VISION_QD8500    0x0001
 #define PCI_DEVICE_ID_WINBOND_82C105   0x0105
 #define PCI_DEVICE_ID_WINBOND_83C553   0x0565
 
+#define PCI_VENDOR_ID_DATABOOK         0x10b3
+#define PCI_DEVICE_ID_DATABOOK_87144   0xb106
+
 #define PCI_VENDOR_ID_3COM             0x10b7
 #define PCI_DEVICE_ID_3COM_3C590       0x5900
 #define PCI_DEVICE_ID_3COM_3C595TX     0x5950
 #define PCI_DEVICE_ID_3COM_3C900COMBO  0x9001
 #define PCI_DEVICE_ID_3COM_3C905TX     0x9050
 
+#define PCI_VENDOR_ID_SMC              0x10b8
+
 #define PCI_VENDOR_ID_AL               0x10b9
 #define PCI_DEVICE_ID_AL_M1445         0x1445
 #define PCI_DEVICE_ID_AL_M1449         0x1449
 #define PCI_DEVICE_ID_AL_M1513         0x1513
 #define PCI_DEVICE_ID_AL_M4803         0x5215
 
+#define PCI_VENDOR_ID_MITSUBISHI       0x10ba
+
 #define PCI_VENDOR_ID_NEOMAGIC          0x10c8
 #define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_NM2070 0x0001
+#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128V 0x0002
 
 #define PCI_VENDOR_ID_ASP              0x10cd
 #define PCI_DEVICE_ID_ASP_ABP940       0x1200
 
 #define PCI_VENDOR_ID_REALTEK          0x10ec
 #define PCI_DEVICE_ID_REALTEK_8029     0x8029
+#define PCI_DEVICE_ID_REALTEK_8129     0x8129
+
+#define PCI_VENDOR_ID_TRUEVISION       0x10fa
+#define PCI_DEVICE_ID_TRUEVISION_T1000 0x000c
 
 #define PCI_VENDOR_ID_INIT             0x1101
 #define PCI_DEVICE_ID_INIT_320P                0x9100
 #define PCI_DEVICE_ID_VIA_82C576       0x0576
 #define PCI_DEVICE_ID_VIA_82C585       0x0585
 #define PCI_DEVICE_ID_VIA_82C586_0     0x0586
+#define PCI_DEVICE_ID_VIA_82C926       0x0926
 #define PCI_DEVICE_ID_VIA_82C416       0x1571
 
 #define PCI_VENDOR_ID_VORTEX           0x1119
 #define PCI_VENDOR_ID_IMAGINGTECH      0x112f
 #define PCI_DEVICE_ID_IMAGINGTECH_ICPCI        0x0000
 
+#define PCI_VENDOR_ID_PHILIPS          0x1131
+#define PCI_DEVICE_ID_PHILIPS_SAA7146  0x7146
+
 #define PCI_VENDOR_ID_PLX              0x113c
 #define PCI_DEVICE_ID_PLX_9060         0x0001
 
 #define PCI_VENDOR_ID_MUTECH           0x1159
 #define PCI_DEVICE_ID_MUTECH_MV1000    0x0001
 
+#define PCI_VENDOR_ID_RENDITION                0x1163
+#define PCI_DEVICE_ID_RENDITION_VERITE 0x0001
+
 #define PCI_VENDOR_ID_TOSHIBA          0x1179
 #define PCI_DEVICE_ID_TOSHIBA_601      0x0601
 
+#define PCI_VENDOR_ID_RICOH            0x1180
+#define PCI_DEVICE_ID_RICOH_RL5C466    0x0466
+
 #define PCI_VENDOR_ID_ZEITNET          0x1193
 #define PCI_DEVICE_ID_ZEITNET_1221     0x0001
 #define PCI_DEVICE_ID_ZEITNET_1225     0x0002
 
 #define PCI_VENDOR_ID_OMEGA            0x119b
-#define PCI_DEVICE_ID_OMEGA_PCMCIA             0x1221
+#define PCI_DEVICE_ID_OMEGA_82C092G    0x1221
+
+#define PCI_VENDOR_ID_NP               0x11bc
+#define PCI_DEVICE_ID_NP_PCI_FDDI      0x0001
 
 #define PCI_VENDOR_ID_SPECIALIX                0x11cb
 #define PCI_DEVICE_ID_SPECIALIX_XIO    0x4000
 #define PCI_DEVICE_ID_SPECIALIX_RIO    0x8000
 
+#define PCI_VENDOR_ID_IKON             0x11d5
+#define PCI_DEVICE_ID_IKON_10115       0x0115
+#define PCI_DEVICE_ID_IKON_10117       0x0117
+
 #define PCI_VENDOR_ID_ZORAN            0x11de
+#define PCI_DEVICE_ID_ZORAN_36057      0x6057
 #define PCI_DEVICE_ID_ZORAN_36120      0x6120
 
 #define PCI_VENDOR_ID_COMPEX           0x11f6
 #define PCI_VENDOR_ID_3DFX             0x121a
 #define PCI_DEVICE_ID_3DFX_VOODOO      0x0001
 
-#define PCI_VENDOR_ID_SIGMA_DESIGNS    0x1236
-#define PCI_DEVICE_ID_SD_REALMAGIC64GX 0x6401
+#define PCI_VENDOR_ID_SIGMADES         0x1236
+#define PCI_DEVICE_ID_SIGMADES_6425    0x6401
 
 #define PCI_VENDOR_ID_OPTIBASE         0x1255
 #define PCI_DEVICE_ID_OPTIBASE_FORGE   0x1110
 
 #define PCI_VENDOR_ID_3DLABS           0x3d3d
 #define PCI_DEVICE_ID_3DLABS_300SX     0x0001
+#define PCI_DEVICE_ID_3DLABS_500TX     0x0002
 #define PCI_DEVICE_ID_3DLABS_DELTA     0x0003
 #define PCI_DEVICE_ID_3DLABS_PERMEDIA  0x0004
 
 #define PCI_VENDOR_ID_AVANCE           0x4005
+#define PCI_DEVICE_ID_AVANCE_ALG2064   0x2064
 #define PCI_DEVICE_ID_AVANCE_2302      0x2302
 
+#define PCI_VENDOR_ID_NETVIN           0x4a14
+#define PCI_DEVICE_ID_NETVIN_NV5000SC  0x5000
+
 #define PCI_VENDOR_ID_S3               0x5333
 #define PCI_DEVICE_ID_S3_PLATO_PXS     0x0551
 #define PCI_DEVICE_ID_S3_ViRGE         0x5631
 #define PCI_DEVICE_ID_INTEL_82371_0    0x122e
 #define PCI_DEVICE_ID_INTEL_82371_1    0x1230
 #define PCI_DEVICE_ID_INTEL_82371MX    0x1234
-#define PCI_DEVICE_ID_INTEL_82430MX    0x1235
+#define PCI_DEVICE_ID_INTEL_82437MX    0x1235
 #define PCI_DEVICE_ID_INTEL_82441      0x1237
 #define PCI_DEVICE_ID_INTEL_82439      0x1250
 #define PCI_DEVICE_ID_INTEL_82371SB_0  0x7000
index a45a48b482c1e204605259d35059c6f2b49ad492..2aae0b9927d41f4fb26cecae359e491b55f5bb50 100644 (file)
@@ -533,7 +533,8 @@ static void exit_notify(void)
 
                p->p_pptr = p->p_opptr;
                p->p_osptr = p->p_pptr->p_cptr;
-               p->p_osptr->p_ysptr = p;
+               if (p->p_osptr)
+                       p->p_osptr->p_ysptr = p;
                p->p_pptr->p_cptr = p;
                if (p->state == TASK_ZOMBIE)
                        notify_parent(p, p->exit_signal);
index 931b52b4c785595a3e9899bffc72169e072b4b7a..171f8d2293f5af1a11445132577ff6c88b8a914e 100644 (file)
@@ -15,7 +15,7 @@
  * 1993-10-08    Torsten Duwe
  *      adjtime interface update and CMOS clock write code
  * 1995-08-13    Torsten Duwe
- *      kernel PLL updated to 1994-12-13 specs (rfc-1489)
+ *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
  */
 
 #include <linux/errno.h>
index 32df5f2e7b3120ddb6581cb8f637b71c3ce46bf8..a682acf1f0d2470d8da738162f1de239042f08cd 100644 (file)
@@ -114,7 +114,7 @@ repeat:
        }
 }
 
-int shrink_mmap(int priority, int dma)
+int shrink_mmap(int priority, int dma, int can_do_io)
 {
        static int clock = 0;
        struct page * page;
@@ -174,7 +174,7 @@ int shrink_mmap(int priority, int dma)
                                }
 
                                /* is it a buffer cache page? */
-                               if (bh && try_to_free_buffer(bh, &bh, 6))
+                               if (can_do_io && bh && try_to_free_buffer(bh, &bh, 6))
                                        return 1;
                                break;
 
index 6c3e08e09aab3b9c32e7f886c38edf08d5c55589..dcb20e4068078f40815a4a7f2e4160427d543b34 100644 (file)
@@ -214,7 +214,7 @@ repeat:
                return 0;
        }
        restore_flags(flags);
-       if (priority != GFP_BUFFER && try_to_free_page(priority, dma, 1))
+       if (try_to_free_page(priority, dma, 1))
                goto repeat;
        return 0;
 }
index 5eaa8ec58368049569c8cf83b279286743dff69e..b32551e383cff38eb8023ad78b8aa62a01552848 100644 (file)
@@ -31,7 +31,7 @@
 /*
  * To check memory consuming code elsewhere set this to 1
  */
-#define MM_DEBUG 0
+/* #define MM_DEBUG */
 
 /* 
  * When are we next due for a page scan? 
@@ -80,7 +80,7 @@ static void init_swap_timer(void);
  * have died while we slept).
  */
 static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struct* vma,
-       unsigned long address, pte_t * page_table, int dma, int wait)
+       unsigned long address, pte_t * page_table, int dma, int wait, int can_do_io)
 {
        pte_t pte;
        unsigned long entry;
@@ -112,6 +112,8 @@ static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struc
        if (page_map->age)
                return 0;
        if (pte_dirty(pte)) {
+               if(!can_do_io)
+                       return 0;
                if (vma->vm_ops && vma->vm_ops->swapout) {
                        pid_t pid = tsk->pid;
                        vma->vm_mm->rss--;
@@ -169,7 +171,8 @@ static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struc
  */
 
 static inline int swap_out_pmd(struct task_struct * tsk, struct vm_area_struct * vma,
-       pmd_t *dir, unsigned long address, unsigned long end, int dma, int wait)
+       pmd_t *dir, unsigned long address, unsigned long end, int dma, int wait,
+       int can_do_io)
 {
        pte_t * pte;
        unsigned long pmd_end;
@@ -191,7 +194,8 @@ static inline int swap_out_pmd(struct task_struct * tsk, struct vm_area_struct *
        do {
                int result;
                tsk->swap_address = address + PAGE_SIZE;
-               result = try_to_swap_out(tsk, vma, address, pte, dma, wait);
+               result = try_to_swap_out(tsk, vma, address, pte, dma, wait,
+                                        can_do_io);
                if (result)
                        return result;
                address += PAGE_SIZE;
@@ -201,7 +205,8 @@ static inline int swap_out_pmd(struct task_struct * tsk, struct vm_area_struct *
 }
 
 static inline int swap_out_pgd(struct task_struct * tsk, struct vm_area_struct * vma,
-       pgd_t *dir, unsigned long address, unsigned long end, int dma, int wait)
+       pgd_t *dir, unsigned long address, unsigned long end, int dma, int wait,
+       int can_do_io)
 {
        pmd_t * pmd;
        unsigned long pgd_end;
@@ -221,7 +226,8 @@ static inline int swap_out_pgd(struct task_struct * tsk, struct vm_area_struct *
                end = pgd_end;
        
        do {
-               int result = swap_out_pmd(tsk, vma, pmd, address, end, dma, wait);
+               int result = swap_out_pmd(tsk, vma, pmd, address, end, dma, wait,
+                                         can_do_io);
                if (result)
                        return result;
                address = (address + PMD_SIZE) & PMD_MASK;
@@ -231,7 +237,7 @@ static inline int swap_out_pgd(struct task_struct * tsk, struct vm_area_struct *
 }
 
 static int swap_out_vma(struct task_struct * tsk, struct vm_area_struct * vma,
-       pgd_t *pgdir, unsigned long start, int dma, int wait)
+       pgd_t *pgdir, unsigned long start, int dma, int wait, int can_do_io)
 {
        unsigned long end;
 
@@ -242,7 +248,8 @@ static int swap_out_vma(struct task_struct * tsk, struct vm_area_struct * vma,
 
        end = vma->vm_end;
        while (start < end) {
-               int result = swap_out_pgd(tsk, vma, pgdir, start, end, dma, wait);
+               int result = swap_out_pgd(tsk, vma, pgdir, start, end, dma, wait,
+                                         can_do_io);
                if (result)
                        return result;
                start = (start + PGDIR_SIZE) & PGDIR_MASK;
@@ -251,7 +258,7 @@ static int swap_out_vma(struct task_struct * tsk, struct vm_area_struct * vma,
        return 0;
 }
 
-static int swap_out_process(struct task_struct * p, int dma, int wait)
+static int swap_out_process(struct task_struct * p, int dma, int wait, int can_do_io)
 {
        unsigned long address;
        struct vm_area_struct* vma;
@@ -272,7 +279,8 @@ static int swap_out_process(struct task_struct * p, int dma, int wait)
                address = vma->vm_start;
 
        for (;;) {
-               int result = swap_out_vma(p, vma, pgd_offset(p->mm, address), address, dma, wait);
+               int result = swap_out_vma(p, vma, pgd_offset(p->mm, address), address, dma, wait,
+                                         can_do_io);
                if (result)
                        return result;
                vma = vma->vm_next;
@@ -284,7 +292,7 @@ static int swap_out_process(struct task_struct * p, int dma, int wait)
        return 0;
 }
 
-static int swap_out(unsigned int priority, int dma, int wait)
+static int swap_out(unsigned int priority, int dma, int wait, int can_do_io)
 {
        static int swap_task;
        int loop, counter, shfrv;
@@ -357,7 +365,7 @@ static int swap_out(unsigned int priority, int dma, int wait)
                }
                if (!--p->swap_cnt)
                        swap_task++;
-               switch (swap_out_process(p, dma, wait)) {
+               switch (swap_out_process(p, dma, wait, can_do_io)) {
                        case 0:
                                if (p->state == TASK_STOPPED)
                                        /* Stopped task occupy nonused ram */
@@ -391,24 +399,30 @@ int try_to_free_page(int priority, int dma, int wait)
 {
        static int state = 0;
        int i=6;
-       int stop;
+       int stop, can_do_io;
 
        /* we don't try as hard if we're not waiting.. */
        stop = 3;
+       can_do_io = 1;
        if (wait)
                stop = 0;
+       if (priority == GFP_BUFFER) {
+               /* bdflush() should do the rest if we fail */
+               stop = 3;
+               can_do_io = 0;
+       }
        switch (state) {
                do {
                case 0:
-                       if (shrink_mmap(i, dma))
+                       if (shrink_mmap(i, dma, can_do_io))
                                return 1;
                        state = 1;
                case 1:
-                       if (shm_swap(i, dma))
+                       if (can_do_io && shm_swap(i, dma))
                                return 1;
                        state = 2;
                default:
-                       if (swap_out(i, dma, wait))
+                       if (swap_out(i, dma, wait, can_do_io))
                                return 1;
                        state = 0;
                i--;
index f22bbce757d97b288fce4b21dda0ec644e5518cf..5bf007792c4a4acdcd5395cde6eaa51de0d58337 100644 (file)
@@ -1418,7 +1418,7 @@ void br_bpdu(struct sk_buff *skb) /* consumes skb */
                return;
        }
                
-       bpdu = (Tcn_bpdu *)skb->data + ETH_HLEN;
+       bpdu = (Tcn_bpdu *) (skb->data + ETH_HLEN);
        switch (bpdu->type) {
                case BPDU_TYPE_CONFIG:
                        received_config_bpdu(port, (Config_bpdu *)bpdu);
index a417ac82c900274b7326bdd0258ad07ad27f70e6..d44711ec495ed222d7d0ab6ac00c02d61a2b67ec 100644 (file)
@@ -130,9 +130,9 @@ static struct fib_info      *fib_info_list;
  * Backlogging.
  */
 
-#define RT_BH_REDIRECT         0
-#define RT_BH_GARBAGE_COLLECT  1
-#define RT_BH_FREE             2
+#define RT_BH_REDIRECT         1
+#define RT_BH_GARBAGE_COLLECT  2
+#define RT_BH_FREE             4
 
 struct rt_req
 {