]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] PA-RISC update
authorMatthew Wilcox <willy@debian.org>
Sun, 14 Mar 2004 02:28:18 +0000 (18:28 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 14 Mar 2004 02:28:18 +0000 (18:28 -0800)
Updates for 2.6.4 for PARISC:

 - defconfigs (Randolph Chung)
 - copyright updates (Grant Grundler)
 - Fix DOS hole in sys_clone (James Bottomley)
 - missing hardware ID (Andy Walker)
 - disable interrupts during cache-flushes (LaMont Jones)
 - Fix crash on machines with <256MB ram (Randolph Chung)
 - Make SuckyIO IDE work better (Randolph Chung)
 - Align data_start so the extable is writable (Randolph Chung)
 - Extensive rewrite of virtual merging code (James Bottomley)
 - Fix EISA, non-PCI module builds (Matthew Wilcox)
 - Fix Elroy PCI config space byte & word writes (Grant Grundler)
 - Eliminate a warning in parport_gsc (Helge Deller)
 - Fix endian problem with ide mmio macros (Randolph Chung)
 - Delete asm/keyboard.h (Matthew Wilcox)
 - Delete asm/md.h (Grant Grundler)
 - Eliminate a warning in ALSA harmony (Matthew Wilcox)

35 files changed:
arch/parisc/configs/712_defconfig
arch/parisc/configs/a500_defconfig
arch/parisc/configs/b180_defconfig [new file with mode: 0644]
arch/parisc/configs/c3000_defconfig
arch/parisc/defconfig
arch/parisc/hpux/entry_hpux.S
arch/parisc/kernel/entry.S
arch/parisc/kernel/hardware.c
arch/parisc/kernel/head64.S
arch/parisc/kernel/module.c
arch/parisc/kernel/pacache.S
arch/parisc/kernel/parisc_ksyms.c
arch/parisc/kernel/pci.c
arch/parisc/kernel/process.c
arch/parisc/kernel/vmlinux.lds.S
drivers/parisc/ccio-dma.c
drivers/parisc/eisa.c
drivers/parisc/gsc.c
drivers/parisc/iommu-helpers.h [new file with mode: 0644]
drivers/parisc/lba_pci.c
drivers/parisc/sba_iommu.c
drivers/parisc/superio.c
drivers/parport/parport_gsc.c
include/asm-parisc/floppy.h
include/asm-parisc/grfioctl.h
include/asm-parisc/ide.h
include/asm-parisc/io.h
include/asm-parisc/ioctl.h
include/asm-parisc/keyboard.h [deleted file]
include/asm-parisc/md.h [deleted file]
include/asm-parisc/namei.h
include/asm-parisc/pci.h
include/asm-parisc/semaphore.h
include/asm-parisc/superio.h
sound/parisc/harmony.c

index b731d6118dfb020a35af74b861459a6cb2f48212..8b3ebd1f576ba2053e4870899dda1b3a60cf23ee 100644 (file)
@@ -22,6 +22,7 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
@@ -30,6 +31,7 @@ CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -64,7 +66,6 @@ CONFIG_GSC_WAX=y
 # CONFIG_PCI is not set
 # CONFIG_CHASSIS_LCD_LED is not set
 # CONFIG_PDC_CHASSIS is not set
-# CONFIG_HOTPLUG is not set
 
 #
 # Executable file formats
@@ -79,6 +80,7 @@ CONFIG_BINFMT_ELF=y
 #
 # Generic Driver Options
 #
+CONFIG_DEBUG_DRIVER=y
 
 #
 # Memory Technology Devices (MTD)
@@ -99,7 +101,6 @@ CONFIG_PARPORT_GSC=y
 #
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
@@ -110,7 +111,6 @@ CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_CRYPTOLOOP=y
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
 
 #
 # ATA/ATAPI/MFM/RLL support
@@ -144,7 +144,6 @@ CONFIG_CHR_DEV_SG=y
 #
 # SCSI low-level drivers
 #
-# CONFIG_SCSI_AIC7XXX is not set
 # CONFIG_SCSI_AIC7XXX_OLD is not set
 # CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_PPA is not set
@@ -170,12 +169,20 @@ CONFIG_MD_RAID5=y
 #
 # Fusion MPT device support
 #
-# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
 
 #
 # I2O device support
 #
 
+#
+# Macintosh device drivers
+#
+
 #
 # Networking support
 #
@@ -287,7 +294,7 @@ CONFIG_NET_RADIO=y
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
 # Telephony Support
@@ -318,8 +325,8 @@ CONFIG_INPUT_EVDEV=y
 CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
 # CONFIG_HP_SDC is not set
 
 #
@@ -331,15 +338,17 @@ CONFIG_INPUT_KEYBOARD=y
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
 # CONFIG_KEYBOARD_HIL_OLD is not set
+# CONFIG_KEYBOARD_HIL is not set
 CONFIG_INPUT_MOUSE=y
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_HIL is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
 CONFIG_INPUT_MISC=y
 # CONFIG_INPUT_PCSPKR is not set
 # CONFIG_INPUT_UINPUT is not set
-CONFIG_INPUT_GSC=y
+# CONFIG_HP_SDC_RTC is not set
 
 #
 # Character devices
@@ -370,30 +379,13 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_PRINTER=y
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
 # CONFIG_TIPAR is not set
 
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# I2C Algorithms
-#
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-
 #
 # Mice
 #
@@ -424,6 +416,15 @@ CONFIG_GEN_RTC=y
 # CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
 #
 # Multimedia devices
 #
@@ -444,7 +445,6 @@ CONFIG_FB_STI=y
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 # CONFIG_MDA_CONSOLE is not set
 CONFIG_STI_CONSOLE=y
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
@@ -474,6 +474,11 @@ CONFIG_LOGO_PARISC_CLUT224=y
 # USB support
 #
 
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
 #
 # File systems
 #
@@ -511,7 +516,6 @@ CONFIG_JOLIET=y
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
@@ -520,6 +524,7 @@ CONFIG_RAMFS=y
 #
 # Miscellaneous filesystems
 #
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_HPFS_FS is not set
@@ -549,11 +554,11 @@ CONFIG_SUNRPC=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
 # CONFIG_NLS_CODEPAGE_737 is not set
@@ -628,6 +633,7 @@ CONFIG_CRYPTO=y
 # CONFIG_CRYPTO_AES is not set
 # CONFIG_CRYPTO_CAST5 is not set
 # CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_ARC4 is not set
 # CONFIG_CRYPTO_DEFLATE is not set
 # CONFIG_CRYPTO_TEST is not set
 
index 8fb51587b1b1db34b31dc74b7db615a0fc2c5bae..21401b2c64f8ae23093922702ec9a9c330041e4b 100644 (file)
@@ -23,6 +23,7 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=16
+CONFIG_HOTPLUG=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_EMBEDDED=y
@@ -72,7 +73,6 @@ CONFIG_IOMMU_SBA=y
 # CONFIG_SUPERIO is not set
 CONFIG_CHASSIS_LCD_LED=y
 # CONFIG_PDC_CHASSIS is not set
-CONFIG_HOTPLUG=y
 
 #
 # PCMCIA/CardBus support
@@ -102,6 +102,7 @@ CONFIG_BINFMT_ELF=y
 # Generic Driver Options
 #
 # CONFIG_FW_LOADER is not set
+CONFIG_DEBUG_DRIVER=y
 
 #
 # Memory Technology Devices (MTD)
@@ -116,7 +117,6 @@ CONFIG_BINFMT_ELF=y
 #
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
@@ -195,9 +195,15 @@ CONFIG_SCSI_SYM53C8XX_IOMAPPED=y
 CONFIG_SCSI_QLOGIC_FC=m
 # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
 CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+CONFIG_SCSI_QLA2300=m
+CONFIG_SCSI_QLA2322=m
+CONFIG_SCSI_QLA6312=m
+CONFIG_SCSI_QLA6322=m
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
 CONFIG_SCSI_DEBUG=m
 
 #
@@ -215,6 +221,7 @@ CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
 # CONFIG_MD_RAID5 is not set
+# CONFIG_MD_RAID6 is not set
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_BLK_DEV_DM is not set
 
@@ -227,14 +234,17 @@ CONFIG_FUSION_ISENSE=m
 CONFIG_FUSION_CTL=m
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
 #
 # I2O device support
 #
-# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
 
 #
 # Networking support
@@ -362,7 +372,7 @@ CONFIG_LLC2=m
 #
 # Network testing
 #
-# CONFIG_NET_PKTGEN is not set
+CONFIG_NET_PKTGEN=m
 CONFIG_NETDEVICES=y
 
 #
@@ -391,9 +401,10 @@ CONFIG_TYPHOON=m
 #
 CONFIG_NET_TULIP=y
 CONFIG_DE2104X=m
-CONFIG_TULIP=y
+CONFIG_TULIP=m
 # CONFIG_TULIP_MWI is not set
 CONFIG_TULIP_MMIO=y
+# CONFIG_TULIP_NAPI is not set
 # CONFIG_DE4X5 is not set
 # CONFIG_WINBOND_840 is not set
 # CONFIG_DM9102 is not set
@@ -405,10 +416,12 @@ CONFIG_PCNET32=m
 # CONFIG_AMD8111_ETH is not set
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
 # CONFIG_DGRS is not set
 CONFIG_EEPRO100=m
 # CONFIG_EEPRO100_PIO is not set
 CONFIG_E100=m
+CONFIG_E100_NAPI=y
 # CONFIG_FEALNX is not set
 CONFIG_NATSEMI=m
 # CONFIG_NE2K_PCI is not set
@@ -418,6 +431,7 @@ CONFIG_8139TOO=m
 # CONFIG_8139TOO_TUNE_TWISTER is not set
 # CONFIG_8139TOO_8129 is not set
 # CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_8139_RXBUF_IDX=1
 # CONFIG_SIS900 is not set
 CONFIG_EPIC100=m
 # CONFIG_SUNDANCE is not set
@@ -482,13 +496,13 @@ CONFIG_HERMES=m
 CONFIG_PLX_HERMES=m
 CONFIG_TMD_HERMES=m
 CONFIG_PCI_HERMES=m
+# CONFIG_ATMEL is not set
 
 #
 # Wireless 802.11b Pcmcia/Cardbus cards support
 #
 CONFIG_PCMCIA_HERMES=m
 CONFIG_AIRO_CS=m
-# CONFIG_PCMCIA_ATMEL is not set
 # CONFIG_PCMCIA_WL3501 is not set
 CONFIG_NET_WIRELESS=y
 
@@ -535,7 +549,7 @@ CONFIG_PCMCIA_XIRC2PS=m
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
 # Telephony Support
@@ -602,25 +616,7 @@ CONFIG_PDC_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# I2C Algorithms
-#
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
+# CONFIG_LEGACY_PTYS is not set
 
 #
 # Mice
@@ -658,6 +654,15 @@ CONFIG_GEN_RTC_X=y
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
 #
 # Multimedia devices
 #
@@ -676,7 +681,6 @@ CONFIG_MAX_RAW_DEVS=256
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 # CONFIG_MDA_CONSOLE is not set
 # CONFIG_STI_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
@@ -692,6 +696,10 @@ CONFIG_DUMMY_CONSOLE=y
 # USB support
 #
 # CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
 # CONFIG_USB_GADGET is not set
 
 #
@@ -711,6 +719,7 @@ CONFIG_JFS_FS=m
 CONFIG_XFS_FS=m
 # CONFIG_XFS_RT is not set
 # CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
 # CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
@@ -740,7 +749,6 @@ CONFIG_VFAT_FS=m
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
@@ -753,6 +761,7 @@ CONFIG_RAMFS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -876,6 +885,7 @@ CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_AES=m
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
+# CONFIG_CRYPTO_ARC4 is not set
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_TEST=m
 
diff --git a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig
new file mode 100644 (file)
index 0000000..40218f4
--- /dev/null
@@ -0,0 +1,776 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+# CONFIG_EXPERIMENTAL is not set
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_KMOD is not set
+
+#
+# Processor type and features
+#
+# CONFIG_PA7000 is not set
+# CONFIG_PA7100LC is not set
+CONFIG_PA7200=y
+# CONFIG_PA8X00 is not set
+CONFIG_PA11=y
+# CONFIG_64BIT is not set
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HPUX is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+# CONFIG_HPPB is not set
+# CONFIG_IOMMU_CCIO is not set
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+# CONFIG_PCI_LBA is not set
+# CONFIG_CHASSIS_LCD_LED is not set
+# CONFIG_PDC_CHASSIS is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_DEBUG_DRIVER=y
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+CONFIG_PARPORT_PC_CML1=y
+# CONFIG_PARPORT_SERIAL is not set
+CONFIG_PARPORT_GSC=y
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=y
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_REPORT_LUNS is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=y
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=y
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_ZALON is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA6322 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_LINEAR=y
+CONFIG_MD_RAID0=y
+CONFIG_MD_RAID1=y
+CONFIG_MD_RAID5=y
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_DM is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+CONFIG_INET_ECN=y
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_LASI_82596 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+CONFIG_TULIP=y
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_IXGB is not set
+# CONFIG_FDDI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_FILTER is not set
+# CONFIG_PPP_ASYNC is not set
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BT is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+# CONFIG_HP_SDC is not set
+# CONFIG_SERIO_PCIPS2 is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_HIL_OLD is not set
+# CONFIG_KEYBOARD_HIL is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_HIL is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_HP_SDC_RTC is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MUX is not set
+# CONFIG_PDC_CONSOLE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_PCI_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_FAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_SUNRPC=y
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_INFO is not set
+
+#
+# Security options
+#
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Library routines
+#
+CONFIG_CRC32=y
index e1a7a6747d00cd08341ae57a83c6af65bb4bbd76..1f8d98bf14893dd44c6c066304e4a9d22f75f16f 100644 (file)
@@ -23,6 +23,7 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=16
+CONFIG_HOTPLUG=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_EMBEDDED=y
@@ -71,7 +72,6 @@ CONFIG_IOMMU_SBA=y
 CONFIG_SUPERIO=y
 # CONFIG_CHASSIS_LCD_LED is not set
 # CONFIG_PDC_CHASSIS is not set
-CONFIG_HOTPLUG=y
 
 #
 # PCMCIA/CardBus support
@@ -101,6 +101,7 @@ CONFIG_BINFMT_ELF=y
 # Generic Driver Options
 #
 CONFIG_FW_LOADER=y
+CONFIG_DEBUG_DRIVER=y
 
 #
 # Memory Technology Devices (MTD)
@@ -128,7 +129,6 @@ CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
 
 #
 # ATA/ATAPI/MFM/RLL support
@@ -153,6 +153,7 @@ CONFIG_BLK_DEV_IDESCSI=y
 #
 # IDE chipset support/bugfixes
 #
+CONFIG_IDE_GENERIC=y
 CONFIG_BLK_DEV_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 # CONFIG_BLK_DEV_OFFBOARD is not set
@@ -161,7 +162,6 @@ CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_BLK_DEV_IDEDMA_PCI=y
 # CONFIG_BLK_DEV_IDEDMA_FORCED is not set
 # CONFIG_IDEDMA_PCI_AUTO is not set
-# CONFIG_IDEDMA_PCI_WIP is not set
 CONFIG_BLK_DEV_ADMA=y
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
@@ -252,11 +252,13 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
 CONFIG_SCSI_QLOGIC_FC=m
 # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
 CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA2XXX_CONFIG=y
-CONFIG_SCSI_QLA2XXX=m
+CONFIG_SCSI_QLA2XXX=y
 # CONFIG_SCSI_QLA21XX is not set
 # CONFIG_SCSI_QLA22XX is not set
-CONFIG_SCSI_QLA23XX=m
+CONFIG_SCSI_QLA2300=m
+CONFIG_SCSI_QLA2322=m
+CONFIG_SCSI_QLA6312=m
+CONFIG_SCSI_QLA6322=m
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_NSP32 is not set
@@ -280,8 +282,9 @@ CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
 # CONFIG_MD_RAID5 is not set
 # CONFIG_MD_RAID6 is not set
-# CONFIG_MD_MULTIPATH is not set
-# CONFIG_BLK_DEV_DM is not set
+CONFIG_MD_MULTIPATH=y
+CONFIG_BLK_DEV_DM=y
+# CONFIG_DM_CRYPT is not set
 
 #
 # Fusion MPT device support
@@ -292,7 +295,7 @@ CONFIG_FUSION_ISENSE=m
 CONFIG_FUSION_CTL=m
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -301,6 +304,10 @@ CONFIG_FUSION_CTL=m
 #
 # CONFIG_I2O is not set
 
+#
+# Macintosh device drivers
+#
+
 #
 # Networking support
 #
@@ -457,6 +464,7 @@ CONFIG_DE2104X=m
 CONFIG_TULIP=y
 # CONFIG_TULIP_MWI is not set
 # CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
 CONFIG_DE4X5=m
 CONFIG_WINBOND_840=m
 # CONFIG_DM9102 is not set
@@ -474,6 +482,7 @@ CONFIG_B44=m
 CONFIG_EEPRO100=m
 # CONFIG_EEPRO100_PIO is not set
 CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
 # CONFIG_FEALNX is not set
 CONFIG_NATSEMI=m
 # CONFIG_NE2K_PCI is not set
@@ -483,6 +492,7 @@ CONFIG_8139TOO=m
 # CONFIG_8139TOO_TUNE_TWISTER is not set
 # CONFIG_8139TOO_8129 is not set
 # CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_8139_RXBUF_IDX=1
 # CONFIG_SIS900 is not set
 # CONFIG_EPIC100 is not set
 # CONFIG_SUNDANCE is not set
@@ -571,7 +581,7 @@ CONFIG_PCMCIA_AXNET=m
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
 # Telephony Support
@@ -652,7 +662,8 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 
 #
 # Mice
@@ -695,6 +706,10 @@ CONFIG_MAX_RAW_DEVS=256
 #
 # CONFIG_I2C is not set
 
+#
+# Misc devices
+#
+
 #
 # Multimedia devices
 #
@@ -716,6 +731,7 @@ CONFIG_FB=y
 CONFIG_FB_STI=y
 # CONFIG_FB_RIVA is not set
 # CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
 # CONFIG_FB_RADEON is not set
 # CONFIG_FB_ATY128 is not set
 # CONFIG_FB_ATY is not set
@@ -731,7 +747,6 @@ CONFIG_FB_STI=y
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 # CONFIG_MDA_CONSOLE is not set
 CONFIG_STI_CONSOLE=y
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
@@ -823,7 +838,6 @@ CONFIG_USB_KBTAB=m
 # USB Imaging devices
 #
 CONFIG_USB_MDC800=m
-CONFIG_USB_SCANNER=m
 CONFIG_USB_MICROTEK=m
 CONFIG_USB_HPUSBSCSI=m
 
@@ -867,6 +881,10 @@ CONFIG_USB_LEGOTOWER=m
 # CONFIG_USB_LCD is not set
 # CONFIG_USB_LED is not set
 # CONFIG_USB_TEST is not set
+
+#
+# USB Gadget Support
+#
 # CONFIG_USB_GADGET is not set
 
 #
@@ -883,6 +901,7 @@ CONFIG_JBD=y
 CONFIG_XFS_FS=m
 # CONFIG_XFS_RT is not set
 # CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
 # CONFIG_XFS_POSIX_ACL is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
@@ -912,7 +931,6 @@ CONFIG_VFAT_FS=m
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
 # CONFIG_HUGETLBFS is not set
@@ -925,6 +943,7 @@ CONFIG_RAMFS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -1046,6 +1065,7 @@ CONFIG_CRYPTO_SERPENT=m
 CONFIG_CRYPTO_AES=m
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
+# CONFIG_CRYPTO_ARC4 is not set
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_TEST=m
 
index d68fac97464e55adb669a469e7b1e632e3162dbc..b3016fb415fa28dbd744138f034f1edb44b76b18 100644 (file)
@@ -22,6 +22,7 @@ CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 # CONFIG_EMBEDDED is not set
@@ -31,6 +32,7 @@ CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -71,7 +73,6 @@ CONFIG_IOMMU_SBA=y
 CONFIG_SUPERIO=y
 CONFIG_CHASSIS_LCD_LED=y
 CONFIG_PDC_CHASSIS=y
-# CONFIG_HOTPLUG is not set
 
 #
 # Executable file formats
@@ -86,6 +87,7 @@ CONFIG_BINFMT_ELF=y
 #
 # Generic Driver Options
 #
+# CONFIG_DEBUG_DRIVER is not set
 
 #
 # Memory Technology Devices (MTD)
@@ -108,7 +110,6 @@ CONFIG_PARPORT_GSC=y
 #
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
@@ -195,8 +196,16 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
 # CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA6322 is not set
 # CONFIG_SCSI_SIM710 is not set
 # CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_NSP32 is not set
 # CONFIG_SCSI_DEBUG is not set
 
@@ -209,6 +218,7 @@ CONFIG_MD_LINEAR=y
 CONFIG_MD_RAID0=y
 CONFIG_MD_RAID1=y
 CONFIG_MD_RAID5=y
+# CONFIG_MD_RAID6 is not set
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_BLK_DEV_DM is not set
 
@@ -218,7 +228,7 @@ CONFIG_MD_RAID5=y
 # CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -227,6 +237,10 @@ CONFIG_MD_RAID5=y
 #
 # CONFIG_I2O is not set
 
+#
+# Macintosh device drivers
+#
+
 #
 # Networking support
 #
@@ -319,6 +333,7 @@ CONFIG_NET_TULIP=y
 CONFIG_TULIP=y
 # CONFIG_TULIP_MWI is not set
 # CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
 # CONFIG_DE4X5 is not set
 # CONFIG_WINBOND_840 is not set
 # CONFIG_DM9102 is not set
@@ -330,6 +345,7 @@ CONFIG_NET_PCI=y
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_AC3200 is not set
 # CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
 # CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
@@ -386,6 +402,7 @@ CONFIG_NET_RADIO=y
 #
 CONFIG_AIRO=y
 # CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
 CONFIG_NET_WIRELESS=y
 
 #
@@ -419,7 +436,7 @@ CONFIG_NET_WIRELESS=y
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
 # Telephony Support
@@ -450,10 +467,10 @@ CONFIG_INPUT_EVDEV=y
 CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
 CONFIG_HP_SDC=y
-# CONFIG_HIL_MLC is not set
+CONFIG_HIL_MLC=y
 # CONFIG_SERIO_PCIPS2 is not set
 
 #
@@ -464,10 +481,11 @@ CONFIG_INPUT_KEYBOARD=y
 # CONFIG_KEYBOARD_SUNKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_HIL_OLD is not set
+CONFIG_KEYBOARD_HIL=y
 CONFIG_INPUT_MOUSE=y
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_HIL is not set
 CONFIG_INPUT_JOYSTICK=y
 # CONFIG_JOYSTICK_IFORCE is not set
 # CONFIG_JOYSTICK_WARRIOR is not set
@@ -485,7 +503,6 @@ CONFIG_INPUT_TOUCHSCREEN=y
 CONFIG_INPUT_MISC=y
 # CONFIG_INPUT_PCSPKR is not set
 # CONFIG_INPUT_UINPUT is not set
-CONFIG_INPUT_GSC=y
 CONFIG_HP_SDC_RTC=y
 
 #
@@ -517,30 +534,13 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_PRINTER=y
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
 # CONFIG_TIPAR is not set
 
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# I2C Algorithms
-#
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-
 #
 # Mice
 #
@@ -571,6 +571,15 @@ CONFIG_GEN_RTC=y
 # CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
 #
 # Multimedia devices
 #
@@ -585,16 +594,19 @@ CONFIG_GEN_RTC=y
 # Graphics support
 #
 CONFIG_FB=y
+# CONFIG_FB_PM2 is not set
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_IMSTT is not set
 CONFIG_FB_STI=y
 # CONFIG_FB_RIVA is not set
 # CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
 # CONFIG_FB_RADEON is not set
 # CONFIG_FB_ATY128 is not set
 # CONFIG_FB_ATY is not set
 # CONFIG_FB_SIS is not set
 # CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
 # CONFIG_FB_3DFX is not set
 # CONFIG_FB_VOODOO1 is not set
 # CONFIG_FB_TRIDENT is not set
@@ -603,7 +615,6 @@ CONFIG_FB_STI=y
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 # CONFIG_MDA_CONSOLE is not set
 CONFIG_STI_CONSOLE=y
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
@@ -686,7 +697,6 @@ CONFIG_USB_OHCI_HCD=y
 # USB Imaging devices
 #
 # CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
 # CONFIG_USB_MICROTEK is not set
 # CONFIG_USB_HPUSBSCSI is not set
 
@@ -721,11 +731,19 @@ CONFIG_USB_OHCI_HCD=y
 #
 # USB Miscellaneous drivers
 #
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
 # CONFIG_USB_TIGL is not set
 # CONFIG_USB_AUERSWALD is not set
 # CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
 # CONFIG_USB_BRLVGER is not set
 # CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+
+#
+# USB Gadget Support
+#
 # CONFIG_USB_GADGET is not set
 
 #
@@ -766,7 +784,6 @@ CONFIG_JOLIET=y
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
@@ -778,6 +795,7 @@ CONFIG_RAMFS=y
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -809,7 +827,6 @@ CONFIG_SUNRPC=y
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
 # CONFIG_AFS_FS is not set
 
 #
@@ -817,11 +834,11 @@ CONFIG_SUNRPC=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
 # CONFIG_NLS_CODEPAGE_737 is not set
@@ -899,6 +916,7 @@ CONFIG_CRYPTO=y
 # CONFIG_CRYPTO_AES is not set
 # CONFIG_CRYPTO_CAST5 is not set
 # CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_ARC4 is not set
 # CONFIG_CRYPTO_DEFLATE is not set
 # CONFIG_CRYPTO_TEST is not set
 
index 0ffd1a502cb9689826c727bddaa4fcd20e6e711a..93e6e366580f3dd3de4711ec9d7ee806365327c8 100644 (file)
@@ -1,11 +1,23 @@
-/*
+/*    syscall table for HPUX specific syscalls
  *
- * Linux/PARISC Project (http://www.parisc-linux.org/)
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 1999 Matthew Wilcox <willy at debian . org>
  *
- * modified by Matthew Wilcox <willy@bofh.ai> 1999-07-26
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-
 #include <linux/sys.h>
 #include <linux/linkage.h>
 #include <asm/unistd.h>
index cb48ecd02d9e7fcfd3b514060436c403084fe455..040956b70ad6e9f052ece2562fcdc96bf64b28ba 100644 (file)
@@ -533,7 +533,7 @@ __kernel_thread:
        ldil    L%CLONE_UNTRACED, %r26
        ldo     CLONE_VM(%r26), %r26   /* Force CLONE_VM since only init_mm */
        or      %r26, %r24, %r26      /* will have kernel mappings.      */
-       copy    %r0, %r25               /* stack_start */
+       ldi     1, %r25                 /* stack_start, signals kernel thread */
        stw     %r0, -52(%r30)          /* user_tid */
 #ifdef __LP64__
        ldo     -16(%r30),%r29          /* Reference param save area */
index 4ba9e363fbf265c91c9781416b15ee24824fca49..f9723cbf7852ec35c5c030c8402b62f22f4bdda7 100644 (file)
@@ -333,8 +333,9 @@ static struct hp_hardware hp_hardware_list[] __initdata = {
        {HPHW_A_DMA, 0x01F, 0x00089, 0x80, "SkyHawk 100/120 FW-SCSI"}, 
        {HPHW_A_DMA, 0x027, 0x00089, 0x80, "Piranha 100 FW-SCSI"}, 
        {HPHW_A_DMA, 0x032, 0x00089, 0x80, "Raven T' Core FW-SCSI"}, 
-       {HPHW_A_DMA, 0x03b, 0x00089, 0x80, "Raven U/L2 Core FW-SCSI"}, 
-       {HPHW_A_DMA, 0x03d, 0x00089, 0x80, "Merlin 160 Core FW-SCSI"},
+       {HPHW_A_DMA, 0x03B, 0x00089, 0x80, "Raven U/L2 Core FW-SCSI"}, 
+       {HPHW_A_DMA, 0x03C, 0x00089, 0x80, "Merlin 132 Core FW-SCSI"},
+       {HPHW_A_DMA, 0x03D, 0x00089, 0x80, "Merlin 160 Core FW-SCSI"},
        {HPHW_A_DMA, 0x044, 0x00089, 0x80, "Mohawk Core FW-SCSI"}, 
        {HPHW_A_DMA, 0x051, 0x00089, 0x80, "Firehawk FW-SCSI"}, 
        {HPHW_A_DMA, 0x058, 0x00089, 0x80, "FireHawk 200 FW-SCSI"}, 
index d1b52dc517107615ce6927c09e51440e263f008b..a8c7c7b6688641bc03032a3f8439aefcf4337445 100644 (file)
@@ -165,9 +165,9 @@ common_stext:
 #endif /* CONFIG_SMP */
 
        /* Save the rfi target address */
-       ldo             -THREAD_SZ_ALGN(%sp), %r1
-       ldd             TI_TASK(%r1), %r1
-       std             %r11,  TASK_PT_GR11(%r1)
+       ldd             TI_TASK-THREAD_SZ_ALGN(%sp), %r10
+       tophys_r1       %r10
+       std             %r11,  TASK_PT_GR11(%r10)
 
 #ifndef CONFIG_PDC_NARROW
        /* Switch to wide mode; Superdome doesn't support narrow PDC
@@ -197,9 +197,9 @@ common_stext:
 
 stext_pdc_ret:
        /* restore rfi target address*/
-       ldo             -THREAD_SZ_ALGN(%sp), %r1
-       ldd             TI_TASK(%r1), %r1
-       ldd             TASK_PT_GR11(%r1), %r11
+       ldd             TI_TASK-THREAD_SZ_ALGN(%sp), %r10
+       tophys_r1       %r10
+       ldd             TASK_PT_GR11(%r10), %r11
 
        /* PARANOID: clear user scratch/user space SR's */
        mtsp    %r0,%sr0
@@ -302,6 +302,7 @@ smp_slave_stext:
        /*  Initialize the SP - monarch sets up smp_init_current_idle_task */
        load32          PA(smp_init_current_idle_task),%sp
        ldd             0(%sp),%sp      /* load task address */
+       ldd             TASK_THREAD_INFO(%sp), %sp
        mtctl           %sp,%cr30       /* store in cr30 */
        ldo             THREAD_SZ_ALGN(%sp),%sp
        tophys_r1       %sp
index 2324954c9cf7d431165ac740368a1c8227cece4c..1ac525b53b8c8a8411f11c81db31756f5e0bae4e 100644 (file)
@@ -1,25 +1,28 @@
-/*  Kernel module help for parisc.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-    (c) 2003 Randolph Chung <tausq@debian.org>
+/*    Kernel dynamically loadable module help for PARISC.
+ *
+ *    The best reference for this stuff is probably the Processor-
+ *    Specific ELF Supplement for PA-RISC:
+ *        http://ftp.parisc-linux.org/docs/elf-pa-hp.pdf
+ *
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 2003 Randolph Chung <tausq at debian . org>
+ *
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
 
-    The best reference for this stuff is probably the Processor-
-    Specific ELF Supplement for PA-RISC:
-       http://ftp.parisc-linux.org/docs/elf-pa-hp.pdf
-*/
 #include <linux/moduleloader.h>
 #include <linux/elf.h>
 #include <linux/vmalloc.h>
index a6c20e7888b26f9bf677997c58460b179817faf9..d96ae45ac85e01af809952f389707fa9f9d4424c 100644 (file)
@@ -221,6 +221,7 @@ flush_instruction_cache_local:
        LDREG           ICACHE_STRIDE(%r1),%arg1
        LDREG           ICACHE_COUNT(%r1),%arg2
        LDREG           ICACHE_LOOP(%r1),%arg3
+       rsm             PSW_SM_I,%r22           /* No mmgt ops during loop*/
        ADDIB=          -1,%arg3,fioneloop      /* Preadjust and test */
        movb,<,n        %arg3,%r31,fisync       /* If loop < 0, do sync */
 
@@ -237,6 +238,7 @@ fioneloop:                                      /* Loop if LOOP = 1 */
 
 fisync:
        sync
+       mtsm    %r22
        bv      %r0(%r2)
        nop
        .exit
index 6a174dc4c612c6cea175b12f0241939559f71cf4..516d52a15b07698b54c6403385172982e42d477d 100644 (file)
@@ -67,8 +67,10 @@ EXPORT_SYMBOL(__cmpxchg_u64);
 #include <asm/uaccess.h>
 EXPORT_SYMBOL(lcopy_to_user);
 EXPORT_SYMBOL(lcopy_from_user);
-EXPORT_SYMBOL(lstrnlen_user);
+EXPORT_SYMBOL(lcopy_in_user);
+EXPORT_SYMBOL(lstrncpy_from_user);
 EXPORT_SYMBOL(lclear_user);
+EXPORT_SYMBOL(lstrnlen_user);
 
 #ifndef __LP64__
 /* Needed so insmod can set dp value */
index 7b097b6db0df1905367329aac21c90bfb48f630b..937ab23ca1a7ea2ed7aa869d028127ca88288e83 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/io.h>
 #include <asm/system.h>
 #include <asm/cache.h>         /* for L1_CACHE_BYTES */
+#include <asm/superio.h>
 
 #define DEBUG_RESOURCES 0
 #define DEBUG_CONFIG 0
@@ -145,9 +146,13 @@ char *pcibios_setup(char *str)
        return str;
 }
 
-
 /* Used in drivers/pci/quirks.c */
-struct pci_fixup pcibios_fixups[] = { {0} };
+struct pci_fixup pcibios_fixups[] = { 
+#ifdef CONFIG_SUPERIO
+       { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_NS,       PCI_DEVICE_ID_NS_87415, superio_fixup_pci },
+#endif
+       { 0 }
+};
 
 
 /*
index 057b549368be9faed497d16311e222cdaab04c94..a22874948cc508f9d76529b4bed06b1b76bf08c5 100644 (file)
@@ -250,6 +250,16 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
          struct pt_regs *regs)
 {
        int *user_tid = (int *)regs->gr[26];
+
+       /* usp must be word aligned.  This also prevents users from
+        * passing in the value 1 (which is the signal for a special
+        * return for a kernel thread) */
+       usp = ALIGN(usp, 4);
+
+       /* A zero value for usp means use the current stack */
+       if(usp == 0)
+               usp = regs->gr[30];
+
        return do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0, user_tid, NULL);
 }
 
@@ -290,7 +300,7 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
         * We rely on the fact that kernel_thread passes
         * in zero for usp.
         */
-       if (usp == 0) {
+       if (usp == 1) {
                /* kernel thread */
                cregs->ksp = (((unsigned long)(ti)) + THREAD_SZ_ALGN);
                /* Must exit via ret_from_kernel_thread in order
index e3ea3db8f42a34b0568695939e6383bcc708795e..14d0882a19d2e43767994d8f79ecd60cf7e57bba 100644 (file)
@@ -61,6 +61,9 @@ SECTIONS
   RODATA
 
   /* writeable */
+  . = ALIGN(4096);             /* Make sure this is paged aligned so
+                                  that we can properly leave these
+                                  as writable */
   data_start = .;
 
   . = ALIGN(16);               /* Exception table */
index 3a085a19564e140a052e14217562b6705cd9967f..c4f348241227327c4f4e7a4beaa5e399be208701 100644 (file)
@@ -38,9 +38,8 @@
 #include <linux/spinlock.h>
 #include <linux/slab.h>
 #include <linux/string.h>
-#define PCI_DEBUG
 #include <linux/pci.h>
-#undef PCI_DEBUG
+#include <linux/reboot.h>
 
 #include <asm/byteorder.h>
 #include <asm/cache.h>         /* for L1_CACHE_BYTES */
 #undef DEBUG_CCIO_INIT
 #undef DEBUG_CCIO_RUN_SG
 
+#ifdef CONFIG_PROC_FS
+/*
+ * CCIO_SEARCH_TIME can help measure how fast the bitmap search is.
+ * impacts performance though - ditch it if you don't use it.
+ */
+#define CCIO_SEARCH_TIME
+#undef CCIO_MAP_STATS
+#else
+#undef CCIO_SEARCH_TIME
+#undef CCIO_MAP_STATS
+#endif
+
 #include <linux/proc_fs.h>
 #include <asm/runway.h>                /* for proc_runway_root */
 
@@ -219,15 +230,18 @@ struct ioc {
        struct ioa_registers *ioc_hpa;  /* I/O MMU base address */
        u8  *res_map;                   /* resource map, bit == pdir entry */
        u64 *pdir_base;                 /* physical base address */
+       u32 pdir_size;                  /* bytes, function of IOV Space size */
        u32 res_hint;                   /* next available IOVP - 
                                           circular search */
        u32 res_size;                   /* size of resource map in bytes */
        spinlock_t res_lock;
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_SEARCH_TIME
 #define CCIO_SEARCH_SAMPLE 0x100
        unsigned long avg_search[CCIO_SEARCH_SAMPLE];
        unsigned long avg_idx;            /* current index into avg_search */
+#endif
+#ifdef CCIO_MAP_STATS
        unsigned long used_pages;
        unsigned long msingle_calls;
        unsigned long msingle_pages;
@@ -237,12 +251,10 @@ struct ioc {
        unsigned long usingle_pages;
        unsigned long usg_calls;
        unsigned long usg_pages;
-
-       unsigned short cujo20_bug;
 #endif
+       unsigned short cujo20_bug;
 
        /* STUFF We don't need in performance path */
-       u32 pdir_size;                  /* in bytes, determined by IOV Space size */
        u32 chainid_shift;              /* specify bit location of chain_id */
        struct ioc *next;               /* Linked list of discovered iocs */
        const char *name;               /* device name from firmware */
@@ -289,11 +301,11 @@ static int ioc_count;
 ** If the search wraps around, and passes the res_hint, it will
 ** cause the kernel to panic anyhow.
 */
-#define CCIO_SEARCH_LOOP(ioc, res_idx, mask_ptr, size)  \
+#define CCIO_SEARCH_LOOP(ioc, res_idx, mask, size)  \
        for(; res_ptr < res_end; ++res_ptr) { \
-               if(0 == (*res_ptr & *mask_ptr)) { \
-                       *res_ptr |= *mask_ptr; \
-                       res_idx = (int)((unsigned long)res_ptr - (unsigned long)ioc->res_map); \
+               if(0 == (*res_ptr & mask)) { \
+                       *res_ptr |= mask; \
+                       res_idx = (unsigned int)((unsigned long)res_ptr - (unsigned long)ioc->res_map); \
                        ioc->res_hint = res_idx + (size >> 3); \
                        goto resource_found; \
                } \
@@ -302,10 +314,9 @@ static int ioc_count;
 #define CCIO_FIND_FREE_MAPPING(ioa, res_idx, mask, size) \
        u##size *res_ptr = (u##size *)&((ioc)->res_map[ioa->res_hint & ~((size >> 3) - 1)]); \
        u##size *res_end = (u##size *)&(ioc)->res_map[ioa->res_size]; \
-       u##size *mask_ptr = (u##size *)&mask; \
-       CCIO_SEARCH_LOOP(ioc, res_idx, mask_ptr, size); \
+       CCIO_SEARCH_LOOP(ioc, res_idx, mask, size); \
        res_ptr = (u##size *)&(ioc)->res_map[0]; \
-       CCIO_SEARCH_LOOP(ioa, res_idx, mask_ptr, size);
+       CCIO_SEARCH_LOOP(ioa, res_idx, mask, size);
 
 /*
 ** Find available bit in this ioa's resource map.
@@ -331,40 +342,51 @@ static int ioc_count;
  * of available pages for the requested size.
  */
 static int
-ccio_alloc_range(struct ioc *ioc, unsigned long pages_needed)
+ccio_alloc_range(struct ioc *ioc, size_t size)
 {
-       int res_idx;
-       unsigned long mask;
-#ifdef CONFIG_PROC_FS
+       unsigned int pages_needed = size >> IOVP_SHIFT;
+       unsigned int res_idx;
+#ifdef CCIO_SEARCH_TIME
        unsigned long cr_start = mfctl(16);
 #endif
        
-       ASSERT(pages_needed);
-       ASSERT((pages_needed * IOVP_SIZE) <= DMA_CHUNK_SIZE);
-       ASSERT(pages_needed <= BITS_PER_LONG);
-
-       mask = ~(~0UL >> pages_needed);
+       BUG_ON(pages_needed == 0);
+       BUG_ON((pages_needed * IOVP_SIZE) > DMA_CHUNK_SIZE);
      
-       DBG_RES("%s() size: %d pages_needed %d mask 0x%08lx\n", 
-               __FUNCTION__, size, pages_needed, mask);
+       DBG_RES("%s() size: %d pages_needed %d\n", 
+               __FUNCTION__, size, pages_needed);
 
        /*
        ** "seek and ye shall find"...praying never hurts either...
        ** ggg sacrifices another 710 to the computer gods.
        */
 
-       if(pages_needed <= 8) {
+       if (pages_needed <= 8) {
+               /*
+                * LAN traffic will not thrash the TLB IFF the same NIC
+                * uses 8 adjacent pages to map seperate payload data.
+                * ie the same byte in the resource bit map.
+                */
+#if 0
+               /* FIXME: bit search should shift it's way through
+                * an unsigned long - not byte at a time. As it is now,
+                * we effectively allocate this byte to this mapping.
+                */
+               unsigned long mask = ~(~0UL >> pages_needed);
                CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 8);
-       } else if(pages_needed <= 16) {
-               CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 16);
-       } else if(pages_needed <= 32) {
-               CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 32);
+#else
+               CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xff, 8);
+#endif
+       } else if (pages_needed <= 16) {
+               CCIO_FIND_FREE_MAPPING(ioc, res_idx, 0xffff, 16);
+       } else if (pages_needed <= 32) {
+               CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~(unsigned int)0, 32);
 #ifdef __LP64__
-       } else if(pages_needed <= 64) {
-               CCIO_FIND_FREE_MAPPING(ioc, res_idx, mask, 64);
+       } else if (pages_needed <= 64) {
+               CCIO_FIND_FREE_MAPPING(ioc, res_idx, ~0UL, 64);
 #endif
        } else {
-               panic("%s: %s() Too many pages to map. pages_needed: %ld\n",
+               panic("%s: %s() Too many pages to map. pages_needed: %u\n",
                       __FILE__,  __FUNCTION__, pages_needed);
        }
 
@@ -373,10 +395,10 @@ ccio_alloc_range(struct ioc *ioc, unsigned long pages_needed)
        
 resource_found:
        
-       DBG_RES("%s() res_idx %d mask 0x%08lx res_hint: %d\n",
-               __FUNCTION__, res_idx, mask, ioc->res_hint);
+       DBG_RES("%s() res_idx %d res_hint: %d\n",
+               __FUNCTION__, res_idx, ioc->res_hint);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_SEARCH_TIME
        {
                unsigned long cr_end = mfctl(16);
                unsigned long tmp = cr_end - cr_start;
@@ -385,10 +407,10 @@ resource_found:
        }
        ioc->avg_search[ioc->avg_idx++] = cr_start;
        ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1;
-
+#endif
+#ifdef CCIO_MAP_STATS
        ioc->used_pages += pages_needed;
 #endif
-
        /* 
        ** return the bit address.
        */
@@ -397,9 +419,8 @@ resource_found:
 
 #define CCIO_FREE_MAPPINGS(ioc, res_idx, mask, size) \
         u##size *res_ptr = (u##size *)&((ioc)->res_map[res_idx]); \
-       u##size *mask_ptr = (u##size *)&mask; \
-        ASSERT((*res_ptr & *mask_ptr) == *mask_ptr); \
-        *res_ptr &= ~(*mask_ptr);
+        BUG_ON((*res_ptr & mask) != mask); \
+        *res_ptr &= ~(mask);
 
 /**
  * ccio_free_range - Free pages from the ioc's resource map.
@@ -413,32 +434,35 @@ resource_found:
 static void
 ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped)
 {
-       unsigned long mask;
        unsigned long iovp = CCIO_IOVP(iova);
        unsigned int res_idx = PDIR_INDEX(iovp) >> 3;
 
-       ASSERT(pages_mapped);
-       ASSERT((pages_mapped * IOVP_SIZE) <= DMA_CHUNK_SIZE);
-       ASSERT(pages_mapped <= BITS_PER_LONG);
-
-       mask = ~(~0UL >> pages_mapped);
+       BUG_ON(pages_mapped == 0);
+       BUG_ON((pages_mapped * IOVP_SIZE) > DMA_CHUNK_SIZE);
+       BUG_ON(pages_mapped > BITS_PER_LONG);
 
-       DBG_RES("%s():  res_idx: %d pages_mapped %d mask 0x%08lx\n", 
-               __FUNCTION__, res_idx, pages_mapped, mask);
+       DBG_RES("%s():  res_idx: %d pages_mapped %d\n", 
+               __FUNCTION__, res_idx, pages_mapped);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
        ioc->used_pages -= pages_mapped;
 #endif
 
        if(pages_mapped <= 8) {
+#if 0
+               /* see matching comments in alloc_range */
+               unsigned long mask = ~(~0UL >> pages_mapped);
                CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 8);
+#else
+               CCIO_FREE_MAPPINGS(ioc, res_idx, 0xff, 8);
+#endif
        } else if(pages_mapped <= 16) {
-               CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 16);
+               CCIO_FREE_MAPPINGS(ioc, res_idx, 0xffff, 16);
        } else if(pages_mapped <= 32) {
-               CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 32);
+               CCIO_FREE_MAPPINGS(ioc, res_idx, ~(unsigned int)0, 32);
 #ifdef __LP64__
        } else if(pages_mapped <= 64) {
-               CCIO_FREE_MAPPINGS(ioc, res_idx, mask, 64);
+               CCIO_FREE_MAPPINGS(ioc, res_idx, ~0UL, 64);
 #endif
        } else {
                panic("%s:%s() Too many pages to unmap.\n", __FILE__,
@@ -533,13 +557,14 @@ static u32 hint_lookup[] = {
  * index are bits 12:19 of the value returned by LCI.
  */ 
 void CCIO_INLINE
-ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, void * vba, unsigned long hints)
+ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
+                  unsigned long hints)
 {
        register unsigned long pa = (volatile unsigned long) vba;
        register unsigned long ci; /* coherent index */
 
        /* We currently only support kernel addresses */
-       ASSERT(sid == KERNEL_SPACE);
+       BUG_ON(sid != KERNEL_SPACE);
 
        mtsp(sid,1);
 
@@ -652,7 +677,7 @@ ccio_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt)
                unsigned int idx = PDIR_INDEX(iovp);
                char *pdir_ptr = (char *) &(ioc->pdir_base[idx]);
 
-               ASSERT(idx < (ioc->pdir_size / sizeof(u64)));
+               BUG_ON(idx >= (ioc->pdir_size / sizeof(u64)));
                pdir_ptr[7] = 0;        /* clear only VALID bit */ 
                /*
                ** FIXME: PCX_W platforms don't need FDC/SYNC. (eg C360)
@@ -722,7 +747,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size,
        BUG_ON(!dev);
        ioc = GET_IOC(dev);
 
-       ASSERT(size > 0);
+       BUG_ON(size <= 0);
 
        /* save offset bits */
        offset = ((unsigned long) addr) & ~IOVP_MASK;
@@ -731,12 +756,12 @@ ccio_map_single(struct device *dev, void *addr, size_t size,
        size = ROUNDUP(size + offset, IOVP_SIZE);
        spin_lock_irqsave(&ioc->res_lock, flags);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
        ioc->msingle_calls++;
        ioc->msingle_pages += size >> IOVP_SHIFT;
 #endif
 
-       idx = ccio_alloc_range(ioc, (size >> IOVP_SHIFT));
+       idx = ccio_alloc_range(ioc, size);
        iovp = (dma_addr_t)MKIOVP(idx);
 
        pdir_start = &(ioc->pdir_base[idx]);
@@ -749,7 +774,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size,
                hint |= HINT_SAFE_DMA;
 
        while(size > 0) {
-               ccio_io_pdir_entry(pdir_start, KERNEL_SPACE, addr, hint);
+               ccio_io_pdir_entry(pdir_start, KERNEL_SPACE, (unsigned long)addr, hint);
 
                DBG_RUN(" pdir %p %08x%08x\n",
                        pdir_start,
@@ -795,7 +820,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size,
 
        spin_lock_irqsave(&ioc->res_lock, flags);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
        ioc->usingle_calls++;
        ioc->usingle_pages += size >> IOVP_SHIFT;
 #endif
@@ -861,180 +886,10 @@ ccio_free_consistent(struct device *dev, size_t size, void *cpu_addr,
 */
 #define PIDE_FLAG 0x80000000UL
 
-/**
- * ccio_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir.
- * @ioc: The I/O Controller.
- * @startsg: The scatter/gather list of coalesced chunks.
- * @nents: The number of entries in the scatter/gather list.
- * @hint: The DMA Hint.
- *
- * This function inserts the coalesced scatter/gather list chunks into the
- * I/O Controller's I/O Pdir.
- */ 
-static CCIO_INLINE int
-ccio_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, 
-              unsigned long hint)
-{
-       struct scatterlist *dma_sg = startsg;   /* pointer to current DMA */
-       int n_mappings = 0;
-       u64 *pdirp = 0;
-       unsigned long dma_offset = 0;
-
-       dma_sg--;
-       while (nents-- > 0) {
-               int cnt = sg_dma_len(startsg);
-               sg_dma_len(startsg) = 0;
-
-               DBG_RUN_SG(" %d : %08lx/%05x %08lx/%05x\n", nents,
-                          (unsigned long)sg_dma_address(startsg), cnt,
-                          sg_virt_addr(startsg), startsg->length
-               );
-
-               /*
-               ** Look for the start of a new DMA stream
-               */
-               if(sg_dma_address(startsg) & PIDE_FLAG) {
-                       u32 pide = sg_dma_address(startsg) & ~PIDE_FLAG;
-                       dma_offset = (unsigned long) pide & ~IOVP_MASK;
-                       sg_dma_address(startsg) = 0;
-                       dma_sg++;
-                       sg_dma_address(dma_sg) = pide;
-                       pdirp = &(ioc->pdir_base[pide >> IOVP_SHIFT]);
-                       n_mappings++;
-               }
-
-               /*
-               ** Look for a VCONTIG chunk
-               */
-               if (cnt) {
-                       unsigned long vaddr = sg_virt_addr(startsg);
-                       ASSERT(pdirp);
-
-                       /* Since multiple Vcontig blocks could make up
-                       ** one DMA stream, *add* cnt to dma_len.
-                       */
-                       sg_dma_len(dma_sg) += cnt;
-                       cnt += dma_offset;
-                       dma_offset=0;   /* only want offset on first chunk */
-                       cnt = ROUNDUP(cnt, IOVP_SIZE);
-#ifdef CONFIG_PROC_FS
-                       ioc->msg_pages += cnt >> IOVP_SHIFT;
+#ifdef CCIO_MAP_STATS
+#define IOMMU_MAP_STATS
 #endif
-                       do {
-                               ccio_io_pdir_entry(pdirp, KERNEL_SPACE, 
-                                                  (void *)vaddr, hint);
-                               vaddr += IOVP_SIZE;
-                               cnt -= IOVP_SIZE;
-                               pdirp++;
-                       } while (cnt > 0);
-               }
-               startsg++;
-       }
-       return(n_mappings);
-}
-
-/*
-** First pass is to walk the SG list and determine where the breaks are
-** in the DMA stream. Allocates PDIR entries but does not fill them.
-** Returns the number of DMA chunks.
-**
-** Doing the fill separate from the coalescing/allocation keeps the
-** code simpler. Future enhancement could make one pass through
-** the sglist do both.
-*/
-
-static CCIO_INLINE int
-ccio_coalesce_chunks(struct ioc *ioc, struct scatterlist *startsg, int nents)
-{
-       struct scatterlist *vcontig_sg;    /* VCONTIG chunk head */
-       unsigned long vcontig_len;         /* len of VCONTIG chunk */
-       unsigned long vcontig_end;
-       struct scatterlist *dma_sg;        /* next DMA stream head */
-       unsigned long dma_offset, dma_len; /* start/len of DMA stream */
-       int n_mappings = 0;
-
-       while (nents > 0) {
-
-               /*
-               ** Prepare for first/next DMA stream
-               */
-               dma_sg = vcontig_sg = startsg;
-               dma_len = vcontig_len = vcontig_end = startsg->length;
-               vcontig_end += sg_virt_addr(startsg);
-               dma_offset = sg_virt_addr(startsg) & ~IOVP_MASK;
-
-               /* PARANOID: clear entries */
-               sg_dma_address(startsg) = 0;
-               sg_dma_len(startsg) = 0;
-
-               /*
-               ** This loop terminates one iteration "early" since
-               ** it's always looking one "ahead".
-               */
-               while(--nents > 0) {
-                       unsigned long startsg_end;
-
-                       startsg++;
-                       startsg_end = sg_virt_addr(startsg) + 
-                               startsg->length;
-
-                       /* PARANOID: clear entries */
-                       sg_dma_address(startsg) = 0;
-                       sg_dma_len(startsg) = 0;
-
-                       /*
-                       ** First make sure current dma stream won't
-                       ** exceed DMA_CHUNK_SIZE if we coalesce the
-                       ** next entry.
-                       */   
-                       if(ROUNDUP(dma_len + dma_offset + startsg->length,
-                                  IOVP_SIZE) > DMA_CHUNK_SIZE)
-                               break;
-
-                       /*
-                       ** Append the next transaction?
-                       */
-                       if (vcontig_end == sg_virt_addr(startsg)) {
-                               vcontig_len += startsg->length;
-                               vcontig_end += startsg->length;
-                               dma_len     += startsg->length;
-                               continue;
-                       }
-
-                       /*
-                       ** Not virtually contigous.
-                       ** Terminate prev chunk.
-                       ** Start a new chunk.
-                       **
-                       ** Once we start a new VCONTIG chunk, dma_offset
-                       ** can't change. And we need the offset from the first
-                       ** chunk - not the last one. Ergo Successive chunks
-                       ** must start on page boundaries and dove tail
-                       ** with its predecessor.
-                       */
-                       sg_dma_len(vcontig_sg) = vcontig_len;
-
-                       vcontig_sg = startsg;
-                       vcontig_len = startsg->length;
-                       break;
-               }
-
-               /*
-               ** End of DMA Stream
-               ** Terminate last VCONTIG block.
-               ** Allocate space for DMA stream.
-               */
-               sg_dma_len(vcontig_sg) = vcontig_len;
-               dma_len = ROUNDUP(dma_len + dma_offset, IOVP_SIZE);
-               sg_dma_address(dma_sg) =
-                       PIDE_FLAG 
-                       | (ccio_alloc_range(ioc, (dma_len >> IOVP_SHIFT)) << IOVP_SHIFT)
-                       | dma_offset;
-               n_mappings++;
-       }
-
-       return n_mappings;
-}
+#include "iommu-helpers.h"
 
 /**
  * ccio_map_sg - Map the scatter/gather list into the IOMMU.
@@ -1053,6 +908,8 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
        int coalesced, filled = 0;
        unsigned long flags;
        unsigned long hint = hint_lookup[(int)direction];
+       unsigned long prev_len = 0, current_len = 0;
+       int i;
        
        BUG_ON(!dev);
        ioc = GET_IOC(dev);
@@ -1067,10 +924,13 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
                sg_dma_len(sglist) = sglist->length;
                return 1;
        }
+
+       for(i = 0; i < nents; i++)
+               prev_len += sglist[i].length;
        
        spin_lock_irqsave(&ioc->res_lock, flags);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
        ioc->msg_calls++;
 #endif
 
@@ -1082,7 +942,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
        ** w/o this association, we wouldn't have coherent DMA!
        ** Access to the virtual address is what forces a two pass algorithm.
        */
-       coalesced = ccio_coalesce_chunks(ioc, sglist, nents);
+       coalesced = iommu_coalesce_chunks(ioc, sglist, nents, ccio_alloc_range);
 
        /*
        ** Program the I/O Pdir
@@ -1092,13 +952,19 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
        ** o dma_len will contain the number of bytes to map 
        ** o page/offset contain the virtual address.
        */
-       filled = ccio_fill_pdir(ioc, sglist, nents, hint);
+       filled = iommu_fill_pdir(ioc, sglist, nents, hint, ccio_io_pdir_entry);
 
        spin_unlock_irqrestore(&ioc->res_lock, flags);
 
-       ASSERT(coalesced == filled);
+       BUG_ON(coalesced != filled);
+
        DBG_RUN_SG("%s() DONE %d mappings\n", __FUNCTION__, filled);
 
+       for (i = 0; i < filled; i++)
+               current_len += sg_dma_len(sglist + i);
+
+       BUG_ON(current_len != prev_len);
+
        return filled;
 }
 
@@ -1123,13 +989,13 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents,
        DBG_RUN_SG("%s() START %d entries,  %08lx,%x\n",
                __FUNCTION__, nents, sg_virt_addr(sglist), sglist->length);
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
        ioc->usg_calls++;
 #endif
 
        while(sg_dma_len(sglist) && nents--) {
 
-#ifdef CONFIG_PROC_FS
+#ifdef CCIO_MAP_STATS
                ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT;
 #endif
                ccio_unmap_single(dev, sg_dma_address(sglist),
@@ -1201,18 +1067,18 @@ static int ccio_proc_info(char *buf, char **start, off_t offset, int count,
                              total_pages * 8, total_pages);
                if (proc_append(tmp, len, &buf, &offset, &count))
                        break;
-               
+#ifdef CCIO_MAP_STATS
                len = sprintf(tmp, "IO PDIR entries : %ld free  %ld used (%d%%)\n",
                              total_pages - ioc->used_pages, ioc->used_pages,
                              (int)(ioc->used_pages * 100 / total_pages));
                if (proc_append(tmp, len, &buf, &offset, &count))
                        break;
-               
+#endif
                len = sprintf(tmp, "Resource bitmap : %d bytes (%d pages)\n", 
                        ioc->res_size, total_pages);
                if (proc_append(tmp, len, &buf, &offset, &count))
                        break;
-               
+#ifdef CCIO_SEARCH_TIME
                min = max = ioc->avg_search[0];
                for(j = 0; j < CCIO_SEARCH_SAMPLE; ++j) {
                        avg += ioc->avg_search[j];
@@ -1226,7 +1092,8 @@ static int ccio_proc_info(char *buf, char **start, off_t offset, int count,
                              min, avg, max);
                if (proc_append(tmp, len, &buf, &offset, &count))
                        break;
-
+#endif
+#ifdef CCIO_MAP_STATS
                len = sprintf(tmp, "pci_map_single(): %8ld calls  %8ld pages (avg %d/1000)\n",
                              ioc->msingle_calls, ioc->msingle_pages,
                              (int)((ioc->msingle_pages * 1000)/ioc->msingle_calls));
@@ -1252,7 +1119,7 @@ static int ccio_proc_info(char *buf, char **start, off_t offset, int count,
                              (int)((ioc->usg_pages * 1000)/ioc->usg_calls));
                if (proc_append(tmp, len, &buf, &offset, &count))
                        break;
-
+#endif /* CCIO_MAP_STATS */
                ioc = ioc->next;
        }
 
@@ -1338,9 +1205,7 @@ void ccio_cujo20_fixup(struct parisc_device *dev, u32 iovp)
        struct ioc *ioc = ccio_get_iommu(dev);
        u8 *res_ptr;
 
-#ifdef CONFIG_PROC_FS
        ioc->cujo20_bug = 1;
-#endif
        res_ptr = ioc->res_map;
        idx = PDIR_INDEX(iovp) >> 3;
 
@@ -1431,16 +1296,16 @@ ccio_ioc_init(struct ioc *ioc)
        */
 
        iov_order = get_order(iova_space_size) >> (IOVP_SHIFT - PAGE_SHIFT);
-       ASSERT(iov_order <= (30 - IOVP_SHIFT));   /* iova_space_size <= 1GB */
-       ASSERT(iov_order >= (20 - IOVP_SHIFT));   /* iova_space_size >= 1MB */
+       BUG_ON(iov_order > (30 - IOVP_SHIFT));   /* iova_space_size <= 1GB */
+       BUG_ON(iov_order < (20 - IOVP_SHIFT));   /* iova_space_size >= 1MB */
        iova_space_size = 1 << (iov_order + IOVP_SHIFT);
 
        ioc->pdir_size = (iova_space_size / IOVP_SIZE) * sizeof(u64);
 
-       ASSERT(ioc->pdir_size < 4 * 1024 * 1024);   /* max pdir size < 4MB */
+       BUG_ON(ioc->pdir_size >= 4 * 1024 * 1024);   /* max pdir size < 4MB */
 
        /* Verify it's a power of two */
-       ASSERT((1 << get_order(ioc->pdir_size)) == (ioc->pdir_size >> PAGE_SHIFT));
+       BUG_ON((1 << get_order(ioc->pdir_size)) != (ioc->pdir_size >> PAGE_SHIFT));
 
        DBG_INIT("%s() hpa 0x%p mem %luMB IOV %dMB (%d bits) PDIR size 0x%0x",
                __FUNCTION__, ioc->ioc_hpa, physmem>>20, iova_space_size>>20,
@@ -1454,7 +1319,7 @@ ccio_ioc_init(struct ioc *ioc)
        }
        memset(ioc->pdir_base, 0, ioc->pdir_size);
 
-       ASSERT((((unsigned long)ioc->pdir_base) & PAGE_MASK) == (unsigned long)ioc->pdir_base);
+       BUG_ON((((unsigned long)ioc->pdir_base) & PAGE_MASK) != (unsigned long)ioc->pdir_base);
        DBG_INIT(" base %p", ioc->pdir_base);
 
        /* resource map size dictated by pdir_size */
@@ -1686,13 +1551,14 @@ static int ccio_probe(struct parisc_device *dev)
        
 
        if (ioc_count == 0) {
-               /* XXX: Create separate entries for each ioc */
+               /* FIXME: Create separate entries for each ioc */
                create_proc_read_entry(MODULE_NAME, S_IRWXU, proc_runway_root,
                                       ccio_proc_info, NULL);
                create_proc_read_entry(MODULE_NAME"-bitmap", S_IRWXU,
                                       proc_runway_root, ccio_resource_map, NULL);
        }
-
+       parisc_vmerge_boundary = IOVP_SIZE;
+       parisc_vmerge_max_size = BITS_PER_LONG * IOVP_SIZE;
        ioc_count++;
        return 0;
 }
index dba62b8e543e6344a10eb2072c84a1e1cd86af9c..5ebc32b77f0ed00338d5b934916503e3eb94de11 100644 (file)
@@ -116,6 +116,16 @@ void eisa_out32(unsigned int data, unsigned short port)
                gsc_writel(cpu_to_le32(data), eisa_permute(port));
 }
 
+#ifndef CONFIG_PCI
+/* We call these directly without PCI.  See asm/io.h. */
+EXPORT_SYMBOL(eisa_in8);
+EXPORT_SYMBOL(eisa_in16);
+EXPORT_SYMBOL(eisa_in32);
+EXPORT_SYMBOL(eisa_out8);
+EXPORT_SYMBOL(eisa_out16);
+EXPORT_SYMBOL(eisa_out32);
+#endif
+
 /* Interrupt handling */
 
 /* cached interrupt mask registers */
index 6f78bdb4180a19d3f9268c376c9efbcefde52ba9..5a17a00d336c157933561c8ef8b3b7625f3e2ab0 100644 (file)
 
 #include "gsc.h"
 
+/* This sets the vmerge boundary and size, it's here because it has to
+ * be available on all platforms (zero means no-virtual merging) */
+unsigned long parisc_vmerge_boundary = 0;
+unsigned long parisc_vmerge_max_size = 0;
+
 #undef DEBUG
 
 #ifdef DEBUG
diff --git a/drivers/parisc/iommu-helpers.h b/drivers/parisc/iommu-helpers.h
new file mode 100644 (file)
index 0000000..a6757b3
--- /dev/null
@@ -0,0 +1,163 @@
+/**
+ * iommu_fill_pdir - Insert coalesced scatter/gather chunks into the I/O Pdir.
+ * @ioc: The I/O Controller.
+ * @startsg: The scatter/gather list of coalesced chunks.
+ * @nents: The number of entries in the scatter/gather list.
+ * @hint: The DMA Hint.
+ *
+ * This function inserts the coalesced scatter/gather list chunks into the
+ * I/O Controller's I/O Pdir.
+ */ 
+static inline unsigned int
+iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, 
+               unsigned long hint,
+               void (*iommu_io_pdir_entry)(u64 *, space_t, unsigned long,
+                                           unsigned long))
+{
+       struct scatterlist *dma_sg = startsg;   /* pointer to current DMA */
+       unsigned int n_mappings = 0;
+       unsigned long dma_offset = 0, dma_len = 0;
+       u64 *pdirp = NULL;
+
+       /* Horrible hack.  For efficiency's sake, dma_sg starts one 
+        * entry below the true start (it is immediately incremented
+        * in the loop) */
+        dma_sg--;
+
+       while (nents-- > 0) {
+               unsigned long vaddr;
+               long size;
+
+               DBG_RUN_SG(" %d : %08lx/%05x %08lx/%05x\n", nents,
+                          (unsigned long)sg_dma_address(startsg), cnt,
+                          sg_virt_addr(startsg), startsg->length
+               );
+
+
+               /*
+               ** Look for the start of a new DMA stream
+               */
+               
+               if (sg_dma_address(startsg) & PIDE_FLAG) {
+                       u32 pide = sg_dma_address(startsg) & ~PIDE_FLAG;
+
+                       BUG_ON(pdirp && (dma_len != sg_dma_len(dma_sg)));
+
+                       dma_sg++;
+
+                       dma_len = sg_dma_len(startsg);
+                       sg_dma_len(startsg) = 0;
+                       dma_offset = (unsigned long) pide & ~IOVP_MASK;
+                       n_mappings++;
+                       sg_dma_address(dma_sg) = pide;
+                       pdirp = &(ioc->pdir_base[pide >> IOVP_SHIFT]);
+                       prefetchw(pdirp);
+               }
+               
+               BUG_ON(pdirp == NULL);
+               
+               vaddr = sg_virt_addr(startsg);
+               sg_dma_len(dma_sg) += startsg->length;
+               size = startsg->length + dma_offset;
+               dma_offset = 0;
+#ifdef IOMMU_MAP_STATS
+               ioc->msg_pages += startsg->length >> IOVP_SHIFT;
+#endif
+               do {
+                       iommu_io_pdir_entry(pdirp, KERNEL_SPACE, 
+                                           vaddr, hint);
+                       vaddr += IOVP_SIZE;
+                       size -= IOVP_SIZE;
+                       pdirp++;
+               } while(unlikely(size > 0));
+               startsg++;
+       }
+       return(n_mappings);
+}
+
+
+/*
+** First pass is to walk the SG list and determine where the breaks are
+** in the DMA stream. Allocates PDIR entries but does not fill them.
+** Returns the number of DMA chunks.
+**
+** Doing the fill separate from the coalescing/allocation keeps the
+** code simpler. Future enhancement could make one pass through
+** the sglist do both.
+*/
+
+static inline unsigned int
+iommu_coalesce_chunks(struct ioc *ioc, struct scatterlist *startsg, int nents,
+                     int (*iommu_alloc_range)(struct ioc *, size_t))
+{
+       struct scatterlist *contig_sg;     /* contig chunk head */
+       unsigned long dma_offset, dma_len; /* start/len of DMA stream */
+       unsigned int n_mappings = 0;
+
+       while (nents > 0) {
+
+               /*
+               ** Prepare for first/next DMA stream
+               */
+               contig_sg = startsg;
+               dma_len = startsg->length;
+               dma_offset = sg_virt_addr(startsg) & ~IOVP_MASK;
+
+               /* PARANOID: clear entries */
+               sg_dma_address(startsg) = 0;
+               sg_dma_len(startsg) = 0;
+
+               /*
+               ** This loop terminates one iteration "early" since
+               ** it's always looking one "ahead".
+               */
+               while(--nents > 0) {
+                       unsigned long prevstartsg_end, startsg_end;
+
+                       prevstartsg_end = sg_virt_addr(startsg) +
+                               startsg->length;
+
+                       startsg++;
+                       startsg_end = sg_virt_addr(startsg) + 
+                               startsg->length;
+
+                       /* PARANOID: clear entries */
+                       sg_dma_address(startsg) = 0;
+                       sg_dma_len(startsg) = 0;
+
+                       /*
+                       ** First make sure current dma stream won't
+                       ** exceed DMA_CHUNK_SIZE if we coalesce the
+                       ** next entry.
+                       */   
+                       if(unlikely(ROUNDUP(dma_len + dma_offset + startsg->length,
+                                           IOVP_SIZE) > DMA_CHUNK_SIZE))
+                               break;
+
+                       /*
+                       ** Next see if we can append the next chunk (i.e.
+                       ** it must end on one page and begin on another
+                       */
+                       if (unlikely(((prevstartsg_end | sg_virt_addr(startsg)) & ~PAGE_MASK) != 0))
+                               break;
+                       
+                       dma_len += startsg->length;
+               }
+
+               /*
+               ** End of DMA Stream
+               ** Terminate last VCONTIG block.
+               ** Allocate space for DMA stream.
+               */
+               sg_dma_len(contig_sg) = dma_len;
+               dma_len = ROUNDUP(dma_len + dma_offset, IOVP_SIZE);
+               sg_dma_address(contig_sg) =
+                       PIDE_FLAG 
+                       | (iommu_alloc_range(ioc, dma_len) << IOVP_SHIFT)
+                       | dma_offset;
+               n_mappings++;
+       }
+
+       return n_mappings;
+}
+
index 269265d448f060d2cd99a0c38eacbd1770cafc29..176e0951b15c3d96f8149cb7d4f2f41716c0de0c 100644 (file)
@@ -533,10 +533,10 @@ static int lba_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int si
        */
        LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
        switch(size) {
-       case 1: *(u8 *)  data = READ_REG8(d->hba.base_addr + LBA_PCI_CFG_DATA);
-          break;
-       case 2: *(u16 *) data = READ_REG16(d->hba.base_addr + LBA_PCI_CFG_DATA);
-          break;
+       case 1: *(u8 *)  data = READ_REG8(d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 3));
+               break;
+       case 2: *(u16 *) data = READ_REG16(d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 2));
+               break;
        case 4: *(u32 *) data = READ_REG32(d->hba.base_addr + LBA_PCI_CFG_DATA);
           break;
        }
@@ -613,13 +613,14 @@ static int lba_cfg_write(struct pci_bus *bus, unsigned int devfn, int pos, int s
        /* Basic Algorithm */
        LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
        switch(size) {
-       case 1: WRITE_REG8 (data, d->hba.base_addr + LBA_PCI_CFG_DATA);
+       case 1: WRITE_REG8 (data, d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 3));
                   break;
-       case 2: WRITE_REG16(data, d->hba.base_addr + LBA_PCI_CFG_DATA);
+       case 2: WRITE_REG16(data, d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 2));
                   break;
        case 4: WRITE_REG32(data, d->hba.base_addr + LBA_PCI_CFG_DATA);
                   break;
        }
+       /* flush posted write */
        lba_t32 = READ_REG32(d->hba.base_addr + LBA_PCI_CFG_ADDR);
        return 0;
 }
index 26c2f92f03bcbc14676ac3f4baa2af92fec09aaa..f1c850d20e4fa7e946dd697323d06356e0dfc325 100644 (file)
@@ -700,7 +700,8 @@ typedef unsigned long space_t;
 
 
 void SBA_INLINE
-sba_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba)
+sba_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
+                 unsigned long hint)
 {
        u64 pa; /* physical address */
        register unsigned ci; /* coherent index */
@@ -874,7 +875,7 @@ sba_map_single(struct device *dev, void *addr, size_t size,
 
        while (size > 0) {
                ASSERT(((u8 *)pdir_start)[7] == 0); /* verify availability */
-               sba_io_pdir_entry(pdir_start, KERNEL_SPACE, (unsigned long) addr);
+               sba_io_pdir_entry(pdir_start, KERNEL_SPACE, (unsigned long) addr, 0);
 
                DBG_RUN(" pdir 0x%p %02x%02x%02x%02x%02x%02x%02x%02x\n",
                        pdir_start,
@@ -1027,243 +1028,15 @@ sba_free_consistent(struct device *hwdev, size_t size, void *vaddr,
 */
 #define PIDE_FLAG 0x80000000UL
 
-#ifdef DEBUG_LARGE_SG_ENTRIES
-int dump_run_sg = 0;
-#endif
-
-
-/**
- * sba_fill_pdir - write allocated SG entries into IO PDIR
- * @ioc: IO MMU structure which owns the pdir we are interested in.
- * @startsg:  list of IOVA/size pairs
- * @nents: number of entries in startsg list
- *
- * Take preprocessed SG list and write corresponding entries
- * in the IO PDIR.
- */
-
-static SBA_INLINE int
-sba_fill_pdir(
-       struct ioc *ioc,
-       struct scatterlist *startsg,
-       int nents)
-{
-       struct scatterlist *dma_sg = startsg;   /* pointer to current DMA */
-       int n_mappings = 0;
-       u64 *pdirp = 0;
-       unsigned long dma_offset = 0;
-
-       dma_sg--;
-       while (nents-- > 0) {
-               int     cnt = sg_dma_len(startsg);
-               sg_dma_len(startsg) = 0;
-
-#ifdef DEBUG_LARGE_SG_ENTRIES
-               if (dump_run_sg)
-                       printk(KERN_DEBUG " %2d : %08lx/%05x %p/%05x\n",
-                               nents,
-                               (unsigned long) sg_dma_address(startsg), cnt,
-                               sg_virt_addr(startsg), startsg->length
-               );
-#else
-               DBG_RUN_SG(" %d : %08lx/%05x %p/%05x\n",
-                               nents,
-                               (unsigned long) sg_dma_address(startsg), cnt,
-                               sg_virt_addr(startsg), startsg->length
-               );
-#endif
-               /*
-               ** Look for the start of a new DMA stream
-               */
-               if (sg_dma_address(startsg) & PIDE_FLAG) {
-                       u32 pide = sg_dma_address(startsg) & ~PIDE_FLAG;
-                       dma_offset = (unsigned long) pide & ~IOVP_MASK;
-                       sg_dma_address(startsg) = 0;
-                       dma_sg++;
-                       sg_dma_address(dma_sg) = pide;
-                       pdirp = &(ioc->pdir_base[pide >> IOVP_SHIFT]);
-                       n_mappings++;
-               }
-
-               /*
-               ** Look for a VCONTIG chunk
-               */
-               if (cnt) {
-                       unsigned long vaddr = (unsigned long) sg_virt_addr(startsg);
-                       ASSERT(pdirp);
-
-                       /* Since multiple Vcontig blocks could make up
-                       ** one DMA stream, *add* cnt to dma_len.
-                       */
-                       sg_dma_len(dma_sg) += cnt;
-                       cnt += dma_offset;
-                       dma_offset=0;   /* only want offset on first chunk */
-                       cnt = ROUNDUP(cnt, IOVP_SIZE);
 #ifdef SBA_COLLECT_STATS
-                       ioc->msg_pages += cnt >> IOVP_SHIFT;
-#endif
-                       do {
-                               sba_io_pdir_entry(pdirp, KERNEL_SPACE, vaddr);
-                               vaddr += IOVP_SIZE;
-                               cnt -= IOVP_SIZE;
-                               pdirp++;
-                       } while (cnt > 0);
-               }
-               startsg++;
-       }
-#ifdef DEBUG_LARGE_SG_ENTRIES
-       dump_run_sg = 0;
+#define IOMMU_MAP_STATS
 #endif
-       return(n_mappings);
-}
-
-
-/*
-** Two address ranges are DMA contiguous *iff* "end of prev" and
-** "start of next" are both on a page boundary.
-**
-** (shift left is a quick trick to mask off upper bits)
-*/
-#define DMA_CONTIG(__X, __Y) \
-       (((((unsigned long) __X) | ((unsigned long) __Y)) << (BITS_PER_LONG - PAGE_SHIFT)) == 0UL)
-
-
-/**
- * sba_coalesce_chunks - preprocess the SG list
- * @ioc: IO MMU structure which owns the pdir we are interested in.
- * @startsg:  list of IOVA/size pairs
- * @nents: number of entries in startsg list
- *
- * First pass is to walk the SG list and determine where the breaks are
- * in the DMA stream. Allocates PDIR entries but does not fill them.
- * Returns the number of DMA chunks.
- *
- * Doing the fill separate from the coalescing/allocation keeps the
- * code simpler. Future enhancement could make one pass through
- * the sglist do both.
- */
-static SBA_INLINE int
-sba_coalesce_chunks( struct ioc *ioc,
-       struct scatterlist *startsg,
-       int nents)
-{
-       struct scatterlist *vcontig_sg;    /* VCONTIG chunk head */
-       unsigned long vcontig_len;         /* len of VCONTIG chunk */
-       unsigned long vcontig_end;
-       struct scatterlist *dma_sg;        /* next DMA stream head */
-       unsigned long dma_offset, dma_len; /* start/len of DMA stream */
-       int n_mappings = 0;
-
-       while (nents > 0) {
-               unsigned long vaddr = (unsigned long) sg_virt_addr(startsg); 
-
-               /*
-               ** Prepare for first/next DMA stream
-               */
-               dma_sg = vcontig_sg = startsg;
-               dma_len = vcontig_len = vcontig_end = startsg->length;
-               vcontig_end +=  vaddr;
-               dma_offset = vaddr & ~IOVP_MASK;
-
-               /* PARANOID: clear entries */
-               sg_dma_address(startsg) = 0;
-               sg_dma_len(startsg) = 0;
-
-               /*
-               ** This loop terminates one iteration "early" since
-               ** it's always looking one "ahead".
-               */
-               while (--nents > 0) {
-                       unsigned long vaddr;    /* tmp */
-
-                       startsg++;
-
-                       /* PARANOID: clear entries */
-                       sg_dma_address(startsg) = 0;
-                       sg_dma_len(startsg) = 0;
-
-                       /* catch brokenness in SCSI layer */
-                       ASSERT(startsg->length <= DMA_CHUNK_SIZE);
-
-                       /*
-                       ** First make sure current dma stream won't
-                       ** exceed DMA_CHUNK_SIZE if we coalesce the
-                       ** next entry.
-                       */
-                       if (((dma_len + dma_offset + startsg->length + ~IOVP_MASK) & IOVP_MASK) > DMA_CHUNK_SIZE)
-                               break;
-
-                       /*
-                       ** Then look for virtually contiguous blocks.
-                       ** PARISC needs to associate a virtual address
-                       ** with each IO address mapped. The CPU cache is
-                       ** virtually tagged and the IOMMU uses part
-                       ** of the virtual address to participate in
-                       ** CPU cache coherency.
-                       **
-                       ** append the next transaction?
-                       */
-                       vaddr = (unsigned long) sg_virt_addr(startsg);
-                       if  (vcontig_end == vaddr)
-                       {
-                               vcontig_len += startsg->length;
-                               vcontig_end += startsg->length;
-                               dma_len     += startsg->length;
-                               continue;
-                       }
+#include "iommu-helpers.h"
 
 #ifdef DEBUG_LARGE_SG_ENTRIES
-                       dump_run_sg = (vcontig_len > IOVP_SIZE);
+int dump_run_sg = 0;
 #endif
 
-                       /*
-                       ** Not virtually contigous.
-                       ** Terminate prev chunk.
-                       ** Start a new chunk.
-                       **
-                       ** Once we start a new VCONTIG chunk, dma_offset
-                       ** can't change. And we need the offset from the first
-                       ** chunk - not the last one. Ergo Successive chunks
-                       ** must start on page boundaries and dove tail
-                       ** with its predecessor.
-                       */
-                       sg_dma_len(vcontig_sg) = vcontig_len;
-
-                       vcontig_sg = startsg;
-                       vcontig_len = startsg->length;
-
-                       /*
-                       ** 3) do the entries end/start on page boundaries?
-                       **    Don't update vcontig_end until we've checked.
-                       */
-                       if (DMA_CONTIG(vcontig_end, vaddr))
-                       {
-                               vcontig_end = vcontig_len + vaddr;
-                               dma_len += vcontig_len;
-                               continue;
-                       } else {
-                               break;
-                       }
-               }
-
-               /*
-               ** End of DMA Stream
-               ** Terminate last VCONTIG block.
-               ** Allocate space for DMA stream.
-               */
-               sg_dma_len(vcontig_sg) = vcontig_len;
-               dma_len = (dma_len + dma_offset + ~IOVP_MASK) & IOVP_MASK;
-               ASSERT(dma_len <= DMA_CHUNK_SIZE);
-               sg_dma_address(dma_sg) =
-                       PIDE_FLAG 
-                       | (sba_alloc_range(ioc, dma_len) << IOVP_SHIFT)
-                       | dma_offset;
-               n_mappings++;
-       }
-
-       return n_mappings;
-}
-
 
 /**
  * sba_map_sg - map Scatter/Gather list
@@ -1318,7 +1091,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
        ** w/o this association, we wouldn't have coherent DMA!
        ** Access to the virtual address is what forces a two pass algorithm.
        */
-       coalesced = sba_coalesce_chunks(ioc, sglist, nents);
+       coalesced = iommu_coalesce_chunks(ioc, sglist, nents, sba_alloc_range);
 
        /*
        ** Program the I/O Pdir
@@ -1328,7 +1101,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
        ** o dma_len will contain the number of bytes to map 
        ** o address contains the virtual address.
        */
-       filled = sba_fill_pdir(ioc, sglist, nents);
+       filled = iommu_fill_pdir(ioc, sglist, nents, 0, sba_io_pdir_entry);
 
 #ifdef ASSERT_PDIR_SANITY
        if (sba_check_pdir(ioc,"Check after sba_map_sg()"))
@@ -2047,6 +1820,9 @@ sba_driver_callback(struct parisc_device *dev)
        create_proc_info_entry("bitmap", 0, proc_runway_root, sba_resource_map);
 #endif
 #endif
+       parisc_vmerge_boundary = IOVP_SIZE;
+       parisc_vmerge_max_size = IOVP_SIZE * BITS_PER_LONG;
+
        return 0;
 }
 
index 0ff55afc43aaa0da59735ca9a4c5b1fb0daa109d..2cb73648899a616a4feb9c1b151624400e35ea52 100644 (file)
 #include <linux/termios.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
+#include <linux/delay.h>
+#include <linux/ide.h>
 #include <asm/io.h>
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/superio.h>
 
+#define SUPERIO_IDE_MAX_RETRIES 25
+
 static struct superio_device sio_dev;
 
 
@@ -161,7 +165,6 @@ superio_init(struct superio_device *sio)
        printk (KERN_INFO "SuperIO: Found NS87560 Legacy I/O device at %s (IRQ %i) \n",
                pci_name(pdev),pdev->irq);
 
-       /* Find our I/O devices */
        pci_read_config_dword (pdev, SIO_SP1BAR, &sio->sp1_base);
        sio->sp1_base &= ~1;
        printk (KERN_INFO "SuperIO: Serial port 1 at 0x%x\n", sio->sp1_base);
@@ -462,16 +465,72 @@ superio_parport_init(void)
 }
 
 
-int
-superio_get_ide_irq(void)
+static u8 superio_ide_inb (unsigned long port);
+static unsigned long superio_ide_status[2];
+static unsigned long superio_ide_select[2];
+static unsigned long superio_ide_dma_status[2];
+
+void superio_fixup_pci(struct pci_dev *pdev)
 {
-       if (sio_dev.irq_region)
-               return sio_dev.irq_region->data.irqbase + IDE_IRQ;
-       else
-               return 0;
+       u8 prog;
+
+       pdev->class |= 0x5;
+       pci_write_config_byte(pdev, PCI_CLASS_PROG, pdev->class);
+
+       pci_read_config_byte(pdev, PCI_CLASS_PROG, &prog);
+       printk("PCI: Enabled native mode for NS87415 (pif=0x%x)\n", prog);
+}
+
+/* Because of a defect in Super I/O, all reads of the PCI DMA status 
+ * registers, IDE status register and the IDE select register need to be 
+ * retried
+ */
+static u8 superio_ide_inb (unsigned long port)
+{
+       if (port == superio_ide_status[0] ||
+           port == superio_ide_status[1] ||
+           port == superio_ide_select[0] ||
+           port == superio_ide_select[1] ||
+           port == superio_ide_dma_status[0] ||
+           port == superio_ide_dma_status[1]) {
+               u8 tmp;
+               int retries = SUPERIO_IDE_MAX_RETRIES;
+
+               /* printk(" [ reading port 0x%x with retry ] ", port); */
+
+               do {
+                       tmp = inb(port);
+                       if (tmp == 0)
+                               udelay(50);
+               } while (tmp == 0 && retries-- > 0);
+
+               return tmp;
+       }
+
+       return inb(port);
 }
 
-EXPORT_SYMBOL(superio_get_ide_irq);
+void __init superio_ide_init_iops (struct hwif_s *hwif)
+{
+       u32 base, dmabase;
+       u8 tmp;
+       struct pci_dev *pdev = hwif->pci_dev;
+       u8 port = hwif->channel;
+
+       base = pci_resource_start(pdev, port * 2) & ~3;
+       dmabase = pci_resource_start(pdev, 4) & ~3;
+
+       superio_ide_status[port] = base + IDE_STATUS_OFFSET;
+       superio_ide_select[port] = base + IDE_SELECT_OFFSET;
+       superio_ide_dma_status[port] = dmabase + (!port ? 2 : 0xa);
+       
+       /* Clear error/interrupt, enable dma */
+       tmp = superio_ide_inb(superio_ide_dma_status[port]);
+       outb(tmp | 0x66, superio_ide_dma_status[port]);
+
+       /* We need to override inb to workaround a SuperIO errata */
+       hwif->INB = superio_ide_inb;
+}
 
 static int __devinit superio_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
index 32497072560a6ea5c835a1bb88b5afdc8957d183..b0611e60abb91bd857734b71c8b40c68d56eb8d1 100644 (file)
@@ -476,7 +476,7 @@ static int __devinit parport_init_chip(struct parisc_device *dev)
        return 0;
 }
 
-static void __devexit parport_remove_chip(struct parisc_device *dev)
+static int __devexit parport_remove_chip(struct parisc_device *dev)
 {
        struct parport *p = dev->dev.driver_data;
        if (p) {
@@ -495,6 +495,7 @@ static void __devexit parport_remove_chip(struct parisc_device *dev)
                parport_put_port(p);
                kfree (ops); /* hope no-one cached it */
        }
+       return 0;
 }
 
 static struct parisc_device_id parport_tbl[] = {
@@ -508,7 +509,7 @@ static struct parisc_driver parport_driver = {
        .name           = "Parallel",
        .id_table       = parport_tbl,
        .probe          = parport_init_chip,
-       .remove         = parport_remove_chip,
+       .remove         = __devexit_p(parport_remove_chip),
 };
 
 int __devinit parport_gsc_init(void)
index c48fc042fdd2ef13569a74ac3b18179141f000e0..47f53df2cef556ec7e22e9745c19e6869f993306 100644 (file)
@@ -1,11 +1,22 @@
-/*
- * Architecture specific parts of the Floppy driver
+/*    Architecture specific parts of the Floppy driver
+ *
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 2000 Matthew Wilcox (willy a debian . org)
+ *    Copyright (C) 2000 Dave Kennedy
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
  *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
  *
- * Copyright (C) 1995
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #ifndef __ASM_PARISC_FLOPPY_H
 #define __ASM_PARISC_FLOPPY_H
index f6e3034570aad64e614ec978b5835f21fe2074fb..d3cfc0168fb12db9468ff027fa8c87f58af1963a 100644 (file)
@@ -1,7 +1,23 @@
-/*
- * Architecture specific parts of HP's STI (framebuffer) driver
- * structures are HP-UX compatible for XFree86 usage 
- */ 
+/*  Architecture specific parts of HP's STI (framebuffer) driver.
+ *  Structures are HP-UX compatible for XFree86 usage.
+ * 
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 2001 Helge Deller (deller a parisc-linux org)
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
 
 #ifndef __ASM_PARISC_GRFIOCTL_H
 #define __ASM_PARISC_GRFIOCTL_H
index d3224c078248e130a93e86bb0570b2dff0080ac0..db943f0d67dcc9d971a879f13981c70611751cd5 100644 (file)
 #ifdef __KERNEL__
 
 #include <linux/config.h>
-#include <asm/superio.h>
 
 #ifndef MAX_HWIFS
 #define MAX_HWIFS      2
 #endif
 
-static __inline__ int ide_default_irq(ide_ioreg_t base)
-{
-       switch (base) {
-#ifdef CONFIG_SUPERIO
-               case 0x1f0: 
-               case 0x170:
-                       return superio_get_ide_irq();
-#endif /* CONFIG_SUPERIO */
-               default:
-                       return 0;
-       }
-}
-
-static __inline__ ide_ioreg_t ide_default_io_base(int index)
-{
-       switch (index) {
-#ifdef CONFIG_SUPERIO 
-               case 0: return (superio_get_ide_irq() ? 0x1f0 : 0);
-               case 1: return (superio_get_ide_irq() ? 0x170 : 0);
-#endif /* CONFIG_SUPERIO */
-               default:
-                       return 0;
-       }
-}
+#define ide_default_irq(base) (0)
+#define ide_default_io_base(index) ((ide_ioreg_t)0)
 
 static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
 {
@@ -93,7 +70,7 @@ static __inline__ void ide_init_default_hwifs(void)
 static __inline__ void __ide_mm_insw(unsigned long port, void *addr, u32 count)
 {
        while (count--) {
-               *(u16 *)addr = readw(port);
+               *(u16 *)addr = __raw_readw(port);
                addr += 2;
        }
 }
@@ -101,7 +78,7 @@ static __inline__ void __ide_mm_insw(unsigned long port, void *addr, u32 count)
 static __inline__ void __ide_mm_insl(unsigned long port, void *addr, u32 count)
 {
        while (count--) {
-               *(u32 *)addr = readl(port);
+               *(u32 *)addr = __raw_readl(port);
                addr += 4;
        }
 }
@@ -109,7 +86,7 @@ static __inline__ void __ide_mm_insl(unsigned long port, void *addr, u32 count)
 static __inline__ void __ide_mm_outsw(unsigned long port, void *addr, u32 count)
 {
        while (count--) {
-               writew(*(u16 *)addr, port);
+               __raw_writew(*(u16 *)addr, port);
                addr += 2;
        }
 }
@@ -117,7 +94,7 @@ static __inline__ void __ide_mm_outsw(unsigned long port, void *addr, u32 count)
 static __inline__ void __ide_mm_outsl(unsigned long port, void *addr, u32 count)
 {
        while (count--) {
-               writel(*(u32 *)addr, port);
+               __raw_writel(*(u32 *)addr, port);
                addr += 4;
        }
 }
index cd89e57a48b4a8c115ff7744d882af799e4357fd..714db8ebf31cebfe5da44675daddfc51d8705e34 100644 (file)
 #include <linux/types.h>
 #include <asm/pgtable.h>
 
+extern unsigned long parisc_vmerge_boundary;
+extern unsigned long parisc_vmerge_max_size;
+
+#define BIO_VMERGE_BOUNDARY    parisc_vmerge_boundary
+#define BIO_VMERGE_MAX_SIZE    parisc_vmerge_max_size
+
 #define virt_to_phys(a) ((unsigned long)__pa(a))
 #define phys_to_virt(a) __va(a)
 #define virt_to_bus virt_to_phys
index 95dd7871f821478c46d88073a5a3ef7786a01a4e..68338d2bda4e37d9b1172369add7eac80f0d3974 100644 (file)
@@ -1,8 +1,24 @@
-/* $Id: ioctl.h,v 1.2 1999/12/29 22:18:15 willy Exp $
+/*
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 1999,2003 Matthew Wilcox < willy at debian . org >
+ *    portions from "linux/ioctl.h for Linux" by H.H. Bergman.
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
  *
- * linux/ioctl.h for Linux by H.H. Bergman.
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+
 #ifndef _ASM_PARISC_IOCTL_H
 #define _ASM_PARISC_IOCTL_H
 
diff --git a/include/asm-parisc/keyboard.h b/include/asm-parisc/keyboard.h
deleted file mode 100644 (file)
index a7cec34..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *  ---------------------------------------------------------------
- *  This file will be removed as soon as we have converted
- *  hp_psaux.c and hp_keyb.c to the input layer !
- *  
- */
-
-
-/*
- *  linux/include/asm-parisc/keyboard.h
- *
- *  Original by Geert Uytterhoeven
- *  updates by Alex deVries <adevries@thepuffingroup.com>
- *  portions copyright (1999) The Puffin Group
- *  mostly rewritten by Philipp Rumpf <prumpf@tux.org>,
- *   Copyright 2000 Philipp Rumpf
- */
-
-/*
- *  We try to keep the amount of generic code as low as possible -
- *  we want to support all HIL, PS/2, and untranslated USB keyboards
- */
-
-#ifndef _PARISC_KEYBOARD_H
-#define _PARISC_KEYBOARD_H
-
-#ifdef __KERNEL__
-
-#include <linux/kernel.h>
-#include <linux/kd.h>
-
-/*  These are basically the generic functions / variables.  The only
- *  unexpected detail is the initialization sequence for the keyboard
- *  driver is something like this:
- *
- *  detect keyboard port
- *  detect keyboard
- *  call register_kbd_ops 
- *  wait for init_hw
- *
- *  only after init_hw has been called you're allowed to call
- *  handle_scancode.  This means you either have to be extremely
- *  careful or use a global flag or something - I strongly suggest
- *  the latter.    prumpf */
-
-extern struct kbd_ops {
-       int (*setkeycode)(unsigned int, unsigned int);
-       int (*getkeycode)(unsigned int);
-       int (*translate)(unsigned char, unsigned char *, char);
-       char (*unexpected_up)(unsigned char);
-       void (*leds)(unsigned char);
-       void (*init_hw)(void);
-
-       /* Keyboard driver resource allocation  */
-       int (*kbd_request_irq)(void (*handler)(int, void *, struct pt_regs *));
-
-       unsigned char sysrq_key;
-       unsigned char *sysrq_xlate;
-} kbd_ops;
-
-#define kbd_setkeycode         (*kbd_ops->setkeycode)
-#define kbd_getkeycode         (*kbd_ops->getkeycode)
-#define kbd_translate          (*kbd_ops->translate)
-#define kbd_unexpected_up      (*kbd_ops->unexpected_up)
-#define kbd_leds               (*kbd_ops->leds)
-#define kbd_init_hw            (*kbd_ops->init_hw)
-
-#define SYSRQ_KEY              (kbd_ops->sysrq_key)
-#define        kbd_sysrq_xlate         (kbd_ops->sysrq_xlate)
-
-/* Do the actual calls via kbd_ops vector  */
-#define kbd_request_irq(handler) kbd_ops->kbd_request_irq(handler)
-
-extern unsigned char hp_ps2kbd_sysrq_xlate[128];       /* from drivers/char/hp_keyb.c */
-
-extern void unregister_kbd_ops(void);
-extern void register_kbd_ops(struct kbd_ops *ops);
-
-#endif /* __KERNEL__ */
-
-#endif /* __ASMPARISC_KEYBOARD_H */
diff --git a/include/asm-parisc/md.h b/include/asm-parisc/md.h
deleted file mode 100644 (file)
index 67aace8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* $Id: md.h,v 1.1.1.1 1999/03/15 19:41:02 pjlahaie Exp $
- * md.h: High speed xor_block operation for RAID4/5 
- *
- */
-#ifndef __ASM_MD_H
-#define __ASM_MD_H
-
-/* #define HAVE_ARCH_XORBLOCK */
-
-#define MD_XORBLOCK_ALIGNMENT  sizeof(long)
-
-#endif /* __ASM_MD_H */
index 2b8132d79e4df1712ba6de98ac1d5ffa7072ddaa..8d29b3d9fb33859862f3c23685383e47b971a313 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: namei.h,v 1.1.1.1 1999/03/15 19:41:02 pjlahaie Exp $
+/* $Id: namei.h,v 1.1 1996/12/13 14:48:21 jj Exp $
  * linux/include/asm-parisc/namei.h
  *
  * Included from linux/fs/namei.c
index 6d803a9e8967f2bb565cf52f520acbbf3e7e1fed..b091f0845662251c76191ac8b5818d7a74ce44ff 100644 (file)
@@ -43,7 +43,7 @@
 **
 ** This is the "common" or "base" data structure which HBA drivers
 ** (eg Dino or LBA) are required to place at the top of their own
-** dev->sysdata structure.  I've heard this called "C inheritance" too.
+** platform_data structure.  I've heard this called "C inheritance" too.
 **
 ** Data needed by pcibios layer belongs here.
 */
index f01554398f1a062c37b2f66a09cc7e5616799e0e..f9ab172f6984732b598c713d1e197feecbcf291f 100644 (file)
@@ -1,15 +1,29 @@
-#ifndef _ASM_PARISC_SEMAPHORE_H
-#define _ASM_PARISC_SEMAPHORE_H
-
-/*
- * SMP- and interrupt-safe semaphores.
+/*    SMP- and interrupt-safe semaphores.
+ *    PA-RISC version by Matthew Wilcox
  *
- * (C) Copyright 1996 Linus Torvalds
+ *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+ *    Copyright (C) 1996 Linus Torvalds
+ *    Copyright (C) 1999-2001 Matthew Wilcox < willy at debian d0T org >
+ *    Copyright (C) 2000 Grant Grundler < grundler a debian org >
  *
- * PA-RISC version by Matthew Wilcox
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
  *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#ifndef _ASM_PARISC_SEMAPHORE_H
+#define _ASM_PARISC_SEMAPHORE_H
+
 #include <linux/spinlock.h>
 #include <linux/wait.h>
 #include <linux/rwsem.h>
index 83cdf600d2cd992e074c26956e30ce14ce54cd45..60cac82a6a82009b6e4ef46213a874074812ac0b 100644 (file)
@@ -81,9 +81,12 @@ struct superio_device {
        || ((x)->device == PCI_DEVICE_ID_NS_87560_LIO) \
        || ((x)->device == PCI_DEVICE_ID_NS_87560_USB) ) )
 
+struct hwif_s;
+
 extern void superio_inform_irq(int irq);
 extern void superio_serial_init(void);         /* called by rs_init() */
 extern int superio_fixup_irq(struct pci_dev *pcidev); /* called by iosapic */
-extern int superio_get_ide_irq(void);
+extern void superio_fixup_pci(struct pci_dev *pdev);
+extern void superio_ide_init_iops (struct hwif_s *hwif);
 
 #endif /* _PARISC_SUPERIO_H */
index f5b0e2b8f30ab537f913be5882484761a4515888..57cbda432476983fa07f668cadd68278e84ddd1f 100644 (file)
@@ -358,7 +358,7 @@ static void snd_harmony_enable_interrupts(snd_card_harmony_t *chip)
  * The interrupt routine must provide adresse of next physical pages 
  * used by harmony
  */
-void snd_card_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
+static int snd_card_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
 {
        snd_card_harmony_t *harmony = (snd_card_harmony_t *)dev;
        u32 dstatus = 0;
@@ -414,6 +414,8 @@ void snd_card_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
                }
        }
        snd_harmony_enable_interrupts(harmony);
+
+       return IRQ_HANDLED;
 }
 
 /*