Commit d40d1af9 authored by Linus Torvalds's avatar Linus Torvalds

v2.4.14.2 -> v2.4.14.3

  - Alan Cox: more driver merging
  - Al Viro: make ext2 group allocation more readable
parent a8a2069f
......@@ -1611,8 +1611,10 @@ E: greg@kroah.com
W: http://www.kroah.com/linux-usb/
D: USB Serial Converter driver framework, USB Handspring Visor driver
D: ConnectTech WHITEHeat USB driver, Generic USB Serial driver
D: USB Bluetooth driver
D: USB I/O Edgeport driver, USB Serial IrDA driver
D: USB Bluetooth driver, USB Skeleton driver
D: bits and pieces of USB core code.
D: PCI Hotplug core, PCI Hotplug Compaq driver modifications
N: Russell Kroll
E: rkroll@exploits.org
......
......@@ -764,6 +764,13 @@ P: Tigran Aivazian
M: tigran@veritas.com
S: Maintained
INTERMEZZO FILE SYSTEM
P: Peter J. Braam
M: braam@clusterfs.com
W: http://www.inter-mezzo.org/
L: intermezzo-discuss@lists.sourceforge.net
S: Maintained
IP MASQUERADING:
P: Juanjo Ciarlante
M: jjciarla@raiz.uncu.edu.ar
......@@ -1161,6 +1168,17 @@ M: mj@ucw.cz
L: linux-kernel@vger.kernel.org
S: Odd Fixes
PCI HOTPLUG CORE
P: Greg Kroah-Hartman
M: greg@kroah.com
M: gregkh@us.ibm.com
S: Supported
PCI HOTPLUG COMPAQ DRIVER
P: Greg Kroah-Hartman
M: greg@kroah.com
S: Maintained
PCMCIA SUBSYSTEM
P: David Hinds
M: dhinds@zen.stanford.edu
......@@ -1188,6 +1206,11 @@ M: paulus@samba.org
L: linux-ppp@vger.kernel.org
S: Maintained
PPP OVER ATM (RFC 2364)
P: Mitchell Blank Jr
M: mitch@sfgoth.com
S: Maintained
PPP OVER ETHERNET
P: Michal Ostrowski
M: mostrows@styx.uwaterloo.ca
......
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 15
EXTRAVERSION =-pre2
EXTRAVERSION =-pre3
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
......@@ -315,6 +315,7 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR53C8XX is not set
CONFIG_SCSI_SYM53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=4
......
......@@ -12,7 +12,6 @@
unsigned long dmi_broken;
int is_sony_vaio_laptop;
int enable_acpi_smp_table;
struct dmi_header
{
......
......@@ -112,6 +112,11 @@ EXPORT_SYMBOL(pcibios_penalize_isa_irq);
EXPORT_SYMBOL(pci_mem_start);
#endif
#ifdef CONFIG_PCI_BIOS
EXPORT_SYMBOL(pcibios_set_irq_routing);
EXPORT_SYMBOL(pcibios_get_irq_routing_table);
#endif
#ifdef CONFIG_X86_USE_3DNOW
EXPORT_SYMBOL(_mmx_memcpy);
EXPORT_SYMBOL(mmx_clear_page);
......
......@@ -37,9 +37,6 @@ extern int pcibios_last_bus;
extern struct pci_bus *pci_root_bus;
extern struct pci_ops *pci_root_ops;
struct irq_routing_table *pcibios_get_irq_routing_table(void);
int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
/* pci-irq.c */
struct irq_info {
......
......@@ -67,6 +67,10 @@
*
* AMD Athlon/Duron/Thunderbird bluesmoke support.
* Dave Jones <davej@suse.de>, April 2001.
*
* CacheSize bug workaround updates for AMD, Intel & VIA Cyrix.
* Dave Jones <davej@suse.de>, September, October 2001.
*
*/
/*
......@@ -156,6 +160,8 @@ extern char _text, _etext, _edata, _end;
static int disable_x86_serial_nr __initdata = 1;
static int disable_x86_fxsr __initdata = 0;
int enable_acpi_smp_table;
/*
* This is set up by the setup-routine at boot-time
*/
......@@ -753,6 +759,10 @@ static void __init parse_mem_cmdline (char ** cmdline_p)
add_memory_region(start_at, mem_size, E820_RAM);
}
}
/* acpismp=force forces parsing and use of the ACPI SMP table */
if (c == ' ' && !memcmp(from, "acpismp=force", 13))
enable_acpi_smp_table = 1;
c = *(from++);
if (!c)
break;
......@@ -1035,6 +1045,15 @@ void __init setup_arch(char **cmdline_p)
#endif
}
static int cachesize_override __initdata = -1;
static int __init cachesize_setup(char *str)
{
get_option (&str, &cachesize_override);
return 1;
}
__setup("cachesize=", cachesize_setup);
#ifndef CONFIG_X86_TSC
static int tsc_disable __initdata = 0;
......@@ -1105,12 +1124,25 @@ static void __init display_cacheinfo(struct cpuinfo_x86 *c)
l2size = 256;
}
/* Intel PIII Tualatin. This comes in two flavours.
* One has 256kb of cache, the other 512. We have no way
* to determine which, so we use a boottime override
* for the 512kb model, and assume 256 otherwise.
*/
if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) &&
(c->x86_model == 11) && (l2size == 0))
l2size = 256;
/* VIA C3 CPUs (670-68F) need further shifting. */
if (c->x86_vendor == X86_VENDOR_CENTAUR && (c->x86 == 6) &&
((c->x86_model == 7) || (c->x86_model == 8))) {
l2size = l2size >> 8;
}
/* Allow user to override all this if necessary. */
if (cachesize_override != -1)
l2size = cachesize_override;
if ( l2size == 0 )
return; /* Again, no L2 cache is possible */
......@@ -2301,14 +2333,14 @@ static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
}
int __init x86_serial_nr_setup(char *s)
static int __init x86_serial_nr_setup(char *s)
{
disable_x86_serial_nr = 0;
return 1;
}
__setup("serialnumber", x86_serial_nr_setup);
int __init x86_fxsr_setup(char * s)
static int __init x86_fxsr_setup(char * s)
{
disable_x86_fxsr = 1;
return 1;
......@@ -2403,7 +2435,6 @@ static int __init id_and_try_enable_cpuid(struct cpuinfo_x86 *c)
{
unsigned char ccr3, ccr4;
unsigned long flags;
printk(KERN_INFO "Enabling CPUID on Cyrix processor.\n");
local_irq_save(flags);
ccr3 = getCx86(CX86_CCR3);
......@@ -2834,6 +2865,53 @@ void __init cpu_init (void)
stts();
}
/*
* Early probe support logic for ppro memory erratum #50
*
* This is called before we do cpu ident work
*/
int __init ppro_with_ram_bug(void)
{
char vendor_id[16];
int ident;
/* Must have CPUID */
if(!have_cpuid_p())
return 0;
if(cpuid_eax(0)<1)
return 0;
/* Must be Intel */
cpuid(0, &ident,
(int *)&vendor_id[0],
(int *)&vendor_id[8],
(int *)&vendor_id[4]);
if(memcmp(vendor_id, "IntelInside", 12))
return 0;
ident = cpuid_eax(1);
/* Model 6 */
if(((ident>>8)&15)!=6)
return 0;
/* Pentium Pro */
if(((ident>>4)&15)!=1)
return 0;
if((ident&15) < 8)
{
printk(KERN_INFO "Pentium Pro with Errata#50 detected. Taking evasive action.\n");
return 1;
}
printk(KERN_INFO "Your Pentium Pro seems ok.\n");
return 0;
}
/*
* Local Variables:
* mode:c
......
......@@ -519,6 +519,7 @@ unsigned long get_cmos_time(void)
unsigned int year, mon, day, hour, min, sec;
int i;
spin_lock(&rtc_lock);
/* The Linux interpretation of the CMOS clock register contents:
* When the Update-In-Progress (UIP) flag goes from 1 to 0, the
* RTC registers show the second which has precisely just started.
......@@ -548,6 +549,7 @@ unsigned long get_cmos_time(void)
BCD_TO_BIN(mon);
BCD_TO_BIN(year);
}
spin_unlock(&rtc_lock);
if ((year += 1900) < 1970)
year += 100;
return mktime(year, mon, day, hour, min, sec);
......
......@@ -439,14 +439,25 @@ static inline int page_is_ram (unsigned long pagenr)
return 0;
}
static inline int page_kills_ppro(unsigned long pagenr)
{
if(pagenr >= 0x70000 && pagenr <= 0x7003F)
return 1;
return 0;
}
void __init mem_init(void)
{
extern int ppro_with_ram_bug(void);
int codesize, reservedpages, datasize, initsize;
int tmp;
int bad_ppro;
if (!mem_map)
BUG();
bad_ppro = ppro_with_ram_bug();
#ifdef CONFIG_HIGHMEM
highmem_start_page = mem_map + highstart_pfn;
max_mapnr = num_physpages = highend_pfn;
......@@ -476,6 +487,11 @@ void __init mem_init(void)
SetPageReserved(page);
continue;
}
if (bad_ppro && page_kills_ppro(tmp))
{
SetPageReserved(page);
continue;
}
ClearPageReserved(page);
set_bit(PG_highmem, &page->flags);
atomic_set(&page->count, 1);
......
......@@ -211,7 +211,9 @@ endmenu
source drivers/fc4/Config.in
source drivers/message/fusion/Config.in
if [ "$CONFIG_PCI" = "y" ]; then
source drivers/message/fusion/Config.in
fi
source drivers/ieee1394/Config.in
......
......@@ -10,7 +10,7 @@ mod-subdirs := dio mtd sbus video macintosh usb input telephony sgi ide \
message/i2o message/fusion scsi md ieee1394 pnp isdn atm \
fc4 net/hamradio i2c acpi bluetooth
subdir-y := parport char block net sound misc media cdrom
subdir-y := parport char block net sound misc media cdrom hotplug
subdir-m := $(subdir-y)
......@@ -48,4 +48,3 @@ subdir-$(CONFIG_ACPI) += acpi
subdir-$(CONFIG_BLUEZ) += bluetooth
include $(TOPDIR)/Rules.make
......@@ -195,8 +195,13 @@ int blkpg_ioctl(kdev_t dev, struct blkpg_ioctl_arg *arg)
int blk_ioctl(kdev_t dev, unsigned int cmd, unsigned long arg)
{
struct gendisk *g;
u64 ullval = 0;
int intval;
if (!dev)
return -EINVAL;
switch (cmd) {
case BLKROSET:
if (!capable(CAP_SYS_ADMIN))
......@@ -212,7 +217,7 @@ int blk_ioctl(kdev_t dev, unsigned int cmd, unsigned long arg)
case BLKRASET:
if(!capable(CAP_SYS_ADMIN))
return -EACCES;
if(!dev || arg > 0xff)
if(arg > 0xff)
return -EINVAL;
read_ahead[MAJOR(dev)] = arg;
return 0;
......@@ -224,8 +229,6 @@ int blk_ioctl(kdev_t dev, unsigned int cmd, unsigned long arg)
case BLKFLSBUF:
if(!capable(CAP_SYS_ADMIN))
return -EACCES;
if (!dev)
return -EINVAL;
fsync_dev(dev);
invalidate_buffers(dev);
return 0;
......@@ -235,18 +238,16 @@ int blk_ioctl(kdev_t dev, unsigned int cmd, unsigned long arg)
intval = get_hardsect_size(dev);
return put_user(intval, (int *) arg);
#if 0
case BLKGETSIZE:
/* Today get_gendisk() requires a linear scan;
add this when dev has pointer type. */
/* add BLKGETSIZE64 too */
case BLKGETSIZE64:
g = get_gendisk(dev);
if (!g)
ulongval = 0;
if (g)
ullval = g->part[MINOR(dev)].nr_sects;
if (cmd == BLKGETSIZE)
return put_user((unsigned long)ullval, (unsigned long *)arg);
else
ulongval = g->part[MINOR(dev)].nr_sects;
return put_user(ulongval, (unsigned long *) arg);
#endif
return put_user(ullval, (u64 *)arg);
#if 0
case BLKRRPART: /* Re-read partition tables */
if (!capable(CAP_SYS_ADMIN))
......
......@@ -126,6 +126,7 @@ endif
obj-$(CONFIG_VT) += vt.o vc_screen.o consolemap.o consolemap_deftbl.o $(CONSOLE) selection.o
obj-$(CONFIG_SERIAL) += $(SERIAL)
obj-$(CONFIG_SERIAL_ACPI) += acpi_serial.o
obj-$(CONFIG_SERIAL_21285) += serial_21285.o
obj-$(CONFIG_SERIAL_SA1100) += serial_sa1100.o
obj-$(CONFIG_SERIAL_AMBA) += serial_amba.o
......@@ -231,6 +232,7 @@ obj-$(CONFIG_977_WATCHDOG) += wdt977.o
obj-$(CONFIG_I810_TCO) += i810-tco.o
obj-$(CONFIG_MACHZ_WDT) += machzwd.o
obj-$(CONFIG_SH_WDT) += shwdt.o
obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o
obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o
subdir-$(CONFIG_MWAVE) += mwave
......
......@@ -36,7 +36,7 @@
#elif PAGE_SIZE == 4096
# define ATI_PCIGART_TABLE_ORDER 3
# define ATI_PCIGART_TABLE_PAGES (1 << 3)
#elif
#else
# error - PAGE_SIZE not 8K or 4K
#endif
......@@ -57,7 +57,7 @@ static unsigned long DRM(ati_alloc_pcigart_table)( void )
page = virt_to_page( address );
for ( i = 0 ; i <= ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
atomic_inc( &page->count );
SetPageReserved( page );
}
......@@ -74,7 +74,7 @@ static void DRM(ati_free_pcigart_table)( unsigned long address )
page = virt_to_page( address );
for ( i = 0 ; i <= ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
atomic_dec( &page->count );
ClearPageReserved( page );
}
......
......@@ -12,9 +12,7 @@
Authors: Arjan van de Ven <arjanv@redhat.com>
Based on work done by Sren Schmidt for FreeBSD
*/
......@@ -54,6 +52,12 @@ static struct disk_dev devlist[]= {
{IDE2_MAJOR, 64, -1 },
{IDE3_MAJOR, 0, -1 },
{IDE3_MAJOR, 64, -1 },
{IDE4_MAJOR, 0, -1 },
{IDE4_MAJOR, 64, -1 },
{IDE5_MAJOR, 0, -1 },
{IDE5_MAJOR, 64, -1 },
{IDE6_MAJOR, 0, -1 },
{IDE6_MAJOR, 64, -1 },
};
......@@ -550,14 +554,8 @@ static __init int pdcraid_init_one(int device,int raidlevel)
request_queue_t *q;
int i,count;
probedisk(0, device, raidlevel);
probedisk(1, device, raidlevel);
probedisk(2, device, raidlevel);
probedisk(3, device, raidlevel);
probedisk(4, device, raidlevel);
probedisk(5, device, raidlevel);
probedisk(6, device, raidlevel);
probedisk(7, device, raidlevel);
for (i=0; i<14; i++)
probedisk(i, device, raidlevel);
if (raidlevel==0)
fill_cutoff(device);
......
......@@ -84,4 +84,5 @@ EXPORT_SYMBOL(hpsb_guid_fill_packet);
EXPORT_SYMBOL(hpsb_register_protocol);
EXPORT_SYMBOL(hpsb_unregister_protocol);
EXPORT_SYMBOL(hpsb_release_unit_directory);
MODULE_LICENSE("GPL");
......@@ -1637,8 +1637,8 @@ MODULE_DEVICE_TABLE(pci, pci_table);
static void __exit pcilynx_cleanup(void)
{
hpsb_unregister_lowlevel(&lynx_template);
pci_unregister_driver(&lynx_pcidriver);
hpsb_unregister_lowlevel(&lynx_template);
PRINT_G(KERN_INFO, "removed " PCILYNX_DRIVER_NAME " module");
}
......
......@@ -6,7 +6,7 @@ O_TARGET := mddev.o
export-objs := md.o xor.o
list-multi := lvm-mod.o
lvm-mod-objs := lvm.o lvm-snap.o
lvm-mod-objs := lvm.o lvm-snap.o lvm-fs.o
# Note: link order is important. All raid personalities
# and xor.o must come before md.o, as they each initialise
......
This diff is collapsed.
/*
* kernel/lvm-snap.h
* kernel/lvm-internal.h
*
* Copyright (C) 2001 Sistina Software
*
......@@ -28,20 +28,74 @@
*
*/
#ifndef LVM_SNAP_H
#define LVM_SNAP_H
/* external snapshot calls */
extern inline int lvm_get_blksize(kdev_t);
extern int lvm_snapshot_alloc(lv_t *);
extern void lvm_snapshot_fill_COW_page(vg_t *, lv_t *);
extern int lvm_snapshot_COW(kdev_t, ulong, ulong, ulong, lv_t *);
extern int lvm_snapshot_remap_block(kdev_t *, ulong *, ulong, lv_t *);
extern void lvm_snapshot_release(lv_t *);
extern int lvm_write_COW_table_block(vg_t *, lv_t *);
extern inline void lvm_hash_link(lv_block_exception_t *,
kdev_t, ulong, lv_t *);
extern int lvm_snapshot_alloc_hash_table(lv_t *);
extern void lvm_drop_snapshot(lv_t *, const char *);
#ifndef LVM_INTERNAL_H
#define LVM_INTERNAL_H
#include <linux/lvm.h>
#define _LVM_INTERNAL_H_VERSION "LVM "LVM_RELEASE_NAME" ("LVM_RELEASE_DATE")"
/* global variables, defined in lvm.c */
extern char *lvm_version;
extern ushort lvm_iop_version;
extern int loadtime;
extern const char *const lvm_name;
extern vg_t *vg[];
extern struct file_operations lvm_chr_fops;
extern struct block_device_operations lvm_blk_dops;
/* debug macros */
#ifdef DEBUG_IOCTL
#define P_IOCTL(fmt, args...) printk(KERN_DEBUG "lvm ioctl: " fmt, ## args)
#else
#define P_IOCTL(fmt, args...)
#endif
#ifdef DEBUG_MAP
#define P_MAP(fmt, args...) printk(KERN_DEBUG "lvm map: " fmt, ## args)
#else
#define P_MAP(fmt, args...)
#endif
#ifdef DEBUG_KFREE
#define P_KFREE(fmt, args...) printk(KERN_DEBUG "lvm kfree: " fmt, ## args)
#else
#define P_KFREE(fmt, args...)
#endif
#ifdef DEBUG_DEVICE
#define P_DEV(fmt, args...) printk(KERN_DEBUG "lvm device: " fmt, ## args)
#else
#define P_DEV(fmt, args...)
#endif
/* lvm-snap.c */
int lvm_get_blksize(kdev_t);
int lvm_snapshot_alloc(lv_t *);
int lvm_snapshot_fill_COW_page(vg_t *, lv_t *);
int lvm_snapshot_COW(kdev_t, ulong, ulong, ulong, vg_t *vg, lv_t *);
int lvm_snapshot_remap_block(kdev_t *, ulong *, ulong, lv_t *);
void lvm_snapshot_release(lv_t *);
int lvm_write_COW_table_block(vg_t *, lv_t *);
void lvm_hash_link(lv_block_exception_t *, kdev_t, ulong, lv_t *);
int lvm_snapshot_alloc_hash_table(lv_t *);
void lvm_drop_snapshot(vg_t *vg, lv_t *, const char *);
/* lvm_fs.c */
void lvm_init_fs(void);
void lvm_fin_fs(void);
void lvm_fs_create_vg(vg_t *vg_ptr);
void lvm_fs_remove_vg(vg_t *vg_ptr);
devfs_handle_t lvm_fs_create_lv(vg_t *vg_ptr, lv_t *lv);
void lvm_fs_remove_lv(vg_t *vg_ptr, lv_t *lv);
void lvm_fs_create_pv(vg_t *vg_ptr, pv_t *pv);
void lvm_fs_remove_pv(vg_t *vg_ptr, pv_t *pv);
#endif
This diff is collapsed.
This diff is collapsed.
......@@ -4838,4 +4838,4 @@ exit_wavelan_cs(void)
module_init(init_wavelan_cs);
module_exit(exit_wavelan_cs);
MODULE_LICENSE("BSD without advertisement clause");
MODULE_LICENSE("Dual BSD/GPL");
......@@ -53,13 +53,6 @@ static unsigned int pcnet32_portlist[] __initdata = {0x300, 0x320, 0x340, 0x360,
static struct pci_device_id pcnet32_pci_tbl[] __devinitdata = {
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE_HOME, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
/* this id is never reached as the match above occurs first.
* However it clearly has significance, so let's not remove it
* until we know what that significance is. -jgarzik
*/
#if 0
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, 0x1014, 0x2000, 0, 0, 0 },
#endif
{ 0, }
};
......
......@@ -329,7 +329,7 @@ static int __devinit streamer_init_one(struct pci_dev *pdev,
}
static void __devexit streamer_remove_one(struct pci_dev *pdev) {
struct net_device *dev=pci_get_drv_data(pdev);
struct net_device *dev=pci_get_drvdata(pdev);
struct streamer_private *streamer_priv;
#if STREAMER_DEBUG
......
......@@ -45,6 +45,12 @@ if [ "$CONFIG_PARPORT" != "n" ]; then
else
define_tristate CONFIG_PARPORT_ATARI n
fi
if [ "$CONFIG_GSC_LASI" = "y" ]; then
dep_tristate ' LASI/ASP builtin parallel-port' CONFIG_PARPORT_GSC $CONFIG_PARPORT
else
define_tristate CONFIG_PARPORT_GSC n
fi
if [ "$CONFIG_SBUS" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_tristate ' Sparc hardware (EXPERIMENTAL)' CONFIG_PARPORT_SUNBPP $CONFIG_PARPORT
else
......
......@@ -1042,7 +1042,7 @@ void __init pci_read_bridge_bases(struct pci_bus *child)
}
}
static struct pci_bus * __init pci_alloc_bus(void)
static struct pci_bus * __devinit pci_alloc_bus(void)
{
struct pci_bus *b;
......@@ -1055,7 +1055,7 @@ static struct pci_bus * __init pci_alloc_bus(void)
return b;
}
static struct pci_bus * __init pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
{
struct pci_bus *child;
int i;
......@@ -1087,7 +1087,7 @@ static struct pci_bus * __init pci_add_new_bus(struct pci_bus *parent, struct pc
return child;
}
static unsigned int __init pci_do_scan_bus(struct pci_bus *bus);
unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus);
/*
* If it's a bridge, configure it and scan the bus behind it.
......@@ -1099,7 +1099,7 @@ static unsigned int __init pci_do_scan_bus(struct pci_bus *bus);
* them, we proceed to assigning numbers to the remaining buses in
* order to avoid overlaps between old and new bus numbers.
*/
static int __init pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
static int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
{
unsigned int buses;
unsigned short cr;
......@@ -1255,7 +1255,7 @@ int pci_setup_device(struct pci_dev * dev)
* Read the config data for a PCI device, sanity-check it
* and fill in the dev structure...
*/
static struct pci_dev * __init pci_scan_device(struct pci_dev *temp)
struct pci_dev * __devinit pci_scan_device(struct pci_dev *temp)
{
struct pci_dev *dev;
u32 l;
......@@ -1285,7 +1285,7 @@ static struct pci_dev * __init pci_scan_device(struct pci_dev *temp)
return dev;
}
struct pci_dev * __init pci_scan_slot(struct pci_dev *temp)
struct pci_dev * __devinit pci_scan_slot(struct pci_dev *temp)
{
struct pci_bus *bus = temp->bus;
struct pci_dev *dev;
......@@ -1323,7 +1323,7 @@ struct pci_dev * __init pci_scan_slot(struct pci_dev *temp)
return first_dev;
}
static unsigned int __init pci_do_scan_bus(struct pci_bus *bus)
unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
{
unsigned int devfn, max, pass;
struct list_head *ln;
......@@ -1367,7 +1367,7 @@ static unsigned int __init pci_do_scan_bus(struct pci_bus *bus)
return max;
}
int __init pci_bus_exists(const struct list_head *list, int nr)
int __devinit pci_bus_exists(const struct list_head *list, int nr)
{
const struct list_head *l;
......@@ -1379,7 +1379,7 @@ int __init pci_bus_exists(const struct list_head *list, int nr)
return 0;
}
struct pci_bus * __init pci_alloc_primary_bus(int bus)
struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
{
struct pci_bus *b;
......@@ -1398,7 +1398,7 @@ struct pci_bus * __init pci_alloc_primary_bus(int bus)
return b;
}
struct pci_bus * __init pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
{
struct pci_bus *b = pci_alloc_primary_bus(bus);
if (b) {
......@@ -1916,7 +1916,7 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
}
void __init pci_init(void)
void __devinit pci_init(void)
{
struct pci_dev *dev;
......@@ -1931,7 +1931,7 @@ void __init pci_init(void)
#endif
}
static int __init pci_setup(char *str)
static int __devinit pci_setup(char *str)
{
while (str) {
char *k = strchr(str, ',');
......
......@@ -386,6 +386,30 @@ int pci_proc_detach_device(struct pci_dev *dev)
return 0;
}
int pci_proc_attach_bus(struct pci_bus* bus)
{
struct proc_dir_entry *de;
char name[16];
if (!(de = bus->procdir)) {
sprintf(name, "%02x", bus->number);
de = bus->procdir = proc_mkdir(name, proc_bus_pci_dir);
if (!de)
return -ENOMEM;
}
return 0;
}
int pci_proc_detach_bus(struct pci_bus* bus)
{
struct proc_dir_entry *de;
if (!(de = bus->procdir)) {
remove_proc_entry(de->name, proc_bus_pci_dir);
}
return 0;
}
/*
* Backward compatible /proc/pci interface.
......
......@@ -411,6 +411,48 @@ static void __init quirk_cardbus_legacy(struct pci_dev *dev)
pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0);
}
/*
* The AMD io apic can hang the box when an apic irq is masked.
* We check all revs >= B0 (yet not in the pre production!) as the bug
* is currently marked NoFix
*
* We have multiple reports of hangs with this chipset that went away with
* noapic specified. For the moment we assume its the errata. We may be wrong
* of course. However the advice is demonstrably good even if so..
*/
static void __init quirk_amd_ioapic(struct pci_dev *dev)
{
u8 rev;
pci_read_config_byte(dev, PCI_REVISION_ID, &rev);
if(rev >= 0x02)
{
printk(KERN_WARNING "I/O APIC: AMD Errata #22 may be present. In the event of instability try\n");
printk(KERN_WARNING " : booting with the \"noapic\" option.\n");
}
}
/*
* Following the PCI ordering rules is optional on the AMD762. I'm not
* sure what the designers were smoking but let's not inhale...
*
* To be fair to AMD, it follows the spec by default, its BIOS people
* who turn it off!
*/
static void __init quirk_amd_ordering(struct pci_dev *dev)
{
u32 pcic;
pci_read_config_dword(dev, 0x42, &pcic);
if((pcic&2)==0)
{
pcic |= 2;
printk(KERN_WARNING "BIOS disabled PCI ordering compliance, so we enabled it again.\n");
pci_write_config_dword(dev, 0x42, pcic);
}
}
/*
* The main table of quirks.
......@@ -463,6 +505,9 @@ static struct pci_fixup pci_fixups[] __initdata = {
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, quirk_via_irqpic },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_6, quirk_via_irqpic },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7410, quirk_amd_ioapic },
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C, quirk_amd_ordering },
{ 0 }
};
......
......@@ -135,7 +135,16 @@ if [ "$CONFIG_SCSI_NCR53C7xx" != "n" ]; then
bool ' allow FAST-SCSI [10MHz]' CONFIG_SCSI_NCR53C7xx_FAST
bool ' allow DISCONNECT' CONFIG_SCSI_NCR53C7xx_DISCONNECT
fi
if [ "$CONFIG_PCI" = "y" -a "$CONFIG_SCSI_NCR53C7xx" != "y" ]; then
if [ "$CONFIG_PCI" = "y" ]; then
dep_tristate 'SYM53C8XX Version 2 SCSI support' CONFIG_SCSI_SYM53C8XX_2 $CONFIG_SCSI
if [ "$CONFIG_SCSI_SYM53C8XX_2" != "n" ]; then
int ' DMA addressing mode' CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE 1
int ' default tagged command queue depth' CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS 16
int ' maximum number of queued commands' CONFIG_SCSI_SYM53C8XX_MAX_TAGS 64
bool ' use normal IO' CONFIG_SCSI_SYM53C8XX_IOMAPPED
fi
fi
if [ "$CONFIG_PCI" = "y" -a "$CONFIG_SCSI_SYM53C8XX_2" != "y" ]; then
dep_tristate 'NCR53C8XX SCSI support' CONFIG_SCSI_NCR53C8XX $CONFIG_SCSI
dep_tristate 'SYM53C8XX SCSI support' CONFIG_SCSI_SYM53C8XX $CONFIG_SCSI
if [ "$CONFIG_SCSI_NCR53C8XX" != "n" -o "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
......
......@@ -87,6 +87,10 @@ obj-$(CONFIG_SCSI_T128) += t128.o
obj-$(CONFIG_SCSI_DMX3191D) += dmx3191d.o
obj-$(CONFIG_SCSI_DTC3280) += dtc.o
obj-$(CONFIG_SCSI_NCR53C7xx) += 53c7,8xx.o
subdir-$(CONFIG_SCSI_SYM53C8XX_2) += sym53c8xx_2
ifeq ($(CONFIG_SCSI_SYM53C8XX_2),y)
obj-$(CONFIG_SCSI_SYM53C8XX_2) += sym53c8xx_2/sym53c8xx.o
endif
obj-$(CONFIG_SCSI_SYM53C8XX) += sym53c8xx.o
obj-$(CONFIG_SCSI_NCR53C8XX) += ncr53c8xx.o
obj-$(CONFIG_SCSI_EATA_DMA) += eata_dma.o
......
Sat Dec 30 21:30 2000 Gerard Roudier
* version sym-2.1.0-20001230
- Initial release of SYM-2.
Mon Jan 08 21:30 2001 Gerard Roudier
* version sym-2.1.1-20010108
- Change a couple of defines containing ncr or NCR by their
equivalent containing sym or SYM instead.
Sun Jan 14 22:30 2001 Gerard Roudier
* version sym-2.1.2-20010114
- Fix a couple of printfs:
* Add the target number to the display of transfer parameters.
* Make the display of TCQ and queue depth clearer.
Wed Jan 17 23:30 2001 Gerard Roudier
* version sym-2.1.3-20010117
- Wrong residual values were returned in some situations.
This broke cdrecord with linux-2.4.0, for example.
Sat Jan 20 18:00 2001 Gerard Roudier
* version sym-2.1.4-20010120
- Add year 2001 to Copyright.
- A tiny bug in the dma memory freeing path has been fixed.
(Driver unload failed with a bad address reference).
Wed Jan 24 21:00 2001 Gerard Roudier
* version sym-2.1.5-20010124
- Make the driver work under Linux-2.4.x when statically linked
with the kernel.
- Check against memory allocation failure for SCRIPTZ and add the
missing free of this memory on instance detach.
- Check against GPIO3 pulled low for HVD controllers (driver did
just the opposite).
Misdetection of BUS mode was triggerred on module reload only,
since BIOS settings were trusted instead on first load.
Wed Feb 7 21:00 2001 Gerard Roudier
* version sym-2.1.6-20010207
- Call pci_enable_device() as wished by kernel maintainers.
- Change the sym_queue_scsiio() interface.
This is intended to simplify portability.
- Move the code intended to deal with the dowloading of SCRIPTS
from SCRIPTS :) in the patch method (was wrongly placed in
the SCRIPTS setup method).
- Add a missing cpu_to_scr() (np->abort_tbl.addr)
- Remove a wrong cpu_to_scr() (np->targtbl_ba)
- Cleanup a bit the PPR failure recovery code.
Sat Mar 3 21:00 2001 Gerard Roudier
- Add option SYM_OPT_ANNOUNCE_TRANSFER_RATE and move the
corresponding code to file sym_misc.c.
Also move the code that sniffes INQUIRY to sym_misc.c.
This allows to share the corresponding code with NetBSD
without polluating the core driver source (sym_hipd.c).
- Add optionnal code that handles IO timeouts from the driver.
(not used under Linux, but required for NetBSD)
- Donnot assume any longer that PAGE_SHIFT and PAGE_SIZE are
defined at compile time, as at least NetBSD uses variables
in memory for that.
- Refine a work-around for the C1010-33 that consists in
disabling internal LOAD/STORE. Was applied up to revision 1.
Is now only applied to revision 0.
- Some code reorganisations due to code moves between files.
Tues Apr 10 21:00 2001 Gerard Roudier
* version sym-2.1.9-20010412
- Reset 53C896 and 53C1010 chip according to the manual.
(i.e.: set the ABRT bit in ISTAT if SCRIPTS are running)
- Set #LUN in request sense only if scsi version <= 2 and
#LUN <= 7.
- Set busy_itl in LCB to 1 if the LCB is allocated and a
SCSI command is active. This is a simplification.
- In sym_hcb_free(), donnot scan the free_ccbq if no CCBs
has been allocated. This fixes a panic if attach failed.
- Add DT/ST (double/simple transition) in the transfer
negotiation announce.
- Forces the max number of tasks per LUN to at least 64.
- Use pci_set_dma_mask() for linux-2.4.3 and above.
- A couple of comments fixes.
Wed May 22:00 2001 Gerard Roudier
* version sym-2.1.10-20010509
- Mask GPCNTL against 0x1c (was 0xfc) for the reading of the NVRAM.
This ensure LEDC bit will not be set on 896 and later chips.
Fix sent by Chip Salzenberg <chip@perlsupport.com>.
- Define the number of PQS BUSes supported.
Fix sent by Stig Telfer <stig@api-networks.com>
- Miscellaneous common code rearrangements due to NetBSD accel
ioctl support, without impact on Linux (hopefully).
Mon July 2 12:00 2001 Gerard Roudier
* version sym-2.1.11-20010702
- Add Tekram 390 U2B/U2W SCSI LED handling.
Submitted by Chip Salzenberg <chip@valinux.com>
- Add call to scsi_set_pci_device() for kernels >= 2.4.4.
- Check pci dma mapping failures and complete the IO with some
error when such mapping fails.
- Fill in instance->max_cmd_len for kernels > 2.4.0.
- A couple of tiny fixes ...
Sun Sep 9 18:00 2001 Gerard Roudier
* version sym-2.1.12-20010909
- Change my email address.
- Add infrastructure for the forthcoming 64 bit DMA adressing support.
(Based on PCI 64 bit patch from David S. Miller)
- Donnot use anymore vm_offset_t type.
Sat Sep 15 20:00 2001 Gerard Roudier
* version sym-2.1.13-20010916
- Add support for 64 bit DMA addressing using segment registers.
16 registers for up to 4 GB x 16 -> 64 GB.
Sat Sep 22 12:00 2001 Gerard Roudier
* version sym-2.1.14-20010922
- Complete rewrite of the eh handling. The driver is now using a
semaphore in order to behave synchronously as required by the eh
threads. A timer is also used to prevent from waiting indefinitely.
Sun Sep 30 17:00 2001 Gerard Roudier
* version sym-2.1.15-20010930
- Include <linux/module.h> unconditionnaly as expected by latest
kernels.
- Use del_timer_sync() for recent kernels to kill the driver timer
on module release.
Sun Oct 28 15:00 2001 Gerard Roudier
* version sym-2.1.16-20011028
- Slightly simplify driver configuration.
- Prepare a new patch against linux-2.4.13.
This diff is collapsed.
# File: drivers/sym53c8xx/Makefile
# Makefile for the NCR/SYMBIOS/LSI 53C8XX PCI SCSI controllers driver.
list-multi := sym53c8xx.o
sym53c8xx-objs := sym_fw.o sym_glue.o sym_hipd.o sym_malloc.o sym_misc.o sym_nvram.o
obj-$(CONFIG_SCSI_SYM53C8XX_2) := sym53c8xx.o
EXTRA_CFLAGS += -I.
sym53c8xx.o: $(sym53c8xx-objs)
$(LD) -r -o $@ $(sym53c8xx-objs)
include $(TOPDIR)/Rules.make
clean:
rm -f *.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment