diff -u --recursive --new-file v1.3.51/linux/Documentation/Configure.help linux/Documentation/Configure.help --- v1.3.51/linux/Documentation/Configure.help Wed Dec 27 09:12:12 1995 +++ linux/Documentation/Configure.help Fri Dec 29 15:15:56 1995 @@ -317,13 +317,20 @@ not sure, say N; This option will make the kernel use some instructions that are only available on 486+ machines. +Enable loadable module support +CONFIG_MODULES + Kernel modules are small pieces of compiled code which can be + inserted in or removed from the running kernel, using the + programs insmod and rmmod. This is described in the file + Documentation/modules.txt. Modules can be device drivers, file + systems, binary executable formats, and so on. If you think that + you may want to make use of modules with this kernel in the future, + then say Y here. + Set version information on all symbols for modules CONFIG_MODVERSIONS - Kernel modules are pieces of code which can be inserted in or - removed from the running kernel, using the programs insmod and - rmmod. This is described in the file - Documentation/modules.txt. Usually, modules have to be recompiled - whenever you switch to a new kernel. Enabling this option allows you + Usually, modules have to be recompiled whenever you + switch to a new kernel. Enabling this option allows you to keep using the same modules even after compiling a new kernel; this requires the program modprobe. All the software needed for module support is in the modules package in @@ -813,14 +820,16 @@ Future Domain 16xx SCSI support CONFIG_SCSI_FUTURE_DOMAIN - This is support for an SCSI host adaptor. It is explained in section - 3.7 of the SCSI-HOWTO, available via ftp (user: anonymous) at - sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it doesn't work out of - the box, you may have to change some settings in - drivers/scsi/fdomain.h. This driver is also available as a module ( - = code which can be inserted in and removed from the running kernel - whenever you want). If you want to compile it as a module, say M - here and read Documentation/modules.txt. + This is support for Future Domain's 16-bit SCSI host adaptors + (TMC-1660/1680, TMC-1650/1670, TMC-3260) and other adaptors based on the + Future Domain chipsets (Quantum ISA-200S, ISA-250MG; and at least one IBM + board). It is explained in section 3.7 of the SCSI-HOWTO, available via + ftp (user: anonymous) at sunsite.unc.edu:/pub/Linux/docs/HOWTO. If it + doesn't work out of the box, you may have to change some settings in + drivers/scsi/fdomain.h. This driver is also available as a module ( = + code which can be inserted in and removed from the running kernel + whenever you want). If you want to compile it as a module, say M here and + read Documentation/modules.txt. Generic NCR5380 SCSI support CONFIG_SCSI_GENERIC_NCR5380 @@ -2182,6 +2191,54 @@ CONFIG_SUN_ZS This driver does not exist at this point, so you might as well say N. + +Advanced Power Management +CONFIG_APM + This driver provides APM support on machines with an APM-compliant 32-bit + BIOS. Specifically, the time will be reset after a USER RESUME + operation, the /proc/apm device will provide battery status information, + and ioctls are provided to put the machine in STANDBY or SUSPEND mode. + This is most useful on laptops with a compliant BIOS. + +Ignore USER SUSPEND +CONFIG_APM_IGNORE_USER_SUSPEND + This option will ignore USER SUSPEND requests. On machines with a + compliant APM BIOS, this is never what you want to do. However, this is + necessary on the NEC Versa M series, which generates these when resuming + from SYSTEM SUSPEND. Enabling this on other laptops may cause the laptop + to generate a CRITICAL SUSPEND when an appropriate USER SUSPEND is + ignored -- this may prevent the APM driver from updating the system time + on a RESUME. + +Enable APM features +CONFIG_APM_DO_ENABLE + Enable APM features at boot time. From page 36 of the APM BIOS + specification: "When disabled, the APM BIOS does not automatically power + manage devices, enter the Standby State, enter the Suspend State, or take + power saving steps in response to CPU Idle calls." This driver will make + CPU Idle calls when Linux is idle (unless this feature is turned off -- + see below). This should always save battery power, but more complicated + APM features will be dependent on your BIOS implementation. You may need + to turn this option off if your computer hangs at boot time when using + APM support, or if it beeps continuously instead of suspending. Turn + this off if you have a NEC UltraLite Versa 33/C or a Toshiba T400CDT. + This is off by default since most machines do fine without this feature. + +Do CPU IDLE calls +CONFIG_APM_CPU_IDLE + Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop. On + some machines, this can activate improved power savings, such as a slowed + CPU clock rate, when the machine is idle. These idle call is made after + the idle loop has run for some length of time (e.g., 333 mS). On some + machines, this will cause a hang at boot time or whenever the CPU becomes + idle. (On machines with more than one CPU, this option does nothing.) + +Black display +CONFIG_APM_DISPLAY_BLANK + Enable console blanking using the APM. Some laptops can use this to turn + off the LCD backlight when the VC screen blanker blanks the screen. Note + that this is only used by the VC screen blanker, and won't turn off the + backlight when using X11. Sound card support CONFIG_SOUND diff -u --recursive --new-file v1.3.51/linux/Makefile linux/Makefile --- v1.3.51/linux/Makefile Wed Dec 27 09:12:12 1995 +++ linux/Makefile Fri Dec 29 16:21:49 1995 @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 3 -SUBLEVEL = 51 +SUBLEVEL = 52 ARCH = i386 @@ -243,7 +243,7 @@ $(MAKE) linuxsubdirs SUBDIRS=net MODFLAGS = -DMODULE - +ifdef CONFIG_MODULES ifdef CONFIG_MODVERSIONS MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h endif @@ -272,6 +272,18 @@ if [ -s .misc ]; then inst_mod .misc misc; fi; \ rm -f .misc .allmods; \ ) + +# modules disabled.... + +else +modules modules_install: dummy + @echo + @echo "The present kernel configuration has modules disabled." + @echo "Type 'make config' and enable loadable module support." + @echo "Then build a kernel with module support enabled." + @echo + @exit 1 +endif clean: archclean rm -f kernel/ksyms.lst include/linux/compile.h diff -u --recursive --new-file v1.3.51/linux/arch/alpha/config.in linux/arch/alpha/config.in --- v1.3.51/linux/arch/alpha/config.in Tue Dec 26 04:45:34 1995 +++ linux/arch/alpha/config.in Fri Dec 29 15:21:34 1995 @@ -10,6 +10,14 @@ unset CONFIG_ALPHA_NEED_ROUNDING_EMULATION mainmenu_option next_comment +comment 'Loadable module support' +bool 'Enable loadable module support' CONFIG_MODULES +if [ "$CONFIG_MODULES" = "y" ]; then + MODULES=y + bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS +fi + +mainmenu_option next_comment comment 'General setup' if [ "`uname`" != "Linux" ]; then @@ -49,10 +57,6 @@ bool 'Networking support' CONFIG_NET bool 'System V IPC' CONFIG_SYSVIPC tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF - -mainmenu_option next_comment -comment 'Loadable module support' -bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS source drivers/block/Config.in diff -u --recursive --new-file v1.3.51/linux/arch/alpha/defconfig linux/arch/alpha/defconfig --- v1.3.51/linux/arch/alpha/defconfig Tue Dec 26 04:45:34 1995 +++ linux/arch/alpha/defconfig Fri Dec 29 15:19:49 1995 @@ -3,6 +3,12 @@ # # +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set + +# # General setup # CONFIG_NATIVE=y @@ -22,11 +28,6 @@ CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BINFMT_ELF is not set - -# -# Loadable module support -# -# CONFIG_MODVERSIONS is not set # # block devices diff -u --recursive --new-file v1.3.51/linux/arch/i386/config.in linux/arch/i386/config.in --- v1.3.51/linux/arch/i386/config.in Wed Dec 13 09:02:45 1995 +++ linux/arch/i386/config.in Fri Dec 29 15:15:15 1995 @@ -5,6 +5,14 @@ mainmenu_name "Linux Kernel Configuration" mainmenu_option next_comment +comment 'Loadable module support' +bool 'Enable loadable module support' CONFIG_MODULES +if [ "$CONFIG_MODULES" = "y" ]; then + MODULES=y + bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS +fi + +mainmenu_option next_comment comment 'General setup' bool 'Kernel math emulation' CONFIG_MATH_EMULATION @@ -23,10 +31,6 @@ #if [ "$CONFIG_M586" = "n" ]; then bool 'Use 486-specific optimizations (does NOT work on i386)' CONFIG_M486 #fi - -mainmenu_option next_comment -comment 'Loadable module support' -bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS source drivers/block/Config.in diff -u --recursive --new-file v1.3.51/linux/arch/i386/defconfig linux/arch/i386/defconfig --- v1.3.51/linux/arch/i386/defconfig Tue Dec 26 04:45:35 1995 +++ linux/arch/i386/defconfig Fri Dec 29 15:26:04 1995 @@ -3,6 +3,12 @@ # # +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set + +# # General setup # # CONFIG_MATH_EMULATION is not set @@ -16,11 +22,6 @@ CONFIG_M486=y # -# Loadable module support -# -# CONFIG_MODVERSIONS is not set - -# # block devices # CONFIG_BLK_DEV_FD=y @@ -98,6 +99,7 @@ # # Filesystems # +# CONFIG_QUOTA is not set CONFIG_MINIX_FS=y # CONFIG_EXT_FS is not set CONFIG_EXT2_FS=y @@ -124,6 +126,7 @@ # CONFIG_ATIXL_BUSMOUSE is not set # CONFIG_QIC02_TAPE is not set # CONFIG_APM is not set +# CONFIG_WATCHDOG is not set # # Sound diff -u --recursive --new-file v1.3.51/linux/drivers/block/ide-cd.c linux/drivers/block/ide-cd.c --- v1.3.51/linux/drivers/block/ide-cd.c Mon Dec 11 15:42:01 1995 +++ linux/drivers/block/ide-cd.c Fri Dec 29 15:15:16 1995 @@ -71,8 +71,14 @@ * Fix transfers with odd bytelengths. * 3.03 Oct 27, 1995 -- Some Creative drives have an id of just `CD'. * `DCI-2S10' drives are broken too. - * 3.04 Nov 20, 1995 -- So are Vertros drives. + * 3.04 Nov 20, 1995 -- So are Vertos drives. * 3.05 Dec 1, 1995 -- Changes to go with overhaul of ide.c and ide-tape.c + * 3.06 Dec 16, 1995 -- Add support needed for partitions. + * More workarounds for Vertos bugs (based on patches + * from Holger Dietze ). + * Try to eliminate byteorder assumptions. + * Use atapi_cdrom_subchnl struct definition. + * Add STANDARD_ATAPI compilation option. * * NOTE: Direct audio reads will only work on some types of drive. * So far, i've received reports of success for Sony and Toshiba drives. @@ -100,10 +106,13 @@ #include #include #include +#include #define _IDE_CD_C /* used in blk.h */ #include "ide.h" + + /* Turn this on to have the driver print out the meanings of the ATAPI error codes. This will use up additional kernel-space memory, though. */ @@ -112,6 +121,18 @@ #define VERBOSE_IDE_CD_ERRORS 0 #endif + +/* Turning this on will remove code to work around various nonstandard + ATAPI implementations. If you know your drive follows the standard, + this will give you a slightly smaller kernel. */ + +#ifndef STANDARD_ATAPI +#define STANDARD_ATAPI 0 +#endif + + +/************************************************************************/ + #define SECTOR_SIZE 512 #define SECTOR_BITS 9 #define SECTORS_PER_FRAME (CD_FRAMESIZE / SECTOR_SIZE) @@ -159,13 +180,17 @@ struct ide_cd_config_flags { unsigned drq_interrupt : 1; /* Device sends an interrupt when ready for a packet command. */ + unsigned no_doorlock : 1; /* Drive cannot lock the door. */ +#if ! STANDARD_ATAPI unsigned no_playaudio12: 1; /* The PLAYAUDIO12 command is not supported. */ unsigned no_lba_toc : 1; /* Drive cannot return TOC info in LBA format. */ - unsigned msf_as_bcd : 1; /* Drive uses BCD in PLAYAUDIO_MSF. */ - unsigned no_doorlock : 1; /* Drive cannot lock the door. */ + unsigned playmsf_uses_bcd : 1; /* Drive uses BCD in PLAYAUDIO_MSF. */ unsigned old_readcd : 1; /* Drive uses old READ CD opcode. */ - unsigned reserved : 2; + unsigned vertos_lossage: 1; /* Drive is a Vertos 300, + and likes to speak BCD. */ +#endif /* not STANDARD_ATAPI */ + unsigned reserved : 1; }; #define CDROM_CONFIG_FLAGS(drive) ((struct ide_cd_config_flags *)&((drive)->bios_sect)) @@ -1123,19 +1148,7 @@ pc.c[0] = READ_10; pc.c[7] = (nframes >> 8); pc.c[8] = (nframes & 0xff); - - /* Write the sector address into the command image. */ - { - union { - struct {unsigned char b0, b1, b2, b3;} b; - struct {unsigned long l0;} l; - } conv; - conv.l.l0 = frame; - pc.c[2] = conv.b.b3; - pc.c[3] = conv.b.b2; - pc.c[4] = conv.b.b1; - pc.c[5] = conv.b.b0; - } + *(int *)(&pc.c[2]) = htonl (frame); /* Send the command to the drive and return. */ (void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), @@ -1149,6 +1162,15 @@ static void cdrom_start_read (ide_drive_t *drive, unsigned int block) { struct request *rq = HWGROUP(drive)->rq; + int minor = MINOR (rq->rq_dev); + + /* If the request is relative to a partition, fix it up to refer to the + absolute address. */ + if ((minor & PARTN_MASK) != 0) { + rq->sector = block; + minor &= ~PARTN_MASK; + rq->rq_dev = MKDEV (MAJOR(rq->rq_dev), minor); + } /* We may be retrying this request after an error. Fix up any weirdness which might be present in the request packet. */ @@ -1439,34 +1461,20 @@ * can also be NULL, in which case no sense information is returned. */ -static inline -void byte_swap_word (unsigned short *x) -{ - char *c = (char *)x; - char d = c[0]; - c[0] = c[1]; - c[1] = d; -} - - -static inline -void byte_swap_long (unsigned *x) +#if ! STANDARD_ATAPI +static +int bin2bcd (int x) { - char *c = (char *)x; - char d = c[0]; - c[0] = c[3]; - c[3] = d; - d = c[1]; - c[1] = c[2]; - c[2] = d; + return (x%10) | ((x/10) << 4); } static -int bin2bcd (int x) +int bcd2bin (int x) { - return (x%10) | ((x/10) << 4); + return (x >> 4) * 10 + (x & 0x0f); } +#endif /* not STANDARD_ATAPI */ static inline @@ -1616,8 +1624,7 @@ stat = cdrom_queue_packet_command (drive, &pc); if (stat == 0) { - byte_swap_long (&capbuf.lba); - *capacity = capbuf.lba; + *capacity = ntohl (capbuf.lba); } return stat; @@ -1680,8 +1687,12 @@ if (CDROM_STATE_FLAGS (drive)->toc_valid) return 0; +#if STANDARD_ATAPI + msf_flag = 0; +#else /* not STANDARD_ATAPI */ /* Some drives can't return TOC data in LBA format. */ msf_flag = (CDROM_CONFIG_FLAGS (drive)->no_lba_toc); +#endif /* not STANDARD_ATAPI */ /* First read just the header, so we know how long the TOC is. */ stat = cdrom_read_tocentry (drive, 0, msf_flag, 0, (char *)&toc->hdr, @@ -1690,6 +1701,15 @@ reqbuf); if (stat) return stat; +#if ! STANDARD_ATAPI + if (CDROM_CONFIG_FLAGS (drive)->vertos_lossage) + { + toc->hdr.first_track = bcd2bin (toc->hdr.first_track); + toc->hdr.last_track = bcd2bin (toc->hdr.last_track); + /* hopefully the length is not BCD, too ;-| */ + } +#endif /* not STANDARD_ATAPI */ + ntracks = toc->hdr.last_track - toc->hdr.first_track + 1; if (ntracks <= 0) return -EIO; if (ntracks > MAX_TRACKS) ntracks = MAX_TRACKS; @@ -1700,16 +1720,36 @@ (ntracks+1) * sizeof (struct atapi_toc_entry), reqbuf); if (stat) return stat; - byte_swap_word (&toc->hdr.toc_length); + toc->hdr.toc_length = ntohs (toc->hdr.toc_length); + +#if ! STANDARD_ATAPI + if (CDROM_CONFIG_FLAGS (drive)->vertos_lossage) + { + toc->hdr.first_track = bcd2bin (toc->hdr.first_track); + toc->hdr.last_track = bcd2bin (toc->hdr.last_track); + /* hopefully the length is not BCD, too ;-| */ + } +#endif /* not STANDARD_ATAPI */ + for (i=0; i<=ntracks; i++) { +#if ! STANDARD_ATAPI if (msf_flag) { - byte *adr = (byte *)&(toc->ent[i].lba); - toc->ent[i].lba = msf_to_lba (adr[1], adr[2], adr[3]); + if (CDROM_CONFIG_FLAGS (drive)->vertos_lossage) + { + toc->ent[i].track = bcd2bin (toc->ent[i].track); + toc->ent[i].addr.msf.m = bcd2bin (toc->ent[i].addr.msf.m); + toc->ent[i].addr.msf.s = bcd2bin (toc->ent[i].addr.msf.s); + toc->ent[i].addr.msf.f = bcd2bin (toc->ent[i].addr.msf.f); + } + toc->ent[i].addr.lba = msf_to_lba (toc->ent[i].addr.msf.m, + toc->ent[i].addr.msf.s, + toc->ent[i].addr.msf.f); } else - byte_swap_long (&toc->ent[i].lba); +#endif /* not STANDARD_ATAPI */ + toc->ent[i].addr.lba = ntohl (toc->ent[i].addr.lba); } /* Read the multisession information. */ @@ -1717,16 +1757,15 @@ (char *)&ms_tmp, sizeof (ms_tmp), reqbuf); if (stat) return stat; +#if ! STANDARD_ATAPI if (msf_flag) - { - byte *adr = (byte *)&(ms_tmp.ent.lba); - toc->last_session_lba = msf_to_lba (adr[1], adr[2], adr[3]); - } + toc->last_session_lba = msf_to_lba (ms_tmp.ent.addr.msf.m, + ms_tmp.ent.addr.msf.s, + ms_tmp.ent.addr.msf.f); else - { - byte_swap_long (&ms_tmp.ent.lba); - toc->last_session_lba = ms_tmp.ent.lba; - } +#endif /* not STANDARD_ATAPI */ + toc->last_session_lba = ntohl (ms_tmp.ent.addr.lba); + toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track); /* Now try to get the total cdrom capacity. */ @@ -1816,15 +1855,14 @@ pc.sense_data = reqbuf; pc.c[0] = SCMD_PLAYAUDIO12; - *(int *)(&pc.c[2]) = lba_start; - *(int *)(&pc.c[6]) = lba_end - lba_start; - byte_swap_long ((int *)(&pc.c[2])); - byte_swap_long ((int *)(&pc.c[6])); + *(int *)(&pc.c[2]) = htonl (lba_start); + *(int *)(&pc.c[6]) = htonl (lba_end - lba_start); return cdrom_queue_packet_command (drive, &pc); } +#if ! STANDARD_ATAPI static int cdrom_play_lba_range_msf (ide_drive_t *drive, int lba_start, int lba_end, struct atapi_request_sense *reqbuf) @@ -1838,7 +1876,7 @@ lba_to_msf (lba_start, &pc.c[3], &pc.c[4], &pc.c[5]); lba_to_msf (lba_end-1, &pc.c[6], &pc.c[7], &pc.c[8]); - if (CDROM_CONFIG_FLAGS (drive)->msf_as_bcd) + if (CDROM_CONFIG_FLAGS (drive)->playmsf_uses_bcd) { pc.c[3] = bin2bcd (pc.c[3]); pc.c[4] = bin2bcd (pc.c[4]); @@ -1850,6 +1888,7 @@ return cdrom_queue_packet_command (drive, &pc); } +#endif /* not STANDARD_ATAPI */ /* Play audio starting at LBA LBA_START and finishing with the @@ -1869,9 +1908,11 @@ great. Otherwise, if the drive reports an illegal command code, try PLAYAUDIO_MSF using the NEC 260-style bcd parameters. */ +#if ! STANDARD_ATAPI if (CDROM_CONFIG_FLAGS (drive)->no_playaudio12) return cdrom_play_lba_range_msf (drive, lba_start, lba_end, reqbuf); else +#endif /* not STANDARD_ATAPI */ { int stat; struct atapi_request_sense my_reqbuf; @@ -1882,6 +1923,7 @@ stat = cdrom_play_lba_range_play12 (drive, lba_start, lba_end, reqbuf); if (stat == 0) return 0; +#if ! STANDARD_ATAPI /* It failed. Try to find out why. */ if (reqbuf->sense_key == ILLEGAL_REQUEST && reqbuf->asc == 0x20) { @@ -1890,9 +1932,10 @@ printk ("%s: Drive does not support PLAYAUDIO12; " "trying PLAYAUDIO_MSF\n", drive->name); CDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 1; - CDROM_CONFIG_FLAGS (drive)->msf_as_bcd = 1; + CDROM_CONFIG_FLAGS (drive)->playmsf_uses_bcd = 1; return cdrom_play_lba_range_msf (drive, lba_start, lba_end, reqbuf); } +#endif /* not STANDARD_ATAPI */ /* Failed for some other reason. Give up. */ return stat; @@ -1946,19 +1989,21 @@ pc.buffer = buf; pc.buflen = buflen; +#if ! STANDARD_ATAPI if (CDROM_CONFIG_FLAGS (drive)->old_readcd) pc.c[0] = 0xd4; else +#endif /* not STANDARD_ATAPI */ pc.c[0] = READ_CD; pc.c[1] = (format << 2); - *(int *)(&pc.c[2]) = lba; - byte_swap_long ((int *)(&pc.c[2])); + *(int *)(&pc.c[2]) = htonl (lba); pc.c[8] = 1; /* one block */ pc.c[9] = 0x10; stat = cdrom_queue_packet_command (drive, &pc); +#if ! STANDARD_ATAPI /* If the drive doesn't recognize the READ CD opcode, retry the command with an older opcode for that command. */ if (stat && reqbuf->sense_key == ILLEGAL_REQUEST && reqbuf->asc == 0x20 && @@ -1969,6 +2014,7 @@ CDROM_CONFIG_FLAGS (drive)->old_readcd = 1; return cdrom_read_block (drive, format, lba, buf, buflen, reqbuf); } +#endif /* not STANDARD_ATAPI */ return stat; } @@ -2056,8 +2102,8 @@ if (stat) return stat; if (ti.cdti_trk1 != CDROM_LEADOUT) ++last_toc; - lba_start = first_toc->lba; - lba_end = last_toc->lba; + lba_start = first_toc->addr.lba; + lba_end = last_toc->addr.lba; if (lba_end <= lba_start) return -EINVAL; @@ -2108,13 +2154,13 @@ if (tocentry.cdte_format == CDROM_MSF) { /* convert to MSF */ - lba_to_msf (toce->lba, + lba_to_msf (toce->addr.lba, &tocentry.cdte_addr.msf.minute, &tocentry.cdte_addr.msf.second, &tocentry.cdte_addr.msf.frame); } else - tocentry.cdte_addr.lba = toce->lba; + tocentry.cdte_addr.lba = toce->addr.lba; memcpy_tofs ((void *) arg, &tocentry, sizeof (tocentry)); @@ -2123,7 +2169,7 @@ case CDROMSUBCHNL: { - char buffer[16]; + struct atapi_cdrom_subchnl scbuf; int stat, abs_lba, rel_lba; struct cdrom_subchnl subchnl; @@ -2134,13 +2180,27 @@ memcpy_fromfs (&subchnl, (void *) arg, sizeof (subchnl)); - stat = cdrom_read_subchannel (drive, buffer, sizeof (buffer), NULL); + stat = cdrom_read_subchannel (drive, (char *)&scbuf, sizeof (scbuf), + NULL); if (stat) return stat; - abs_lba = *(int *)&buffer[8]; - rel_lba = *(int *)&buffer[12]; - byte_swap_long (&abs_lba); - byte_swap_long (&rel_lba); +#if ! STANDARD_ATAPI + if (CDROM_CONFIG_FLAGS (drive)->vertos_lossage) + { + abs_lba = msf_to_lba (bcd2bin (scbuf.acdsc_absaddr.msf.minute), + bcd2bin (scbuf.acdsc_absaddr.msf.second), + bcd2bin (scbuf.acdsc_absaddr.msf.frame)); + rel_lba = msf_to_lba (bcd2bin (scbuf.acdsc_reladdr.msf.minute), + bcd2bin (scbuf.acdsc_reladdr.msf.second), + bcd2bin (scbuf.acdsc_reladdr.msf.frame)); + scbuf.acdsc_trk = bcd2bin (scbuf.acdsc_trk); + } + else +#endif /* not STANDARD_ATAPI */ + { + abs_lba = ntohl (scbuf.acdsc_absaddr.lba); + rel_lba = ntohl (scbuf.acdsc_reladdr.lba); + } if (subchnl.cdsc_format == CDROM_MSF) { @@ -2159,10 +2219,10 @@ subchnl.cdsc_reladdr.lba = rel_lba; } - subchnl.cdsc_audiostatus = buffer[1]; - subchnl.cdsc_ctrl = buffer[5] & 0xf; - subchnl.cdsc_trk = buffer[6]; - subchnl.cdsc_ind = buffer[7]; + subchnl.cdsc_audiostatus = scbuf.acdsc_audiostatus; + subchnl.cdsc_ctrl = scbuf.acdsc_ctrl; + subchnl.cdsc_trk = scbuf.acdsc_trk; + subchnl.cdsc_ind = scbuf.acdsc_ind; memcpy_tofs ((void *) arg, &subchnl, sizeof (subchnl)); @@ -2517,12 +2577,15 @@ CDROM_STATE_FLAGS (drive)->eject_on_close= 0; CDROM_CONFIG_FLAGS (drive)->no_doorlock = 0; + CDROM_CONFIG_FLAGS (drive)->drq_interrupt = + ((drive->id->config & 0x0060) == 0x20); + +#if ! STANDARD_ATAPI CDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 0; CDROM_CONFIG_FLAGS (drive)->old_readcd = 0; CDROM_CONFIG_FLAGS (drive)->no_lba_toc = 0; - CDROM_CONFIG_FLAGS (drive)->msf_as_bcd = 0; - CDROM_CONFIG_FLAGS (drive)->drq_interrupt = - ((drive->id->config & 0x0060) == 0x20); + CDROM_CONFIG_FLAGS (drive)->playmsf_uses_bcd = 0; + CDROM_CONFIG_FLAGS (drive)->vertos_lossage = 0; /* Accommodate some broken drives... */ if (strcmp (drive->id->model, "CD220E") == 0 || @@ -2546,11 +2609,18 @@ CDROM_CONFIG_FLAGS (drive)->no_playaudio12 = 1; } - else if (strcmp (drive->id->model, "V003S0DS") == 0 || /* Vertros */ - strcmp (drive->id->model, "0V300SSD") == 0 || - strcmp (drive->id->model, "V004E0DT") == 0 || + else if (strcmp (drive->id->model, "V003S0DS") == 0 || /* Vertos */ + strcmp (drive->id->model, "0V300SSD") == 0) + { + CDROM_CONFIG_FLAGS (drive)->vertos_lossage = 1; + CDROM_CONFIG_FLAGS (drive)->playmsf_uses_bcd = 1; + CDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1; + } + + else if (strcmp (drive->id->model, "V004E0DT") == 0 || strcmp (drive->id->model, "0V400ETD") == 0) CDROM_CONFIG_FLAGS (drive)->no_lba_toc = 1; +#endif /* not STANDARD_ATAPI */ drive->cdrom_info.toc = NULL; drive->cdrom_info.sector_buffer = NULL; diff -u --recursive --new-file v1.3.51/linux/drivers/block/ide.h linux/drivers/block/ide.h --- v1.3.51/linux/drivers/block/ide.h Sun Dec 17 11:43:12 1995 +++ linux/drivers/block/ide.h Fri Dec 29 16:01:07 1995 @@ -198,7 +198,15 @@ unsigned adr : 4; byte track; byte reserved2; - unsigned lba; + union { + unsigned lba; + struct { + byte reserved3; + byte m; + byte s; + byte f; + } msf; + } addr; }; struct atapi_toc { @@ -208,6 +216,43 @@ struct atapi_toc_header hdr; struct atapi_toc_entry ent[MAX_TRACKS+1]; /* One extra for the leadout. */ }; + + +/* This structure is annoyingly close to, but not identical with, + the cdrom_subchnl structure from cdrom.h. */ +struct atapi_cdrom_subchnl +{ + u_char acdsc_reserved; + u_char acdsc_audiostatus; + u_short acdsc_length; + u_char acdsc_format; + + u_char acdsc_adr: 4; + u_char acdsc_ctrl: 4; + u_char acdsc_trk; + u_char acdsc_ind; + union + { + struct + { + u_char minute; + u_char second; + u_char frame; + } msf; + int lba; + } acdsc_absaddr; + union + { + struct + { + u_char minute; + u_char second; + u_char frame; + } msf; + int lba; + } acdsc_reladdr; +}; + /* Extra per-device info for cdrom drives. */ struct cdrom_info { diff -u --recursive --new-file v1.3.51/linux/drivers/net/net_init.c linux/drivers/net/net_init.c --- v1.3.51/linux/drivers/net/net_init.c Wed Dec 13 09:02:46 1995 +++ linux/drivers/net/net_init.c Fri Dec 29 15:15:15 1995 @@ -237,6 +237,7 @@ return 0; } +#ifdef CONFIG_MODULES int register_netdev(struct device *dev) { struct device *d = dev_base; @@ -356,6 +357,7 @@ restore_flags(flags); } +#endif /* CONFIG_MODULES */ diff -u --recursive --new-file v1.3.51/linux/drivers/pci/pci.c linux/drivers/pci/pci.c --- v1.3.51/linux/drivers/pci/pci.c Tue Dec 26 04:45:36 1995 +++ linux/drivers/pci/pci.c Fri Dec 29 15:15:16 1995 @@ -69,9 +69,11 @@ DEVICE( CIRRUS, CIRRUS_5430, "GD 5430"), DEVICE( CIRRUS, CIRRUS_5434_4, "GD 5434"), DEVICE( CIRRUS, CIRRUS_5434_8, "GD 5434"), + DEVICE( CIRRUS, CIRRUS_5436, "GD 5436"), DEVICE( CIRRUS, CIRRUS_6729, "CL 6729"), DEVICE( CIRRUS, CIRRUS_7542, "CL 7542"), DEVICE( CIRRUS, CIRRUS_7543, "CL 7543"), + DEVICE( WD, WD_7197, "WD 7197"), DEVICE( AMD, AMD_LANCE, "79C970"), DEVICE( AMD, AMD_SCSI, "53C974"), DEVICE( TRIDENT, TRIDENT_9420, "TG 9420"), @@ -83,6 +85,7 @@ DEVICE( MATROX, MATROX_MGA_IMP, "MGA Impression"), DEVICE( CT, CT_65545, "65545"), DEVICE( FD, FD_36C70, "TMC-18C30"), + DEVICE( SI, SI_6202, "6202"), DEVICE( SI, SI_503, "85C503"), DEVICE( SI, SI_501, "85C501"), DEVICE( SI, SI_496, "85C496"), @@ -103,10 +106,13 @@ DEVICE( N9, N9_I128, "Imagine 128"), DEVICE( UMC, UMC_UM8673F, "UM8673F"), BRIDGE( UMC, UMC_UM8891A, "UM8891A", 0x01), + DEVICE( UMC, UMC_UM8886BF, "UM8886BF"), DEVICE( UMC, UMC_UM8886A, "UM8886A"), BRIDGE( UMC, UMC_UM8881F, "UM8881F", 0x02), DEVICE( UMC, UMC_UM8886F, "UM8886F"), DEVICE( UMC, UMC_UM9017F, "UM9017F"), + DEVICE( UMC, UMC_UM8886N, "UM8886N"), + DEVICE( UMC, UMC_UM8891N, "UM8891N"), DEVICE( X, X_AGX016, "ITT AGX016"), DEVICE( QLOGIC, QLOGIC_ISP1020, "ISP1020"), DEVICE( QLOGIC, QLOGIC_ISP1022, "ISP1022"), @@ -126,6 +132,7 @@ DEVICE( AL, AL_M1449, "M1449"), DEVICE( AL, AL_M1451, "M1451"), DEVICE( AL, AL_M1461, "M1461"), + DEVICE( AL, AL_M1489, "M1489"), DEVICE( AL, AL_M4803, "M4803"), DEVICE( ASP, ASP_ABP940, "ABP940"), DEVICE( IMS, IMS_8849, "8849"), @@ -139,6 +146,7 @@ DEVICE( EF, EF_ATM_ASIC, "155P-MF1 (ASIC)"), DEVICE( IMAGINGTECH, IMAGINGTECH_ICPCI, "MVC IC-PCI"), DEVICE( PLX, PLX_9060, "PCI9060 i960 bridge"), + DEVICE( ALLIANCE, ALLIANCE_PROMOTIO, "Promotion-6410"), DEVICE( ALLIANCE, ALLIANCE_PROVIDEO, "Provideo"), DEVICE( MUTECH, MUTECH_MV1000, "MV-1000"), DEVICE( ZEITNET, ZEITNET_1221, "1221"), @@ -388,6 +396,7 @@ case PCI_VENDOR_ID_DEC: return "DEC"; case PCI_VENDOR_ID_CIRRUS: return "Cirrus Logic"; case PCI_VENDOR_ID_IBM: return "IBM"; + case PCI_VENDOR_ID_WD: return "Western Digital"; case PCI_VENDOR_ID_AMD: return "AMD"; case PCI_VENDOR_ID_TRIDENT: return "Trident"; case PCI_VENDOR_ID_AI: return "Acer Incorporated"; @@ -407,6 +416,7 @@ case PCI_VENDOR_ID_QLOGIC: return "Q Logic"; case PCI_VENDOR_ID_LEADTEK: return "Leadtek Research"; case PCI_VENDOR_ID_CONTAQ: return "Contaq"; + case PCI_VENDOR_ID_FOREX: return "Forex"; case PCI_VENDOR_ID_OLICOM: return "Olicom"; case PCI_VENDOR_ID_CMD: return "CMD"; case PCI_VENDOR_ID_VISION: return "Vision"; @@ -418,6 +428,7 @@ case PCI_VENDOR_ID_ASP: return "Advanced System Products"; case PCI_VENDOR_ID_IMS: return "IMS"; case PCI_VENDOR_ID_TEKRAM2: return "Tekram"; + case PCI_VENDOR_ID_AMCC: return "AMCC"; case PCI_VENDOR_ID_REALTEK: return "Realtek"; case PCI_VENDOR_ID_VIA: return "VIA Technologies"; case PCI_VENDOR_ID_VORTEX: return "VORTEX"; diff -u --recursive --new-file v1.3.51/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- v1.3.51/linux/drivers/scsi/scsi.c Tue Dec 26 04:45:37 1995 +++ linux/drivers/scsi/scsi.c Fri Dec 29 15:15:16 1995 @@ -2147,8 +2147,10 @@ #define MALLOC_PAGEBITS 12 +#ifdef CONFIG_MODULES static int scsi_register_host(Scsi_Host_Template *); static void scsi_unregister_host(Scsi_Host_Template *); +#endif void *scsi_malloc(unsigned int len) { @@ -2638,6 +2640,8 @@ restore_flags(flags); } +#ifdef CONFIG_MODULES /* a big #ifdef block... */ + /* * This entry point should be called by a loadable module if it is trying * add a low level scsi driver to the system. @@ -3043,6 +3047,8 @@ } return; } + +#endif /* CONFIG_MODULES */ #ifdef DEBUG_TIMEOUT static void diff -u --recursive --new-file v1.3.51/linux/drivers/scsi/sg.c linux/drivers/scsi/sg.c --- v1.3.51/linux/drivers/scsi/sg.c Mon Dec 11 15:42:03 1995 +++ linux/drivers/scsi/sg.c Fri Dec 29 15:15:32 1995 @@ -5,6 +5,9 @@ * Development Sponsored by Killy Corp. NY NY * * Borrows code from st driver. + * + * Version from 1.3.51 modified by Rick Richardson to fix problem in + * detecting whether its a send or a recieve style command (see sg_write) */ #include @@ -341,10 +344,18 @@ /* * fix input size, and see if we are sending data. + * + * Mod by Rick Richardson (rick@dgii.com): + * The original test to see if its a SEND/REC was: + * if( device->header.pack_len > device->header.reply_len ) + * I haven't a clue why the author thought this would work. Instead, + * I've changed it to see if there is any additional data in this + * packet beyond the length of the SCSI command itself. */ device->header.pack_len=count; buf+=sizeof(struct sg_header); - if( device->header.pack_len > device->header.reply_len ) + size = COMMAND_SIZE(get_user(buf)) + sizeof(struct sg_header); + if( device->header.pack_len > size) { bsize = device->header.pack_len; direction = SG_SEND; diff -u --recursive --new-file v1.3.51/linux/drivers/scsi/sr.c linux/drivers/scsi/sr.c --- v1.3.51/linux/drivers/scsi/sr.c Sat Nov 11 17:41:33 1995 +++ linux/drivers/scsi/sr.c Fri Dec 29 15:15:44 1995 @@ -1021,6 +1021,8 @@ scsi_CDs[i].sector_size = (buffer[4] << 24) | (buffer[5] << 16) | (buffer[6] << 8) | buffer[7]; if(scsi_CDs[i].sector_size == 0) scsi_CDs[i].sector_size = 2048; + /* Work around bug/feature in HP 4020i CD-Recorder... */ + if(scsi_CDs[i].sector_size == 2340) scsi_CDs[i].sector_size = 2048; if(scsi_CDs[i].sector_size != 2048 && scsi_CDs[i].sector_size != 512) { printk ("scd%d : unsupported sector size %d.\n", diff -u --recursive --new-file v1.3.51/linux/fs/buffer.c linux/fs/buffer.c --- v1.3.51/linux/fs/buffer.c Wed Dec 27 09:12:13 1995 +++ linux/fs/buffer.c Fri Dec 29 15:15:16 1995 @@ -1042,6 +1042,10 @@ } tmp = get_hash_table(dev, block, size); if (tmp) { + if (!buffer_uptodate(tmp)) { + ll_rw_block(READ, 1, &tmp); + wait_on_buffer(tmp); + } memcpy(next->b_data, tmp->b_data, size); brelse(tmp); continue; @@ -1789,6 +1793,8 @@ in a few more things so "top" and /proc/2/{exe,root,cwd} display semi-sane things. Not real crucial though... */ + current->session = 1; + current->pgrp = 1; sprintf(current->comm, "kernel bdflush"); for (;;) { diff -u --recursive --new-file v1.3.51/linux/fs/exec.c linux/fs/exec.c --- v1.3.51/linux/fs/exec.c Tue Dec 26 04:45:37 1995 +++ linux/fs/exec.c Fri Dec 29 15:15:16 1995 @@ -55,7 +55,7 @@ /* * Here are the actual binaries that will be accepted: - * add more with "register_binfmt()".. + * add more with "register_binfmt()" if using modules... */ extern struct linux_binfmt elf_format; @@ -69,6 +69,7 @@ static struct linux_binfmt *formats = &aout_format; +#ifdef CONFIG_MODULES int register_binfmt(struct linux_binfmt * fmt) { struct linux_binfmt ** tmp = &formats; @@ -100,6 +101,7 @@ } return -EINVAL; } +#endif /* CONFIG_MODULES */ int open_inode(struct inode * inode, int mode) { diff -u --recursive --new-file v1.3.51/linux/fs/namei.c linux/fs/namei.c --- v1.3.51/linux/fs/namei.c Sun Dec 17 11:43:20 1995 +++ linux/fs/namei.c Fri Dec 29 14:47:42 1995 @@ -416,28 +416,19 @@ return -EPERM; } if (flag & O_TRUNC) { - struct iattr newattrs; - if ((error = get_write_access(inode))) { iput(inode); return error; } if (inode->i_sb && inode->i_sb->dq_op) inode->i_sb->dq_op->initialize(inode, -1); - newattrs.ia_size = 0; - newattrs.ia_valid = ATTR_SIZE; - if ((error = notify_change(inode, &newattrs))) { - put_write_access(inode); + + error = do_truncate(inode, 0); + put_write_access(inode); + if (error) { iput(inode); return error; } - down(&inode->i_sem); - inode->i_size = 0; - if (inode->i_op && inode->i_op->truncate) - inode->i_op->truncate(inode); - up(&inode->i_sem); - inode->i_dirt = 1; - put_write_access(inode); } else if (flag & FMODE_WRITE) if (inode->i_sb && inode->i_sb->dq_op) diff -u --recursive --new-file v1.3.51/linux/fs/open.c linux/fs/open.c --- v1.3.51/linux/fs/open.c Sun Dec 17 11:43:20 1995 +++ linux/fs/open.c Fri Dec 29 15:13:16 1995 @@ -61,21 +61,27 @@ return 0; } -static int do_truncate(struct inode *inode, unsigned long length) +int do_truncate(struct inode *inode, unsigned long length) { + int error; struct iattr newattrs; + newattrs.ia_size = length; + newattrs.ia_ctime = newattrs.ia_mtime = CURRENT_TIME; + newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME | ATTR_MTIME; + error = notify_change(inode, &newattrs); + if (error) + return error; + /* truncate virtual mappings of this file */ down(&inode->i_sem); vmtruncate(inode, length); - inode->i_size = newattrs.ia_size = length; + inode->i_size = length; + inode->i_dirt = 1; if (inode->i_op && inode->i_op->truncate) inode->i_op->truncate(inode); up(&inode->i_sem); - newattrs.ia_ctime = newattrs.ia_mtime = CURRENT_TIME; - newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME | ATTR_MTIME; - inode->i_dirt = 1; - return notify_change(inode, &newattrs); + return 0; } asmlinkage int sys_truncate(const char * path, unsigned long length) diff -u --recursive --new-file v1.3.51/linux/fs/proc/Makefile linux/fs/proc/Makefile --- v1.3.51/linux/fs/proc/Makefile Tue Aug 15 20:39:04 1995 +++ linux/fs/proc/Makefile Fri Dec 29 15:15:16 1995 @@ -8,7 +8,12 @@ # Note 2! The CFLAGS definitions are now in the main makefile... O_TARGET := proc.o -O_OBJS := inode.o root.o base.o mem.o link.o fd.o array.o kmsg.o net.o scsi.o +O_OBJS := inode.o root.o base.o mem.o link.o fd.o array.o kmsg.o net.o M_OBJS := $(O_TARGET) + +# For either CONFIG_SCSI=y or CONFIG_SCSI=m +ifdef CONFIG_SCSI +O_OBJS += scsi.o +endif include $(TOPDIR)/Rules.make diff -u --recursive --new-file v1.3.51/linux/fs/proc/array.c linux/fs/proc/array.c --- v1.3.51/linux/fs/proc/array.c Wed Dec 27 09:12:14 1995 +++ linux/fs/proc/array.c Fri Dec 29 15:15:16 1995 @@ -770,10 +770,12 @@ return destptr-buf; } +#ifdef CONFIG_MODULES extern int get_module_list(char *); +extern int get_ksyms_list(char *, char **, off_t, int); +#endif extern int get_device_list(char *); extern int get_filesystem_list(char *); -extern int get_ksyms_list(char *, char **, off_t, int); extern int get_irq_list(char *); extern int get_dma_list(char *); extern int get_cpuinfo(char *); @@ -807,9 +809,14 @@ return get_malloc(page); #endif +#ifdef CONFIG_MODULES case PROC_MODULES: return get_module_list(page); + case PROC_KSYMS: + return get_ksyms_list(page, start, offset, length); +#endif + case PROC_STAT: return get_kstat(page); @@ -821,9 +828,6 @@ case PROC_FILESYSTEMS: return get_filesystem_list(page); - - case PROC_KSYMS: - return get_ksyms_list(page, start, offset, length); case PROC_DMA: return get_dma_list(page); diff -u --recursive --new-file v1.3.51/linux/fs/proc/inode.c linux/fs/proc/inode.c --- v1.3.51/linux/fs/proc/inode.c Mon Dec 11 15:42:04 1995 +++ linux/fs/proc/inode.c Fri Dec 29 15:15:16 1995 @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -170,11 +171,13 @@ case PROC_NET: inode->i_nlink = 2; break; +#ifdef CONFIG_SCSI case PROC_SCSI: inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; inode->i_nlink = 2; inode->i_op = &proc_scsi_inode_operations; break; +#endif case PROC_KCORE: inode->i_mode = S_IFREG | S_IRUSR; inode->i_op = &proc_kcore_inode_operations; diff -u --recursive --new-file v1.3.51/linux/fs/proc/root.c linux/fs/proc/root.c --- v1.3.51/linux/fs/proc/root.c Tue Dec 26 04:45:40 1995 +++ linux/fs/proc/root.c Fri Dec 29 15:15:16 1995 @@ -131,6 +131,7 @@ NULL, NULL }; +#ifdef CONFIG_SCSI struct proc_dir_entry proc_scsi = { PROC_SCSI, 4, "scsi", S_IFDIR | S_IRUGO | S_IXUGO, 2, 0, 0, @@ -138,6 +139,7 @@ NULL, NULL, NULL, &proc_root, NULL }; +#endif int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp) { @@ -258,7 +260,9 @@ }); proc_register(&proc_root, &proc_net); +#ifdef CONFIG_SCSI proc_register(&proc_root, &proc_scsi); +#endif #ifdef CONFIG_DEBUG_MALLOC proc_register(&proc_root, &(struct proc_dir_entry) { @@ -270,11 +274,18 @@ PROC_KCORE, 5, "kcore", S_IFREG | S_IRUSR, 1, 0, 0, }); + +#ifdef CONFIG_MODULES proc_register(&proc_root, &(struct proc_dir_entry) { PROC_MODULES, 7, "modules", S_IFREG | S_IRUGO, 1, 0, 0, }); proc_register(&proc_root, &(struct proc_dir_entry) { + PROC_KSYMS, 5, "ksyms", + S_IFREG | S_IRUGO, 1, 0, 0, + }); +#endif + proc_register(&proc_root, &(struct proc_dir_entry) { PROC_STAT, 4, "stat", S_IFREG | S_IRUGO, 1, 0, 0, }); @@ -288,10 +299,6 @@ }); proc_register(&proc_root, &(struct proc_dir_entry) { PROC_FILESYSTEMS, 11,"filesystems", - S_IFREG | S_IRUGO, 1, 0, 0, - }); - proc_register(&proc_root, &(struct proc_dir_entry) { - PROC_KSYMS, 5, "ksyms", S_IFREG | S_IRUGO, 1, 0, 0, }); proc_register(&proc_root, &(struct proc_dir_entry) { diff -u --recursive --new-file v1.3.51/linux/fs/proc/scsi.c linux/fs/proc/scsi.c --- v1.3.51/linux/fs/proc/scsi.c Tue Dec 26 04:45:40 1995 +++ linux/fs/proc/scsi.c Fri Dec 29 15:17:03 1995 @@ -38,9 +38,9 @@ extern void build_proc_dir_hba_entries(uint); /* the *_get_info() functions are in the respective scsi driver code */ -extern int (* dispatch_scsi_info_ptr)(int, char *, char **, off_t, int, int); - - +int (* dispatch_scsi_info_ptr) (int ino, char *buffer, char **start, + off_t offset, int length, int inout) = 0; + static struct file_operations proc_scsi_operations = { proc_scsilseek, /* lseek */ proc_readscsi, /* read */ diff -u --recursive --new-file v1.3.51/linux/fs/super.c linux/fs/super.c --- v1.3.51/linux/fs/super.c Wed Dec 13 09:02:47 1995 +++ linux/fs/super.c Fri Dec 29 15:15:16 1995 @@ -159,6 +159,7 @@ return 0; } +#ifdef CONFIG_MODULES int unregister_filesystem(struct file_system_type * fs) { struct file_system_type ** tmp; @@ -174,6 +175,7 @@ } return -EINVAL; } +#endif static int fs_index(const char * __name) { diff -u --recursive --new-file v1.3.51/linux/include/linux/fs.h linux/include/linux/fs.h --- v1.3.51/linux/include/linux/fs.h Wed Dec 27 09:12:14 1995 +++ linux/include/linux/fs.h Fri Dec 29 14:47:16 1995 @@ -450,7 +450,7 @@ extern int getname(const char * filename, char **result); extern void putname(char * name); - +extern int do_truncate(struct inode *, unsigned long); extern int register_blkdev(unsigned int, const char *, struct file_operations *); extern int unregister_blkdev(unsigned int major, const char * name); extern int blkdev_open(struct inode * inode, struct file * filp); diff -u --recursive --new-file v1.3.51/linux/include/linux/pci.h linux/include/linux/pci.h --- v1.3.51/linux/include/linux/pci.h Thu Dec 21 08:53:33 1995 +++ linux/include/linux/pci.h Fri Dec 29 15:15:16 1995 @@ -259,15 +259,19 @@ #define PCI_DEVICE_ID_DEC_TULIP_PLUS 0x0014 #define PCI_VENDOR_ID_CIRRUS 0x1013 -#define PCI_DEVICE_ID_CIRRUS_5430 0x00A0 -#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00A4 -#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00A8 +#define PCI_DEVICE_ID_CIRRUS_5430 0x00a0 +#define PCI_DEVICE_ID_CIRRUS_5434_4 0x00a4 +#define PCI_DEVICE_ID_CIRRUS_5434_8 0x00a8 +#define PCI_DEVICE_ID_CIRRUS_5436 0x00ac #define PCI_DEVICE_ID_CIRRUS_6729 0x1100 #define PCI_DEVICE_ID_CIRRUS_7542 0x1200 #define PCI_DEVICE_ID_CIRRUS_7543 0x1202 #define PCI_VENDOR_ID_IBM 0x1014 +#define PCI_VENDOR_ID_WD 0x101c +#define PCI_DEVICE_ID_WD_7197 0x3296 + #define PCI_VENDOR_ID_AMD 0x1022 #define PCI_DEVICE_ID_AMD_LANCE 0x2000 #define PCI_DEVICE_ID_AMD_SCSI 0x2020 @@ -292,6 +296,7 @@ #define PCI_DEVICE_ID_FD_36C70 0x0000 #define PCI_VENDOR_ID_SI 0x1039 +#define PCI_DEVICE_ID_SI_6202 0x0002 #define PCI_DEVICE_ID_SI_503 0x0008 #define PCI_DEVICE_ID_SI_501 0x0406 #define PCI_DEVICE_ID_SI_496 0x0496 @@ -328,10 +333,13 @@ #define PCI_VENDOR_ID_UMC 0x1060 #define PCI_DEVICE_ID_UMC_UM8673F 0x0101 #define PCI_DEVICE_ID_UMC_UM8891A 0x0891 +#define PCI_DEVICE_ID_UMC_UM8886BF 0x673a #define PCI_DEVICE_ID_UMC_UM8886A 0x886a #define PCI_DEVICE_ID_UMC_UM8881F 0x8881 #define PCI_DEVICE_ID_UMC_UM8886F 0x8886 #define PCI_DEVICE_ID_UMC_UM9017F 0x9017 +#define PCI_DEVICE_ID_UMC_UM8886N 0xe886 +#define PCI_DEVICE_ID_UMC_UM8891N 0xe891 #define PCI_VENDOR_ID_X 0x1061 #define PCI_DEVICE_ID_X_AGX016 0x0001 @@ -346,6 +354,8 @@ #define PCI_VENDOR_ID_CONTAQ 0x1080 #define PCI_DEVICE_ID_CONTAQ_82C599 0x0600 +#define PCI_VENDOR_ID_FOREX 0x1083 + #define PCI_VENDOR_ID_OLICOM 0x108d #define PCI_VENDOR_ID_CMD 0x1095 @@ -375,6 +385,7 @@ #define PCI_DEVICE_ID_AL_M1449 0x1449 #define PCI_DEVICE_ID_AL_M1451 0x1451 #define PCI_DEVICE_ID_AL_M1461 0x1461 +#define PCI_DEVICE_ID_AL_M1489 0x1489 #define PCI_DEVICE_ID_AL_M4803 0x5215 #define PCI_VENDOR_ID_ASP 0x10cd @@ -386,6 +397,8 @@ #define PCI_VENDOR_ID_TEKRAM2 0x10e1 #define PCI_DEVICE_ID_TEKRAM2_690c 0x690c +#define PCI_VENDOR_ID_AMCC 0x10e8 + #define PCI_VENDOR_ID_REALTEK 0x10ec #define PCI_DEVICE_ID_REALTEK_8029 0x8029 @@ -408,6 +421,7 @@ #define PCI_DEVICE_ID_PLX_9060 0x0001 #define PCI_VENDOR_ID_ALLIANCE 0x1142 +#define PCI_DEVICE_ID_ALLIANCE_PROMOTIO 0x3210 #define PCI_DEVICE_ID_ALLIANCE_PROVIDEO 0x6422 #define PCI_VENDOR_ID_MUTECH 0x1159 diff -u --recursive --new-file v1.3.51/linux/init/main.c linux/init/main.c --- v1.3.51/linux/init/main.c Wed Dec 27 09:12:14 1995 +++ linux/init/main.c Fri Dec 29 15:15:16 1995 @@ -594,7 +594,9 @@ sched_init(); time_init(); parse_options(command_line); +#ifdef CONFIG_MODULES init_modules(); +#endif #ifdef CONFIG_PROFILE if (!prof_shift) #ifdef CONFIG_PROFILE_SHIFT diff -u --recursive --new-file v1.3.51/linux/kernel/Makefile linux/kernel/Makefile --- v1.3.51/linux/kernel/Makefile Thu Nov 9 11:23:56 1995 +++ linux/kernel/Makefile Fri Dec 29 15:15:16 1995 @@ -14,7 +14,10 @@ O_OBJS = sched.o dma.o fork.o exec_domain.o panic.o printk.o sys.o \ module.o exit.o signal.o itimer.o info.o time.o softirq.o \ resource.o + +ifeq ($(CONFIG_MODULES),y) OX_OBJS = ksyms.o +endif include $(TOPDIR)/Rules.make diff -u --recursive --new-file v1.3.51/linux/kernel/ksyms.c linux/kernel/ksyms.c --- v1.3.51/linux/kernel/ksyms.c Wed Dec 27 09:12:14 1995 +++ linux/kernel/ksyms.c Fri Dec 29 15:33:13 1995 @@ -37,6 +37,7 @@ #include #include #include +#include extern unsigned char aux_device_present, kbd_read_mask; @@ -79,6 +80,7 @@ #include #include #include +#include #if defined(CONFIG_PPP) || defined(CONFIG_SLIP) #include "../drivers/net/slhc.h" #endif @@ -122,15 +124,12 @@ #include "../drivers/scsi/scsi_ioctl.h" #include "../drivers/scsi/hosts.h" #include "../drivers/scsi/constants.h" +#include "../drivers/scsi/sd.h" #include extern int generic_proc_info(char *, char **, off_t, int, int, int); #endif -int (* dispatch_scsi_info_ptr) (int ino, char *buffer, char **start, - off_t offset, int length, - int inode, int func) = 0; /* Dirty hack */ - extern int sys_tz; extern int request_dma(unsigned int dmanr, char * deviceID); extern void free_dma(unsigned int dmanr); @@ -500,7 +499,6 @@ X(kernel_scsi_ioctl), X(need_isa_buffer), X(request_queueable), - X(dispatch_scsi_info_ptr), X(generic_proc_info), X(scsi_devices), X(gendisk_head), /* Needed for sd.c */ @@ -515,7 +513,6 @@ */ X(gendisk_head), X(resetup_one_dev), - X(dispatch_scsi_info_ptr), #endif /* Added to make file system as module */ X(set_writetime), @@ -563,8 +560,10 @@ X(proc_unregister), X(in_group_p), X(generate_cluster), +#ifdef CONFIG_SCSI X(proc_scsi), X(proc_scsi_inode_operations), +#endif X(proc_net_inode_operations), X(proc_net), #endif diff -u --recursive --new-file v1.3.51/linux/kernel/module.c linux/kernel/module.c --- v1.3.51/linux/kernel/module.c Tue Dec 26 04:45:41 1995 +++ linux/kernel/module.c Fri Dec 29 15:15:16 1995 @@ -6,6 +6,7 @@ #include #include #include +#include /* * Originally by Anonymous (as far as I know...) * Linux version by Bas Laarhoven @@ -38,8 +39,13 @@ * On 1-Aug-95: altered code to use same style as * do /proc/net/XXX "files". Namely allow more than 4kB * (or what the block size if) output. + * + * - Use dummy syscall functions for users who disable all + * module support. Similar to kernel/sys.c (Paul Gortmaker) */ +#ifdef CONFIG_MODULES /* a *big* #ifdef block... */ + #ifdef DEBUG_MODULE #define PRINTK(a) printk a #else @@ -781,3 +787,30 @@ return 0; } + +#else /* CONFIG_MODULES */ + +/* Dummy syscalls for people who don't want modules */ + +asmlinkage unsigned long sys_create_module(void) +{ + return -ENOSYS; +} + +asmlinkage int sys_init_module(void) +{ + return -ENOSYS; +} + +asmlinkage int sys_delete_module(void) +{ + return -ENOSYS; +} + +asmlinkage int sys_get_kernel_syms(void) +{ + return -ENOSYS; +} + +#endif /* CONFIG_MODULES */ + diff -u --recursive --new-file v1.3.51/linux/mm/swap.c linux/mm/swap.c --- v1.3.51/linux/mm/swap.c Wed Dec 27 09:12:14 1995 +++ linux/mm/swap.c Thu Dec 28 08:03:40 1995 @@ -709,8 +709,8 @@ static inline void remove_mem_queue(struct mem_list * head, struct mem_list * entry) { - entry->next->prev = entry->prev; - entry->prev->next = entry->next; + struct mem_list * next = entry->next; + (next->prev = entry->prev)->next = next; } /* diff -u --recursive --new-file v1.3.51/linux/net/ipv4/tcp.c linux/net/ipv4/tcp.c --- v1.3.51/linux/net/ipv4/tcp.c Wed Dec 27 09:12:15 1995 +++ linux/net/ipv4/tcp.c Thu Dec 28 11:31:44 1995 @@ -5334,8 +5334,7 @@ * Find the first data byte. */ - tcp_data_start = skb->ip_hdr + - ((iph->ihl + th->doff) << 2); + tcp_data_start = (char *) th + (th->doff << 2); /* * Add it to our new buffer diff -u --recursive --new-file v1.3.51/linux/scripts/Configure linux/scripts/Configure --- v1.3.51/linux/scripts/Configure Wed Dec 13 09:02:47 1995 +++ linux/scripts/Configure Fri Dec 29 15:15:16 1995 @@ -22,6 +22,9 @@ # # 301195 (boldt@math.ucsb.edu) - added help text support # +# 281295 Paul Gortmaker - make tri_state functions collapse to boolean +# if module support is not enabled. +# # # Make sure we're really running bash. @@ -137,7 +140,8 @@ function bool () { def=$(eval echo "\${$2:-'n'}") case "$def" in - "y") defprompt="Y/n/?" + "y" | "m") defprompt="Y/n/?" + def="y" ;; "n") defprompt="N/y/?" ;; @@ -161,28 +165,32 @@ # tristate question define # function tristate () { - def=$(eval echo "\${$2:-'n'}") - case "$def" in - "y") defprompt="Y/m/n/?" - ;; - "m") defprompt="M/n/y/?" - ;; - "n") defprompt="N/y/m/?" - ;; - esac - while :; do - readln "$1 ($2) [$defprompt] " "$def" - case "$ans" in - [yY] | [yY]es ) define_bool "$2" "y" - break ;; - [nN] | [nN]o ) define_bool "$2" "n" - break ;; - [mM] ) define_bool "$2" "m" - break ;; - * ) help "$2" - ;; + if [ "$MODULES" != "y" ]; then + bool "$1" "$2" + else + def=$(eval echo "\${$2:-'n'}") + case "$def" in + "y") defprompt="Y/m/n/?" + ;; + "m") defprompt="M/n/y/?" + ;; + "n") defprompt="N/y/m/?" + ;; esac - done + while :; do + readln "$1 ($2) [$defprompt] " "$def" + case "$ans" in + [yY] | [yY]es ) define_bool "$2" "y" + break ;; + [nN] | [nN]o ) define_bool "$2" "n" + break ;; + [mM] ) define_bool "$2" "m" + break ;; + * ) help "$2" + ;; + esac + done + fi } # @@ -200,6 +208,7 @@ if [ "$3" != "m" ]; then tristate "$1" "$2" else + if [ "$MODULES" = "y" ]; then case "$def" in "y" | "m") defprompt="M/n/?" def="m" @@ -226,6 +235,7 @@ ;; esac done + fi fi }