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,13 +439,24 @@ 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;
......@@ -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)
{
pci_unregister_driver(&lynx_pcidriver);
hpsb_unregister_lowlevel(&lynx_template);
pci_unregister_driver(&lynx_pcidriver);
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
......
This diff is collapsed.
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.
......@@ -131,7 +131,8 @@ static void hidinput_configure_usage(struct hid_device *device, struct hid_field
if (usage->hid == HID_GD_HATSWITCH) {
usage->code = ABS_HAT0X;
usage->hat = 1 + (field->logical_maximum == 4);
usage->hat_min = field->logical_minimum;
usage->hat_max = field->logical_maximum;
}
break;
......@@ -285,7 +286,7 @@ static void hidinput_configure_usage(struct hid_device *device, struct hid_field
input->absflat[usage->code] = (b - a) >> 4;
}
if (usage->hat) {
if (usage->hat_min != usage->hat_max) {
int i;
for (i = usage->code; i < usage->code + 2 && i <= max; i++) {
input->absmax[i] = 1;
......@@ -302,9 +303,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
struct input_dev *input = &hid->input;
int *quirks = &hid->quirks;
if (usage->hat) {
if (usage->hat == 2) value = value * 2;
if (value > 8) value = 8;
if (usage->hat_min != usage->hat_max) {
value = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1) + 1;
if (value < 0 || value > 8) value = 0;
input_event(input, usage->type, usage->code , hid_hat_to_axis[value].x);
input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[value].y);
return;
......
......@@ -234,7 +234,8 @@ struct hid_usage {
unsigned hid; /* hid usage code */
__u16 code; /* input driver code */
__u8 type; /* input driver type */
__u8 hat; /* hat switch fun */
__s8 hat_min; /* hat switch fun */
__s8 hat_max; /* ditto */
};
struct hid_field {
......
This diff is collapsed.
/* Driver for USB Mass Storage compliant devices
* SCSI layer glue code
*
* $Id: scsiglue.c,v 1.23 2001/10/15 07:02:32 mdharm Exp $
* $Id: scsiglue.c,v 1.24 2001/11/11 03:33:58 mdharm Exp $
*
* Current development and maintenance by:
* (c) 1999, 2000 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
......@@ -346,7 +346,7 @@ static int proc_info (char *buffer, char **start, off_t offset, int length,
/* show the GUID of the device */
SPRINTF(" GUID: " GUID_FORMAT "\n", GUID_ARGS(us->guid));
SPRINTF(" Attached: %d\n", us->pusb_dev != NULL);
SPRINTF(" Attached: %s\n", us->pusb_dev ? "Yes" : "No");
/*
* Calculate start of next buffer, and return value.
......
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