Commit 33cc912c authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://linux-scsi.bkbits.net/scsi-for-linus-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 4ad1e20a 67bfb5a7
...@@ -1864,6 +1864,13 @@ S: Am Muehlenweg 38 ...@@ -1864,6 +1864,13 @@ S: Am Muehlenweg 38
S: D53424 Remagen S: D53424 Remagen
S: Germany S: Germany
N: Colin Leroy
E: colin@colino.net
W: http://www.geekounet.org/
D: PowerMac adt7467 fan driver
S: Toulouse
S: France
N: Achim Leubner N: Achim Leubner
E: achim_leubner@adaptec.com E: achim_leubner@adaptec.com
D: GDT Disk Array Controller/Storage RAID controller driver D: GDT Disk Array Controller/Storage RAID controller driver
......
...@@ -136,7 +136,7 @@ PCI ...@@ -136,7 +136,7 @@ PCI
IOMMU IOMMU
iommu=[size][,noagp][,off][,force][,noforce][,leak][,memaper[=order]] iommu=[size][,noagp][,off][,force][,noforce][,leak][,memaper[=order]][,soft]
size set size of iommu (in bytes) size set size of iommu (in bytes)
noagp don't initialize the AGP driver and use full aperture. noagp don't initialize the AGP driver and use full aperture.
off don't use the IOMMU off don't use the IOMMU
...@@ -144,5 +144,9 @@ IOMMU ...@@ -144,5 +144,9 @@ IOMMU
memaper[=order] allocate an own aperture over RAM with size 32MB^order. memaper[=order] allocate an own aperture over RAM with size 32MB^order.
noforce don't force IOMMU usage. Default. noforce don't force IOMMU usage. Default.
force Force IOMMU force Force IOMMU
soft Use software bounce buffering for non 32bit IO. Default on Intel
machines.
swiotlb=pages
Prereserve that many 4K pages for the software IO bounce buffering.
...@@ -188,7 +188,7 @@ config ALPHA_MIATA ...@@ -188,7 +188,7 @@ config ALPHA_MIATA
help help
The Digital PersonalWorkStation (PWS 433a, 433au, 500a, 500au, 600a, The Digital PersonalWorkStation (PWS 433a, 433au, 500a, 500au, 600a,
or 600au). There is an Installation HOWTO for this hardware at or 600au). There is an Installation HOWTO for this hardware at
<http://members.brabant.chello.nl/~s.vandereijk/miata.html>. <http://eijk.homelinux.org/~stefan/miata.html>.
config ALPHA_MIKASA config ALPHA_MIKASA
bool "Mikasa" bool "Mikasa"
...@@ -486,19 +486,8 @@ config SMP ...@@ -486,19 +486,8 @@ config SMP
singleprocessor machines. On a singleprocessor machine, the kernel singleprocessor machines. On a singleprocessor machine, the kernel
will run faster if you say N here. will run faster if you say N here.
Note that if you say Y here and choose architecture "586" or See also the <file:Documentation/smp.tex>, and the SMP-HOWTO
"Pentium" under "Processor family", the kernel will not work on 486 available at <http://www.tldp.org/docs.html#howto>.
architectures. Similarly, multiprocessor kernels for the "PPro"
architecture may not work on all Pentium based boards.
People using multiprocessor machines who say Y here should also say
Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
Management" code will be disabled if you say Y here.
See also the <file:Documentation/smp.txt>,
<file:Documentation/i386/IO-APIC.txt>,
<file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
<http://www.tldp.org/docs.html#howto>.
If you don't know what to do here, say N. If you don't know what to do here, say N.
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# #
CONFIG_ALPHA=y CONFIG_ALPHA=y
CONFIG_64BIT=y
CONFIG_MMU=y CONFIG_MMU=y
CONFIG_SWAP=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA=y
...@@ -11,14 +11,28 @@ CONFIG_GENERIC_ISA_DMA=y ...@@ -11,14 +11,28 @@ CONFIG_GENERIC_ISA_DMA=y
# Code maturity level options # Code maturity level options
# #
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_STANDALONE=y
CONFIG_BROKEN_ON_SMP=y
# #
# General setup # General setup
# #
CONFIG_NET=y CONFIG_SWAP=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=14
# 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 # Loadable module support
...@@ -26,6 +40,8 @@ CONFIG_SYSCTL=y ...@@ -26,6 +40,8 @@ CONFIG_SYSCTL=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y CONFIG_KMOD=y
# #
...@@ -45,6 +61,8 @@ CONFIG_ALPHA_GENERIC=y ...@@ -45,6 +61,8 @@ CONFIG_ALPHA_GENERIC=y
# CONFIG_ALPHA_EIGER is not set # CONFIG_ALPHA_EIGER is not set
# CONFIG_ALPHA_JENSEN is not set # CONFIG_ALPHA_JENSEN is not set
# CONFIG_ALPHA_LX164 is not set # CONFIG_ALPHA_LX164 is not set
# CONFIG_ALPHA_LYNX is not set
# CONFIG_ALPHA_MARVEL is not set
# CONFIG_ALPHA_MIATA is not set # CONFIG_ALPHA_MIATA is not set
# CONFIG_ALPHA_MIKASA is not set # CONFIG_ALPHA_MIKASA is not set
# CONFIG_ALPHA_NAUTILUS is not set # CONFIG_ALPHA_NAUTILUS is not set
...@@ -62,26 +80,35 @@ CONFIG_ALPHA_GENERIC=y ...@@ -62,26 +80,35 @@ CONFIG_ALPHA_GENERIC=y
# CONFIG_ALPHA_TITAN is not set # CONFIG_ALPHA_TITAN is not set
# CONFIG_ALPHA_WILDFIRE is not set # CONFIG_ALPHA_WILDFIRE is not set
CONFIG_ISA=y CONFIG_ISA=y
CONFIG_EISA=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_ALPHA_CORE_AGP=y
CONFIG_ALPHA_BROKEN_IRQ_MASK=y CONFIG_ALPHA_BROKEN_IRQ_MASK=y
CONFIG_EARLY_PRINTK=y
CONFIG_EISA=y
# CONFIG_SMP is not set # CONFIG_SMP is not set
# CONFIG_DISCONTIGMEM is not set # CONFIG_DISCONTIGMEM is not set
CONFIG_VERBOSE_MCHECK=y CONFIG_VERBOSE_MCHECK=y
CONFIG_VERBOSE_MCHECK_ON=1
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y CONFIG_PCI_NAMES=y
# CONFIG_HOTPLUG is not set CONFIG_EISA_PCI_EISA=y
CONFIG_KCORE_ELF=y CONFIG_EISA_VIRTUAL_ROOT=y
# CONFIG_KCORE_AOUT is not set CONFIG_EISA_NAMES=y
CONFIG_SRM_ENV=m CONFIG_SRM_ENV=m
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set # CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_EM86 is not set # CONFIG_BINFMT_EM86 is not set
# CONFIG_BINFMT_MISC is not set
# #
# Parallel port support # Device Drivers
# #
# CONFIG_PARPORT is not set
#
# Generic Driver Options
#
# CONFIG_DEBUG_DRIVER is not set
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -89,10 +116,14 @@ CONFIG_BINFMT_ELF=y ...@@ -89,10 +116,14 @@ CONFIG_BINFMT_ELF=y
# CONFIG_MTD is not set # CONFIG_MTD is not set
# #
# Plug and Play configuration # Parallel port support
#
# CONFIG_PARPORT is not set
#
# Plug and Play support
# #
CONFIG_PNP=y CONFIG_PNP=y
# CONFIG_PNP_NAMES is not set
# CONFIG_PNP_DEBUG is not set # CONFIG_PNP_DEBUG is not set
# #
...@@ -111,63 +142,60 @@ CONFIG_BLK_DEV_FD=y ...@@ -111,63 +142,60 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_UMEM is not set
CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_CARMEL is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RAM is not set
#
# Multi-device support (RAID and LVM)
#
# CONFIG_MD is not set
# #
# ATA/ATAPI/MFM/RLL support # ATA/ATAPI/MFM/RLL support
# #
CONFIG_IDE=y CONFIG_IDE=y
CONFIG_IDE_MAX_HWIFS=4
#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDE=y
# #
# Please see Documentation/ide.txt for help/info on IDE drives # Please see Documentation/ide.txt for help/info on IDE drives
# #
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=y CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set # CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set # CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDE_TASK_IOCTL is not set
# CONFIG_IDE_TASKFILE_IO is not set
# #
# IDE chipset support/bugfixes # IDE chipset support/bugfixes
# #
# CONFIG_BLK_DEV_ISAPNP is not set CONFIG_IDE_GENERIC=y
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_IDEPCI_SHARE_IRQ is not set # CONFIG_IDEPCI_SHARE_IRQ is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDE_TCQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set # CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set # CONFIG_IDEDMA_ONLYDISK is not set
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_BLK_DEV_ADMA=y CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set # CONFIG_BLK_DEV_AEC62XX is not set
CONFIG_BLK_DEV_ALI15X3=y CONFIG_BLK_DEV_ALI15X3=y
# CONFIG_WDC_ALI15X3 is not set # CONFIG_WDC_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set # CONFIG_BLK_DEV_AMD74XX is not set
CONFIG_BLK_DEV_CMD64X=y CONFIG_BLK_DEV_CMD64X=y
# CONFIG_BLK_DEV_TRIFLEX is not set
CONFIG_BLK_DEV_CY82C693=y CONFIG_BLK_DEV_CY82C693=y
# CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set # CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set # CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set # CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
# CONFIG_BLK_DEV_PIIX is not set # CONFIG_BLK_DEV_PIIX is not set
# CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set # CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set # CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
...@@ -176,13 +204,17 @@ CONFIG_BLK_DEV_CY82C693=y ...@@ -176,13 +204,17 @@ CONFIG_BLK_DEV_CY82C693=y
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
CONFIG_IDEDMA_AUTO=y CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set # CONFIG_IDEDMA_IVB is not set
CONFIG_IDEDMA_AUTO=y
# CONFIG_DMA_NONPCI is not set
# CONFIG_BLK_DEV_HD is not set
# #
# SCSI support # SCSI device support
# #
CONFIG_SCSI=y CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
# #
# SCSI support type (disk, tape, CD-ROM) # SCSI support type (disk, tape, CD-ROM)
...@@ -202,86 +234,105 @@ CONFIG_BLK_DEV_SR_VENDOR=y ...@@ -202,86 +234,105 @@ CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_LOGGING is not set
#
# SCSI Transport Attributes
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# #
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set # CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set # CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set # CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AACRAID is not set # CONFIG_SCSI_AACRAID is not set
CONFIG_SCSI_AIC7XXX=m CONFIG_SCSI_AIC7XXX=m
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253 CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
CONFIG_AIC7XXX_RESET_DELAY_MS=5000 CONFIG_AIC7XXX_RESET_DELAY_MS=5000
# CONFIG_AIC7XXX_PROBE_EISA_VL is not set
# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set # CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
CONFIG_AIC7XXX_DEBUG_MASK=0
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set # CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set # CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
# CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
CONFIG_SCSI_NCR53C8XX=y
CONFIG_SCSI_SYM53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set
# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set
# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set
# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 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_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set # CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG 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 is not set
# #
# Fusion MPT device support # Fusion MPT device support
# #
# CONFIG_FUSION is not set # CONFIG_FUSION is not set
# #
# IEEE 1394 (FireWire) support (EXPERIMENTAL) # IEEE 1394 (FireWire) support
# #
# CONFIG_IEEE1394 is not set # CONFIG_IEEE1394 is not set
#
# I2O device support
#
#
# Networking support
#
CONFIG_NET=y
# #
# Networking options # Networking options
# #
CONFIG_PACKET=y CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set # CONFIG_PACKET_MMAP is not set
CONFIG_NETLINK_DEV=y CONFIG_NETLINK_DEV=y
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_NET_KEY=m CONFIG_NET_KEY=m
CONFIG_INET=y CONFIG_INET=y
...@@ -296,7 +347,17 @@ CONFIG_INET_ECN=y ...@@ -296,7 +347,17 @@ CONFIG_INET_ECN=y
# CONFIG_SYN_COOKIES is not set # CONFIG_SYN_COOKIES is not set
CONFIG_INET_AH=m CONFIG_INET_AH=m
CONFIG_INET_ESP=m CONFIG_INET_ESP=m
CONFIG_XFRM_USER=m # CONFIG_INET_IPCOMP is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
# #
# IP: Netfilter Configuration # IP: Netfilter Configuration
...@@ -304,14 +365,18 @@ CONFIG_XFRM_USER=m ...@@ -304,14 +365,18 @@ CONFIG_XFRM_USER=m
CONFIG_IP_NF_CONNTRACK=m CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_TFTP is not set
# CONFIG_IP_NF_AMANDA is not set
CONFIG_IP_NF_QUEUE=m CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m CONFIG_IP_NF_IPTABLES=m
# CONFIG_IP_NF_MATCH_LIMIT is not set # CONFIG_IP_NF_MATCH_LIMIT is not set
# CONFIG_IP_NF_MATCH_IPRANGE is not set
# CONFIG_IP_NF_MATCH_MAC is not set # CONFIG_IP_NF_MATCH_MAC is not set
# CONFIG_IP_NF_MATCH_PKTTYPE is not set # CONFIG_IP_NF_MATCH_PKTTYPE is not set
# CONFIG_IP_NF_MATCH_MARK is not set # CONFIG_IP_NF_MATCH_MARK is not set
# CONFIG_IP_NF_MATCH_MULTIPORT is not set # CONFIG_IP_NF_MATCH_MULTIPORT is not set
# CONFIG_IP_NF_MATCH_TOS is not set # CONFIG_IP_NF_MATCH_TOS is not set
# CONFIG_IP_NF_MATCH_RECENT is not set
# CONFIG_IP_NF_MATCH_ECN is not set # CONFIG_IP_NF_MATCH_ECN is not set
# CONFIG_IP_NF_MATCH_DSCP is not set # CONFIG_IP_NF_MATCH_DSCP is not set
# CONFIG_IP_NF_MATCH_AH_ESP is not set # CONFIG_IP_NF_MATCH_AH_ESP is not set
...@@ -321,15 +386,15 @@ CONFIG_IP_NF_IPTABLES=m ...@@ -321,15 +386,15 @@ CONFIG_IP_NF_IPTABLES=m
# CONFIG_IP_NF_MATCH_HELPER is not set # CONFIG_IP_NF_MATCH_HELPER is not set
# CONFIG_IP_NF_MATCH_STATE is not set # CONFIG_IP_NF_MATCH_STATE is not set
# CONFIG_IP_NF_MATCH_CONNTRACK is not set # CONFIG_IP_NF_MATCH_CONNTRACK is not set
# CONFIG_IP_NF_MATCH_UNCLEAN is not set
# CONFIG_IP_NF_MATCH_OWNER is not set # CONFIG_IP_NF_MATCH_OWNER is not set
CONFIG_IP_NF_FILTER=m CONFIG_IP_NF_FILTER=m
# CONFIG_IP_NF_TARGET_REJECT is not set # CONFIG_IP_NF_TARGET_REJECT is not set
# CONFIG_IP_NF_TARGET_MIRROR is not set
CONFIG_IP_NF_NAT=m CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m CONFIG_IP_NF_TARGET_MASQUERADE=m
# CONFIG_IP_NF_TARGET_REDIRECT is not set # CONFIG_IP_NF_TARGET_REDIRECT is not set
# CONFIG_IP_NF_TARGET_NETMAP is not set
# CONFIG_IP_NF_TARGET_SAME is not set
# CONFIG_IP_NF_NAT_LOCAL is not set # CONFIG_IP_NF_NAT_LOCAL is not set
# CONFIG_IP_NF_NAT_SNMP_BASIC is not set # CONFIG_IP_NF_NAT_SNMP_BASIC is not set
CONFIG_IP_NF_NAT_IRC=m CONFIG_IP_NF_NAT_IRC=m
...@@ -340,7 +405,8 @@ CONFIG_IP_NF_NAT_FTP=m ...@@ -340,7 +405,8 @@ CONFIG_IP_NF_NAT_FTP=m
# CONFIG_IP_NF_TARGET_TCPMSS is not set # CONFIG_IP_NF_TARGET_TCPMSS is not set
# CONFIG_IP_NF_ARPTABLES is not set # CONFIG_IP_NF_ARPTABLES is not set
CONFIG_IP_NF_COMPAT_IPCHAINS=y CONFIG_IP_NF_COMPAT_IPCHAINS=y
# CONFIG_IPV6 is not set CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# #
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
...@@ -349,9 +415,9 @@ CONFIG_IPV6_SCTP__=y ...@@ -349,9 +415,9 @@ CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set # CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q=m
# CONFIG_LLC is not set # CONFIG_LLC2 is not set
# CONFIG_DECNET is not set # CONFIG_IPX is not set
# CONFIG_BRIDGE is not set # CONFIG_ATALK is not set
# CONFIG_X25 is not set # CONFIG_X25 is not set
# CONFIG_LAPB is not set # CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set # CONFIG_NET_DIVERT is not set
...@@ -369,10 +435,6 @@ CONFIG_VLAN_8021Q=m ...@@ -369,10 +435,6 @@ CONFIG_VLAN_8021Q=m
# Network testing # Network testing
# #
# CONFIG_NET_PKTGEN is not set # CONFIG_NET_PKTGEN is not set
#
# Network device support
#
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
# #
...@@ -390,6 +452,7 @@ CONFIG_DUMMY=m ...@@ -390,6 +452,7 @@ CONFIG_DUMMY=m
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
# #
CONFIG_NET_ETHERNET=y CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
CONFIG_NET_VENDOR_3COM=y CONFIG_NET_VENDOR_3COM=y
...@@ -400,6 +463,7 @@ CONFIG_NET_VENDOR_3COM=y ...@@ -400,6 +463,7 @@ CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL3 is not set # CONFIG_EL3 is not set
# CONFIG_3C515 is not set # CONFIG_3C515 is not set
CONFIG_VORTEX=y CONFIG_VORTEX=y
# CONFIG_TYPHOON is not set
# CONFIG_LANCE is not set # CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set # CONFIG_NET_VENDOR_RACAL is not set
...@@ -412,6 +476,7 @@ CONFIG_DE2104X=m ...@@ -412,6 +476,7 @@ CONFIG_DE2104X=m
CONFIG_TULIP=y CONFIG_TULIP=y
# CONFIG_TULIP_MWI is not set # CONFIG_TULIP_MWI is not set
CONFIG_TULIP_MMIO=y CONFIG_TULIP_MMIO=y
# CONFIG_TULIP_NAPI is not set
# CONFIG_DE4X5 is not set # CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set # CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set # CONFIG_DM9102 is not set
...@@ -421,10 +486,12 @@ CONFIG_TULIP_MMIO=y ...@@ -421,10 +486,12 @@ CONFIG_TULIP_MMIO=y
# CONFIG_NET_ISA is not set # CONFIG_NET_ISA is not set
CONFIG_NET_PCI=y CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set # CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set # CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set # CONFIG_APRICOT is not set
# CONFIG_B44 is not set # CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set
# CONFIG_CS89x0 is not set # CONFIG_CS89x0 is not set
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set # CONFIG_EEPRO100 is not set
...@@ -440,7 +507,6 @@ CONFIG_NET_PCI=y ...@@ -440,7 +507,6 @@ CONFIG_NET_PCI=y
# CONFIG_SIS900 is not set # CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set # CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set # CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set # CONFIG_VIA_RHINE is not set
# CONFIG_NET_POCKET is not set # CONFIG_NET_POCKET is not set
...@@ -448,13 +514,20 @@ CONFIG_NET_PCI=y ...@@ -448,13 +514,20 @@ CONFIG_NET_PCI=y
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
CONFIG_DL2K=m # CONFIG_DL2K is not set
# CONFIG_E1000 is not set # CONFIG_E1000 is not set
CONFIG_NS83820=m # CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
CONFIG_YELLOWFIN=y CONFIG_YELLOWFIN=y
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set # CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_IXGB is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_HIPPI is not set # CONFIG_HIPPI is not set
# CONFIG_PPP is not set # CONFIG_PPP is not set
...@@ -470,8 +543,8 @@ CONFIG_YELLOWFIN=y ...@@ -470,8 +543,8 @@ CONFIG_YELLOWFIN=y
# #
# CONFIG_TR is not set # CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# #
# Wan interfaces # Wan interfaces
...@@ -483,35 +556,75 @@ CONFIG_YELLOWFIN=y ...@@ -483,35 +556,75 @@ CONFIG_YELLOWFIN=y
# #
# CONFIG_HAMRADIO is not set # CONFIG_HAMRADIO is not set
#
# IrDA (infrared) support
#
# CONFIG_IRDA is not set
#
# Bluetooth support
#
# CONFIG_BT is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# #
# ISDN subsystem # ISDN subsystem
# #
# CONFIG_ISDN_BOOL is not set # CONFIG_ISDN is not set
# #
# Old CD-ROM drivers (not SCSI, not IDE) # Telephony Support
# #
# CONFIG_CD_NO_IDESCSI is not set # CONFIG_PHONE is not set
# #
# Input device support # Input device support
# #
# CONFIG_INPUT is not set CONFIG_INPUT=y
# #
# Userland interfaces # 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 is not set
# CONFIG_INPUT_EVBUG is not set
# #
# Input I/O drivers # Input I/O drivers
# #
# CONFIG_GAMEPORT is not set # CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIO is not set CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# #
# Input Device Drivers # Input Device Drivers
# #
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# 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_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# #
# Character devices # Character devices
...@@ -524,32 +637,30 @@ CONFIG_HW_CONSOLE=y ...@@ -524,32 +637,30 @@ CONFIG_HW_CONSOLE=y
# #
# Serial drivers # Serial drivers
# #
CONFIG_SERIAL_8250=m CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set # CONFIG_SERIAL_8250_EXTENDED is not set
# #
# Non-8250 serial port support # Non-8250 serial port support
# #
CONFIG_SERIAL_CORE=m CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256 CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
# # CONFIG_QIC02_TAPE is not set
# I2C support
#
# CONFIG_I2C is not set
# #
# Mice # IPMI
# #
# CONFIG_BUSMOUSE is not set # CONFIG_IPMI_HANDLER is not set
# CONFIG_QIC02_TAPE is not set
# #
# Watchdog Cards # Watchdog Cards
# #
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
# CONFIG_NVRAM is not set
CONFIG_RTC=y CONFIG_RTC=y
# CONFIG_DTLK is not set # CONFIG_DTLK is not set
# CONFIG_R3964 is not set # CONFIG_R3964 is not set
...@@ -563,73 +674,135 @@ CONFIG_RTC=y ...@@ -563,73 +674,135 @@ CONFIG_RTC=y
# CONFIG_DRM is not set # CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set # CONFIG_RAW_DRIVER is not set
#
# I2C support
#
# CONFIG_I2C is not set
#
# Misc devices
#
# #
# Multimedia devices # Multimedia devices
# #
# CONFIG_VIDEO_DEV is not set # CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
# Graphics support
#
# CONFIG_FB is not set
#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=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 # File systems
# #
# CONFIG_QUOTA is not set CONFIG_EXT2_FS=y
CONFIG_AUTOFS_FS=m # CONFIG_EXT2_FS_XATTR is not set
# CONFIG_AUTOFS4_FS is not set # CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
CONFIG_REISERFS_FS=m CONFIG_REISERFS_FS=m
# CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set # CONFIG_REISERFS_PROC_INFO 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=m
# CONFIG_AUTOFS4_FS is not set
#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set # CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
# CONFIG_EXT3_FS is not set
# CONFIG_JBD is not set
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
CONFIG_TMPFS=y
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_JFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_XFS_FS is not set
# #
# Network File Systems # Network File Systems
# #
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=m CONFIG_NFS_FS=m
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set # CONFIG_NFS_V4 is not set
# CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=m CONFIG_NFSD=m
CONFIG_NFSD_V3=y CONFIG_NFSD_V3=y
# CONFIG_NFSD_V4 is not set # CONFIG_NFSD_V4 is not set
# CONFIG_NFSD_TCP is not set # CONFIG_NFSD_TCP is not set
CONFIG_SUNRPC=m
CONFIG_LOCKD=m CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m CONFIG_EXPORTFS=m
# CONFIG_CIFS is not set CONFIG_SUNRPC=m
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS 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 # CONFIG_AFS_FS is not set
# #
...@@ -638,11 +811,11 @@ CONFIG_EXPORTFS=m ...@@ -638,11 +811,11 @@ CONFIG_EXPORTFS=m
# CONFIG_PARTITION_ADVANCED is not set # CONFIG_PARTITION_ADVANCED is not set
CONFIG_OSF_PARTITION=y CONFIG_OSF_PARTITION=y
CONFIG_MSDOS_PARTITION=y CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
# #
# Native Language Support # Native Language Support
# #
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set # CONFIG_NLS_CODEPAGE_737 is not set
...@@ -683,29 +856,9 @@ CONFIG_NLS_CODEPAGE_437=y ...@@ -683,29 +856,9 @@ CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_UTF8 is not set # CONFIG_NLS_UTF8 is not set
# #
# Console drivers # Profiling support
#
CONFIG_VGA_CONSOLE=y
#
# Frame-buffer support
#
# CONFIG_FB is not set
# #
# Sound # CONFIG_PROFILING is not set
#
# CONFIG_SOUND is not set
#
# USB support
#
# CONFIG_USB is not set
#
# Bluetooth support
#
# CONFIG_BT is not set
# #
# Kernel hacking # Kernel hacking
...@@ -718,16 +871,34 @@ CONFIG_MAGIC_SYSRQ=y ...@@ -718,16 +871,34 @@ CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_RWLOCK is not set # CONFIG_DEBUG_RWLOCK is not set
# CONFIG_DEBUG_SEMAPHORE is not set # CONFIG_DEBUG_SEMAPHORE is not set
CONFIG_DEBUG_INFO=y
# #
# Security options # Security options
# #
CONFIG_SECURITY_CAPABILITIES=y # CONFIG_SECURITY is not set
# #
# Cryptographic options # Cryptographic options
# #
# CONFIG_CRYPTO is not set CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=m
CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
CONFIG_CRYPTO_DES=m
# 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 # Library routines
......
...@@ -35,6 +35,9 @@ ...@@ -35,6 +35,9 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/vga.h> #include <asm/vga.h>
#define __KERNEL_SYSCALLS__
#include <asm/unistd.h>
extern struct hwrpb_struct *hwrpb; extern struct hwrpb_struct *hwrpb;
extern void dump_thread(struct pt_regs *, struct user *); extern void dump_thread(struct pt_regs *, struct user *);
extern spinlock_t rtc_lock; extern spinlock_t rtc_lock;
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
* 2000-08-13 Jan-Benedict Glaw <jbglaw@lug-owl.de> * 2000-08-13 Jan-Benedict Glaw <jbglaw@lug-owl.de>
* Fixed time_init to be aware of epoches != 1900. This prevents * Fixed time_init to be aware of epoches != 1900. This prevents
* booting up in 2048 for me;) Code is stolen from rtc.c. * booting up in 2048 for me;) Code is stolen from rtc.c.
* 2003-06-03 R. Scott Bailey <scott.bailey@eds.com>
* Tighten sanity in time_init from 1% (10,000 PPM) to 250 PPM
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -306,7 +308,7 @@ void __init ...@@ -306,7 +308,7 @@ void __init
time_init(void) time_init(void)
{ {
unsigned int year, mon, day, hour, min, sec, cc1, cc2, epoch; unsigned int year, mon, day, hour, min, sec, cc1, cc2, epoch;
unsigned long cycle_freq, one_percent; unsigned long cycle_freq, tolerance;
long diff; long diff;
/* Calibrate CPU clock -- attempt #1. */ /* Calibrate CPU clock -- attempt #1. */
...@@ -324,13 +326,13 @@ time_init(void) ...@@ -324,13 +326,13 @@ time_init(void)
cycle_freq = hwrpb->cycle_freq; cycle_freq = hwrpb->cycle_freq;
if (est_cycle_freq) { if (est_cycle_freq) {
/* If the given value is within 1% of what we calculated, /* If the given value is within 250 PPM of what we calculated,
accept it. Otherwise, use what we found. */ accept it. Otherwise, use what we found. */
one_percent = cycle_freq / 100; tolerance = cycle_freq / 4000;
diff = cycle_freq - est_cycle_freq; diff = cycle_freq - est_cycle_freq;
if (diff < 0) if (diff < 0)
diff = -diff; diff = -diff;
if ((unsigned long)diff > one_percent) { if ((unsigned long)diff > tolerance) {
cycle_freq = est_cycle_freq; cycle_freq = est_cycle_freq;
printk("HWRPB cycle frequency bogus. " printk("HWRPB cycle frequency bogus. "
"Estimated %lu Hz\n", cycle_freq); "Estimated %lu Hz\n", cycle_freq);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h>
#include <asm/gentrap.h> #include <asm/gentrap.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -25,35 +26,37 @@ ...@@ -25,35 +26,37 @@
#include "proto.h" #include "proto.h"
/* data/code implementing a work-around for some SRMs which /* Work-around for some SRMs which mishandle opDEC faults. */
mishandle opDEC faults
*/
static int opDEC_testing = 0;
static int opDEC_fix = 0;
static int opDEC_checked = 0;
static unsigned long opDEC_test_pc = 0;
static void static int opDEC_fix;
static void __init
opDEC_check(void) opDEC_check(void)
{ {
unsigned long test_pc; __asm__ __volatile__ (
/* Load the address of... */
if (opDEC_checked) return; " br $16, 1f\n"
/* A stub instruction fault handler. Just add 4 to the
lock_kernel(); pc and continue. */
opDEC_testing = 1; " ldq $16, 8($sp)\n"
" addq $16, 4, $16\n"
__asm__ __volatile__( " stq $16, 8($sp)\n"
" br %0,1f\n" " call_pal %[rti]\n"
"1: addq %0,8,%0\n" /* Install the instruction fault handler. */
" stq %0,%1\n" "1: lda $17, 3\n"
" call_pal %[wrent]\n"
/* With that in place, the fault from the round-to-minf fp
insn will arrive either at the "lda 4" insn (bad) or one
past that (good). This places the correct fixup in %0. */
" lda %[fix], 0\n"
" cvttq/svm $f31,$f31\n" " cvttq/svm $f31,$f31\n"
: "=&r"(test_pc), "=m"(opDEC_test_pc) " lda %[fix], 4"
: ); : [fix] "=r" (opDEC_fix)
: [rti] "n" (PAL_rti), [wrent] "n" (PAL_wrent)
: "$0", "$1", "$16", "$17", "$22", "$23", "$24", "$25");
opDEC_testing = 0; if (opDEC_fix)
opDEC_checked = 1; printk("opDEC fixup enabled.\n");
unlock_kernel();
} }
void void
...@@ -244,7 +247,7 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -244,7 +247,7 @@ do_entIF(unsigned long type, struct pt_regs *regs)
siginfo_t info; siginfo_t info;
int signo, code; int signo, code;
if (!opDEC_testing || type != 4) { if (regs->ps == 0) {
if (type == 1) { if (type == 1) {
const unsigned int *data const unsigned int *data
= (const unsigned int *) regs->pc; = (const unsigned int *) regs->pc;
...@@ -359,14 +362,6 @@ do_entIF(unsigned long type, struct pt_regs *regs) ...@@ -359,14 +362,6 @@ do_entIF(unsigned long type, struct pt_regs *regs)
fault during the boot sequence and testing if fault during the boot sequence and testing if
we get the correct PC. If not, we set a flag we get the correct PC. If not, we set a flag
to correct it every time through. */ to correct it every time through. */
if (opDEC_testing) {
if (regs->pc == opDEC_test_pc) {
opDEC_fix = 4;
regs->pc += 4;
printk("opDEC fixup enabled.\n");
}
return;
}
regs->pc += opDEC_fix; regs->pc += opDEC_fix;
/* EV4 does not implement anything except normal /* EV4 does not implement anything except normal
...@@ -1083,22 +1078,22 @@ do_entUnaUser(void * va, unsigned long opcode, ...@@ -1083,22 +1078,22 @@ do_entUnaUser(void * va, unsigned long opcode,
return; return;
} }
void void __init
trap_init(void) trap_init(void)
{ {
/* Tell PAL-code what global pointer we want in the kernel. */ /* Tell PAL-code what global pointer we want in the kernel. */
register unsigned long gptr __asm__("$29"); register unsigned long gptr __asm__("$29");
wrkgp(gptr); wrkgp(gptr);
/* Hack for Multia (UDB) and JENSEN: some of their SRMs have
a bug in the handling of the opDEC fault. Fix it up if so. */
if (implver() == IMPLVER_EV4)
opDEC_check();
wrent(entArith, 1); wrent(entArith, 1);
wrent(entMM, 2); wrent(entMM, 2);
wrent(entIF, 3); wrent(entIF, 3);
wrent(entUna, 4); wrent(entUna, 4);
wrent(entSys, 5); wrent(entSys, 5);
wrent(entDbg, 6); wrent(entDbg, 6);
/* Hack for Multia (UDB) and JENSEN: some of their SRMs have
a bug in the handling of the opDEC fault. Fix it up if so. */
if (implver() == IMPLVER_EV4)
opDEC_check();
} }
...@@ -26,7 +26,7 @@ CONFIG_SWAP=y ...@@ -26,7 +26,7 @@ CONFIG_SWAP=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_BUF_SHIFT=18
# CONFIG_HOTPLUG is not set # CONFIG_HOTPLUG is not set
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
...@@ -47,7 +47,7 @@ CONFIG_MODULE_UNLOAD=y ...@@ -47,7 +47,7 @@ CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_OBSOLETE_MODPARM=y CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set # CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y # CONFIG_KMOD is not set
CONFIG_STOP_MACHINE=y CONFIG_STOP_MACHINE=y
# #
...@@ -94,14 +94,14 @@ CONFIG_ACPI_INTERPRETER=y ...@@ -94,14 +94,14 @@ CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_SLEEP=y CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_AC=y CONFIG_ACPI_AC=y
# CONFIG_ACPI_BATTERY is not set CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set # CONFIG_ACPI_ASUS is not set
# CONFIG_ACPI_TOSHIBA is not set CONFIG_ACPI_TOSHIBA=y
# CONFIG_ACPI_DEBUG is not set CONFIG_ACPI_DEBUG=y
CONFIG_ACPI_BUS=y CONFIG_ACPI_BUS=y
CONFIG_ACPI_EC=y CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y CONFIG_ACPI_POWER=y
...@@ -120,17 +120,18 @@ CONFIG_ACPI_SYSTEM=y ...@@ -120,17 +120,18 @@ CONFIG_ACPI_SYSTEM=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI_DIRECT=y CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_LEGACY_PROC=y # CONFIG_PCI_LEGACY_PROC is not set
# CONFIG_PCI_NAMES is not set # CONFIG_PCI_NAMES is not set
# #
# Executable file formats / Emulations # Executable file formats / Emulations
# #
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y # CONFIG_BINFMT_MISC is not set
CONFIG_IA32_EMULATION=y CONFIG_IA32_EMULATION=y
CONFIG_IA32_AOUT=y CONFIG_IA32_AOUT=y
CONFIG_COMPAT=y CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_UID16=y CONFIG_UID16=y
# #
...@@ -150,14 +151,7 @@ CONFIG_UID16=y ...@@ -150,14 +151,7 @@ CONFIG_UID16=y
# #
# Parallel port support # Parallel port support
# #
CONFIG_PARPORT=y # CONFIG_PARPORT is not set
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_CML1=y
# CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_OTHER is not set
CONFIG_PARPORT_1284=y
# #
# Plug and Play support # Plug and Play support
...@@ -167,7 +161,6 @@ CONFIG_PARPORT_1284=y ...@@ -167,7 +161,6 @@ CONFIG_PARPORT_1284=y
# Block devices # Block devices
# #
CONFIG_BLK_DEV_FD=y CONFIG_BLK_DEV_FD=y
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
...@@ -175,8 +168,11 @@ CONFIG_BLK_DEV_FD=y ...@@ -175,8 +168,11 @@ CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_CARMEL is not set
# CONFIG_LBD is not set CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_LBD=y
# #
# ATA/ATAPI/MFM/RLL support # ATA/ATAPI/MFM/RLL support
...@@ -194,7 +190,7 @@ CONFIG_IDEDISK_MULTI_MODE=y ...@@ -194,7 +190,7 @@ CONFIG_IDEDISK_MULTI_MODE=y
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
CONFIG_BLK_DEV_IDESCSI=m # CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDE_TASK_IOCTL is not set
# CONFIG_IDE_TASKFILE_IO is not set # CONFIG_IDE_TASKFILE_IO is not set
...@@ -202,12 +198,11 @@ CONFIG_BLK_DEV_IDESCSI=m ...@@ -202,12 +198,11 @@ CONFIG_BLK_DEV_IDESCSI=m
# IDE chipset support/bugfixes # IDE chipset support/bugfixes
# #
CONFIG_IDE_GENERIC=y CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_CMD640=y # CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
CONFIG_BLK_DEV_IDEPCI=y CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y # CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set # CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y # CONFIG_BLK_DEV_GENERIC is not set
# CONFIG_BLK_DEV_OPTI621 is not set # CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_RZ1000 is not set # CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_BLK_DEV_IDEDMA_PCI=y
...@@ -218,6 +213,7 @@ CONFIG_BLK_DEV_ADMA=y ...@@ -218,6 +213,7 @@ CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set # CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set # CONFIG_BLK_DEV_ALI15X3 is not set
CONFIG_BLK_DEV_AMD74XX=y CONFIG_BLK_DEV_AMD74XX=y
# CONFIG_BLK_DEV_ATIIXP is not set
# CONFIG_BLK_DEV_CMD64X is not set # CONFIG_BLK_DEV_CMD64X is not set
# CONFIG_BLK_DEV_TRIFLEX is not set # CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set # CONFIG_BLK_DEV_CY82C693 is not set
...@@ -226,16 +222,16 @@ CONFIG_BLK_DEV_AMD74XX=y ...@@ -226,16 +222,16 @@ CONFIG_BLK_DEV_AMD74XX=y
# CONFIG_BLK_DEV_HPT34X is not set # CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set # CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set # CONFIG_BLK_DEV_SC1200 is not set
# CONFIG_BLK_DEV_PIIX is not set CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_NS87415 is not set # CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set # CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set # CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIIMAGE is not set # CONFIG_BLK_DEV_SIIMAGE is not set
CONFIG_BLK_DEV_SIS5513=y # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set # CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
CONFIG_BLK_DEV_VIA82CXXX=y # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set # CONFIG_IDEDMA_IVB is not set
CONFIG_IDEDMA_AUTO=y CONFIG_IDEDMA_AUTO=y
...@@ -254,9 +250,8 @@ CONFIG_SCSI=y ...@@ -254,9 +250,8 @@ CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set # CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set # CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m # CONFIG_BLK_DEV_SR is not set
# CONFIG_BLK_DEV_SR_VENDOR is not set # CONFIG_CHR_DEV_SG is not set
CONFIG_CHR_DEV_SG=m
# #
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
...@@ -266,6 +261,12 @@ CONFIG_CHR_DEV_SG=m ...@@ -266,6 +261,12 @@ CONFIG_CHR_DEV_SG=m
# CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_LOGGING is not set
#
# SCSI Transport Attributes
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# #
# SCSI low-level drivers # SCSI low-level drivers
# #
...@@ -282,6 +283,7 @@ CONFIG_SCSI_SATA=y ...@@ -282,6 +283,7 @@ CONFIG_SCSI_SATA=y
CONFIG_SCSI_ATA_PIIX=y CONFIG_SCSI_ATA_PIIX=y
# CONFIG_SCSI_SATA_PROMISE is not set # CONFIG_SCSI_SATA_PROMISE is not set
CONFIG_SCSI_SATA_VIA=y CONFIG_SCSI_SATA_VIA=y
# CONFIG_SCSI_SATA_VITESSE is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
...@@ -291,8 +293,6 @@ CONFIG_SCSI_SATA_VIA=y ...@@ -291,8 +293,6 @@ CONFIG_SCSI_SATA_VIA=y
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set # CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_QLOGIC_ISP is not set # CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
...@@ -317,7 +317,6 @@ CONFIG_SCSI_QLA2XXX=y ...@@ -317,7 +317,6 @@ CONFIG_SCSI_QLA2XXX=y
# Fusion MPT device support # Fusion MPT device support
# #
CONFIG_FUSION=y CONFIG_FUSION=y
CONFIG_FUSION_BOOT=y
CONFIG_FUSION_MAX_SGE=40 CONFIG_FUSION_MAX_SGE=40
# CONFIG_FUSION_ISENSE is not set # CONFIG_FUSION_ISENSE is not set
# CONFIG_FUSION_CTL is not set # CONFIG_FUSION_CTL is not set
...@@ -331,10 +330,6 @@ CONFIG_FUSION_MAX_SGE=40 ...@@ -331,10 +330,6 @@ CONFIG_FUSION_MAX_SGE=40
# I2O device support # I2O device support
# #
#
# Macintosh device drivers
#
# #
# Networking support # Networking support
# #
...@@ -345,111 +340,37 @@ CONFIG_NET=y ...@@ -345,111 +340,37 @@ CONFIG_NET=y
# #
CONFIG_PACKET=y CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set # CONFIG_PACKET_MMAP is not set
CONFIG_NETLINK_DEV=y # CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_NET_KEY=m # CONFIG_NET_KEY is not set
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_MULTICAST=y CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set # CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set # CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set # CONFIG_NET_IPGRE is not set
CONFIG_IP_MROUTE=y # CONFIG_IP_MROUTE is not set
# CONFIG_IP_PIMSM_V1 is not set
# CONFIG_IP_PIMSM_V2 is not set
# CONFIG_ARPD is not set # CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set # CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set # CONFIG_SYN_COOKIES is not set
CONFIG_INET_AH=m # CONFIG_INET_AH is not set
CONFIG_INET_ESP=m # CONFIG_INET_ESP is not set
CONFIG_INET_IPCOMP=m # CONFIG_INET_IPCOMP is not set
#
# IP: Virtual Server Configuration
#
# CONFIG_IP_VS is not set
CONFIG_IPV6=y CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y # CONFIG_IPV6_PRIVACY is not set
# CONFIG_INET6_AH is not set # CONFIG_INET6_AH is not set
CONFIG_INET6_ESP=m # CONFIG_INET6_ESP is not set
CONFIG_INET6_IPCOMP=m # CONFIG_INET6_IPCOMP is not set
# CONFIG_IPV6_TUNNEL is not set # CONFIG_IPV6_TUNNEL is not set
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
CONFIG_NETFILTER=y # CONFIG_NETFILTER is not set
# CONFIG_NETFILTER_DEBUG is not set
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_CONNTRACK=m
CONFIG_IP_NF_FTP=m
CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_TFTP is not set
# CONFIG_IP_NF_AMANDA is not set
# CONFIG_IP_NF_QUEUE is not set
CONFIG_IP_NF_IPTABLES=m
# CONFIG_IP_NF_MATCH_LIMIT is not set
# CONFIG_IP_NF_MATCH_IPRANGE is not set
# CONFIG_IP_NF_MATCH_MAC is not set
# CONFIG_IP_NF_MATCH_PKTTYPE is not set
# CONFIG_IP_NF_MATCH_MARK is not set
# CONFIG_IP_NF_MATCH_MULTIPORT is not set
# CONFIG_IP_NF_MATCH_TOS is not set
# CONFIG_IP_NF_MATCH_RECENT is not set
# CONFIG_IP_NF_MATCH_ECN is not set
# CONFIG_IP_NF_MATCH_DSCP is not set
# CONFIG_IP_NF_MATCH_AH_ESP is not set
# CONFIG_IP_NF_MATCH_LENGTH is not set
# CONFIG_IP_NF_MATCH_TTL is not set
# CONFIG_IP_NF_MATCH_TCPMSS is not set
# CONFIG_IP_NF_MATCH_HELPER is not set
CONFIG_IP_NF_MATCH_STATE=m
CONFIG_IP_NF_MATCH_CONNTRACK=m
# CONFIG_IP_NF_MATCH_OWNER is not set
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=m
# CONFIG_IP_NF_TARGET_REDIRECT is not set
# CONFIG_IP_NF_TARGET_NETMAP is not set
# CONFIG_IP_NF_TARGET_SAME is not set
# CONFIG_IP_NF_NAT_LOCAL is not set
# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
CONFIG_IP_NF_NAT_IRC=m
CONFIG_IP_NF_NAT_FTP=m
CONFIG_IP_NF_MANGLE=m
# CONFIG_IP_NF_TARGET_TOS is not set
# CONFIG_IP_NF_TARGET_ECN is not set
# CONFIG_IP_NF_TARGET_DSCP is not set
CONFIG_IP_NF_TARGET_MARK=m
# CONFIG_IP_NF_TARGET_CLASSIFY is not set
CONFIG_IP_NF_TARGET_LOG=m
# CONFIG_IP_NF_TARGET_ULOG is not set
CONFIG_IP_NF_TARGET_TCPMSS=m
# CONFIG_IP_NF_ARPTABLES is not set
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
# CONFIG_IP_NF_COMPAT_IPFWADM is not set
#
# IPv6: Netfilter Configuration
#
# CONFIG_IP6_NF_QUEUE is not set
# CONFIG_IP6_NF_IPTABLES is not set
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# #
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
# #
CONFIG_IPV6_SCTP__=y CONFIG_IPV6_SCTP__=y
CONFIG_IP_SCTP=m # CONFIG_IP_SCTP is not set
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
CONFIG_SCTP_HMAC_NONE=y
# CONFIG_SCTP_HMAC_SHA1 is not set
# CONFIG_SCTP_HMAC_MD5 is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set # CONFIG_VLAN_8021Q is not set
# CONFIG_LLC2 is not set # CONFIG_LLC2 is not set
...@@ -478,11 +399,10 @@ CONFIG_NETDEVICES=y ...@@ -478,11 +399,10 @@ CONFIG_NETDEVICES=y
# ARCnet devices # ARCnet devices
# #
# CONFIG_ARCNET is not set # CONFIG_ARCNET is not set
CONFIG_DUMMY=m # CONFIG_DUMMY is not set
# CONFIG_BONDING is not set # CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
CONFIG_TUN=m # CONFIG_TUN is not set
CONFIG_ETHERTAP=m
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
...@@ -491,9 +411,7 @@ CONFIG_NET_ETHERNET=y ...@@ -491,9 +411,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=y CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
CONFIG_NET_VENDOR_3COM=y # CONFIG_NET_VENDOR_3COM is not set
CONFIG_VORTEX=m
# CONFIG_TYPHOON is not set
# #
# Tulip family network device support # Tulip family network device support
...@@ -501,25 +419,25 @@ CONFIG_VORTEX=m ...@@ -501,25 +419,25 @@ CONFIG_VORTEX=m
# CONFIG_NET_TULIP is not set # CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set # CONFIG_HP100 is not set
CONFIG_NET_PCI=y CONFIG_NET_PCI=y
CONFIG_PCNET32=y # CONFIG_PCNET32 is not set
CONFIG_AMD8111_ETH=m CONFIG_AMD8111_ETH=y
# CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set # CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set CONFIG_FORCEDETH=y
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set # CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set # CONFIG_E100 is not set
# CONFIG_FEALNX is not set # CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set # CONFIG_NATSEMI is not set
# CONFIG_NE2K_PCI is not set # CONFIG_NE2K_PCI is not set
# CONFIG_8139CP is not set CONFIG_8139CP=m
CONFIG_8139TOO=y CONFIG_8139TOO=m
# CONFIG_8139TOO_PIO is not set # CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set # CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set # CONFIG_8139TOO_8129 is not set
# CONFIG_8139_OLD_RX_RESET is not set # CONFIG_8139_OLD_RX_RESET is not set
CONFIG_8139_RXBUF_IDX=2 CONFIG_8139_RXBUF_IDX=2
CONFIG_SIS900=m # CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set # CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set # CONFIG_SUNDANCE is not set
# CONFIG_VIA_RHINE is not set # CONFIG_VIA_RHINE is not set
...@@ -529,7 +447,7 @@ CONFIG_SIS900=m ...@@ -529,7 +447,7 @@ CONFIG_SIS900=m
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set # CONFIG_DL2K is not set
CONFIG_E1000=m CONFIG_E1000=y
# CONFIG_E1000_NAPI is not set # CONFIG_E1000_NAPI is not set
# CONFIG_NS83820 is not set # CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
...@@ -545,15 +463,7 @@ CONFIG_TIGON3=y ...@@ -545,15 +463,7 @@ CONFIG_TIGON3=y
# CONFIG_IXGB is not set # CONFIG_IXGB is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_HIPPI is not set # CONFIG_HIPPI is not set
# CONFIG_PLIP is not set # CONFIG_PPP is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
# 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_PPPOE=m
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
# #
...@@ -567,6 +477,7 @@ CONFIG_PPPOE=m ...@@ -567,6 +477,7 @@ CONFIG_PPPOE=m
# CONFIG_TR is not set # CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=y
# #
# Wan interfaces # Wan interfaces
...@@ -587,6 +498,10 @@ CONFIG_PPPOE=m ...@@ -587,6 +498,10 @@ CONFIG_PPPOE=m
# Bluetooth support # Bluetooth support
# #
# CONFIG_BT is not set # CONFIG_BT is not set
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
# #
# ISDN subsystem # ISDN subsystem
...@@ -612,7 +527,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ...@@ -612,7 +527,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set # CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set # CONFIG_INPUT_EVBUG is not set
# #
...@@ -624,7 +539,6 @@ CONFIG_SERIO=y ...@@ -624,7 +539,6 @@ CONFIG_SERIO=y
CONFIG_SERIO_I8042=y CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set # CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set # CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PCIPS2 is not set # CONFIG_SERIO_PCIPS2 is not set
# #
...@@ -633,11 +547,13 @@ CONFIG_SERIO_I8042=y ...@@ -633,11 +547,13 @@ CONFIG_SERIO_I8042=y
CONFIG_INPUT_KEYBOARD=y CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set # CONFIG_INPUT_MISC is not set
...@@ -648,12 +564,7 @@ CONFIG_MOUSE_PS2=y ...@@ -648,12 +564,7 @@ CONFIG_MOUSE_PS2=y
CONFIG_VT=y CONFIG_VT=y
CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_NONSTANDARD=y # CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_ROCKETPORT=m
# CONFIG_SYNCLINK is not set
# CONFIG_SYNCLINKMP is not set
# CONFIG_N_HDLC is not set
# CONFIG_STALDRV is not set
# #
# Serial drivers # Serial drivers
...@@ -670,16 +581,8 @@ CONFIG_SERIAL_8250_NR_UARTS=4 ...@@ -670,16 +581,8 @@ CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set CONFIG_LEGACY_PTYS=y
CONFIG_PRINTER=y CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
# CONFIG_TIPAR is not set
#
# Mice
#
CONFIG_BUSMOUSE=y
# CONFIG_QIC02_TAPE is not set # CONFIG_QIC02_TAPE is not set
# #
...@@ -703,17 +606,12 @@ CONFIG_RTC=y ...@@ -703,17 +606,12 @@ CONFIG_RTC=y
# #
CONFIG_AGP=y CONFIG_AGP=y
CONFIG_AGP_AMD64=y CONFIG_AGP_AMD64=y
# CONFIG_AGP_INTEL is not set CONFIG_AGP_INTEL=y
CONFIG_DRM=y # CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_GAMMA is not set
# CONFIG_DRM_R128 is not set
CONFIG_DRM_RADEON=m
# CONFIG_DRM_SIS is not set
# CONFIG_MWAVE is not set # CONFIG_MWAVE is not set
CONFIG_RAW_DRIVER=m CONFIG_RAW_DRIVER=y
CONFIG_MAX_RAW_DEVS=256 CONFIG_MAX_RAW_DEVS=256
# CONFIG_HANGCHECK_TIMER is not set CONFIG_HANGCHECK_TIMER=y
# #
# I2C support # I2C support
...@@ -761,11 +659,10 @@ CONFIG_SOUND=y ...@@ -761,11 +659,10 @@ CONFIG_SOUND=y
# #
# Open Sound System # Open Sound System
# #
CONFIG_SOUND_PRIME=m CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_CMPCI is not set
CONFIG_SOUND_EMU10K1=m # CONFIG_SOUND_EMU10K1 is not set
# CONFIG_MIDI_EMU10K1 is not set
# CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_CS4281 is not set
# CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1370 is not set
...@@ -773,13 +670,12 @@ CONFIG_SOUND_EMU10K1=m ...@@ -773,13 +670,12 @@ CONFIG_SOUND_EMU10K1=m
# CONFIG_SOUND_ESSSOLO1 is not set # CONFIG_SOUND_ESSSOLO1 is not set
# CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_MAESTRO3 is not set
CONFIG_SOUND_ICH=m CONFIG_SOUND_ICH=y
# CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_VIA82CXXX=m # CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_MIDI_VIA82CXXX is not set
# CONFIG_SOUND_OSS is not set # CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_ALI5455 is not set # CONFIG_SOUND_ALI5455 is not set
# CONFIG_SOUND_FORTE is not set # CONFIG_SOUND_FORTE is not set
...@@ -789,151 +685,7 @@ CONFIG_SOUND_VIA82CXXX=m ...@@ -789,151 +685,7 @@ CONFIG_SOUND_VIA82CXXX=m
# #
# USB support # USB support
# #
CONFIG_USB=m # CONFIG_USB is not set
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
CONFIG_USB_BANDWIDTH=y
# CONFIG_USB_DYNAMIC_MINORS is not set
#
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=m
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
#
# USB Device Class drivers
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=m
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
#
# USB Human Interface Devices (HID)
#
CONFIG_USB_HID=m
CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_XPAD is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set
#
# Video4Linux support is needed for USB Multimedia device support
#
#
# USB Network adaptors
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
CONFIG_USB_USBNET=m
#
# USB Host-to-Host Cables
#
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_GENESYS=y
CONFIG_USB_NET1080=y
CONFIG_USB_PL2301=y
#
# Intelligent USB Devices/Gadgets
#
CONFIG_USB_ARMLINUX=y
CONFIG_USB_EPSON2888=y
# CONFIG_USB_ZAURUS is not set
# CONFIG_USB_CDCETHER is not set
#
# USB Network Adapters
#
CONFIG_USB_AX8817X=y
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
# CONFIG_USB_SERIAL_OMNINET is not set
#
# 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
# CONFIG_USB_TEST is not set
# #
# USB Gadget Support # USB Gadget Support
...@@ -945,17 +697,20 @@ CONFIG_USB_SERIAL_BELKIN=m ...@@ -945,17 +697,20 @@ CONFIG_USB_SERIAL_BELKIN=m
# #
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_XATTR=y
# CONFIG_EXT2_FS_POSIX_ACL is not set CONFIG_EXT2_FS_POSIX_ACL=y
# CONFIG_EXT2_FS_SECURITY is not set # CONFIG_EXT2_FS_SECURITY is not set
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_FS_XATTR is not set CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
# CONFIG_EXT3_FS_SECURITY is not set
CONFIG_JBD=y CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set # CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_CHECK is not set
CONFIG_REISERFS_PROC_INFO=y # CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_JFS_FS is not set # CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set # CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
...@@ -967,16 +722,14 @@ CONFIG_AUTOFS_FS=y ...@@ -967,16 +722,14 @@ CONFIG_AUTOFS_FS=y
# CD-ROM/DVD Filesystems # CD-ROM/DVD Filesystems
# #
CONFIG_ISO9660_FS=y CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y # CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set # CONFIG_ZISOFS is not set
CONFIG_UDF_FS=m # CONFIG_UDF_FS is not set
# #
# DOS/FAT/NT Filesystems # DOS/FAT/NT Filesystems
# #
CONFIG_FAT_FS=y # CONFIG_FAT_FS is not set
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=m
# CONFIG_NTFS_FS is not set # CONFIG_NTFS_FS is not set
# #
...@@ -987,8 +740,8 @@ CONFIG_PROC_KCORE=y ...@@ -987,8 +740,8 @@ CONFIG_PROC_KCORE=y
# CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set # CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y CONFIG_TMPFS=y
# CONFIG_HUGETLBFS is not set CONFIG_HUGETLBFS=y
# CONFIG_HUGETLB_PAGE is not set CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y CONFIG_RAMFS=y
# #
...@@ -1014,7 +767,7 @@ CONFIG_RAMFS=y ...@@ -1014,7 +767,7 @@ CONFIG_RAMFS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set # CONFIG_NFS_V4 is not set
CONFIG_NFS_DIRECTIO=y # CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=y CONFIG_NFSD=y
CONFIG_NFSD_V3=y CONFIG_NFSD_V3=y
# CONFIG_NFSD_V4 is not set # CONFIG_NFSD_V4 is not set
...@@ -1023,11 +776,12 @@ CONFIG_LOCKD=y ...@@ -1023,11 +776,12 @@ CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y CONFIG_EXPORTFS=y
CONFIG_SUNRPC=y CONFIG_SUNRPC=y
# CONFIG_SUNRPC_GSS is not set # CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set # CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
# CONFIG_AFS_FS is not set # CONFIG_AFS_FS is not set
# #
...@@ -1039,45 +793,7 @@ CONFIG_MSDOS_PARTITION=y ...@@ -1039,45 +793,7 @@ CONFIG_MSDOS_PARTITION=y
# #
# Native Language Support # Native Language Support
# #
CONFIG_NLS=y # CONFIG_NLS is not set
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
# 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=y
# 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
# #
# Profiling support # Profiling support
...@@ -1105,28 +821,9 @@ CONFIG_MAGIC_SYSRQ=y ...@@ -1105,28 +821,9 @@ CONFIG_MAGIC_SYSRQ=y
# #
# Cryptographic options # Cryptographic options
# #
CONFIG_CRYPTO=y # CONFIG_CRYPTO is not set
CONFIG_CRYPTO_HMAC=y
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
CONFIG_CRYPTO_DES=m
# 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=m
# CONFIG_CRYPTO_TEST is not set
# #
# Library routines # Library routines
# #
CONFIG_CRC32=y CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=m
CONFIG_ZLIB_DEFLATE=m
...@@ -366,6 +366,17 @@ __setup("acpi_pic_sci=", acpi_pic_sci_setup); ...@@ -366,6 +366,17 @@ __setup("acpi_pic_sci=", acpi_pic_sci_setup);
#endif /* CONFIG_ACPI_BUS */ #endif /* CONFIG_ACPI_BUS */
int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
{
#ifdef CONFIG_X86_IO_APIC
if (use_pci_vector() && !platform_legacy_irq(gsi))
*irq = IO_APIC_VECTOR(gsi);
else
#endif
*irq = gsi;
return 0;
}
static unsigned long __init static unsigned long __init
acpi_scan_rsdp ( acpi_scan_rsdp (
unsigned long start, unsigned long start,
......
...@@ -402,9 +402,9 @@ ENTRY(stub_rt_sigreturn) ...@@ -402,9 +402,9 @@ ENTRY(stub_rt_sigreturn)
/* 0(%rsp): interrupt number */ /* 0(%rsp): interrupt number */
.macro interrupt func .macro interrupt func
CFI_STARTPROC simple CFI_STARTPROC simple
CFI_DEF_CFA rsp,(SS-ORIG_RAX) CFI_DEF_CFA rsp,(SS-RDI)
CFI_OFFSET rsp,(RSP-SS) CFI_REL_OFFSET rsp,(RSP-ORIG_RAX)
CFI_OFFSET rip,(RIP-SS) CFI_REL_OFFSET rip,(RIP-ORIG_RAX)
cld cld
#ifdef CONFIG_DEBUG_INFO #ifdef CONFIG_DEBUG_INFO
SAVE_ALL SAVE_ALL
...@@ -805,6 +805,8 @@ ENTRY(debug) ...@@ -805,6 +805,8 @@ ENTRY(debug)
paranoidentry do_debug paranoidentry do_debug
/* switch back to process stack to restore the state ptrace touched */ /* switch back to process stack to restore the state ptrace touched */
movq %rax,%rsp movq %rax,%rsp
testl $3,CS(%rsp)
jnz paranoid_userspace
jmp paranoid_exit jmp paranoid_exit
CFI_ENDPROC CFI_ENDPROC
...@@ -816,8 +818,6 @@ ENTRY(nmi) ...@@ -816,8 +818,6 @@ ENTRY(nmi)
paranoidentry do_nmi paranoidentry do_nmi
/* ebx: no swapgs flag */ /* ebx: no swapgs flag */
paranoid_exit: paranoid_exit:
testl $3,CS(%rsp)
jnz paranoid_userspace
testl %ebx,%ebx /* swapgs needed? */ testl %ebx,%ebx /* swapgs needed? */
jnz paranoid_restore jnz paranoid_restore
paranoid_swapgs: paranoid_swapgs:
...@@ -870,6 +870,8 @@ ENTRY(double_fault) ...@@ -870,6 +870,8 @@ ENTRY(double_fault)
CFI_STARTPROC CFI_STARTPROC
paranoidentry do_double_fault paranoidentry do_double_fault
movq %rax,%rsp movq %rax,%rsp
testl $3,CS(%rsp)
jnz paranoid_userspace
jmp paranoid_exit jmp paranoid_exit
CFI_ENDPROC CFI_ENDPROC
...@@ -884,6 +886,8 @@ ENTRY(stack_segment) ...@@ -884,6 +886,8 @@ ENTRY(stack_segment)
CFI_STARTPROC CFI_STARTPROC
paranoidentry do_stack_segment paranoidentry do_stack_segment
movq %rax,%rsp movq %rax,%rsp
testl $3,CS(%rsp)
jnz paranoid_userspace
jmp paranoid_exit jmp paranoid_exit
CFI_ENDPROC CFI_ENDPROC
......
...@@ -22,12 +22,13 @@ ...@@ -22,12 +22,13 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#define MISC_MCELOG_MINOR 227 #define MISC_MCELOG_MINOR 227
#define NR_BANKS 5
static int mce_disabled __initdata; static int mce_disabled __initdata;
/* 0: always panic, 1: panic if deadlock possible, 2: try to avoid panic */ /* 0: always panic, 1: panic if deadlock possible, 2: try to avoid panic */
static int tolerant = 2; static int tolerant = 2;
static int banks; static int banks;
static unsigned long disabled_banks; static unsigned long bank[NR_BANKS] = { [0 ... NR_BANKS-1] = ~0UL };
/* /*
* Lockless MCE logging infrastructure. * Lockless MCE logging infrastructure.
...@@ -144,7 +145,7 @@ void do_machine_check(struct pt_regs * regs, long error_code) ...@@ -144,7 +145,7 @@ void do_machine_check(struct pt_regs * regs, long error_code)
mb(); mb();
for (i = 0; i < banks; i++) { for (i = 0; i < banks; i++) {
if (test_bit(i, &disabled_banks)) if (!bank[i])
continue; continue;
rdmsrl(MSR_IA32_MC0_STATUS + i*4, m.status); rdmsrl(MSR_IA32_MC0_STATUS + i*4, m.status);
...@@ -179,7 +180,7 @@ void do_machine_check(struct pt_regs * regs, long error_code) ...@@ -179,7 +180,7 @@ void do_machine_check(struct pt_regs * regs, long error_code)
confused it's normally not necessary to panic, unless you are confused it's normally not necessary to panic, unless you are
paranoid (tolerant == 0) */ paranoid (tolerant == 0) */
if (!user_space && (panic_on_oops || tolerant < 2)) if (!user_space && (panic_on_oops || tolerant < 2))
mce_panic("Uncorrected machine check in kernel", &m, mcestart); mce_panic("Uncorrected machine check", &m, mcestart);
/* do_exit takes an awful lot of locks and has as slight risk /* do_exit takes an awful lot of locks and has as slight risk
of deadlocking. If you don't want that don't set tolerant >= 2 */ of deadlocking. If you don't want that don't set tolerant >= 2 */
...@@ -238,17 +239,31 @@ static void mce_init(void *dummy) ...@@ -238,17 +239,31 @@ static void mce_init(void *dummy)
wrmsr(MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff); wrmsr(MSR_IA32_MCG_CTL, 0xffffffff, 0xffffffff);
banks = cap & 0xff; banks = cap & 0xff;
if (banks > NR_BANKS) {
printk(KERN_INFO "MCE: warning: using only %d banks\n", banks);
banks = NR_BANKS;
}
mce_clear_all(); mce_clear_all();
for (i = 0; i < banks; i++) { for (i = 0; i < banks; i++) {
u64 val = test_bit(i, &disabled_banks) ? 0 : ~0UL; wrmsrl(MSR_IA32_MC0_CTL+4*i, bank[i]);
wrmsrl(MSR_IA32_MC0_CTL+4*i, val);
wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0); wrmsrl(MSR_IA32_MC0_STATUS+4*i, 0);
} }
set_in_cr4(X86_CR4_MCE); set_in_cr4(X86_CR4_MCE);
} }
/* Add per CPU specific workarounds here */
static void __init mce_cpu_quirks(struct cpuinfo_x86 *c)
{
/* This should be disabled by the BIOS, but isn't always */
if (c->x86_vendor == X86_VENDOR_AMD && c->x86 == 15) {
/* disable GART TBL walk error reporting, which trips off
incorrectly with the IOMMU & 3ware & Cerberus. */
clear_bit(10, &bank[4]);
}
}
/* /*
* Called for each booted CPU to set up machine checks. * Called for each booted CPU to set up machine checks.
* Must be called with preempt off. * Must be called with preempt off.
...@@ -257,6 +272,8 @@ void __init mcheck_init(struct cpuinfo_x86 *c) ...@@ -257,6 +272,8 @@ void __init mcheck_init(struct cpuinfo_x86 *c)
{ {
static unsigned long mce_cpus __initdata = 0; static unsigned long mce_cpus __initdata = 0;
mce_cpu_quirks(c);
if (test_and_set_bit(smp_processor_id(), &mce_cpus) || !mce_available(c)) if (test_and_set_bit(smp_processor_id(), &mce_cpus) || !mce_available(c))
return; return;
...@@ -343,23 +360,9 @@ static int mce_ioctl(struct inode *i, struct file *f,unsigned int cmd, unsigned ...@@ -343,23 +360,9 @@ static int mce_ioctl(struct inode *i, struct file *f,unsigned int cmd, unsigned
} }
} }
#if 0 /* for testing */
static ssize_t mce_write(struct file *f, const char __user *buf, size_t sz, loff_t *off)
{
struct mce m;
if (sz != sizeof(struct mce))
return -EINVAL;
copy_from_user(&m, buf, sizeof(struct mce));
m.finished = 0;
mce_log(&m);
return sizeof(struct mce);
}
#endif
static struct file_operations mce_chrdev_ops = { static struct file_operations mce_chrdev_ops = {
.read = mce_read, .read = mce_read,
.ioctl = mce_ioctl, .ioctl = mce_ioctl,
//.write = mce_write
}; };
static struct miscdevice mce_log_device = { static struct miscdevice mce_log_device = {
...@@ -425,23 +428,27 @@ static struct sys_device device_mce = { ...@@ -425,23 +428,27 @@ static struct sys_device device_mce = {
}; };
/* Why are there no generic functions for this? */ /* Why are there no generic functions for this? */
#define ACCESSOR(name, start) \ #define ACCESSOR(name, var, start) \
static ssize_t show_ ## name(struct sys_device *s, char *buf) { \ static ssize_t show_ ## name(struct sys_device *s, char *buf) { \
return sprintf(buf, "%lu\n", (unsigned long)name); \ return sprintf(buf, "%lu\n", (unsigned long)var); \
} \ } \
static ssize_t set_ ## name(struct sys_device *s,const char *buf,size_t siz) { \ static ssize_t set_ ## name(struct sys_device *s,const char *buf,size_t siz) { \
char *end; \ char *end; \
unsigned long new = simple_strtoul(buf, &end, 0); \ unsigned long new = simple_strtoul(buf, &end, 0); \
if (end == buf) return -EINVAL; \ if (end == buf) return -EINVAL; \
name = new; \ var = new; \
start; \ start; \
return end-buf; \ return end-buf; \
} \ } \
static SYSDEV_ATTR(name, 0644, show_ ## name, set_ ## name); static SYSDEV_ATTR(name, 0644, show_ ## name, set_ ## name);
ACCESSOR(disabled_banks,mce_restart()) ACCESSOR(bank0ctl,bank[0],mce_restart())
ACCESSOR(tolerant,) ACCESSOR(bank1ctl,bank[1],mce_restart())
ACCESSOR(check_interval,mce_restart()) ACCESSOR(bank2ctl,bank[2],mce_restart())
ACCESSOR(bank3ctl,bank[3],mce_restart())
ACCESSOR(bank4ctl,bank[4],mce_restart())
ACCESSOR(tolerant,tolerant,)
ACCESSOR(check_interval,check_interval,mce_restart())
static __init int mce_init_device(void) static __init int mce_init_device(void)
{ {
...@@ -453,7 +460,11 @@ static __init int mce_init_device(void) ...@@ -453,7 +460,11 @@ static __init int mce_init_device(void)
err = sysdev_register(&device_mce); err = sysdev_register(&device_mce);
if (!err) { if (!err) {
/* could create per CPU objects, but is not worth it. */ /* could create per CPU objects, but is not worth it. */
sysdev_create_file(&device_mce, &attr_disabled_banks); sysdev_create_file(&device_mce, &attr_bank0ctl);
sysdev_create_file(&device_mce, &attr_bank1ctl);
sysdev_create_file(&device_mce, &attr_bank2ctl);
sysdev_create_file(&device_mce, &attr_bank3ctl);
sysdev_create_file(&device_mce, &attr_bank4ctl);
sysdev_create_file(&device_mce, &attr_tolerant); sysdev_create_file(&device_mce, &attr_tolerant);
sysdev_create_file(&device_mce, &attr_check_interval); sysdev_create_file(&device_mce, &attr_check_interval);
} }
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Erich Boleyn : MP v1.4 and additional changes. * Erich Boleyn : MP v1.4 and additional changes.
* Alan Cox : Added EBDA scanning * Alan Cox : Added EBDA scanning
* Ingo Molnar : various cleanups and rewrites * Ingo Molnar : various cleanups and rewrites
* Maciej W. Rozycki : Bits for default MP configurations * Maciej W. Rozycki: Bits for default MP configurations
* Paul Diefenbaugh: Added full ACPI support * Paul Diefenbaugh: Added full ACPI support
*/ */
...@@ -690,25 +690,25 @@ void __init mp_register_lapic ( ...@@ -690,25 +690,25 @@ void __init mp_register_lapic (
struct mp_ioapic_routing { struct mp_ioapic_routing {
int apic_id; int apic_id;
int irq_start; int gsi_start;
int irq_end; int gsi_end;
u32 pin_programmed[4]; u32 pin_programmed[4];
} mp_ioapic_routing[MAX_IO_APICS]; } mp_ioapic_routing[MAX_IO_APICS];
static int __init mp_find_ioapic ( static int __init mp_find_ioapic (
int irq) int gsi)
{ {
int i = 0; int i = 0;
/* Find the IOAPIC that manages this IRQ. */ /* Find the IOAPIC that manages this GSI. */
for (i = 0; i < nr_ioapics; i++) { for (i = 0; i < nr_ioapics; i++) {
if ((irq >= mp_ioapic_routing[i].irq_start) if ((gsi >= mp_ioapic_routing[i].gsi_start)
&& (irq <= mp_ioapic_routing[i].irq_end)) && (gsi <= mp_ioapic_routing[i].gsi_end))
return i; return i;
} }
printk(KERN_ERR "ERROR: Unable to locate IOAPIC for IRQ %d\n", irq); printk(KERN_ERR "ERROR: Unable to locate IOAPIC for GSI %d\n", gsi);
return -1; return -1;
} }
...@@ -717,7 +717,7 @@ static int __init mp_find_ioapic ( ...@@ -717,7 +717,7 @@ static int __init mp_find_ioapic (
void __init mp_register_ioapic ( void __init mp_register_ioapic (
u8 id, u8 id,
u32 address, u32 address,
u32 irq_base) u32 gsi_base)
{ {
int idx = 0; int idx = 0;
...@@ -743,19 +743,19 @@ void __init mp_register_ioapic ( ...@@ -743,19 +743,19 @@ void __init mp_register_ioapic (
mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx);
/* /*
* Build basic IRQ lookup table to facilitate irq->io_apic lookups * Build basic IRQ lookup table to facilitate gsi->io_apic lookups
* and to prevent reprogramming of IOAPIC pins (PCI IRQs). * and to prevent reprogramming of IOAPIC pins (PCI IRQs).
*/ */
mp_ioapic_routing[idx].apic_id = mp_ioapics[idx].mpc_apicid; mp_ioapic_routing[idx].apic_id = mp_ioapics[idx].mpc_apicid;
mp_ioapic_routing[idx].irq_start = irq_base; mp_ioapic_routing[idx].gsi_start = gsi_base;
mp_ioapic_routing[idx].irq_end = irq_base + mp_ioapic_routing[idx].gsi_end = gsi_base +
io_apic_get_redir_entries(idx); io_apic_get_redir_entries(idx);
printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, "
"IRQ %d-%d\n", idx, mp_ioapics[idx].mpc_apicid, "GSI %d-%d\n", idx, mp_ioapics[idx].mpc_apicid,
mp_ioapics[idx].mpc_apicver, mp_ioapics[idx].mpc_apicaddr, mp_ioapics[idx].mpc_apicver, mp_ioapics[idx].mpc_apicaddr,
mp_ioapic_routing[idx].irq_start, mp_ioapic_routing[idx].gsi_start,
mp_ioapic_routing[idx].irq_end); mp_ioapic_routing[idx].gsi_end);
return; return;
} }
...@@ -765,7 +765,7 @@ void __init mp_override_legacy_irq ( ...@@ -765,7 +765,7 @@ void __init mp_override_legacy_irq (
u8 bus_irq, u8 bus_irq,
u8 polarity, u8 polarity,
u8 trigger, u8 trigger,
u32 global_irq) u32 gsi)
{ {
struct mpc_config_intsrc intsrc; struct mpc_config_intsrc intsrc;
int i = 0; int i = 0;
...@@ -774,12 +774,12 @@ void __init mp_override_legacy_irq ( ...@@ -774,12 +774,12 @@ void __init mp_override_legacy_irq (
int pin = -1; int pin = -1;
/* /*
* Convert 'global_irq' to 'ioapic.pin'. * Convert 'gsi' to 'ioapic.pin'.
*/ */
ioapic = mp_find_ioapic(global_irq); ioapic = mp_find_ioapic(gsi);
if (ioapic < 0) if (ioapic < 0)
return; return;
pin = global_irq - mp_ioapic_routing[ioapic].irq_start; pin = gsi - mp_ioapic_routing[ioapic].gsi_start;
/* /*
* TBD: This check is for faulty timer entries, where the override * TBD: This check is for faulty timer entries, where the override
...@@ -804,7 +804,7 @@ void __init mp_override_legacy_irq ( ...@@ -804,7 +804,7 @@ void __init mp_override_legacy_irq (
/* /*
* If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it. * If an existing [IOAPIC.PIN -> IRQ] routing entry exists we override it.
* Otherwise create a new entry (e.g. global_irq == 2). * Otherwise create a new entry (e.g. gsi == 2).
*/ */
for (i = 0; i < mp_irq_entries; i++) { for (i = 0; i < mp_irq_entries; i++) {
if ((mp_irqs[i].mpc_srcbus == intsrc.mpc_srcbus) if ((mp_irqs[i].mpc_srcbus == intsrc.mpc_srcbus)
...@@ -878,7 +878,7 @@ void __init mp_config_acpi_legacy_irqs (void) ...@@ -878,7 +878,7 @@ void __init mp_config_acpi_legacy_irqs (void)
extern FADT_DESCRIPTOR acpi_fadt; extern FADT_DESCRIPTOR acpi_fadt;
void __init mp_config_ioapic_for_sci(int irq) void __init mp_config_ioapic_for_sci(u32 gsi)
{ {
#ifdef CONFIG_ACPI_INTERPRETER #ifdef CONFIG_ACPI_INTERPRETER
int ioapic; int ioapic;
...@@ -926,11 +926,11 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -926,11 +926,11 @@ void __init mp_config_ioapic_for_sci(int irq)
*/ */
flags = entry->flags; flags = entry->flags;
acpi_fadt.sci_int = entry->global_irq; acpi_fadt.sci_int = entry->global_irq;
irq = entry->global_irq; gsi = entry->global_irq;
ioapic = mp_find_ioapic(irq); ioapic = mp_find_ioapic(gsi);
ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_start;
/* /*
* MPS INTI flags: * MPS INTI flags:
...@@ -938,7 +938,7 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -938,7 +938,7 @@ void __init mp_config_ioapic_for_sci(int irq)
* polarity: 0=default, 1=high, 3=low * polarity: 0=default, 1=high, 3=low
* Per ACPI spec, default for SCI means level/low. * Per ACPI spec, default for SCI means level/low.
*/ */
io_apic_set_pci_routing(ioapic, ioapic_pin, irq, io_apic_set_pci_routing(ioapic, ioapic_pin, gsi,
(flags.trigger == 1 ? 0 : 1), (flags.polarity == 1 ? 0 : 1)); (flags.trigger == 1 ? 0 : 1), (flags.polarity == 1 ? 0 : 1));
#endif #endif
} }
...@@ -951,7 +951,7 @@ void __init mp_parse_prt (void) ...@@ -951,7 +951,7 @@ void __init mp_parse_prt (void)
struct acpi_prt_entry *entry = NULL; struct acpi_prt_entry *entry = NULL;
int ioapic = -1; int ioapic = -1;
int ioapic_pin = 0; int ioapic_pin = 0;
int irq = 0; int gsi = 0;
int idx, bit = 0; int idx, bit = 0;
int edge_level = 0; int edge_level = 0;
int active_high_low = 0; int active_high_low = 0;
...@@ -963,30 +963,30 @@ void __init mp_parse_prt (void) ...@@ -963,30 +963,30 @@ void __init mp_parse_prt (void)
list_for_each(node, &acpi_prt.entries) { list_for_each(node, &acpi_prt.entries) {
entry = list_entry(node, struct acpi_prt_entry, node); entry = list_entry(node, struct acpi_prt_entry, node);
/* Need to get irq for dynamic entry */ /* Need to get gsi for dynamic entry */
if (entry->link.handle) { if (entry->link.handle) {
irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index, &edge_level, &active_high_low); gsi = acpi_pci_link_get_irq(entry->link.handle, entry->link.index, &edge_level, &active_high_low);
if (!irq) if (!gsi)
continue; continue;
} else { } else {
/* Hardwired IRQ. Assume PCI standard settings */ /* Hardwired GSI. Assume PCI standard settings */
irq = entry->link.index; gsi = entry->link.index;
edge_level = 1; edge_level = 1;
active_high_low = 1; active_high_low = 1;
} }
/* Don't set up the ACPI SCI because it's already set up */ /* Don't set up the ACPI SCI because it's already set up */
if (acpi_fadt.sci_int == irq) if (acpi_fadt.sci_int == gsi)
continue; continue;
ioapic = mp_find_ioapic(irq); ioapic = mp_find_ioapic(gsi);
if (ioapic < 0) if (ioapic < 0)
continue; continue;
ioapic_pin = irq - mp_ioapic_routing[ioapic].irq_start; ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_start;
/* /*
* Avoid pin reprogramming. PRTs typically include entries * Avoid pin reprogramming. PRTs typically include entries
* with redundant pin->irq mappings (but unique PCI devices); * with redundant pin->gsi mappings (but unique PCI devices);
* we only only program the IOAPIC on the first. * we only only program the IOAPIC on the first.
*/ */
bit = ioapic_pin % 32; bit = ioapic_pin % 32;
...@@ -1000,20 +1000,16 @@ void __init mp_parse_prt (void) ...@@ -1000,20 +1000,16 @@ void __init mp_parse_prt (void)
if ((1<<bit) & mp_ioapic_routing[ioapic].pin_programmed[idx]) { if ((1<<bit) & mp_ioapic_routing[ioapic].pin_programmed[idx]) {
Dprintk(KERN_DEBUG "Pin %d-%d already programmed\n", Dprintk(KERN_DEBUG "Pin %d-%d already programmed\n",
mp_ioapic_routing[ioapic].apic_id, ioapic_pin); mp_ioapic_routing[ioapic].apic_id, ioapic_pin);
if (use_pci_vector() && !platform_legacy_irq(irq)) acpi_gsi_to_irq(gsi, &entry->irq);
irq = IO_APIC_VECTOR(irq);
entry->irq = irq;
continue; continue;
} }
mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit); mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit);
if (!io_apic_set_pci_routing(ioapic, ioapic_pin, irq, edge_level, active_high_low)) { if (!io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, edge_level, active_high_low)) {
if (use_pci_vector() && !platform_legacy_irq(irq)) acpi_gsi_to_irq(gsi, &entry->irq);
irq = IO_APIC_VECTOR(irq);
entry->irq = irq;
} }
printk(KERN_DEBUG "%02x:%02x:%02x[%c] -> %d-%d" printk(KERN_DEBUG "%02x:%02x:%02x[%c] -> %d-%d -> IRQ %d\n",
" -> IRQ %d\n", entry->id.segment, entry->id.bus, entry->id.segment, entry->id.bus,
entry->id.device, ('A' + entry->pin), entry->id.device, ('A' + entry->pin),
mp_ioapic_routing[ioapic].apic_id, ioapic_pin, mp_ioapic_routing[ioapic].apic_id, ioapic_pin,
entry->irq); entry->irq);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/topology.h> #include <linux/topology.h>
#include <linux/interrupt.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mtrr.h> #include <asm/mtrr.h>
...@@ -31,6 +32,12 @@ ...@@ -31,6 +32,12 @@
#include <asm/kdebug.h> #include <asm/kdebug.h>
#include <asm/proto.h> #include <asm/proto.h>
#ifdef CONFIG_PREEMPT
#define preempt_atomic() in_atomic()
#else
#define preempt_atomic() 1
#endif
dma_addr_t bad_dma_address; dma_addr_t bad_dma_address;
unsigned long iommu_bus_base; /* GART remapping area (physical) */ unsigned long iommu_bus_base; /* GART remapping area (physical) */
...@@ -96,6 +103,8 @@ AGPEXTERN __u32 *agp_gatt_table; ...@@ -96,6 +103,8 @@ AGPEXTERN __u32 *agp_gatt_table;
static unsigned long next_bit; /* protected by iommu_bitmap_lock */ static unsigned long next_bit; /* protected by iommu_bitmap_lock */
static int need_flush; /* global flush state. set for each gart wrap */ static int need_flush; /* global flush state. set for each gart wrap */
static dma_addr_t pci_map_area(struct pci_dev *dev, unsigned long phys_mem,
size_t size, int dir);
static unsigned long alloc_iommu(int size) static unsigned long alloc_iommu(int size)
{ {
...@@ -169,43 +178,44 @@ static void flush_gart(struct pci_dev *dev) ...@@ -169,43 +178,44 @@ static void flush_gart(struct pci_dev *dev)
/* /*
* Allocate memory for a consistent mapping. * Allocate memory for a consistent mapping.
* All mappings are consistent here, so this is just a wrapper around
* pci_map_single.
*/ */
void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle)
{ {
void *memory; void *memory;
int gfp = GFP_ATOMIC; int gfp = preempt_atomic() ? GFP_ATOMIC : GFP_KERNEL;
unsigned long dma_mask; unsigned long dma_mask = 0;
u64 bus;
if (hwdev == NULL) { if (hwdev)
gfp |= GFP_DMA;
dma_mask = 0xffffffff;
} else {
dma_mask = hwdev->dev.coherent_dma_mask; dma_mask = hwdev->dev.coherent_dma_mask;
}
if (dma_mask == 0) if (dma_mask == 0)
dma_mask = 0xffffffff; dma_mask = 0xffffffff;
if (dma_mask < 0xffffffff || no_iommu)
gfp |= GFP_DMA;
/* Kludge to make it bug-to-bug compatible with i386. i386 /* Kludge to make it bug-to-bug compatible with i386. i386
uses the normal dma_mask for alloc_consistent. */ uses the normal dma_mask for alloc_consistent. */
dma_mask &= hwdev->dma_mask; dma_mask &= hwdev->dma_mask;
again:
memory = (void *)__get_free_pages(gfp, get_order(size)); memory = (void *)__get_free_pages(gfp, get_order(size));
if (memory == NULL) { if (memory == NULL)
return NULL; return NULL;
} else {
{
int high, mmu; int high, mmu;
high = ((unsigned long)virt_to_bus(memory) + size) >= dma_mask; bus = virt_to_bus(memory);
high = (bus + size) >= dma_mask;
mmu = high; mmu = high;
if (force_iommu && !(gfp & GFP_DMA)) if (force_iommu && !(gfp & GFP_DMA))
mmu = 1; mmu = 1;
if (no_iommu) { if (no_iommu || dma_mask < 0xffffffffUL) {
if (high) goto error; if (high) {
if (!(gfp & GFP_DMA)) {
gfp |= GFP_DMA;
goto again;
}
goto free;
}
mmu = 0; mmu = 0;
} }
memset(memory, 0, size); memset(memory, 0, size);
...@@ -215,15 +225,16 @@ void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, ...@@ -215,15 +225,16 @@ void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
} }
} }
*dma_handle = pci_map_single(hwdev, memory, size, 0); *dma_handle = pci_map_area(hwdev, bus, size, PCI_DMA_BIDIRECTIONAL);
if (*dma_handle == bad_dma_address) if (*dma_handle == bad_dma_address)
goto error; goto error;
flush_gart(hwdev);
return memory; return memory;
error: error:
if (panic_on_overflow) if (panic_on_overflow)
panic("pci_map_single: overflow %lu bytes\n", size); panic("pci_alloc_consistent: overflow %lu bytes\n", size);
free:
free_pages((unsigned long)memory, get_order(size)); free_pages((unsigned long)memory, get_order(size));
return NULL; return NULL;
} }
...@@ -608,6 +619,7 @@ EXPORT_SYMBOL(pci_unmap_single); ...@@ -608,6 +619,7 @@ EXPORT_SYMBOL(pci_unmap_single);
EXPORT_SYMBOL(pci_dma_supported); EXPORT_SYMBOL(pci_dma_supported);
EXPORT_SYMBOL(no_iommu); EXPORT_SYMBOL(no_iommu);
EXPORT_SYMBOL(force_iommu); EXPORT_SYMBOL(force_iommu);
EXPORT_SYMBOL(bad_dma_address);
static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size) static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size)
{ {
...@@ -733,7 +745,7 @@ static int __init pci_iommu_init(void) ...@@ -733,7 +745,7 @@ static int __init pci_iommu_init(void)
if (swiotlb) { if (swiotlb) {
no_iommu = 1; no_iommu = 1;
printk(KERN_INFO "PCI-DMA: Using SWIOTLB :-(\n"); printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n");
return -1; return -1;
} }
...@@ -837,6 +849,7 @@ fs_initcall(pci_iommu_init); ...@@ -837,6 +849,7 @@ fs_initcall(pci_iommu_init);
forcesac For SAC mode for masks <40bits (experimental) forcesac For SAC mode for masks <40bits (experimental)
fullflush Flush IOMMU on each allocation (default) fullflush Flush IOMMU on each allocation (default)
nofullflush Don't use IOMMU fullflush nofullflush Don't use IOMMU fullflush
soft Use software bounce buffering (default for Intel machines)
*/ */
__init int iommu_setup(char *opt) __init int iommu_setup(char *opt)
{ {
...@@ -876,6 +889,8 @@ __init int iommu_setup(char *opt) ...@@ -876,6 +889,8 @@ __init int iommu_setup(char *opt)
iommu_fullflush = 1; iommu_fullflush = 1;
if (!memcmp(p, "nofullflush", 11)) if (!memcmp(p, "nofullflush", 11))
iommu_fullflush = 0; iommu_fullflush = 0;
if (!memcmp(p, "soft", 4))
swiotlb = 1;
#ifdef CONFIG_IOMMU_LEAK #ifdef CONFIG_IOMMU_LEAK
if (!memcmp(p,"leak", 4)) { if (!memcmp(p,"leak", 4)) {
leak_trace = 1; leak_trace = 1;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/version.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
...@@ -205,7 +206,8 @@ void __show_regs(struct pt_regs * regs) ...@@ -205,7 +206,8 @@ void __show_regs(struct pt_regs * regs)
printk("\n"); printk("\n");
print_modules(); print_modules();
printk("Pid: %d, comm: %.20s %s\n", current->pid, current->comm, print_tainted()); printk("Pid: %d, comm: %.20s %s %s\n",
current->pid, current->comm, print_tainted(), UTS_RELEASE);
printk("RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->rip); printk("RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->rip);
printk_address(regs->rip); printk_address(regs->rip);
printk("\nRSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, regs->rsp, regs->eflags); printk("\nRSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, regs->rsp, regs->eflags);
......
...@@ -232,7 +232,7 @@ static __init void parse_cmdline_early (char ** cmdline_p) ...@@ -232,7 +232,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
if (!memcmp(from, "noapic", 6)) if (!memcmp(from, "noapic", 6))
skip_ioapic_setup = 1; skip_ioapic_setup = 1;
if (!memcmp(from, "apic", 6)) { if (!memcmp(from, "apic", 4)) {
skip_ioapic_setup = 0; skip_ioapic_setup = 0;
ioapic_force = 1; ioapic_force = 1;
} }
...@@ -453,9 +453,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -453,9 +453,7 @@ void __init setup_arch(char **cmdline_p)
paging_init(); paging_init();
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
/* Temporary hack: disable the IO-APIC for UP Nvidia and /* Temporary hack: disable the IO-APIC for UP Nvidia and VIA. */
This is until we sort out the ACPI problems. */
if (!acpi_disabled)
check_ioapic(); check_ioapic();
#endif #endif
#ifdef CONFIG_ACPI_BOOT #ifdef CONFIG_ACPI_BOOT
......
...@@ -405,10 +405,10 @@ void __init mem_init(void) ...@@ -405,10 +405,10 @@ void __init mem_init(void)
int tmp; int tmp;
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
if (!iommu_aperture && end_pfn >= 0xffffffff>>PAGE_SHIFT) { if (!iommu_aperture && end_pfn >= 0xffffffff>>PAGE_SHIFT)
swiotlb_init();
swiotlb = 1; swiotlb = 1;
} if (swiotlb)
swiotlb_init();
#endif #endif
/* How many end-of-memory variables you have, grandma! */ /* How many end-of-memory variables you have, grandma! */
......
...@@ -88,7 +88,7 @@ static int __init pci_mmcfg_init(void) ...@@ -88,7 +88,7 @@ static int __init pci_mmcfg_init(void)
return 0; return 0;
} }
printk(KERN_INFO "PCI: Using MMCONFIG at %lx\n", pci_mmcfg_base_addr); printk(KERN_INFO "PCI: Using MMCONFIG at %x\n", pci_mmcfg_base_addr);
raw_pci_ops = &pci_mmcfg; raw_pci_ops = &pci_mmcfg;
pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
......
...@@ -110,6 +110,8 @@ static int rtc_has_irq = 1; ...@@ -110,6 +110,8 @@ static int rtc_has_irq = 1;
#define hpet_rtc_timer_init() do { } while (0) #define hpet_rtc_timer_init() do { } while (0)
#define hpet_rtc_dropped_irq() 0 #define hpet_rtc_dropped_irq() 0
static inline irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) {return 0;} static inline irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) {return 0;}
#else
extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs);
#endif #endif
/* /*
......
...@@ -2481,19 +2481,18 @@ static int con_open(struct tty_struct *tty, struct file * filp) ...@@ -2481,19 +2481,18 @@ static int con_open(struct tty_struct *tty, struct file * filp)
return 0; return 0;
} }
static void con_close(struct tty_struct *tty, struct file * filp) static void con_close(struct tty_struct *tty, struct file *filp)
{ {
acquire_console_sem();
if (tty && tty->count == 1) {
struct vt_struct *vt; struct vt_struct *vt;
if (!tty || tty->count != 1)
return;
vcs_remove_devfs(tty); vcs_remove_devfs(tty);
acquire_console_sem(); vt = tty->driver_data;
vt = (struct vt_struct*)tty->driver_data;
if (vt) if (vt)
vc_cons[vt->vc_num].d->vc_tty = NULL; vc_cons[vt->vc_num].d->vc_tty = NULL;
tty->driver_data = 0; tty->driver_data = 0;
}
release_console_sem(); release_console_sem();
} }
......
...@@ -608,6 +608,7 @@ create_iface(struct device_node *np, struct device *dev) ...@@ -608,6 +608,7 @@ create_iface(struct device_node *np, struct device *dev)
} }
#endif /* POLLED_MODE */ #endif /* POLLED_MODE */
pmac_low_i2c_unlock(np);
dev_set_drvdata(dev, iface); dev_set_drvdata(dev, iface);
for (i=0; i<nchan; i++) { for (i=0; i<nchan; i++) {
...@@ -645,7 +646,6 @@ create_iface(struct device_node *np, struct device *dev) ...@@ -645,7 +646,6 @@ create_iface(struct device_node *np, struct device *dev)
printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n",
np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps);
pmac_low_i2c_unlock(np);
return 0; return 0;
} }
......
...@@ -175,8 +175,8 @@ config THERM_WINDTUNNEL ...@@ -175,8 +175,8 @@ config THERM_WINDTUNNEL
This driver provides some thermostat and fan control for the desktop This driver provides some thermostat and fan control for the desktop
G4 "Windtunnel" G4 "Windtunnel"
config THERM_ADT7467 config THERM_ADT746X
tristate "Support for thermal mgmnt on laptops with ADT 7467 chipset" tristate "Support for thermal mgmnt on laptops with ADT 746x chipset"
depends on I2C && I2C_KEYWEST && PPC_PMAC && !PPC_PMAC64 depends on I2C && I2C_KEYWEST && PPC_PMAC && !PPC_PMAC64
help help
This driver provides some thermostat and fan control for the This driver provides some thermostat and fan control for the
......
...@@ -25,4 +25,4 @@ obj-$(CONFIG_ADB_MACIO) += macio-adb.o ...@@ -25,4 +25,4 @@ obj-$(CONFIG_ADB_MACIO) += macio-adb.o
obj-$(CONFIG_THERM_PM72) += therm_pm72.o obj-$(CONFIG_THERM_PM72) += therm_pm72.o
obj-$(CONFIG_THERM_WINDTUNNEL) += therm_windtunnel.o obj-$(CONFIG_THERM_WINDTUNNEL) += therm_windtunnel.o
obj-$(CONFIG_THERM_ADT7467) += therm_adt7467.o obj-$(CONFIG_THERM_ADT746X) += therm_adt746x.o
...@@ -49,7 +49,7 @@ static int limit_adjust = 0; ...@@ -49,7 +49,7 @@ static int limit_adjust = 0;
static int fan_speed = -1; static int fan_speed = -1;
MODULE_AUTHOR("Colin Leroy <colin@colino.net>"); MODULE_AUTHOR("Colin Leroy <colin@colino.net>");
MODULE_DESCRIPTION("Driver for ADT7467 thermostat in iBook G4"); MODULE_DESCRIPTION("Driver for ADT746x thermostat in iBook G4 and Powerbook G4 Alu");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_PARM(limit_adjust,"i"); MODULE_PARM(limit_adjust,"i");
...@@ -161,7 +161,7 @@ detach_thermostat(struct i2c_adapter *adapter) ...@@ -161,7 +161,7 @@ detach_thermostat(struct i2c_adapter *adapter)
} }
static struct i2c_driver thermostat_driver = { static struct i2c_driver thermostat_driver = {
.name ="Apple Thermostat ADT7467", .name ="Apple Thermostat ADT746x",
.id =0xDEAD7467, .id =0xDEAD7467,
.flags =I2C_DF_NOTIFY, .flags =I2C_DF_NOTIFY,
.attach_adapter =&attach_thermostat, .attach_adapter =&attach_thermostat,
...@@ -494,9 +494,6 @@ thermostat_init(void) ...@@ -494,9 +494,6 @@ thermostat_init(void)
struct device_node* np; struct device_node* np;
u32 *prop; u32 *prop;
/* Currently, we only deal with the iBook G4, we will support
* all "2003" powerbooks later on
*/
np = of_find_node_by_name(NULL, "fan"); np = of_find_node_by_name(NULL, "fan");
if (!np) if (!np)
return -ENODEV; return -ENODEV;
......
/* /*
* Creation Date: <2003/03/14 20:54:13 samuel> * Creation Date: <2003/03/14 20:54:13 samuel>
* Time-stamp: <2003/03/15 18:55:53 samuel> * Time-stamp: <2004/03/20 14:20:59 samuel>
* *
* <therm_windtunnel.c> * <therm_windtunnel.c>
* *
* The G4 "windtunnel" has a single fan controlled by a * The G4 "windtunnel" has a single fan controlled by an
* DS1775 fan controller and an ADM1030 thermostat. * ADM1030 fan controller and a DS1775 thermostat.
* *
* The fan controller is equipped with a temperature sensor * The fan controller is equipped with a temperature sensor
* which measures the case temperature. The ADM censor * which measures the case temperature. The DS1775 sensor
* measures the CPU temperature. This driver tunes the * measures the CPU temperature. This driver tunes the
* behavior of the fan. It is based upon empirical observations * behavior of the fan. It is based upon empirical observations
* of the 'AppleFan' driver under OSX. * of the 'AppleFan' driver under Mac OS X.
* *
* WARNING: This driver has only been testen on Apple's * WARNING: This driver has only been testen on Apple's
* 1.25 MHz Dual G4 (March 03). Other machines might have * 1.25 MHz Dual G4 (March 03). It is tuned for a CPU
* a different thermal design. It is tuned for a CPU
* temperatur around 57 C. * temperatur around 57 C.
* *
* Copyright (C) 2003 Samuel Rydh (samuel@ibrium.se) * Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se)
* *
* Loosely based upon 'thermostat.c' written by Benjamin Herrenschmidt * Loosely based upon 'thermostat.c' written by Benjamin Herrenschmidt
* *
...@@ -38,50 +37,37 @@ ...@@ -38,50 +37,37 @@
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/workqueue.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/of_device.h>
MODULE_AUTHOR("Samuel Rydh <samuel@ibrium.se>");
MODULE_DESCRIPTION("Apple G4 (windtunnel) fan driver");
MODULE_LICENSE("GPL");
#define LOG_TEMP 0 /* continously log temperature */ #define LOG_TEMP 0 /* continously log temperature */
#define I2C_DRIVERID_G4FAN 0x9001 /* fixme */
#define THERMOSTAT_CLIENT_ID 1
#define FAN_CLIENT_ID 2
static int do_probe( struct i2c_adapter *adapter, int addr, int kind);
/* scan 0x48-0x4f (DS1775) and 0x2c-2x2f (ADM1030) */ /* scan 0x48-0x4f (DS1775) and 0x2c-2x2f (ADM1030) */
static unsigned short normal_i2c[] = { 0x49, 0x2c, I2C_CLIENT_END }; static unsigned short normal_i2c[] = { 0x49, 0x2c, I2C_CLIENT_END };
static unsigned short normal_i2c_range[] = { 0x48, 0x4f, 0x2c, 0x2f, I2C_CLIENT_END }; static unsigned short normal_i2c_range[] = { 0x48, 0x4f, 0x2c, 0x2f, I2C_CLIENT_END };
static struct work_struct poll_work;
I2C_CLIENT_INSMOD; I2C_CLIENT_INSMOD;
#define I2C_DRIVERID_G4FAN 0x9001 /* fixme */ static struct {
volatile int running;
#define THERMOSTAT_CLIENT_ID 1 struct completion completion;
#define FAN_CLIENT_ID 2 pid_t poll_task;
struct temp_range {
u8 high; /* start the fan */
u8 low; /* stop the fan */
};
struct apple_thermal_info {
u8 id; /* implementation ID */
u8 fan_count; /* number of fans */
u8 thermostat_count; /* number of thermostats */
u8 unused[5];
struct temp_range ranges[4]; /* temperature ranges (may be [])*/
};
static int do_detect( struct i2c_adapter *adapter, int addr, int kind); struct semaphore lock;
struct of_device *of_dev;
static struct {
struct i2c_client *thermostat; struct i2c_client *thermostat;
struct i2c_client *fan; struct i2c_client *fan;
int error;
struct timer_list timer;
int overheat_temp; /* 100% fan at this temp */ int overheat_temp; /* 100% fan at this temp */
int overheat_hyst; int overheat_hyst;
...@@ -95,37 +81,54 @@ static struct { ...@@ -95,37 +81,54 @@ static struct {
int r0, r1, r20, r23, r25; /* saved register */ int r0, r1, r20, r23, r25; /* saved register */
} x; } x;
#define T(x,y) (((x)<<8) | (y)*0x100/10 )
static struct { static struct {
int fan_down_setting;
int temp; int temp;
int fan_setting; int fan_up_setting;
} fan_up_table[] = { } fan_table[] = {
{ 0x0000, 11 }, /* min fan */ { 11, T(0,0), 11 }, /* min fan */
{ 0x3900, 8 }, /* 57.0 C */ { 11, T(55,0), 11 },
{ 0x3a4a, 7 }, /* 58.3 C */ { 6, T(55,3), 11 },
{ 0x3ad3, 6 }, /* 58.8 C */ { 7, T(56,0), 11 },
{ 0x3b3c, 5 }, /* 59.2 C */ { 8, T(57,0), 8 },
{ 0x3b94, 4 }, /* 59.6 C */ { 7, T(58,3), 7 },
{ 0x3be3, 3 }, /* 58.9 C */ { 6, T(58,8), 6 },
{ 0x3c29, 2 }, /* 59.2 C */ { 5, T(59,2), 5 },
{ 0xffff, 1 } /* on fire */ { 4, T(59,6), 4 },
}; { 3, T(59,9), 3 },
static struct { { 2, T(60,1), 2 },
int temp; { 1, 0xfffff, 1 } /* on fire */
int fan_setting;
} fan_down_table[] = {
{ 0x3700, 11 }, /* 55.0 C */
{ 0x374a, 6 },
{ 0x3800, 7 }, /* 56.0 C */
{ 0x3900, 8 }, /* 57.0 C */
{ 0x3a4a, 7 }, /* 58.3 C */
{ 0x3ad3, 6 }, /* 58.8 C */
{ 0x3b3c, 5 }, /* 59.2 C */
{ 0x3b94, 4 }, /* 58.9 C */
{ 0x3be3, 3 }, /* 58.9 C */
{ 0x3c29, 2 }, /* 59.2 C */
{ 0xffff, 1 }
}; };
static void
print_temp( const char *s, int temp )
{
printk("%s%d.%d C", s ? s : "", temp>>8, (temp & 255)*10/256 );
}
static ssize_t
show_cpu_temperature( struct device *dev, char *buf )
{
return sprintf(buf, "%d.%d\n", x.temp>>8, (x.temp & 255)*10/256 );
}
static ssize_t
show_case_temperature( struct device *dev, char *buf )
{
return sprintf(buf, "%d.%d\n", x.casetemp>>8, (x.casetemp & 255)*10/256 );
}
static DEVICE_ATTR(cpu_temperature, S_IRUGO, show_cpu_temperature, NULL );
static DEVICE_ATTR(case_temperature, S_IRUGO, show_case_temperature, NULL );
/************************************************************************/
/* controller thread */
/************************************************************************/
static int static int
write_reg( struct i2c_client *cl, int reg, int data, int len ) write_reg( struct i2c_client *cl, int reg, int data, int len )
{ {
...@@ -159,37 +162,32 @@ read_reg( struct i2c_client *cl, int reg, int len ) ...@@ -159,37 +162,32 @@ read_reg( struct i2c_client *cl, int reg, int len )
return (len == 2)? ((unsigned int)buf[0] << 8) | buf[1] : buf[0]; return (len == 2)? ((unsigned int)buf[0] << 8) | buf[1] : buf[0];
} }
static void
print_temp( const char *s, int temp )
{
printk("%s%d.%d C", s ? s : "", temp>>8, (temp & 255)*10/256 );
}
static void static void
tune_fan( int fan_setting ) tune_fan( int fan_setting )
{ {
int val = (fan_setting << 3) | 7; int val = (fan_setting << 3) | 7;
x.fan_level = fan_setting;
//write_reg( x.fan, 0x24, val, 1 ); /* write_reg( x.fan, 0x24, val, 1 ); */
write_reg( x.fan, 0x25, val, 1 ); write_reg( x.fan, 0x25, val, 1 );
write_reg( x.fan, 0x20, 0, 1 ); write_reg( x.fan, 0x20, 0, 1 );
print_temp("CPU-temp: ", x.temp ); print_temp("CPU-temp: ", x.temp );
if( x.casetemp ) if( x.casetemp )
print_temp(", Case: ", x.casetemp ); print_temp(", Case: ", x.casetemp );
printk(" Tuning fan: %d (%02x)\n", fan_setting, val ); printk(", Fan: %d (tuned %+d)\n", 11-fan_setting, x.fan_level-fan_setting );
x.fan_level = fan_setting;
} }
static void static void
poll_temp( void *param ) poll_temp( void )
{ {
int temp = read_reg( x.thermostat, 0, 2 ); int temp, i, level, casetemp;
int i, level, casetemp;
temp = read_reg( x.thermostat, 0, 2 );
/* this actually occurs when the computer is loaded */ /* this actually occurs when the computer is loaded */
if( temp < 0 ) if( temp < 0 )
goto out; return;
casetemp = read_reg(x.fan, 0x0b, 1) << 8; casetemp = read_reg(x.fan, 0x0b, 1) << 8;
casetemp |= (read_reg(x.fan, 0x06, 1) & 0x7) << 5; casetemp |= (read_reg(x.fan, 0x06, 1) & 0x7) << 5;
...@@ -197,37 +195,117 @@ poll_temp( void *param ) ...@@ -197,37 +195,117 @@ poll_temp( void *param )
if( LOG_TEMP && x.temp != temp ) { if( LOG_TEMP && x.temp != temp ) {
print_temp("CPU-temp: ", temp ); print_temp("CPU-temp: ", temp );
print_temp(", Case: ", casetemp ); print_temp(", Case: ", casetemp );
printk(", Fan: %d\n", x.fan_level ); printk(", Fan: %d\n", 11-x.fan_level );
} }
x.temp = temp; x.temp = temp;
x.casetemp = casetemp; x.casetemp = casetemp;
level = -1; level = -1;
for( i=0; (temp & 0xffff) > fan_down_table[i].temp ; i++ ) for( i=0; (temp & 0xffff) > fan_table[i].temp ; i++ )
; ;
if( i < x.downind ) if( i < x.downind )
level = fan_down_table[i].fan_setting; level = fan_table[i].fan_down_setting;
x.downind = i; x.downind = i;
for( i=0; (temp & 0xfffe) >= fan_up_table[i+1].temp ; i++ ) for( i=0; (temp & 0xffff) >= fan_table[i+1].temp ; i++ )
; ;
if( x.upind < i ) if( x.upind < i )
level = fan_up_table[i].fan_setting; level = fan_table[i].fan_up_setting;
x.upind = i; x.upind = i;
if( level >= 0 ) if( level >= 0 )
tune_fan( level ); tune_fan( level );
out: }
x.timer.expires = jiffies + 8*HZ;
add_timer( &x.timer );
static void
setup_hardware( void )
{
int val;
/* save registers (if we unload the module) */
x.r0 = read_reg( x.fan, 0x00, 1 );
x.r1 = read_reg( x.fan, 0x01, 1 );
x.r20 = read_reg( x.fan, 0x20, 1 );
x.r23 = read_reg( x.fan, 0x23, 1 );
x.r25 = read_reg( x.fan, 0x25, 1 );
/* improve measurement resolution (convergence time 1.5s) */
if( (val=read_reg(x.thermostat, 1, 1)) >= 0 ) {
val |= 0x60;
if( write_reg( x.thermostat, 1, val, 1 ) )
printk("Failed writing config register\n");
}
/* disable interrupts and TAC input */
write_reg( x.fan, 0x01, 0x01, 1 );
/* enable filter */
write_reg( x.fan, 0x23, 0x91, 1 );
/* remote temp. controls fan */
write_reg( x.fan, 0x00, 0x95, 1 );
/* The thermostat (which besides measureing temperature controls
* has a THERM output which puts the fan on 100%) is usually
* set to kick in at 80 C (chip default). We reduce this a bit
* to be on the safe side (OSX doesn't)...
*/
if( x.overheat_temp == (80 << 8) ) {
x.overheat_temp = 65 << 8;
x.overheat_hyst = 60 << 8;
write_reg( x.thermostat, 2, x.overheat_hyst, 2 );
write_reg( x.thermostat, 3, x.overheat_temp, 2 );
print_temp("Reducing overheating limit to ", x.overheat_temp );
print_temp(" (Hyst: ", x.overheat_hyst );
printk(")\n");
}
/* set an initial fan setting */
x.downind = 0xffff;
x.upind = -1;
/* tune_fan( fan_up_table[x.upind].fan_setting ); */
device_create_file( &x.of_dev->dev, &dev_attr_cpu_temperature );
device_create_file( &x.of_dev->dev, &dev_attr_case_temperature );
} }
static void static void
schedule_poll( unsigned long t ) restore_regs( void )
{
device_remove_file( &x.of_dev->dev, &dev_attr_cpu_temperature );
device_remove_file( &x.of_dev->dev, &dev_attr_case_temperature );
write_reg( x.fan, 0x01, x.r1, 1 );
write_reg( x.fan, 0x20, x.r20, 1 );
write_reg( x.fan, 0x23, x.r23, 1 );
write_reg( x.fan, 0x25, x.r25, 1 );
write_reg( x.fan, 0x00, x.r0, 1 );
}
static int
control_loop( void *dummy )
{ {
schedule_work(&poll_work); daemonize("g4fand");
down( &x.lock );
setup_hardware();
while( x.running ) {
up( &x.lock );
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout( 8*HZ );
down( &x.lock );
poll_temp();
}
restore_regs();
up( &x.lock );
complete_and_exit( &x.completion, 0 );
} }
/************************************************************************/ /************************************************************************/
/* i2c probing and setup */ /* i2c probing and setup */
/************************************************************************/ /************************************************************************/
...@@ -235,7 +313,20 @@ schedule_poll( unsigned long t ) ...@@ -235,7 +313,20 @@ schedule_poll( unsigned long t )
static int static int
do_attach( struct i2c_adapter *adapter ) do_attach( struct i2c_adapter *adapter )
{ {
return i2c_probe( adapter, &addr_data, &do_detect ); int ret = 0;
if( strncmp(adapter->name, "uni-n", 5) )
return 0;
if( !x.running ) {
ret = i2c_probe( adapter, &addr_data, &do_probe );
if( x.thermostat && x.fan ) {
x.running = 1;
init_completion( &x.completion );
x.poll_task = kernel_thread( control_loop, NULL, SIGCHLD | CLONE_KERNEL );
}
}
return ret;
} }
static int static int
...@@ -243,13 +334,23 @@ do_detach( struct i2c_client *client ) ...@@ -243,13 +334,23 @@ do_detach( struct i2c_client *client )
{ {
int err; int err;
printk("do_detach: id %d\n", client->id ); if( (err=i2c_detach_client(client)) )
if( (err=i2c_detach_client(client)) ) { printk(KERN_ERR "failed to detach thermostat client\n");
printk("failed to detach thermostat client\n"); else {
return err; if( x.running ) {
x.running = 0;
wait_for_completion( &x.completion );
}
if( client == x.thermostat )
x.thermostat = NULL;
else if( client == x.fan )
x.fan = NULL;
else {
printk(KERN_ERR "g4fan: bad client\n");
} }
kfree( client ); kfree( client );
return 0; }
return err;
} }
static struct i2c_driver g4fan_driver = { static struct i2c_driver g4fan_driver = {
...@@ -262,24 +363,21 @@ static struct i2c_driver g4fan_driver = { ...@@ -262,24 +363,21 @@ static struct i2c_driver g4fan_driver = {
}; };
static int static int
detect_fan( struct i2c_client *cl ) attach_fan( struct i2c_client *cl )
{ {
if( x.fan )
goto out;
/* check that this is an ADM1030 */ /* check that this is an ADM1030 */
if( read_reg(cl, 0x3d, 1) != 0x30 || read_reg(cl, 0x3e, 1) != 0x41 ) if( read_reg(cl, 0x3d, 1) != 0x30 || read_reg(cl, 0x3e, 1) != 0x41 )
goto out; goto out;
printk("ADM1030 fan controller detected at %02x\n", cl->addr ); printk("ADM1030 fan controller [@%02x]\n", cl->addr );
if( x.fan ) {
x.error |= 2;
goto out;
}
x.fan = cl;
cl->id = FAN_CLIENT_ID; cl->id = FAN_CLIENT_ID;
strncpy( cl->name, "ADM1030 fan controller", sizeof(cl->name) ); strlcpy( cl->name, "ADM1030 fan controller", sizeof(cl->name) );
if( i2c_attach_client( cl ) ) if( !i2c_attach_client(cl) )
goto out; x.fan = cl;
return 0;
out: out:
if( cl != x.fan ) if( cl != x.fan )
kfree( cl ); kfree( cl );
...@@ -287,10 +385,13 @@ detect_fan( struct i2c_client *cl ) ...@@ -287,10 +385,13 @@ detect_fan( struct i2c_client *cl )
} }
static int static int
detect_thermostat( struct i2c_client *cl ) attach_thermostat( struct i2c_client *cl )
{ {
int hyst_temp, os_temp, temp; int hyst_temp, os_temp, temp;
if( x.thermostat )
goto out;
if( (temp=read_reg(cl, 0, 2)) < 0 ) if( (temp=read_reg(cl, 0, 2)) < 0 )
goto out; goto out;
...@@ -302,44 +403,37 @@ detect_thermostat( struct i2c_client *cl ) ...@@ -302,44 +403,37 @@ detect_thermostat( struct i2c_client *cl )
if( hyst_temp < 0 || os_temp < 0 ) if( hyst_temp < 0 || os_temp < 0 )
goto out; goto out;
printk("DS1775 digital thermometer detected at %02x\n", cl->addr ); printk("DS1775 digital thermometer [@%02x]\n", cl->addr );
print_temp("Temp: ", temp ); print_temp("Temp: ", temp );
print_temp(" Hyst: ", hyst_temp ); print_temp(" Hyst: ", hyst_temp );
print_temp(" OS: ", os_temp ); print_temp(" OS: ", os_temp );
printk("\n"); printk("\n");
if( x.thermostat ) {
x.error |= 1;
goto out;
}
x.temp = temp; x.temp = temp;
x.thermostat = cl;
x.overheat_temp = os_temp; x.overheat_temp = os_temp;
x.overheat_hyst = hyst_temp; x.overheat_hyst = hyst_temp;
cl->id = THERMOSTAT_CLIENT_ID; cl->id = THERMOSTAT_CLIENT_ID;
strncpy( cl->name, "DS1775 thermostat", sizeof(cl->name) ); strlcpy( cl->name, "DS1775 thermostat", sizeof(cl->name) );
if( i2c_attach_client( cl ) ) if( !i2c_attach_client(cl) )
goto out; x.thermostat = cl;
return 0;
out: out:
if( cl != x.thermostat )
kfree( cl ); kfree( cl );
return 0; return 0;
} }
static int static int
do_detect( struct i2c_adapter *adapter, int addr, int kind ) do_probe( struct i2c_adapter *adapter, int addr, int kind )
{ {
struct i2c_client *cl; struct i2c_client *cl;
if( strncmp(adapter->name, "uni-n", 5) )
return 0;
if( !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA if( !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA
| I2C_FUNC_SMBUS_WRITE_BYTE) ) | I2C_FUNC_SMBUS_WRITE_BYTE) )
return 0; return 0;
if( !(cl=kmalloc( sizeof(struct i2c_client), GFP_KERNEL )) ) if( !(cl=kmalloc(sizeof(*cl), GFP_KERNEL)) )
return -ENOMEM; return -ENOMEM;
memset( cl, 0, sizeof(struct i2c_client) ); memset( cl, 0, sizeof(struct i2c_client) );
...@@ -349,108 +443,94 @@ do_detect( struct i2c_adapter *adapter, int addr, int kind ) ...@@ -349,108 +443,94 @@ do_detect( struct i2c_adapter *adapter, int addr, int kind )
cl->flags = 0; cl->flags = 0;
if( addr < 0x48 ) if( addr < 0x48 )
return detect_fan( cl ); return attach_fan( cl );
return detect_thermostat( cl ); return attach_thermostat( cl );
} }
#define PRINT_REG( r ) printk("reg %02x = %02x\n", r, read_reg(x.fan, r, 1) )
/************************************************************************/
/* initialization / cleanup */
/************************************************************************/
static int
therm_of_probe( struct of_device *dev, const struct of_match *match )
{
return i2c_add_driver( &g4fan_driver );
}
static int
therm_of_remove( struct of_device *dev )
{
return i2c_del_driver( &g4fan_driver );
}
static struct of_match therm_of_match[] = {{
.name = "fan",
.type = OF_ANY_MATCH,
.compatible = "adm1030"
}, {}
};
static struct of_platform_driver therm_of_driver = {
.name = "temperature",
.match_table = therm_of_match,
.probe = therm_of_probe,
.remove = therm_of_remove,
};
struct apple_thermal_info {
u8 id; /* implementation ID */
u8 fan_count; /* number of fans */
u8 thermostat_count; /* number of thermostats */
u8 unused;
};
static int __init static int __init
g4fan_init( void ) g4fan_init( void )
{ {
struct apple_thermal_info *info; struct apple_thermal_info *info;
struct device_node *np; struct device_node *np;
int ret, val;
np = of_find_node_by_name(NULL, "power-mgt"); init_MUTEX( &x.lock );
if (np == NULL)
if( !(np=of_find_node_by_name(NULL, "power-mgt")) )
return -ENODEV; return -ENODEV;
info = (struct apple_thermal_info*)get_property(np, "thermal-info", NULL); info = (struct apple_thermal_info*)get_property(np, "thermal-info", NULL);
of_node_put(np); of_node_put(np);
if (info == NULL)
if( !info || !machine_is_compatible("PowerMac3,6") )
return -ENODEV; return -ENODEV;
/* check for G4 "Windtunnel" SMP */
if( machine_is_compatible("PowerMac3,6") ) {
if( info->id != 3 ) { if( info->id != 3 ) {
printk(KERN_ERR "g4fan: design id %d unknown\n", info->id); printk(KERN_ERR "therm_windtunnel: unsupported thermal design %d\n", info->id );
return -ENODEV; return -ENODEV;
} }
} else { if( !(np=of_find_node_by_name(NULL, "fan")) )
printk(KERN_ERR "g4fan: unsupported machine type\n");
return -ENODEV; return -ENODEV;
} x.of_dev = of_platform_device_create( np, "temperature" );
if( (ret=i2c_add_driver(&g4fan_driver)) ) of_node_put( np );
return ret;
if( !x.thermostat || !x.fan ) { if( !x.of_dev ) {
i2c_del_driver(&g4fan_driver ); printk(KERN_ERR "Can't register fan controller!\n");
return -ENODEV; return -ENODEV;
} }
/* save registers (if we unload the module) */ of_register_driver( &therm_of_driver );
x.r0 = read_reg( x.fan, 0x00, 1 );
x.r1 = read_reg( x.fan, 0x01, 1 );
x.r20 = read_reg( x.fan, 0x20, 1 );
x.r23 = read_reg( x.fan, 0x23, 1 );
x.r25 = read_reg( x.fan, 0x25, 1 );
/* improve measurement resolution (convergence time 1.5s) */
if( (val=read_reg( x.thermostat, 1, 1 )) >= 0 ) {
val |= 0x60;
if( write_reg( x.thermostat, 1, val, 1 ) )
printk("Failed writing config register\n");
}
/* disable interrupts and TAC input */
write_reg( x.fan, 0x01, 0x01, 1 );
/* enable filter */
write_reg( x.fan, 0x23, 0x91, 1 );
/* remote temp. controls fan */
write_reg( x.fan, 0x00, 0x95, 1 );
/* The thermostat (which besides measureing temperature controls
* has a THERM output which puts the fan on 100%) is usually
* set to kick in at 80 C (chip default). We reduce this a bit
* to be on the safe side (OSX doesn't)...
*/
if( x.overheat_temp == (80 << 8) ) {
x.overheat_temp = 65 << 8;
x.overheat_hyst = 60 << 8;
write_reg( x.thermostat, 2, x.overheat_hyst, 2 );
write_reg( x.thermostat, 3, x.overheat_temp, 2 );
print_temp("Reducing overheating limit to ", x.overheat_temp );
print_temp(" (Hyst: ", x.overheat_hyst );
printk(")\n");
}
/* set an initial fan setting */
x.upind = x.downind = 1;
tune_fan( fan_up_table[x.upind].fan_setting );
INIT_WORK(&poll_work, poll_temp, NULL);
init_timer( &x.timer );
x.timer.expires = jiffies + 8*HZ;
x.timer.function = schedule_poll;
add_timer( &x.timer );
return 0; return 0;
} }
static void __exit static void __exit
g4fan_exit( void ) g4fan_exit( void )
{ {
del_timer( &x.timer ); of_unregister_driver( &therm_of_driver );
write_reg( x.fan, 0x01, x.r1, 1 ); if( x.of_dev )
write_reg( x.fan, 0x20, x.r20, 1 ); of_device_unregister( x.of_dev );
write_reg( x.fan, 0x23, x.r23, 1 );
write_reg( x.fan, 0x25, x.r25, 1 );
write_reg( x.fan, 0x00, x.r0, 1 );
i2c_del_driver( &g4fan_driver );
} }
module_init(g4fan_init); module_init(g4fan_init);
module_exit(g4fan_exit); module_exit(g4fan_exit);
MODULE_AUTHOR("Samuel Rydh <samuel@ibrium.se>");
MODULE_DESCRIPTION("Apple G4 (windtunnel) fan controller");
MODULE_LICENSE("GPL");
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include <scsi/scsi_transport.h> #include <scsi/scsi_transport.h>
#include <scsi/scsi_transport_spi.h> #include <scsi/scsi_transport_spi.h>
#define SPI_PRINTK(x, l, f, a...) printk(l "scsi(%d:%d:%d:%d): " f, (x)->host->host_no, (x)->channel, (x)->id, (x)->lun, ##a) #define SPI_PRINTK(x, l, f, a...) printk(l "scsi(%d:%d:%d:%d): " f, (x)->host->host_no, (x)->channel, (x)->id, (x)->lun , ##a)
static void transport_class_release(struct class_device *class_dev); static void transport_class_release(struct class_device *class_dev);
......
...@@ -109,6 +109,8 @@ extern int acpi_strict; ...@@ -109,6 +109,8 @@ extern int acpi_strict;
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */ /* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
#define FIX_ACPI_PAGES 4 #define FIX_ACPI_PAGES 4
extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
#else /* !CONFIG_ACPI_BOOT */ #else /* !CONFIG_ACPI_BOOT */
#define acpi_lapic 0 #define acpi_lapic 0
#define acpi_ioapic 0 #define acpi_ioapic 0
......
...@@ -35,28 +35,28 @@ ...@@ -35,28 +35,28 @@
subq $9*8+\addskip,%rsp subq $9*8+\addskip,%rsp
CFI_ADJUST_CFA_OFFSET 9*8+\addskip CFI_ADJUST_CFA_OFFSET 9*8+\addskip
movq %rdi,8*8(%rsp) movq %rdi,8*8(%rsp)
CFI_OFFSET rdi,8*8-(9*8+\addskip) CFI_REL_OFFSET rdi,8*8
movq %rsi,7*8(%rsp) movq %rsi,7*8(%rsp)
CFI_OFFSET rsi,7*8-(9*8+\addskip) CFI_REL_OFFSET rsi,7*8
movq %rdx,6*8(%rsp) movq %rdx,6*8(%rsp)
CFI_OFFSET rdx,6*8-(9*8+\addskip) CFI_REL_OFFSET rdx,6*8
.if \norcx .if \norcx
.else .else
movq %rcx,5*8(%rsp) movq %rcx,5*8(%rsp)
CFI_OFFSET rcx,5*8-(9*8+\addskip) CFI_REL_OFFSET rcx,5*8
.endif .endif
movq %rax,4*8(%rsp) movq %rax,4*8(%rsp)
CFI_OFFSET rax,4*8-(9*8+\addskip) CFI_REL_OFFSET rax,4*8
.if \nor891011 .if \nor891011
.else .else
movq %r8,3*8(%rsp) movq %r8,3*8(%rsp)
CFI_OFFSET r8,3*8-(9*8+\addskip) CFI_REL_OFFSET r8,3*8
movq %r9,2*8(%rsp) movq %r9,2*8(%rsp)
CFI_OFFSET r9,2*8-(9*8+\addskip) CFI_REL_OFFSET r9,2*8
movq %r10,1*8(%rsp) movq %r10,1*8(%rsp)
CFI_OFFSET r10,1*8-(9*8+\addskip) CFI_REL_OFFSET r10,1*8
movq %r11,(%rsp) movq %r11,(%rsp)
CFI_OFFSET r11,-(9*8+\addskip) CFI_OFFSET r11
.endif .endif
.endm .endm
...@@ -109,17 +109,17 @@ ...@@ -109,17 +109,17 @@
subq $REST_SKIP,%rsp subq $REST_SKIP,%rsp
CFI_ADJUST_CFA_OFFSET REST_SKIP CFI_ADJUST_CFA_OFFSET REST_SKIP
movq %rbx,5*8(%rsp) movq %rbx,5*8(%rsp)
CFI_OFFSET rbx,5*8-(REST_SKIP) CFI_REL_OFFSET rbx,5*8
movq %rbp,4*8(%rsp) movq %rbp,4*8(%rsp)
CFI_OFFSET rbp,4*8-(REST_SKIP) CFI_REL_OFFSET rbp,4*8
movq %r12,3*8(%rsp) movq %r12,3*8(%rsp)
CFI_OFFSET r12,3*8-(REST_SKIP) CFI_REL_OFFSET r12,3*8
movq %r13,2*8(%rsp) movq %r13,2*8(%rsp)
CFI_OFFSET r13,2*8-(REST_SKIP) CFI_REL_OFFSET r13,2*8
movq %r14,1*8(%rsp) movq %r14,1*8(%rsp)
CFI_OFFSET r14,1*8-(REST_SKIP) CFI_REL_OFFSET r14,1*8
movq %r15,(%rsp) movq %r15,(%rsp)
CFI_OFFSET r15,0*8-(REST_SKIP) CFI_REL_OFFSET r15,0*8
.endm .endm
.macro RESTORE_REST .macro RESTORE_REST
......
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
#ifdef CONFIG_PREEMPT #ifdef CONFIG_PREEMPT
# include <linux/smp_lock.h>
# define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked()) # define in_atomic() ((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
# define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1) # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1)
#else #else
......
#ifndef _ASM_X8664_HPET_H #ifndef _ASM_X8664_HPET_H
#define _ASM_X8664_HPET_H 1 #define _ASM_X8664_HPET_H 1
#include <linux/interrupt.h>
/* /*
* Documentation on HPET can be found at: * Documentation on HPET can be found at:
* http://www.intel.com/ial/home/sp/pcmmspec.htm * http://www.intel.com/ial/home/sp/pcmmspec.htm
...@@ -53,7 +51,6 @@ extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned ch ...@@ -53,7 +51,6 @@ extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, unsigned ch
extern int hpet_set_periodic_freq(unsigned long freq); extern int hpet_set_periodic_freq(unsigned long freq);
extern int hpet_rtc_dropped_irq(void); extern int hpet_rtc_dropped_irq(void);
extern int hpet_rtc_timer_init(void); extern int hpet_rtc_timer_init(void);
extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs);
#endif /* CONFIG_HPET_EMULATE_RTC */ #endif /* CONFIG_HPET_EMULATE_RTC */
#endif #endif
...@@ -186,14 +186,14 @@ extern void mp_register_lapic (u8 id, u8 enabled); ...@@ -186,14 +186,14 @@ extern void mp_register_lapic (u8 id, u8 enabled);
extern void mp_register_lapic_address (u64 address); extern void mp_register_lapic_address (u64 address);
#ifdef CONFIG_X86_IO_APIC #ifdef CONFIG_X86_IO_APIC
extern void mp_register_ioapic (u8 id, u32 address, u32 irq_base); extern void mp_register_ioapic (u8 id, u32 address, u32 gsi_base);
extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 global_irq); extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 gsi);
extern void mp_config_acpi_legacy_irqs (void); extern void mp_config_acpi_legacy_irqs (void);
extern void mp_parse_prt (void); extern void mp_parse_prt (void);
#endif /*CONFIG_X86_IO_APIC*/ #endif /*CONFIG_X86_IO_APIC*/
#endif #endif
extern void mp_config_ioapic_for_sci(int irq); extern void mp_config_ioapic_for_sci(u32 gsi);
extern int using_apic_timer; extern int using_apic_timer;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment