Merge branch 'master' into upstream-fixes
This commit is contained in:
Коммит
25f73891c3
|
@ -2065,8 +2065,12 @@ P: Matthew Wilcox
|
|||
M: matthew@wil.cx
|
||||
P: Grant Grundler
|
||||
M: grundler@parisc-linux.org
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
L: parisc-linux@parisc-linux.org
|
||||
W: http://www.parisc-linux.org/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
|
||||
T: cvs cvs.parisc-linux.org:/var/cvs/linux-2.6
|
||||
S: Maintained
|
||||
|
||||
PCI ERROR RECOVERY
|
||||
|
|
|
@ -43,8 +43,8 @@ strncpy:
|
|||
|
||||
.align 4
|
||||
$multiword:
|
||||
subq $24, 1, $2 # clear the final bits in the prev word
|
||||
or $2, $24, $2
|
||||
subq $27, 1, $2 # clear the final bits in the prev word
|
||||
or $2, $27, $2
|
||||
zapnot $1, $2, $1
|
||||
subq $18, 1, $18
|
||||
|
||||
|
@ -70,8 +70,8 @@ $multiword:
|
|||
bne $18, 0b
|
||||
|
||||
1: ldq_u $1, 0($16) # clear the leading bits in the final word
|
||||
subq $27, 1, $2
|
||||
or $2, $27, $2
|
||||
subq $24, 1, $2
|
||||
or $2, $24, $2
|
||||
|
||||
zap $1, $2, $1
|
||||
stq_u $1, 0($16)
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16
|
||||
# Mon Mar 20 14:54:51 2006
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:21:01 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -28,6 +30,7 @@ CONFIG_SYSCTL=y
|
|||
# CONFIG_AUDIT is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -43,10 +46,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -59,7 +58,6 @@ CONFIG_OBSOLETE_INTERMODULE=y
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
@ -67,6 +65,7 @@ CONFIG_KMOD=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -94,6 +93,7 @@ CONFIG_ARCH_EP93XX=y
|
|||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -112,7 +112,6 @@ CONFIG_ARCH_EP93XX=y
|
|||
#
|
||||
# Cirrus EP93xx Implementation Options
|
||||
#
|
||||
CONFIG_CRUNCH=y
|
||||
|
||||
#
|
||||
# EP93xx Platforms
|
||||
|
@ -232,12 +231,15 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -346,7 +348,6 @@ CONFIG_MTD_CFI_I2=y
|
|||
# CONFIG_MTD_OTP is not set
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_CFI_AMDSTD_RETRY=0
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
|
@ -371,7 +372,6 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1
|
|||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLKMTD is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
|
@ -412,7 +412,7 @@ CONFIG_MTD_NAND_IDS=y
|
|||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_UB is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
|
@ -576,13 +576,13 @@ CONFIG_WATCHDOG=y
|
|||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_EP93XX_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
|
@ -626,9 +626,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
CONFIG_I2C_DEBUG_CORE=y
|
||||
CONFIG_I2C_DEBUG_ALGO=y
|
||||
CONFIG_I2C_DEBUG_BUS=y
|
||||
|
@ -690,7 +688,16 @@ CONFIG_HWMON=y
|
|||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -702,6 +709,7 @@ CONFIG_HWMON=y
|
|||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
|
@ -718,6 +726,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
|
||||
|
@ -775,15 +784,6 @@ CONFIG_USB_STORAGE=y
|
|||
# CONFIG_USB_MDC800 is not set
|
||||
# CONFIG_USB_MICROTEK is not set
|
||||
|
||||
#
|
||||
# USB Multimedia devices
|
||||
#
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Video4Linux support is needed for USB Multimedia device support
|
||||
#
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
#
|
||||
|
@ -813,6 +813,7 @@ CONFIG_USB_SERIAL_CONSOLE=y
|
|||
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
|
||||
# CONFIG_USB_SERIAL_EMPEG is not set
|
||||
# CONFIG_USB_SERIAL_FTDI_SIO is not set
|
||||
# CONFIG_USB_SERIAL_FUNSOFT is not set
|
||||
# CONFIG_USB_SERIAL_VISOR is not set
|
||||
# CONFIG_USB_SERIAL_IPAQ is not set
|
||||
# CONFIG_USB_SERIAL_IR is not set
|
||||
|
@ -825,6 +826,7 @@ CONFIG_USB_SERIAL_CONSOLE=y
|
|||
# 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_NAVMAN is not set
|
||||
CONFIG_USB_SERIAL_PL2303=y
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
|
@ -864,6 +866,32 @@ CONFIG_USB_SERIAL_PL2303=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
|
||||
#
|
||||
# RTC interfaces
|
||||
#
|
||||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
|
||||
#
|
||||
# RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_X1205 is not set
|
||||
# CONFIG_RTC_DRV_DS1672 is not set
|
||||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||
CONFIG_RTC_DRV_M48T86=y
|
||||
CONFIG_RTC_DRV_EP93XX=y
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -912,7 +940,6 @@ CONFIG_SYSFS=y
|
|||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
@ -1044,6 +1071,7 @@ CONFIG_LOG_BUF_SHIFT=14
|
|||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
# CONFIG_DEBUG_SLAB_LEAK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
|
@ -1053,6 +1081,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Wed Feb 8 04:49:11 2006
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:12:49 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -29,6 +30,7 @@ CONFIG_BSD_PROCESS_ACCT=y
|
|||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -44,10 +46,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -60,7 +58,6 @@ CONFIG_OBSOLETE_INTERMODULE=y
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
@ -68,6 +65,7 @@ CONFIG_KMOD=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -89,11 +87,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
CONFIG_ARCH_IXP2000=y
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -123,6 +123,7 @@ CONFIG_ARCH_IXDP2800=y
|
|||
CONFIG_ARCH_IXDP2X00=y
|
||||
CONFIG_ARCH_IXDP2401=y
|
||||
CONFIG_ARCH_IXDP2801=y
|
||||
CONFIG_MACH_IXDP28X5=y
|
||||
CONFIG_ARCH_IXDP2X01=y
|
||||
# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
|
||||
|
||||
|
@ -147,7 +148,6 @@ CONFIG_XSCALE_PMU=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -160,6 +160,7 @@ CONFIG_PCI_LEGACY_PROC=y
|
|||
#
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_NO_IDLE_HZ is not set
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_AEABI is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
|
@ -213,6 +214,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -232,12 +234,15 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -347,7 +352,6 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
# CONFIG_MTD_OBSOLETE_CHIPS is not set
|
||||
# CONFIG_MTD_XIP is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
|
@ -366,7 +370,6 @@ CONFIG_MTD_IXP2000=y
|
|||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLKMTD is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
|
@ -614,8 +617,9 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=3
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=3
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
|
@ -623,6 +627,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
|||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -650,7 +655,6 @@ CONFIG_IXP2000_WATCHDOG=y
|
|||
# CONFIG_PCIPCWATCHDOG is not set
|
||||
# CONFIG_WDTPCI is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -696,7 +700,6 @@ CONFIG_I2C_IXP2000=y
|
|||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
# CONFIG_I2C_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
# CONFIG_I2C_SIS96X is not set
|
||||
|
@ -715,9 +718,7 @@ CONFIG_SENSORS_EEPROM=y
|
|||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -729,6 +730,11 @@ CONFIG_SENSORS_EEPROM=y
|
|||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
|
@ -742,6 +748,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
|
@ -776,7 +783,16 @@ CONFIG_HWMON=y
|
|||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -804,6 +820,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
|
@ -820,6 +837,12 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -870,7 +893,6 @@ CONFIG_SYSFS=y
|
|||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
@ -972,6 +994,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16
|
||||
# Tue Mar 21 03:27:20 2006
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:13:50 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -28,6 +30,7 @@ CONFIG_BSD_PROCESS_ACCT=y
|
|||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -43,10 +46,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -59,7 +58,6 @@ CONFIG_OBSOLETE_INTERMODULE=y
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
@ -67,6 +65,7 @@ CONFIG_KMOD=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -143,7 +142,6 @@ CONFIG_CPU_BIG_ENDIAN=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -230,12 +228,15 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -365,7 +366,6 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1
|
|||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLKMTD is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
|
@ -527,7 +527,6 @@ CONFIG_BLK_DEV_SD=y
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
|
@ -735,6 +734,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
@ -776,7 +776,6 @@ CONFIG_WATCHDOG=y
|
|||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -821,7 +820,6 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
# CONFIG_I2C_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
# CONFIG_I2C_SIS96X is not set
|
||||
|
@ -840,9 +838,7 @@ CONFIG_SENSORS_EEPROM=y
|
|||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -907,7 +903,16 @@ CONFIG_HWMON=y
|
|||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
|
@ -919,6 +924,7 @@ CONFIG_HWMON=y
|
|||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
|
@ -935,6 +941,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -1000,9 +1007,7 @@ CONFIG_USB_STORAGE=y
|
|||
# CONFIG_USB_ACECAD is not set
|
||||
# CONFIG_USB_KBTAB is not set
|
||||
# CONFIG_USB_POWERMATE is not set
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_TOUCHSCREEN is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
|
@ -1016,15 +1021,6 @@ CONFIG_USB_STORAGE=y
|
|||
# CONFIG_USB_MDC800 is not set
|
||||
# CONFIG_USB_MICROTEK is not set
|
||||
|
||||
#
|
||||
# USB Multimedia devices
|
||||
#
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Video4Linux support is needed for USB Multimedia device support
|
||||
#
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
#
|
||||
|
@ -1075,6 +1071,12 @@ CONFIG_USB_MON=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1127,7 +1129,6 @@ CONFIG_SYSFS=y
|
|||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
@ -1268,6 +1269,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
|
|
|
@ -407,7 +407,7 @@ static void __init early_initrd(char **p)
|
|||
}
|
||||
__early_param("initrd=", early_initrd);
|
||||
|
||||
static void __init add_memory(unsigned long start, unsigned long size)
|
||||
static void __init arm_add_memory(unsigned long start, unsigned long size)
|
||||
{
|
||||
/*
|
||||
* Ensure that start/size are aligned to a page boundary.
|
||||
|
@ -445,7 +445,7 @@ static void __init early_mem(char **p)
|
|||
if (**p == '@')
|
||||
start = memparse(*p + 1, p);
|
||||
|
||||
add_memory(start, size);
|
||||
arm_add_memory(start, size);
|
||||
}
|
||||
__early_param("mem=", early_mem);
|
||||
|
||||
|
@ -587,7 +587,7 @@ static int __init parse_tag_mem32(const struct tag *tag)
|
|||
tag->u.mem.start, tag->u.mem.size / 1024);
|
||||
return -EINVAL;
|
||||
}
|
||||
add_memory(tag->u.mem.start, tag->u.mem.size);
|
||||
arm_add_memory(tag->u.mem.start, tag->u.mem.size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -807,7 +807,7 @@ static int __init topology_init(void)
|
|||
{
|
||||
int cpu;
|
||||
|
||||
for_each_cpu(cpu)
|
||||
for_each_possible_cpu(cpu)
|
||||
register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu, NULL);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -91,7 +91,7 @@ static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type);
|
|||
/*
|
||||
* IRQ -> GPIO mapping table
|
||||
*/
|
||||
static char irq2gpio[32] = {
|
||||
static signed char irq2gpio[32] = {
|
||||
-1, -1, -1, -1, -1, -1, 0, 1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, 2, 3, 4, 5, 6,
|
||||
|
|
|
@ -138,6 +138,37 @@ config 64BIT
|
|||
enable this option otherwise. The 64bit kernel is significantly bigger
|
||||
and slower than the 32bit one.
|
||||
|
||||
choice
|
||||
prompt "Kernel page size"
|
||||
default PARISC_PAGE_SIZE_4KB if !64BIT
|
||||
default PARISC_PAGE_SIZE_4KB if 64BIT
|
||||
# default PARISC_PAGE_SIZE_16KB if 64BIT
|
||||
|
||||
config PARISC_PAGE_SIZE_4KB
|
||||
bool "4KB"
|
||||
help
|
||||
This lets you select the page size of the kernel. For best
|
||||
performance, a page size of 16KB is recommended. For best
|
||||
compatibility with 32bit applications, a page size of 4KB should be
|
||||
selected (the vast majority of 32bit binaries work perfectly fine
|
||||
with a larger page size).
|
||||
|
||||
4KB For best 32bit compatibility
|
||||
16KB For best performance
|
||||
64KB For best performance, might give more overhead.
|
||||
|
||||
If you don't know what to do, choose 4KB.
|
||||
|
||||
config PARISC_PAGE_SIZE_16KB
|
||||
bool "16KB (EXPERIMENTAL)"
|
||||
depends on PA8X00 && EXPERIMENTAL
|
||||
|
||||
config PARISC_PAGE_SIZE_64KB
|
||||
bool "64KB (EXPERIMENTAL)"
|
||||
depends on PA8X00 && EXPERIMENTAL
|
||||
|
||||
endchoice
|
||||
|
||||
config SMP
|
||||
bool "Symmetric multi-processing support"
|
||||
---help---
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-pa6
|
||||
# Sun Mar 26 19:50:07 2006
|
||||
# Linux kernel version: 2.6.16-pa10
|
||||
# Sun Apr 2 15:26:38 2006
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -25,7 +25,7 @@ CONFIG_LOCALVERSION=""
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
|
@ -35,7 +35,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
|||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
|
@ -57,7 +57,13 @@ CONFIG_BASE_SMALL=0
|
|||
#
|
||||
# Loadable module support
|
||||
#
|
||||
# CONFIG_MODULES is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
|
@ -79,16 +85,19 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# Processor type and features
|
||||
#
|
||||
CONFIG_PA7000=y
|
||||
# CONFIG_PA7100LC is not set
|
||||
# CONFIG_PA7000 is not set
|
||||
CONFIG_PA7100LC=y
|
||||
# CONFIG_PA7200 is not set
|
||||
# CONFIG_PA7300LC is not set
|
||||
# CONFIG_PA8X00 is not set
|
||||
CONFIG_PA11=y
|
||||
CONFIG_PARISC_PAGE_SIZE_4KB=y
|
||||
# CONFIG_PARISC_PAGE_SIZE_16KB is not set
|
||||
# CONFIG_PARISC_PAGE_SIZE_64KB is not set
|
||||
# CONFIG_SMP is not set
|
||||
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
|
@ -108,7 +117,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
|
|||
# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
|
||||
#
|
||||
CONFIG_GSC=y
|
||||
CONFIG_HPPB=y
|
||||
# CONFIG_HPPB is not set
|
||||
CONFIG_IOMMU_CCIO=y
|
||||
CONFIG_GSC_LASI=y
|
||||
CONFIG_GSC_WAX=y
|
||||
|
@ -126,7 +135,25 @@ CONFIG_IOMMU_SBA=y
|
|||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
CONFIG_PCCARD=y
|
||||
# CONFIG_PCMCIA_DEBUG is not set
|
||||
CONFIG_PCMCIA=y
|
||||
CONFIG_PCMCIA_LOAD_CIS=y
|
||||
CONFIG_PCMCIA_IOCTL=y
|
||||
CONFIG_CARDBUS=y
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
CONFIG_YENTA=y
|
||||
CONFIG_YENTA_O2=y
|
||||
CONFIG_YENTA_RICOH=y
|
||||
CONFIG_YENTA_TI=y
|
||||
CONFIG_YENTA_ENE_TUNE=y
|
||||
CONFIG_YENTA_TOSHIBA=y
|
||||
CONFIG_PD6729=y
|
||||
CONFIG_I82092=y
|
||||
CONFIG_PCCARD_NONSTATIC=y
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
|
@ -145,7 +172,7 @@ CONFIG_PDC_STABLE=y
|
|||
# Executable file formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
@ -159,13 +186,15 @@ CONFIG_NET=y
|
|||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
|
@ -173,19 +202,20 @@ CONFIG_IP_PNP_BOOTP=y
|
|||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
CONFIG_INET_TUNNEL=m
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_TCP_DIAG=m
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
CONFIG_IPV6=y
|
||||
# CONFIG_IPV6_PRIVACY is not set
|
||||
# CONFIG_INET6_AH is not set
|
||||
# CONFIG_INET6_ESP is not set
|
||||
# CONFIG_INET6_IPCOMP is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
CONFIG_INET6_AH=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
CONFIG_INET6_TUNNEL=y
|
||||
# CONFIG_IPV6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
|
@ -207,7 +237,8 @@ CONFIG_IPV6=y
|
|||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
CONFIG_LLC=m
|
||||
CONFIG_LLC2=m
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
|
@ -237,9 +268,9 @@ CONFIG_IPV6=y
|
|||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
|
@ -256,13 +287,14 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# Parallel port support
|
||||
#
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=y
|
||||
CONFIG_PARPORT_PC=m
|
||||
# CONFIG_PARPORT_SERIAL is not set
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
CONFIG_PARPORT_PC_PCMCIA=m
|
||||
CONFIG_PARPORT_NOT_PC=y
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
CONFIG_PARPORT_1284=y
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
|
@ -284,7 +316,7 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
|
|||
# CONFIG_BLK_DEV_UB is not set
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
@ -292,7 +324,60 @@ CONFIG_BLK_DEV_INITRD=y
|
|||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
# CONFIG_IDE is not set
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||
#
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
CONFIG_BLK_DEV_IDEDISK=y
|
||||
CONFIG_IDEDISK_MULTI_MODE=y
|
||||
CONFIG_BLK_DEV_IDECS=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||
CONFIG_BLK_DEV_IDESCSI=y
|
||||
# CONFIG_IDE_TASK_IOCTL is not set
|
||||
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
CONFIG_IDE_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEPCI=y
|
||||
CONFIG_IDEPCI_SHARE_IRQ=y
|
||||
# CONFIG_BLK_DEV_OFFBOARD is not set
|
||||
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_IDEDMA_PCI_AUTO is not set
|
||||
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||
# CONFIG_BLK_DEV_ALI15X3 is not set
|
||||
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||
# CONFIG_BLK_DEV_CMD64X is not set
|
||||
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||
# CONFIG_BLK_DEV_CY82C693 is not set
|
||||
# CONFIG_BLK_DEV_CS5520 is not set
|
||||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_HPT34X 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_IT821X is not set
|
||||
CONFIG_BLK_DEV_NS87415=y
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
# CONFIG_BLK_DEV_SVWKS is not set
|
||||
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||
# CONFIG_BLK_DEV_TRM290 is not set
|
||||
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||
# CONFIG_IDE_ARM is not set
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_IDEDMA_IVB is not set
|
||||
# CONFIG_IDEDMA_AUTO is not set
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
|
@ -374,6 +459,15 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
|
|||
# CONFIG_SCSI_NSP32 is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
#
|
||||
# PCMCIA SCSI adapter support
|
||||
#
|
||||
# CONFIG_PCMCIA_AHA152X is not set
|
||||
# CONFIG_PCMCIA_FDOMAIN is not set
|
||||
# CONFIG_PCMCIA_NINJA_SCSI is not set
|
||||
# CONFIG_PCMCIA_QLOGIC is not set
|
||||
# CONFIG_PCMCIA_SYM53C500 is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
|
@ -382,12 +476,17 @@ CONFIG_BLK_DEV_MD=y
|
|||
CONFIG_MD_LINEAR=y
|
||||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
# CONFIG_MD_RAID10 is not set
|
||||
CONFIG_MD_RAID10=y
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID6 is not set
|
||||
CONFIG_MD_RAID6=y
|
||||
# CONFIG_MD_MULTIPATH is not set
|
||||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
# CONFIG_DM_CRYPT is not set
|
||||
# CONFIG_DM_SNAPSHOT is not set
|
||||
# CONFIG_DM_MIRROR is not set
|
||||
# CONFIG_DM_ZERO is not set
|
||||
# CONFIG_DM_MULTIPATH is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -411,10 +510,10 @@ CONFIG_MD_RAID5=y
|
|||
# Network device support
|
||||
#
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
CONFIG_TUN=m
|
||||
|
||||
#
|
||||
# ARCnet devices
|
||||
|
@ -430,7 +529,7 @@ CONFIG_NETDEVICES=y
|
|||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
# CONFIG_MII is not set
|
||||
CONFIG_MII=m
|
||||
CONFIG_LASI_82596=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
|
@ -451,6 +550,8 @@ CONFIG_TULIP=y
|
|||
# CONFIG_WINBOND_840 is not set
|
||||
# CONFIG_DM9102 is not set
|
||||
# CONFIG_ULI526X is not set
|
||||
# CONFIG_PCMCIA_XIRCOM is not set
|
||||
# CONFIG_PCMCIA_XIRTULIP is not set
|
||||
# CONFIG_DEPCA is not set
|
||||
# CONFIG_HP100 is not set
|
||||
CONFIG_NET_PCI=y
|
||||
|
@ -518,13 +619,32 @@ CONFIG_NET_RADIO=y
|
|||
# Obsolete Wireless cards support (pre-802.11)
|
||||
#
|
||||
# CONFIG_STRIP is not set
|
||||
# CONFIG_PCMCIA_WAVELAN is not set
|
||||
# CONFIG_PCMCIA_NETWAVE is not set
|
||||
|
||||
#
|
||||
# Wireless 802.11 Frequency Hopping cards support
|
||||
#
|
||||
# CONFIG_PCMCIA_RAYCS is not set
|
||||
|
||||
#
|
||||
# Wireless 802.11b ISA/PCI cards support
|
||||
#
|
||||
# CONFIG_HERMES is not set
|
||||
CONFIG_HERMES=y
|
||||
# CONFIG_PLX_HERMES is not set
|
||||
# CONFIG_TMD_HERMES is not set
|
||||
# CONFIG_NORTEL_HERMES is not set
|
||||
# CONFIG_PCI_HERMES is not set
|
||||
# CONFIG_ATMEL is not set
|
||||
|
||||
#
|
||||
# Wireless 802.11b Pcmcia/Cardbus cards support
|
||||
#
|
||||
CONFIG_PCMCIA_HERMES=y
|
||||
CONFIG_PCMCIA_SPECTRUM=y
|
||||
# CONFIG_AIRO_CS is not set
|
||||
# CONFIG_PCMCIA_WL3501 is not set
|
||||
|
||||
#
|
||||
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
|
||||
#
|
||||
|
@ -532,6 +652,19 @@ CONFIG_NET_RADIO=y
|
|||
# CONFIG_HOSTAP is not set
|
||||
CONFIG_NET_WIRELESS=y
|
||||
|
||||
#
|
||||
# PCMCIA network device support
|
||||
#
|
||||
CONFIG_NET_PCMCIA=y
|
||||
# CONFIG_PCMCIA_3C589 is not set
|
||||
# CONFIG_PCMCIA_3C574 is not set
|
||||
# CONFIG_PCMCIA_FMVJ18X is not set
|
||||
# CONFIG_PCMCIA_PCNET is not set
|
||||
# CONFIG_PCMCIA_NMCLAN is not set
|
||||
# CONFIG_PCMCIA_SMC91C92 is not set
|
||||
# CONFIG_PCMCIA_XIRC2PS is not set
|
||||
# CONFIG_PCMCIA_AXNET is not set
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
#
|
||||
|
@ -539,7 +672,15 @@ CONFIG_NET_WIRELESS=y
|
|||
# CONFIG_FDDI 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=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
CONFIG_PPPOE=m
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_NET_FC is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
|
@ -571,14 +712,16 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
|||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
|
||||
# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
|
@ -586,52 +729,25 @@ CONFIG_INPUT_KEYBOARD=y
|
|||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
CONFIG_KEYBOARD_HIL=y
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
CONFIG_MOUSE_PS2=y
|
||||
CONFIG_MOUSE_SERIAL=y
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
CONFIG_MOUSE_HIL=y
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
# CONFIG_JOYSTICK_ANALOG is not set
|
||||
# CONFIG_JOYSTICK_A3D is not set
|
||||
# CONFIG_JOYSTICK_ADI is not set
|
||||
# CONFIG_JOYSTICK_COBRA is not set
|
||||
# CONFIG_JOYSTICK_GF2K is not set
|
||||
# CONFIG_JOYSTICK_GRIP is not set
|
||||
# CONFIG_JOYSTICK_GRIP_MP is not set
|
||||
# CONFIG_JOYSTICK_GUILLEMOT is not set
|
||||
# CONFIG_JOYSTICK_INTERACT is not set
|
||||
# CONFIG_JOYSTICK_SIDEWINDER is not set
|
||||
# CONFIG_JOYSTICK_TMDC is not set
|
||||
# CONFIG_JOYSTICK_IFORCE is not set
|
||||
# CONFIG_JOYSTICK_WARRIOR is not set
|
||||
# CONFIG_JOYSTICK_MAGELLAN is not set
|
||||
# CONFIG_JOYSTICK_SPACEORB is not set
|
||||
# CONFIG_JOYSTICK_SPACEBALL is not set
|
||||
# CONFIG_JOYSTICK_STINGER is not set
|
||||
# CONFIG_JOYSTICK_TWIDJOY is not set
|
||||
# CONFIG_JOYSTICK_DB9 is not set
|
||||
# CONFIG_JOYSTICK_GAMECON is not set
|
||||
# CONFIG_JOYSTICK_TURBOGRAFX is not set
|
||||
# CONFIG_JOYSTICK_JOYDUMP is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
CONFIG_INPUT_MISC=y
|
||||
# CONFIG_INPUT_UINPUT is not set
|
||||
CONFIG_HP_SDC_RTC=y
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
CONFIG_SERIO_GSCPS2=y
|
||||
CONFIG_HP_SDC=y
|
||||
CONFIG_HIL_MLC=y
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
|
@ -648,7 +764,8 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_CS=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
|
@ -666,10 +783,10 @@ CONFIG_SERIAL_CORE_CONSOLE=y
|
|||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
CONFIG_PRINTER=y
|
||||
CONFIG_LEGACY_PTY_COUNT=64
|
||||
CONFIG_PRINTER=m
|
||||
# CONFIG_LP_CONSOLE is not set
|
||||
# CONFIG_PPDEV is not set
|
||||
CONFIG_PPDEV=m
|
||||
# CONFIG_TIPAR is not set
|
||||
|
||||
#
|
||||
|
@ -682,7 +799,7 @@ CONFIG_PRINTER=y
|
|||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -691,6 +808,13 @@ CONFIG_GEN_RTC=y
|
|||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_DRM is not set
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
#
|
||||
# CONFIG_SYNCLINK_CS is not set
|
||||
# CONFIG_CARDMAN_4000 is not set
|
||||
# CONFIG_CARDMAN_4040 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
|
@ -718,10 +842,8 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
|
@ -749,8 +871,8 @@ CONFIG_FB_CFB_FILLRECT=y
|
|||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
|
@ -778,8 +900,8 @@ CONFIG_FB_STI=y
|
|||
# Console display driver support
|
||||
#
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_STI_CONSOLE=y
|
||||
|
@ -816,13 +938,14 @@ CONFIG_SOUND=y
|
|||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_SND_HWDEP=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
# CONFIG_SND_SEQ_DUMMY is not set
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
@ -830,6 +953,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_OPL3_LIB=y
|
||||
CONFIG_SND_AC97_CODEC=y
|
||||
CONFIG_SND_AC97_BUS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
|
@ -842,7 +966,7 @@ CONFIG_SND_AC97_BUS=y
|
|||
# PCI devices
|
||||
#
|
||||
CONFIG_SND_AD1889=y
|
||||
# CONFIG_SND_AD1889_OPL3 is not set
|
||||
CONFIG_SND_AD1889_OPL3=y
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP is not set
|
||||
# CONFIG_SND_ATIIXP_MODEM is not set
|
||||
|
@ -889,6 +1013,10 @@ CONFIG_SND_AD1889=y
|
|||
#
|
||||
# CONFIG_SND_USB_AUDIO is not set
|
||||
|
||||
#
|
||||
# PCMCIA devices
|
||||
#
|
||||
|
||||
#
|
||||
# GSC devices
|
||||
#
|
||||
|
@ -905,12 +1033,12 @@ CONFIG_SND_HARMONY=y
|
|||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
#
|
||||
# Miscellaneous USB options
|
||||
#
|
||||
# CONFIG_USB_DEVICEFS is not set
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
# CONFIG_USB_BANDWIDTH is not set
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
|
@ -918,14 +1046,12 @@ CONFIG_USB_DEBUG=y
|
|||
#
|
||||
# USB Host Controller Drivers
|
||||
#
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_EHCI_HCD is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_UHCI_HCD is not set
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
#
|
||||
|
@ -948,13 +1074,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
# CONFIG_USB_HID is not set
|
||||
|
||||
#
|
||||
# USB HID Boot Protocol drivers
|
||||
#
|
||||
# CONFIG_USB_KBD is not set
|
||||
# CONFIG_USB_MOUSE is not set
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||
# CONFIG_HID_FF is not set
|
||||
# CONFIG_USB_HIDDEV is not set
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
# CONFIG_USB_WACOM is not set
|
||||
# CONFIG_USB_ACECAD is not set
|
||||
|
@ -1020,8 +1144,8 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
# USB DSL modem support
|
||||
|
@ -1058,7 +1182,7 @@ CONFIG_JBD=y
|
|||
# CONFIG_JBD_DEBUG is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
|
@ -1066,7 +1190,7 @@ CONFIG_JBD=y
|
|||
CONFIG_INOTIFY=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS_FS=y
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
|
@ -1081,8 +1205,11 @@ CONFIG_JOLIET=y
|
|||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
CONFIG_FAT_FS=y
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
# CONFIG_VFAT_FS is not set
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
|
@ -1125,7 +1252,7 @@ CONFIG_NFS_V3=y
|
|||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
# CONFIG_NFSD_V4 is not set
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
|
@ -1133,10 +1260,16 @@ CONFIG_LOCKD_V4=y
|
|||
CONFIG_EXPORTFS=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
CONFIG_RPCSEC_GSS_SPKM3=m
|
||||
CONFIG_SMB_FS=m
|
||||
CONFIG_SMB_NLS_DEFAULT=y
|
||||
CONFIG_SMB_NLS_REMOTE="cp437"
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_XATTR is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1153,50 +1286,50 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
# CONFIG_NLS_CODEPAGE_437 is not set
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||
# CONFIG_NLS_CODEPAGE_866 is not set
|
||||
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||
# CONFIG_NLS_ISO8859_8 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
# CONFIG_NLS_ISO8859_5 is not set
|
||||
# CONFIG_NLS_ISO8859_6 is not set
|
||||
# CONFIG_NLS_ISO8859_7 is not set
|
||||
# CONFIG_NLS_ISO8859_9 is not set
|
||||
# CONFIG_NLS_ISO8859_13 is not set
|
||||
# CONFIG_NLS_ISO8859_14 is not set
|
||||
# CONFIG_NLS_ISO8859_15 is not set
|
||||
# CONFIG_NLS_KOI8_R is not set
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=y
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=y
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
#
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_OPROFILE=m
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
|
@ -1204,7 +1337,7 @@ CONFIG_OPROFILE=y
|
|||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=15
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
|
@ -1217,42 +1350,43 @@ CONFIG_DEBUG_MUTEXES=y
|
|||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_RODATA=y
|
||||
# CONFIG_DEBUG_RODATA is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
CONFIG_KEYS=y
|
||||
CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
||||
# CONFIG_SECURITY is not set
|
||||
|
||||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
CONFIG_CRYPTO=y
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_DES is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_SERPENT=m
|
||||
CONFIG_CRYPTO_AES=m
|
||||
CONFIG_CRYPTO_CAST5=m
|
||||
CONFIG_CRYPTO_CAST6=m
|
||||
CONFIG_CRYPTO_TEA=m
|
||||
CONFIG_CRYPTO_ARC4=m
|
||||
CONFIG_CRYPTO_KHAZAD=m
|
||||
CONFIG_CRYPTO_ANUBIS=m
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_CRC32C=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
|
@ -1261,7 +1395,9 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
|
|
|
@ -288,8 +288,11 @@ int main(void)
|
|||
DEFINE(ASM_PGD_ENTRY_SIZE, PGD_ENTRY_SIZE);
|
||||
DEFINE(ASM_PMD_ENTRY_SIZE, PMD_ENTRY_SIZE);
|
||||
DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE);
|
||||
DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT);
|
||||
DEFINE(ASM_PT_INITIAL, PT_INITIAL);
|
||||
DEFINE(ASM_PAGE_SIZE, PAGE_SIZE);
|
||||
DEFINE(ASM_PAGE_SIZE_DIV64, PAGE_SIZE/64);
|
||||
DEFINE(ASM_PAGE_SIZE_DIV128, PAGE_SIZE/128);
|
||||
BLANK();
|
||||
DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip));
|
||||
DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space));
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1999 Helge Deller (07-13-1999)
|
||||
* Copyright (C) 1999-2006 Helge Deller <deller@gmx.de> (07-13-1999)
|
||||
* Copyright (C) 1999 SuSE GmbH Nuernberg
|
||||
* Copyright (C) 2000 Philipp Rumpf (prumpf@tux.org)
|
||||
*
|
||||
|
@ -358,5 +358,5 @@ void parisc_setup_cache_timing(void)
|
|||
if (!parisc_cache_flush_threshold)
|
||||
parisc_cache_flush_threshold = FLUSH_THRESHOLD;
|
||||
|
||||
printk("Setting cache flush threshold to %x (%d CPUs online)\n", parisc_cache_flush_threshold, num_online_cpus());
|
||||
printk(KERN_INFO "Setting cache flush threshold to %x (%d CPUs online)\n", parisc_cache_flush_threshold, num_online_cpus());
|
||||
}
|
||||
|
|
|
@ -502,18 +502,20 @@
|
|||
* all ILP32 processes and all the kernel for machines with
|
||||
* under 4GB of memory) */
|
||||
.macro L3_ptep pgd,pte,index,va,fault
|
||||
#if PT_NLEVELS == 3 /* we might have a 2-Level scheme, e.g. with 16kb page size */
|
||||
extrd,u \va,63-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
|
||||
copy %r0,\pte
|
||||
extrd,u,*= \va,31,32,%r0
|
||||
extrd,u,*= \va,63-ASM_PGDIR_SHIFT,64-ASM_PGDIR_SHIFT,%r0
|
||||
ldw,s \index(\pgd),\pgd
|
||||
extrd,u,*= \va,31,32,%r0
|
||||
extrd,u,*= \va,63-ASM_PGDIR_SHIFT,64-ASM_PGDIR_SHIFT,%r0
|
||||
bb,>=,n \pgd,_PxD_PRESENT_BIT,\fault
|
||||
extrd,u,*= \va,31,32,%r0
|
||||
extrd,u,*= \va,63-ASM_PGDIR_SHIFT,64-ASM_PGDIR_SHIFT,%r0
|
||||
shld \pgd,PxD_VALUE_SHIFT,\index
|
||||
extrd,u,*= \va,31,32,%r0
|
||||
extrd,u,*= \va,63-ASM_PGDIR_SHIFT,64-ASM_PGDIR_SHIFT,%r0
|
||||
copy \index,\pgd
|
||||
extrd,u,*<> \va,31,32,%r0
|
||||
extrd,u,*<> \va,63-ASM_PGDIR_SHIFT,64-ASM_PGDIR_SHIFT,%r0
|
||||
ldo ASM_PGD_PMD_OFFSET(\pgd),\pgd
|
||||
#endif
|
||||
L2_ptep \pgd,\pte,\index,\va,\fault
|
||||
.endm
|
||||
|
||||
|
@ -563,10 +565,18 @@
|
|||
extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0
|
||||
depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */
|
||||
|
||||
/* Get rid of prot bits and convert to page addr for iitlbt and idtlbt */
|
||||
/* Enforce uncacheable pages.
|
||||
* This should ONLY be use for MMIO on PA 2.0 machines.
|
||||
* Memory/DMA is cache coherent on all PA2.0 machines we support
|
||||
* (that means T-class is NOT supported) and the memory controllers
|
||||
* on most of those machines only handles cache transactions.
|
||||
*/
|
||||
extrd,u,*= \pte,_PAGE_NO_CACHE_BIT+32,1,%r0
|
||||
depi 1,12,1,\prot
|
||||
|
||||
depd %r0,63,PAGE_SHIFT,\pte
|
||||
extrd,s \pte,(63-PAGE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte
|
||||
/* Drop prot bits and convert to page addr for iitlbt and idtlbt */
|
||||
extrd,u \pte,(63-ASM_PFN_PTE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte
|
||||
depdi _PAGE_SIZE_ENCODING_DEFAULT,63,63-58,\pte
|
||||
.endm
|
||||
|
||||
/* Identical macro to make_insert_tlb above, except it
|
||||
|
@ -584,9 +594,8 @@
|
|||
|
||||
/* Get rid of prot bits and convert to page addr for iitlba */
|
||||
|
||||
depi 0,31,PAGE_SHIFT,\pte
|
||||
depi _PAGE_SIZE_ENCODING_DEFAULT,31,ASM_PFN_PTE_SHIFT,\pte
|
||||
extru \pte,24,25,\pte
|
||||
|
||||
.endm
|
||||
|
||||
/* This is for ILP32 PA2.0 only. The TLB insertion needs
|
||||
|
@ -1201,10 +1210,9 @@ intr_save:
|
|||
*/
|
||||
|
||||
/* adjust isr/ior. */
|
||||
|
||||
extrd,u %r16,63,7,%r1 /* get high bits from isr for ior */
|
||||
depd %r1,31,7,%r17 /* deposit them into ior */
|
||||
depdi 0,63,7,%r16 /* clear them from isr */
|
||||
extrd,u %r16,63,SPACEID_SHIFT,%r1 /* get high bits from isr for ior */
|
||||
depd %r1,31,SPACEID_SHIFT,%r17 /* deposit them into ior */
|
||||
depdi 0,63,SPACEID_SHIFT,%r16 /* clear them from isr */
|
||||
#endif
|
||||
STREG %r16, PT_ISR(%r29)
|
||||
STREG %r17, PT_IOR(%r29)
|
||||
|
|
|
@ -76,16 +76,16 @@ $bss_loop:
|
|||
mtctl %r4,%cr24 /* Initialize kernel root pointer */
|
||||
mtctl %r4,%cr25 /* Initialize user root pointer */
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#if PT_NLEVELS == 3
|
||||
/* Set pmd in pgd */
|
||||
load32 PA(pmd0),%r5
|
||||
shrd %r5,PxD_VALUE_SHIFT,%r3
|
||||
ldo (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
|
||||
ldo (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
|
||||
stw %r3,ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4)
|
||||
ldo ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r4
|
||||
#else
|
||||
/* 2-level page table, so pmd == pgd */
|
||||
ldo ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4
|
||||
ldo ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4
|
||||
#endif
|
||||
|
||||
/* Fill in pmd with enough pte directories */
|
||||
|
@ -99,7 +99,7 @@ $bss_loop:
|
|||
stw %r3,0(%r4)
|
||||
ldo (ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3
|
||||
addib,> -1,%r1,1b
|
||||
#ifdef CONFIG_64BIT
|
||||
#if PT_NLEVELS == 3
|
||||
ldo ASM_PMD_ENTRY_SIZE(%r4),%r4
|
||||
#else
|
||||
ldo ASM_PGD_ENTRY_SIZE(%r4),%r4
|
||||
|
@ -107,13 +107,14 @@ $bss_loop:
|
|||
|
||||
|
||||
/* Now initialize the PTEs themselves */
|
||||
ldo _PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
|
||||
ldo 0+_PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
|
||||
ldi (1<<(KERNEL_INITIAL_ORDER-PAGE_SHIFT)),%r11 /* PFN count */
|
||||
load32 PA(pg0),%r1
|
||||
|
||||
$pgt_fill_loop:
|
||||
STREGM %r3,ASM_PTE_ENTRY_SIZE(%r1)
|
||||
ldo ASM_PAGE_SIZE(%r3),%r3
|
||||
bb,>= %r3,31-KERNEL_INITIAL_ORDER,$pgt_fill_loop
|
||||
ldo (1<<PFN_PTE_SHIFT)(%r3),%r3 /* add one PFN */
|
||||
addib,> -1,%r11,$pgt_fill_loop
|
||||
nop
|
||||
|
||||
/* Load the return address...er...crash 'n burn */
|
||||
|
|
|
@ -53,17 +53,17 @@ union thread_union init_thread_union
|
|||
__attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
|
||||
{ INIT_THREAD_INFO(init_task) };
|
||||
|
||||
#ifdef __LP64__
|
||||
#if PT_NLEVELS == 3
|
||||
/* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout
|
||||
* with the first pmd adjacent to the pgd and below it. gcc doesn't actually
|
||||
* guarantee that global objects will be laid out in memory in the same order
|
||||
* as the order of declaration, so put these in different sections and use
|
||||
* the linker script to order them. */
|
||||
pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pmd"))) = { {0}, };
|
||||
|
||||
pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data.vm0.pmd"), aligned(PAGE_SIZE)));
|
||||
#endif
|
||||
pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pgd"))) = { {0}, };
|
||||
pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pte"))) = { {0}, };
|
||||
|
||||
pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data.vm0.pgd"), aligned(PAGE_SIZE)));
|
||||
pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data.vm0.pte"), aligned(PAGE_SIZE)));
|
||||
|
||||
/*
|
||||
* Initial task structure.
|
||||
|
|
|
@ -65,7 +65,7 @@ flush_tlb_all_local:
|
|||
*/
|
||||
|
||||
/* pcxt_ssm_bug - relied upon translation! PA 2.0 Arch. F-4 and F-5 */
|
||||
rsm PSW_SM_I, %r19 /* save I-bit state */
|
||||
rsm PSW_SM_I, %r19 /* save I-bit state */
|
||||
load32 PA(1f), %r1
|
||||
nop
|
||||
nop
|
||||
|
@ -84,8 +84,7 @@ flush_tlb_all_local:
|
|||
rfi
|
||||
nop
|
||||
|
||||
1: ldil L%PA(cache_info), %r1
|
||||
ldo R%PA(cache_info)(%r1), %r1
|
||||
1: load32 PA(cache_info), %r1
|
||||
|
||||
/* Flush Instruction Tlb */
|
||||
|
||||
|
@ -212,8 +211,7 @@ flush_instruction_cache_local:
|
|||
.entry
|
||||
|
||||
mtsp %r0, %sr1
|
||||
ldil L%cache_info, %r1
|
||||
ldo R%cache_info(%r1), %r1
|
||||
load32 cache_info, %r1
|
||||
|
||||
/* Flush Instruction Cache */
|
||||
|
||||
|
@ -254,8 +252,7 @@ flush_data_cache_local:
|
|||
.entry
|
||||
|
||||
mtsp %r0, %sr1
|
||||
ldil L%cache_info, %r1
|
||||
ldo R%cache_info(%r1), %r1
|
||||
load32 cache_info, %r1
|
||||
|
||||
/* Flush Data Cache */
|
||||
|
||||
|
@ -303,7 +300,8 @@ copy_user_page_asm:
|
|||
*/
|
||||
|
||||
ldd 0(%r25), %r19
|
||||
ldi 32, %r1 /* PAGE_SIZE/128 == 32 */
|
||||
ldi ASM_PAGE_SIZE_DIV128, %r1
|
||||
|
||||
ldw 64(%r25), %r0 /* prefetch 1 cacheline ahead */
|
||||
ldw 128(%r25), %r0 /* prefetch 2 */
|
||||
|
||||
|
@ -368,7 +366,7 @@ copy_user_page_asm:
|
|||
* use ldd/std on a 32 bit kernel.
|
||||
*/
|
||||
ldw 0(%r25), %r19
|
||||
ldi 64, %r1 /* PAGE_SIZE/64 == 64 */
|
||||
ldi ASM_PAGE_SIZE_DIV64, %r1
|
||||
|
||||
1:
|
||||
ldw 4(%r25), %r20
|
||||
|
@ -461,6 +459,7 @@ copy_user_page_asm:
|
|||
sub %r25, %r1, %r23 /* move physical addr into non shadowed reg */
|
||||
|
||||
ldil L%(TMPALIAS_MAP_START), %r28
|
||||
/* FIXME for different page sizes != 4k */
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u %r26,56,32, %r26 /* convert phys addr to tlb insert format */
|
||||
extrd,u %r23,56,32, %r23 /* convert phys addr to tlb insert format */
|
||||
|
@ -551,6 +550,7 @@ __clear_user_page_asm:
|
|||
#ifdef CONFIG_64BIT
|
||||
#if (TMPALIAS_MAP_START >= 0x80000000)
|
||||
depdi 0, 31,32, %r28 /* clear any sign extension */
|
||||
/* FIXME: page size dependend */
|
||||
#endif
|
||||
extrd,u %r26, 56,32, %r26 /* convert phys addr to tlb insert format */
|
||||
depd %r25, 63,22, %r28 /* Form aliased virtual address 'to' */
|
||||
|
@ -566,10 +566,10 @@ __clear_user_page_asm:
|
|||
pdtlb 0(%r28)
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
ldi 32, %r1 /* PAGE_SIZE/128 == 32 */
|
||||
ldi ASM_PAGE_SIZE_DIV128, %r1
|
||||
|
||||
/* PREFETCH (Write) has not (yet) been proven to help here */
|
||||
/* #define PREFETCHW_OP ldd 256(%0), %r0 */
|
||||
/* #define PREFETCHW_OP ldd 256(%0), %r0 */
|
||||
|
||||
1: std %r0, 0(%r28)
|
||||
std %r0, 8(%r28)
|
||||
|
@ -591,8 +591,7 @@ __clear_user_page_asm:
|
|||
ldo 128(%r28), %r28
|
||||
|
||||
#else /* ! CONFIG_64BIT */
|
||||
|
||||
ldi 64, %r1 /* PAGE_SIZE/64 == 64 */
|
||||
ldi ASM_PAGE_SIZE_DIV64, %r1
|
||||
|
||||
1:
|
||||
stw %r0, 0(%r28)
|
||||
|
|
|
@ -231,6 +231,14 @@ asmlinkage long parisc_fadvise64_64(int fd,
|
|||
(loff_t)high_len << 32 | low_len, advice);
|
||||
}
|
||||
|
||||
asmlinkage long parisc_sync_file_range(int fd,
|
||||
u32 hi_off, u32 lo_off, u32 hi_nbytes, u32 lo_nbytes,
|
||||
unsigned int flags)
|
||||
{
|
||||
return sys_sync_file_range(fd, (loff_t)hi_off << 32 | lo_off,
|
||||
(loff_t)hi_nbytes << 32 | lo_nbytes, flags);
|
||||
}
|
||||
|
||||
asmlinkage unsigned long sys_alloc_hugepages(int key, unsigned long addr, unsigned long len, int prot, int flag)
|
||||
{
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
* pointers.
|
||||
*/
|
||||
|
||||
.align 4096
|
||||
.align ASM_PAGE_SIZE
|
||||
linux_gateway_page:
|
||||
|
||||
/* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */
|
||||
|
@ -632,7 +632,7 @@ cas_action:
|
|||
end_compare_and_swap:
|
||||
|
||||
/* Make sure nothing else is placed on this page */
|
||||
.align 4096
|
||||
.align ASM_PAGE_SIZE
|
||||
.export end_linux_gateway_page
|
||||
end_linux_gateway_page:
|
||||
|
||||
|
@ -652,7 +652,7 @@ end_linux_gateway_page:
|
|||
|
||||
.section .rodata,"a"
|
||||
|
||||
.align 4096
|
||||
.align ASM_PAGE_SIZE
|
||||
/* Light-weight-syscall table */
|
||||
/* Start of lws table. */
|
||||
.export lws_table
|
||||
|
@ -662,14 +662,14 @@ lws_table:
|
|||
LWS_ENTRY(compare_and_swap64) /* 1 - ELF64 Atomic compare and swap */
|
||||
/* End of lws table */
|
||||
|
||||
.align 4096
|
||||
.align ASM_PAGE_SIZE
|
||||
.export sys_call_table
|
||||
.Lsys_call_table:
|
||||
sys_call_table:
|
||||
#include "syscall_table.S"
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
.align 4096
|
||||
.align ASM_PAGE_SIZE
|
||||
.export sys_call_table64
|
||||
.Lsys_call_table64:
|
||||
sys_call_table64:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
* Copyright (C) 2001 Helge Deller <deller at parisc-linux.org>
|
||||
* Copyright (C) 2000-2001 Thomas Bogendoerfer <tsbogend at parisc-linux.org>
|
||||
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
|
||||
*
|
||||
* Copyright (C) 2005-2006 Kyle McMartin <kyle at parisc-linux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -393,5 +393,11 @@
|
|||
ENTRY_SAME(readlinkat) /* 285 */
|
||||
ENTRY_SAME(fchmodat)
|
||||
ENTRY_SAME(faccessat)
|
||||
ENTRY_SAME(unshare)
|
||||
ENTRY_COMP(set_robust_list)
|
||||
ENTRY_COMP(get_robust_list) /* 290 */
|
||||
ENTRY_SAME(splice)
|
||||
ENTRY_OURS(sync_file_range)
|
||||
ENTRY_SAME(tee)
|
||||
/* Nothing yet */
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* Copyright (C) 2000 Michael Ang <mang with subcarrier.org>
|
||||
* Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org>
|
||||
* Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org>
|
||||
* Copyright (C) 2006 Helge Deller <deller@gmx.de>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
|
@ -27,6 +28,7 @@
|
|||
/* needed for the processor specific cache alignment size */
|
||||
#include <asm/cache.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
/* ld script to make hppa Linux kernel */
|
||||
#ifndef CONFIG_64BIT
|
||||
|
@ -68,7 +70,7 @@ SECTIONS
|
|||
RODATA
|
||||
|
||||
/* writeable */
|
||||
. = ALIGN(4096); /* Make sure this is page aligned so
|
||||
. = ALIGN(ASM_PAGE_SIZE); /* Make sure this is page aligned so
|
||||
that we can properly leave these
|
||||
as writable */
|
||||
data_start = .;
|
||||
|
@ -81,23 +83,17 @@ SECTIONS
|
|||
__start___unwind = .; /* unwind info */
|
||||
.PARISC.unwind : { *(.PARISC.unwind) }
|
||||
__stop___unwind = .;
|
||||
|
||||
|
||||
/* rarely changed data like cpu maps */
|
||||
. = ALIGN(16);
|
||||
.data.read_mostly : { *(.data.read_mostly) }
|
||||
|
||||
. = ALIGN(L1_CACHE_BYTES);
|
||||
.data : { /* Data */
|
||||
*(.data)
|
||||
*(.data.vm0.pmd)
|
||||
*(.data.vm0.pgd)
|
||||
*(.data.vm0.pte)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
|
||||
. = ALIGN(4096);
|
||||
/* nosave data is really only used for software suspend...it's here
|
||||
* just in case we ever implement it */
|
||||
__nosave_begin = .;
|
||||
.data_nosave : { *(.data.nosave) }
|
||||
. = ALIGN(4096);
|
||||
__nosave_end = .;
|
||||
|
||||
. = ALIGN(L1_CACHE_BYTES);
|
||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
||||
|
||||
|
@ -105,12 +101,29 @@ SECTIONS
|
|||
. = ALIGN(16);
|
||||
.data.lock_aligned : { *(.data.lock_aligned) }
|
||||
|
||||
/* rarely changed data like cpu maps */
|
||||
. = ALIGN(16);
|
||||
.data.read_mostly : { *(.data.read_mostly) }
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
/* nosave data is really only used for software suspend...it's here
|
||||
* just in case we ever implement it */
|
||||
__nosave_begin = .;
|
||||
.data_nosave : { *(.data.nosave) }
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__nosave_end = .;
|
||||
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
__bss_start = .; /* BSS */
|
||||
/* page table entries need to be PAGE_SIZE aligned */
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
.data.vmpages : {
|
||||
*(.data.vm0.pmd)
|
||||
*(.data.vm0.pgd)
|
||||
*(.data.vm0.pte)
|
||||
}
|
||||
.bss : { *(.bss) *(COMMON) }
|
||||
__bss_stop = .;
|
||||
|
||||
|
||||
/* assembler code expects init_task to be 16k aligned */
|
||||
. = ALIGN(16384); /* init_task */
|
||||
.data.init_task : { *(.data.init_task) }
|
||||
|
||||
|
@ -126,6 +139,7 @@ SECTIONS
|
|||
.dlt : { *(.dlt) }
|
||||
#endif
|
||||
|
||||
/* reserve space for interrupt stack by aligning __init* to 16k */
|
||||
. = ALIGN(16384);
|
||||
__init_begin = .;
|
||||
.init.text : {
|
||||
|
@ -166,7 +180,7 @@ SECTIONS
|
|||
from .altinstructions and .eh_frame */
|
||||
.exit.text : { *(.exit.text) }
|
||||
.exit.data : { *(.exit.data) }
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__initramfs_start = .;
|
||||
.init.ramfs : { *(.init.ramfs) }
|
||||
__initramfs_end = .;
|
||||
|
@ -174,14 +188,10 @@ SECTIONS
|
|||
__per_cpu_start = .;
|
||||
.data.percpu : { *(.data.percpu) }
|
||||
__per_cpu_end = .;
|
||||
. = ALIGN(4096);
|
||||
. = ALIGN(ASM_PAGE_SIZE);
|
||||
__init_end = .;
|
||||
/* freed after init ends here */
|
||||
|
||||
__bss_start = .; /* BSS */
|
||||
.bss : { *(.bss) *(COMMON) }
|
||||
__bss_stop = .;
|
||||
|
||||
_end = . ;
|
||||
|
||||
/* Sections to be discarded */
|
||||
|
|
|
@ -186,7 +186,7 @@ good_area:
|
|||
break;
|
||||
case VM_FAULT_SIGBUS:
|
||||
/*
|
||||
* We hit a hared mapping outside of the file, or some
|
||||
* We hit a shared mapping outside of the file, or some
|
||||
* other thing happened to us that made us unable to
|
||||
* handle the page fault gracefully.
|
||||
*/
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* changed by Philipp Rumpf
|
||||
* Copyright 1999 Philipp Rumpf (prumpf@tux.org)
|
||||
* Copyright 2004 Randolph Chung (tausq@debian.org)
|
||||
* Copyright 2006 Helge Deller (deller@gmx.de)
|
||||
*
|
||||
*/
|
||||
|
||||
|
@ -371,8 +372,8 @@ static void __init setup_bootmem(void)
|
|||
|
||||
void free_initmem(void)
|
||||
{
|
||||
unsigned long addr;
|
||||
|
||||
unsigned long addr, init_begin, init_end;
|
||||
|
||||
printk(KERN_INFO "Freeing unused kernel memory: ");
|
||||
|
||||
#ifdef CONFIG_DEBUG_KERNEL
|
||||
|
@ -395,8 +396,11 @@ void free_initmem(void)
|
|||
local_irq_enable();
|
||||
#endif
|
||||
|
||||
addr = (unsigned long)(&__init_begin);
|
||||
for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
|
||||
/* align __init_begin and __init_end to page size,
|
||||
ignoring linker script where we might have tried to save RAM */
|
||||
init_begin = PAGE_ALIGN((unsigned long)(&__init_begin));
|
||||
init_end = PAGE_ALIGN((unsigned long)(&__init_end));
|
||||
for (addr = init_begin; addr < init_end; addr += PAGE_SIZE) {
|
||||
ClearPageReserved(virt_to_page(addr));
|
||||
init_page_count(virt_to_page(addr));
|
||||
free_page(addr);
|
||||
|
@ -407,7 +411,7 @@ void free_initmem(void)
|
|||
/* set up a new led state on systems shipped LED State panel */
|
||||
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE);
|
||||
|
||||
printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10);
|
||||
printk("%luk freed\n", (init_end - init_begin) >> 10);
|
||||
}
|
||||
|
||||
|
||||
|
@ -639,11 +643,13 @@ static void __init map_pages(unsigned long start_vaddr, unsigned long start_padd
|
|||
* Map the fault vector writable so we can
|
||||
* write the HPMC checksum.
|
||||
*/
|
||||
#if defined(CONFIG_PARISC_PAGE_SIZE_4KB)
|
||||
if (address >= ro_start && address < ro_end
|
||||
&& address != fv_addr
|
||||
&& address != gw_addr)
|
||||
pte = __mk_pte(address, PAGE_KERNEL_RO);
|
||||
else
|
||||
#endif
|
||||
pte = __mk_pte(address, pgprot);
|
||||
|
||||
if (address >= end_paddr)
|
||||
|
@ -874,8 +880,7 @@ unsigned long alloc_sid(void)
|
|||
flush_tlb_all(); /* flush_tlb_all() calls recycle_sids() */
|
||||
spin_lock(&sid_lock);
|
||||
}
|
||||
if (free_space_ids == 0)
|
||||
BUG();
|
||||
BUG_ON(free_space_ids == 0);
|
||||
}
|
||||
|
||||
free_space_ids--;
|
||||
|
@ -899,8 +904,7 @@ void free_sid(unsigned long spaceid)
|
|||
|
||||
spin_lock(&sid_lock);
|
||||
|
||||
if (*dirty_space_offset & (1L << index))
|
||||
BUG(); /* attempt to free space id twice */
|
||||
BUG_ON(*dirty_space_offset & (1L << index)); /* attempt to free space id twice */
|
||||
|
||||
*dirty_space_offset |= (1L << index);
|
||||
dirty_space_ids++;
|
||||
|
@ -975,7 +979,7 @@ static void recycle_sids(void)
|
|||
|
||||
static unsigned long recycle_ndirty;
|
||||
static unsigned long recycle_dirty_array[SID_ARRAY_SIZE];
|
||||
static unsigned int recycle_inuse = 0;
|
||||
static unsigned int recycle_inuse;
|
||||
|
||||
void flush_tlb_all(void)
|
||||
{
|
||||
|
@ -984,9 +988,7 @@ void flush_tlb_all(void)
|
|||
do_recycle = 0;
|
||||
spin_lock(&sid_lock);
|
||||
if (dirty_space_ids > RECYCLE_THRESHOLD) {
|
||||
if (recycle_inuse) {
|
||||
BUG(); /* FIXME: Use a semaphore/wait queue here */
|
||||
}
|
||||
BUG_ON(recycle_inuse); /* FIXME: Use a semaphore/wait queue here */
|
||||
get_dirty_sids(&recycle_ndirty,recycle_dirty_array);
|
||||
recycle_inuse++;
|
||||
do_recycle++;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* arch/parisc/mm/ioremap.c
|
||||
*
|
||||
* (C) Copyright 1995 1996 Linus Torvalds
|
||||
* (C) Copyright 2001 Helge Deller <deller@gmx.de>
|
||||
* (C) Copyright 2001-2006 Helge Deller <deller@gmx.de>
|
||||
* (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
|
||||
*/
|
||||
|
||||
|
@ -138,6 +138,7 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
|
|||
if ((phys_addr >= 0x00080000 && end < 0x000fffff) ||
|
||||
(phys_addr >= 0x00500000 && end < 0x03bfffff)) {
|
||||
phys_addr |= F_EXTEND(0xfc000000);
|
||||
flags |= _PAGE_NO_CACHE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 10 17:33:08 2006
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Wed Apr 19 13:24:37 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -9,6 +9,7 @@ CONFIG_PPC_MERGE=y
|
|||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
@ -29,6 +30,7 @@ CONFIG_POWER4=y
|
|||
CONFIG_PPC_FPU=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
|
||||
|
@ -53,6 +55,7 @@ CONFIG_SYSCTL=y
|
|||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
|
@ -67,10 +70,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -82,7 +81,6 @@ CONFIG_BASE_SMALL=0
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||
CONFIG_KMOD=y
|
||||
|
@ -91,6 +89,7 @@ CONFIG_STOP_MACHINE=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -185,7 +184,6 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -227,6 +225,7 @@ CONFIG_SYN_COOKIES=y
|
|||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
|
@ -238,6 +237,8 @@ CONFIG_TCP_CONG_BIC=y
|
|||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -261,6 +262,7 @@ CONFIG_IP_NF_IRC=m
|
|||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
|
||||
#
|
||||
|
@ -513,6 +515,7 @@ CONFIG_MD_RAID0=y
|
|||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
||||
CONFIG_MD_RAID6=m
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
|
@ -761,7 +764,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_RTC is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -772,6 +774,7 @@ CONFIG_GEN_RTC=y
|
|||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
CONFIG_AGP=m
|
||||
# CONFIG_AGP_VIA is not set
|
||||
CONFIG_AGP_UNINORTH=m
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
|
@ -813,7 +816,6 @@ CONFIG_I2C_POWERMAC=y
|
|||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
# CONFIG_I2C_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
# CONFIG_I2C_SIS96X is not set
|
||||
|
@ -832,9 +834,7 @@ CONFIG_I2C_POWERMAC=y
|
|||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -861,10 +861,6 @@ CONFIG_I2C_POWERMAC=y
|
|||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -874,6 +870,7 @@ CONFIG_I2C_POWERMAC=y
|
|||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
|
@ -883,6 +880,7 @@ CONFIG_FB_CFB_FILLRECT=y
|
|||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_MACMODES=y
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -901,7 +899,6 @@ CONFIG_FB_NVIDIA=y
|
|||
CONFIG_FB_NVIDIA_I2C=y
|
||||
# CONFIG_FB_RIVA is not set
|
||||
# CONFIG_FB_MATROX is not set
|
||||
# CONFIG_FB_RADEON_OLD is not set
|
||||
CONFIG_FB_RADEON=y
|
||||
CONFIG_FB_RADEON_I2C=y
|
||||
# CONFIG_FB_RADEON_DEBUG is not set
|
||||
|
@ -958,9 +955,11 @@ CONFIG_SND_SEQUENCER=m
|
|||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
||||
|
@ -977,6 +976,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
# PCI devices
|
||||
#
|
||||
# CONFIG_SND_AD1889 is not set
|
||||
# CONFIG_SND_ALS300 is not set
|
||||
# CONFIG_SND_ALS4000 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP is not set
|
||||
|
@ -1009,6 +1009,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_PCXHR is not set
|
||||
# CONFIG_SND_RIPTIDE is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
|
@ -1041,6 +1042,7 @@ CONFIG_SND_USB_AUDIO=m
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -1068,7 +1070,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||
#
|
||||
# USB Device Class drivers
|
||||
#
|
||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_PRINTER=y
|
||||
|
||||
|
@ -1125,15 +1126,6 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_MDC800 is not set
|
||||
# CONFIG_USB_MICROTEK is not set
|
||||
|
||||
#
|
||||
# USB Multimedia devices
|
||||
#
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Video4Linux support is needed for USB Multimedia device support
|
||||
#
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
#
|
||||
|
@ -1194,6 +1186,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
|||
CONFIG_USB_SERIAL_KLSI=m
|
||||
CONFIG_USB_SERIAL_KOBIL_SCT=m
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
# CONFIG_USB_SERIAL_NAVMAN is not set
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
CONFIG_USB_SERIAL_SAFE=m
|
||||
|
@ -1236,18 +1229,24 @@ CONFIG_USB_EZUSB=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
# Real Time Clock
|
||||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -1319,7 +1318,6 @@ CONFIG_TMPFS=y
|
|||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-rc6
|
||||
# Wed Mar 15 16:19:52 2006
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Wed Apr 19 11:46:44 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -9,6 +9,7 @@ CONFIG_PPC_MERGE=y
|
|||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
@ -30,6 +31,7 @@ CONFIG_POWER4=y
|
|||
CONFIG_PPC_FPU=y
|
||||
# CONFIG_ALTIVEC is not set
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=32
|
||||
|
||||
|
@ -55,6 +57,7 @@ CONFIG_AUDITSYSCALL=y
|
|||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
|
@ -69,10 +72,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -84,7 +83,6 @@ CONFIG_BASE_SMALL=0
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||
CONFIG_KMOD=y
|
||||
|
@ -93,6 +91,7 @@ CONFIG_STOP_MACHINE=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -165,7 +164,6 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -207,6 +205,7 @@ CONFIG_SYN_COOKIES=y
|
|||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
|
@ -218,6 +217,8 @@ CONFIG_TCP_CONG_BIC=y
|
|||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -236,11 +237,14 @@ CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
|
|||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
||||
# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
|
||||
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
|
||||
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||
CONFIG_NETFILTER_XT_MATCH_SCTP=m
|
||||
|
@ -262,20 +266,19 @@ CONFIG_IP_NF_IRC=m
|
|||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
||||
CONFIG_IP_NF_MATCH_TOS=m
|
||||
CONFIG_IP_NF_MATCH_RECENT=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_DSCP=m
|
||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
||||
# CONFIG_IP_NF_MATCH_AH is not set
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_POLICY=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
|
@ -479,6 +482,7 @@ CONFIG_MD_RAID0=y
|
|||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
||||
CONFIG_MD_RAID6=m
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
|
@ -702,7 +706,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_RTC is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -750,10 +753,6 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -779,6 +778,7 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
|
@ -795,6 +795,11 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
@ -804,6 +809,11 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||
#
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -878,7 +888,6 @@ CONFIG_TMPFS=y
|
|||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16-rc2
|
||||
# Fri Feb 10 17:33:32 2006
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Wed Apr 19 11:48:00 2006
|
||||
#
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_64BIT=y
|
||||
|
@ -9,6 +9,7 @@ CONFIG_PPC_MERGE=y
|
|||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
@ -30,6 +31,7 @@ CONFIG_POWER4=y
|
|||
CONFIG_PPC_FPU=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=128
|
||||
|
||||
|
@ -55,6 +57,7 @@ CONFIG_AUDITSYSCALL=y
|
|||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
|
@ -69,10 +72,6 @@ CONFIG_BASE_FULL=y
|
|||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -84,7 +83,6 @@ CONFIG_BASE_SMALL=0
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
||||
CONFIG_KMOD=y
|
||||
|
@ -93,6 +91,7 @@ CONFIG_STOP_MACHINE=y
|
|||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -188,7 +187,6 @@ CONFIG_PPC_I8259=y
|
|||
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -235,6 +233,7 @@ CONFIG_SYN_COOKIES=y
|
|||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_TUNNEL=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
|
@ -246,6 +245,8 @@ CONFIG_TCP_CONG_BIC=y
|
|||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
|
@ -272,6 +273,7 @@ CONFIG_IP_NF_IRC=m
|
|||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
# CONFIG_IP_NF_H323 is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
|
||||
#
|
||||
|
@ -519,6 +521,7 @@ CONFIG_MD_RAID0=y
|
|||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID5=y
|
||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
||||
CONFIG_MD_RAID6=m
|
||||
CONFIG_MD_MULTIPATH=m
|
||||
CONFIG_MD_FAULTY=m
|
||||
|
@ -750,6 +753,7 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_PCI=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
@ -767,7 +771,9 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_PRINTER is not set
|
||||
# CONFIG_PPDEV is not set
|
||||
# CONFIG_TIPAR is not set
|
||||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_HVC_CONSOLE=y
|
||||
# CONFIG_HVC_RTAS is not set
|
||||
CONFIG_HVCS=m
|
||||
|
||||
#
|
||||
|
@ -779,7 +785,6 @@ CONFIG_HVCS=m
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_RTC is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_DTLK is not set
|
||||
|
@ -830,7 +835,6 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
# CONFIG_I2C_SIS5595 is not set
|
||||
# CONFIG_I2C_SIS630 is not set
|
||||
# CONFIG_I2C_SIS96X is not set
|
||||
|
@ -849,9 +853,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -878,10 +880,6 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -891,6 +889,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
|
@ -900,6 +899,7 @@ CONFIG_FB_CFB_FILLRECT=y
|
|||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_MACMODES=y
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -919,7 +919,6 @@ CONFIG_FB_MATROX_MYSTIQUE=y
|
|||
CONFIG_FB_MATROX_G=y
|
||||
# CONFIG_FB_MATROX_I2C is not set
|
||||
CONFIG_FB_MATROX_MULTIHEAD=y
|
||||
# CONFIG_FB_RADEON_OLD is not set
|
||||
CONFIG_FB_RADEON=y
|
||||
CONFIG_FB_RADEON_I2C=y
|
||||
# CONFIG_FB_RADEON_DEBUG is not set
|
||||
|
@ -968,6 +967,7 @@ CONFIG_LCD_DEVICE=y
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -1047,15 +1047,6 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_MDC800 is not set
|
||||
# CONFIG_USB_MICROTEK is not set
|
||||
|
||||
#
|
||||
# USB Multimedia devices
|
||||
#
|
||||
# CONFIG_USB_DABUSB is not set
|
||||
|
||||
#
|
||||
# Video4Linux support is needed for USB Multimedia device support
|
||||
#
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
#
|
||||
|
@ -1108,6 +1099,11 @@ CONFIG_USB_MON=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
@ -1121,12 +1117,13 @@ CONFIG_INFINIBAND_IPOIB=m
|
|||
# CONFIG_INFINIBAND_SRP is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||
#
|
||||
|
||||
#
|
||||
# EDAC - error detection and reporting (RAS)
|
||||
# Real Time Clock
|
||||
#
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -1202,7 +1199,6 @@ CONFIG_TMPFS=y
|
|||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -61,6 +61,7 @@ __setup("iommu=", setup_iommu);
|
|||
static unsigned long iommu_range_alloc(struct iommu_table *tbl,
|
||||
unsigned long npages,
|
||||
unsigned long *handle,
|
||||
unsigned long mask,
|
||||
unsigned int align_order)
|
||||
{
|
||||
unsigned long n, end, i, start;
|
||||
|
@ -97,9 +98,21 @@ static unsigned long iommu_range_alloc(struct iommu_table *tbl,
|
|||
*/
|
||||
if (start >= limit)
|
||||
start = largealloc ? tbl->it_largehint : tbl->it_hint;
|
||||
|
||||
|
||||
again:
|
||||
|
||||
if (limit + tbl->it_offset > mask) {
|
||||
limit = mask - tbl->it_offset + 1;
|
||||
/* If we're constrained on address range, first try
|
||||
* at the masked hint to avoid O(n) search complexity,
|
||||
* but on second pass, start at 0.
|
||||
*/
|
||||
if ((start & mask) >= limit || pass > 0)
|
||||
start = 0;
|
||||
else
|
||||
start &= mask;
|
||||
}
|
||||
|
||||
n = find_next_zero_bit(tbl->it_map, limit, start);
|
||||
|
||||
/* Align allocation */
|
||||
|
@ -150,14 +163,14 @@ static unsigned long iommu_range_alloc(struct iommu_table *tbl,
|
|||
|
||||
static dma_addr_t iommu_alloc(struct iommu_table *tbl, void *page,
|
||||
unsigned int npages, enum dma_data_direction direction,
|
||||
unsigned int align_order)
|
||||
unsigned long mask, unsigned int align_order)
|
||||
{
|
||||
unsigned long entry, flags;
|
||||
dma_addr_t ret = DMA_ERROR_CODE;
|
||||
|
||||
|
||||
spin_lock_irqsave(&(tbl->it_lock), flags);
|
||||
|
||||
entry = iommu_range_alloc(tbl, npages, NULL, align_order);
|
||||
entry = iommu_range_alloc(tbl, npages, NULL, mask, align_order);
|
||||
|
||||
if (unlikely(entry == DMA_ERROR_CODE)) {
|
||||
spin_unlock_irqrestore(&(tbl->it_lock), flags);
|
||||
|
@ -236,7 +249,7 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr,
|
|||
|
||||
int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
|
||||
struct scatterlist *sglist, int nelems,
|
||||
enum dma_data_direction direction)
|
||||
unsigned long mask, enum dma_data_direction direction)
|
||||
{
|
||||
dma_addr_t dma_next = 0, dma_addr;
|
||||
unsigned long flags;
|
||||
|
@ -274,7 +287,7 @@ int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
|
|||
vaddr = (unsigned long)page_address(s->page) + s->offset;
|
||||
npages = PAGE_ALIGN(vaddr + slen) - (vaddr & PAGE_MASK);
|
||||
npages >>= PAGE_SHIFT;
|
||||
entry = iommu_range_alloc(tbl, npages, &handle, 0);
|
||||
entry = iommu_range_alloc(tbl, npages, &handle, mask >> PAGE_SHIFT, 0);
|
||||
|
||||
DBG(" - vaddr: %lx, size: %lx\n", vaddr, slen);
|
||||
|
||||
|
@ -479,7 +492,8 @@ void iommu_free_table(struct device_node *dn)
|
|||
* byte within the page as vaddr.
|
||||
*/
|
||||
dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
size_t size, unsigned long mask,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
dma_addr_t dma_handle = DMA_ERROR_CODE;
|
||||
unsigned long uaddr;
|
||||
|
@ -492,7 +506,8 @@ dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr,
|
|||
npages >>= PAGE_SHIFT;
|
||||
|
||||
if (tbl) {
|
||||
dma_handle = iommu_alloc(tbl, vaddr, npages, direction, 0);
|
||||
dma_handle = iommu_alloc(tbl, vaddr, npages, direction,
|
||||
mask >> PAGE_SHIFT, 0);
|
||||
if (dma_handle == DMA_ERROR_CODE) {
|
||||
if (printk_ratelimit()) {
|
||||
printk(KERN_INFO "iommu_alloc failed, "
|
||||
|
@ -521,7 +536,7 @@ void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle,
|
|||
* to the dma address (mapping) of the first page.
|
||||
*/
|
||||
void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
dma_addr_t *dma_handle, unsigned long mask, gfp_t flag)
|
||||
{
|
||||
void *ret = NULL;
|
||||
dma_addr_t mapping;
|
||||
|
@ -551,7 +566,8 @@ void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size,
|
|||
memset(ret, 0, size);
|
||||
|
||||
/* Set up tces to cover the allocated range */
|
||||
mapping = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL, order);
|
||||
mapping = iommu_alloc(tbl, ret, npages, DMA_BIDIRECTIONAL,
|
||||
mask >> PAGE_SHIFT, order);
|
||||
if (mapping == DMA_ERROR_CODE) {
|
||||
free_pages((unsigned long)ret, order);
|
||||
ret = NULL;
|
||||
|
|
|
@ -59,6 +59,25 @@ static inline struct iommu_table *devnode_table(struct device *dev)
|
|||
}
|
||||
|
||||
|
||||
static inline unsigned long device_to_mask(struct device *hwdev)
|
||||
{
|
||||
struct pci_dev *pdev;
|
||||
|
||||
if (!hwdev) {
|
||||
pdev = ppc64_isabridge_dev;
|
||||
if (!pdev) /* This is the best guess we can do */
|
||||
return 0xfffffffful;
|
||||
} else
|
||||
pdev = to_pci_dev(hwdev);
|
||||
|
||||
if (pdev->dma_mask)
|
||||
return pdev->dma_mask;
|
||||
|
||||
/* Assume devices without mask can take 32 bit addresses */
|
||||
return 0xfffffffful;
|
||||
}
|
||||
|
||||
|
||||
/* Allocates a contiguous real buffer and creates mappings over it.
|
||||
* Returns the virtual address of the buffer and sets dma_handle
|
||||
* to the dma address (mapping) of the first page.
|
||||
|
@ -67,7 +86,7 @@ static void *pci_iommu_alloc_coherent(struct device *hwdev, size_t size,
|
|||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
{
|
||||
return iommu_alloc_coherent(devnode_table(hwdev), size, dma_handle,
|
||||
flag);
|
||||
device_to_mask(hwdev), flag);
|
||||
}
|
||||
|
||||
static void pci_iommu_free_coherent(struct device *hwdev, size_t size,
|
||||
|
@ -85,7 +104,8 @@ static void pci_iommu_free_coherent(struct device *hwdev, size_t size,
|
|||
static dma_addr_t pci_iommu_map_single(struct device *hwdev, void *vaddr,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
return iommu_map_single(devnode_table(hwdev), vaddr, size, direction);
|
||||
return iommu_map_single(devnode_table(hwdev), vaddr, size,
|
||||
device_to_mask(hwdev), direction);
|
||||
}
|
||||
|
||||
|
||||
|
@ -100,7 +120,7 @@ static int pci_iommu_map_sg(struct device *pdev, struct scatterlist *sglist,
|
|||
int nelems, enum dma_data_direction direction)
|
||||
{
|
||||
return iommu_map_sg(pdev, devnode_table(pdev), sglist,
|
||||
nelems, direction);
|
||||
nelems, device_to_mask(pdev), direction);
|
||||
}
|
||||
|
||||
static void pci_iommu_unmap_sg(struct device *pdev, struct scatterlist *sglist,
|
||||
|
@ -112,7 +132,19 @@ static void pci_iommu_unmap_sg(struct device *pdev, struct scatterlist *sglist,
|
|||
/* We support DMA to/from any memory page via the iommu */
|
||||
static int pci_iommu_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
return 1;
|
||||
struct iommu_table *tbl = devnode_table(dev);
|
||||
|
||||
if (!tbl || tbl->it_offset > mask) {
|
||||
printk(KERN_INFO "Warning: IOMMU table offset too big for device mask\n");
|
||||
if (tbl)
|
||||
printk(KERN_INFO "mask: 0x%08lx, table offset: 0x%08lx\n",
|
||||
mask, tbl->it_offset);
|
||||
else
|
||||
printk(KERN_INFO "mask: 0x%08lx, table unavailable\n",
|
||||
mask);
|
||||
return 0;
|
||||
} else
|
||||
return 1;
|
||||
}
|
||||
|
||||
void pci_iommu_init(void)
|
||||
|
|
|
@ -81,6 +81,7 @@ EXPORT_SYMBOL(strcat);
|
|||
EXPORT_SYMBOL(strlen);
|
||||
EXPORT_SYMBOL(strcmp);
|
||||
EXPORT_SYMBOL(strcasecmp);
|
||||
EXPORT_SYMBOL(strncasecmp);
|
||||
|
||||
EXPORT_SYMBOL(csum_partial);
|
||||
EXPORT_SYMBOL(csum_partial_copy_generic);
|
||||
|
|
|
@ -62,7 +62,7 @@ static int __initdata dt_root_addr_cells;
|
|||
static int __initdata dt_root_size_cells;
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
static int __initdata iommu_is_off;
|
||||
int __initdata iommu_is_off;
|
||||
int __initdata iommu_force_on;
|
||||
unsigned long tce_alloc_start, tce_alloc_end;
|
||||
#endif
|
||||
|
|
|
@ -324,3 +324,8 @@ COMPAT_SYS(ppoll)
|
|||
SYSCALL(unshare)
|
||||
SYSCALL(splice)
|
||||
SYSCALL(tee)
|
||||
|
||||
/*
|
||||
* please add new calls to arch/powerpc/platforms/cell/spu_callbacks.c
|
||||
* as well when appropriate.
|
||||
*/
|
||||
|
|
|
@ -202,7 +202,7 @@ static dma_addr_t vio_map_single(struct device *dev, void *vaddr,
|
|||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
return iommu_map_single(to_vio_dev(dev)->iommu_table, vaddr, size,
|
||||
direction);
|
||||
~0ul, direction);
|
||||
}
|
||||
|
||||
static void vio_unmap_single(struct device *dev, dma_addr_t dma_handle,
|
||||
|
@ -216,7 +216,7 @@ static int vio_map_sg(struct device *dev, struct scatterlist *sglist,
|
|||
int nelems, enum dma_data_direction direction)
|
||||
{
|
||||
return iommu_map_sg(dev, to_vio_dev(dev)->iommu_table, sglist,
|
||||
nelems, direction);
|
||||
nelems, ~0ul, direction);
|
||||
}
|
||||
|
||||
static void vio_unmap_sg(struct device *dev, struct scatterlist *sglist,
|
||||
|
@ -229,7 +229,7 @@ static void *vio_alloc_coherent(struct device *dev, size_t size,
|
|||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
{
|
||||
return iommu_alloc_coherent(to_vio_dev(dev)->iommu_table, size,
|
||||
dma_handle, flag);
|
||||
dma_handle, ~0ul, flag);
|
||||
}
|
||||
|
||||
static void vio_free_coherent(struct device *dev, size_t size,
|
||||
|
|
|
@ -317,17 +317,16 @@ void *spu_syscall_table[] = {
|
|||
[__NR_ppoll] sys_ni_syscall, /* sys_ppoll */
|
||||
[__NR_unshare] sys_unshare,
|
||||
[__NR_splice] sys_splice,
|
||||
[__NR_tee] sys_tee,
|
||||
};
|
||||
|
||||
long spu_sys_callback(struct spu_syscall_block *s)
|
||||
{
|
||||
long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(spu_syscall_table) != __NR_syscalls);
|
||||
|
||||
syscall = spu_syscall_table[s->nr_ret];
|
||||
|
||||
if (s->nr_ret >= __NR_syscalls) {
|
||||
if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
|
||||
pr_debug("%s: invalid syscall #%ld", __FUNCTION__, s->nr_ret);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
|
|
@ -231,6 +231,14 @@ static u8 kw_i2c_wait_interrupt(struct pmac_i2c_host_kw *host)
|
|||
return isr;
|
||||
}
|
||||
|
||||
static void kw_i2c_do_stop(struct pmac_i2c_host_kw *host, int result)
|
||||
{
|
||||
kw_write_reg(reg_control, KW_I2C_CTL_STOP);
|
||||
host->state = state_stop;
|
||||
host->result = result;
|
||||
}
|
||||
|
||||
|
||||
static void kw_i2c_handle_interrupt(struct pmac_i2c_host_kw *host, u8 isr)
|
||||
{
|
||||
u8 ack;
|
||||
|
@ -246,42 +254,36 @@ static void kw_i2c_handle_interrupt(struct pmac_i2c_host_kw *host, u8 isr)
|
|||
}
|
||||
|
||||
if (isr == 0) {
|
||||
printk(KERN_WARNING "low_i2c: Timeout in i2c transfer"
|
||||
" on keywest !\n");
|
||||
if (host->state != state_stop) {
|
||||
DBG_LOW("KW: Timeout !\n");
|
||||
host->result = -EIO;
|
||||
goto stop;
|
||||
}
|
||||
if (host->state == state_stop) {
|
||||
ack = kw_read_reg(reg_status);
|
||||
if (ack & KW_I2C_STAT_BUSY)
|
||||
kw_write_reg(reg_status, 0);
|
||||
host->state = state_idle;
|
||||
kw_write_reg(reg_ier, 0x00);
|
||||
if (!host->polled)
|
||||
complete(&host->complete);
|
||||
kw_i2c_do_stop(host, -EIO);
|
||||
return;
|
||||
}
|
||||
ack = kw_read_reg(reg_status);
|
||||
if (ack & KW_I2C_STAT_BUSY)
|
||||
kw_write_reg(reg_status, 0);
|
||||
host->state = state_idle;
|
||||
kw_write_reg(reg_ier, 0x00);
|
||||
if (!host->polled)
|
||||
complete(&host->complete);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isr & KW_I2C_IRQ_ADDR) {
|
||||
ack = kw_read_reg(reg_status);
|
||||
if (host->state != state_addr) {
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_ADDR);
|
||||
WRONG_STATE("KW_I2C_IRQ_ADDR");
|
||||
host->result = -EIO;
|
||||
goto stop;
|
||||
kw_i2c_do_stop(host, -EIO);
|
||||
}
|
||||
if ((ack & KW_I2C_STAT_LAST_AAK) == 0) {
|
||||
host->result = -ENODEV;
|
||||
DBG_LOW("KW: NAK on address\n");
|
||||
host->result = -ENXIO;
|
||||
host->state = state_stop;
|
||||
return;
|
||||
DBG_LOW("KW: NAK on address\n");
|
||||
} else {
|
||||
if (host->len == 0) {
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_ADDR);
|
||||
goto stop;
|
||||
}
|
||||
if (host->rw) {
|
||||
if (host->len == 0)
|
||||
kw_i2c_do_stop(host, 0);
|
||||
else if (host->rw) {
|
||||
host->state = state_read;
|
||||
if (host->len > 1)
|
||||
kw_write_reg(reg_control,
|
||||
|
@ -308,25 +310,19 @@ static void kw_i2c_handle_interrupt(struct pmac_i2c_host_kw *host, u8 isr)
|
|||
ack = kw_read_reg(reg_status);
|
||||
if ((ack & KW_I2C_STAT_LAST_AAK) == 0) {
|
||||
DBG_LOW("KW: nack on data write\n");
|
||||
host->result = -EIO;
|
||||
goto stop;
|
||||
host->result = -EFBIG;
|
||||
host->state = state_stop;
|
||||
} else if (host->len) {
|
||||
kw_write_reg(reg_data, *(host->data++));
|
||||
host->len--;
|
||||
} else {
|
||||
kw_write_reg(reg_control, KW_I2C_CTL_STOP);
|
||||
host->state = state_stop;
|
||||
host->result = 0;
|
||||
}
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_DATA);
|
||||
} else
|
||||
kw_i2c_do_stop(host, 0);
|
||||
} else {
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_DATA);
|
||||
WRONG_STATE("KW_I2C_IRQ_DATA");
|
||||
if (host->state != state_stop) {
|
||||
host->result = -EIO;
|
||||
goto stop;
|
||||
}
|
||||
if (host->state != state_stop)
|
||||
kw_i2c_do_stop(host, -EIO);
|
||||
}
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_DATA);
|
||||
}
|
||||
|
||||
if (isr & KW_I2C_IRQ_STOP) {
|
||||
|
@ -340,14 +336,10 @@ static void kw_i2c_handle_interrupt(struct pmac_i2c_host_kw *host, u8 isr)
|
|||
complete(&host->complete);
|
||||
}
|
||||
|
||||
/* Below should only happen in manual mode which we don't use ... */
|
||||
if (isr & KW_I2C_IRQ_START)
|
||||
kw_write_reg(reg_isr, KW_I2C_IRQ_START);
|
||||
|
||||
return;
|
||||
stop:
|
||||
kw_write_reg(reg_control, KW_I2C_CTL_STOP);
|
||||
host->state = state_stop;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Interrupt handler */
|
||||
|
@ -544,11 +536,11 @@ static struct pmac_i2c_host_kw *__init kw_i2c_host_init(struct device_node *np)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Make sure IRA is disabled */
|
||||
/* Make sure IRQ is disabled */
|
||||
kw_write_reg(reg_ier, 0);
|
||||
|
||||
/* Request chip interrupt */
|
||||
if (request_irq(host->irq, kw_i2c_irq, SA_SHIRQ, "keywest i2c", host))
|
||||
if (request_irq(host->irq, kw_i2c_irq, 0, "keywest i2c", host))
|
||||
host->irq = NO_IRQ;
|
||||
|
||||
printk(KERN_INFO "KeyWest i2c @0x%08x irq %d %s\n",
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
|
||||
#include "dart.h"
|
||||
|
||||
extern int iommu_is_off;
|
||||
extern int iommu_force_on;
|
||||
|
||||
/* Physical base address and size of the DART table */
|
||||
|
@ -329,10 +330,17 @@ void iommu_init_early_dart(void)
|
|||
|
||||
void __init alloc_dart_table(void)
|
||||
{
|
||||
/* Only reserve DART space if machine has more than 2GB of RAM
|
||||
/* Only reserve DART space if machine has more than 1GB of RAM
|
||||
* or if requested with iommu=on on cmdline.
|
||||
*
|
||||
* 1GB of RAM is picked as limit because some default devices
|
||||
* (i.e. Airport Extreme) have 30 bit address range limits.
|
||||
*/
|
||||
if (lmb_end_of_DRAM() <= 0x80000000ull && !iommu_force_on)
|
||||
|
||||
if (iommu_is_off)
|
||||
return;
|
||||
|
||||
if (!iommu_force_on && lmb_end_of_DRAM() <= 0x40000000ull)
|
||||
return;
|
||||
|
||||
/* 512 pages (2MB) is max DART tablesize. */
|
||||
|
|
|
@ -134,6 +134,7 @@ main(void)
|
|||
DEFINE(TI_TASK, offsetof(struct thread_info, task));
|
||||
DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
|
||||
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
|
||||
DEFINE(TI_LOCAL_FLAGS, offsetof(struct thread_info, flags));
|
||||
DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
|
||||
DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count));
|
||||
|
||||
|
|
|
@ -128,29 +128,26 @@ transfer_to_handler:
|
|||
stw r12,4(r11)
|
||||
#endif
|
||||
b 3f
|
||||
|
||||
2: /* if from kernel, check interrupted DOZE/NAP mode and
|
||||
* check for stack overflow
|
||||
*/
|
||||
lwz r9,THREAD_INFO-THREAD(r12)
|
||||
cmplw r1,r9 /* if r1 <= current->thread_info */
|
||||
ble- stack_ovf /* then the kernel stack overflowed */
|
||||
5:
|
||||
#ifdef CONFIG_6xx
|
||||
mfspr r11,SPRN_HID0
|
||||
mtcr r11
|
||||
BEGIN_FTR_SECTION
|
||||
bt- 8,4f /* Check DOZE */
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_CAN_DOZE)
|
||||
BEGIN_FTR_SECTION
|
||||
bt- 9,4f /* Check NAP */
|
||||
END_FTR_SECTION_IFSET(CPU_FTR_CAN_NAP)
|
||||
tophys(r9,r9) /* check local flags */
|
||||
lwz r12,TI_LOCAL_FLAGS(r9)
|
||||
mtcrf 0x01,r12
|
||||
bt- 31-TLF_NAPPING,4f
|
||||
#endif /* CONFIG_6xx */
|
||||
.globl transfer_to_handler_cont
|
||||
transfer_to_handler_cont:
|
||||
lwz r11,THREAD_INFO-THREAD(r12)
|
||||
cmplw r1,r11 /* if r1 <= current->thread_info */
|
||||
ble- stack_ovf /* then the kernel stack overflowed */
|
||||
3:
|
||||
mflr r9
|
||||
lwz r11,0(r9) /* virtual address of handler */
|
||||
lwz r9,4(r9) /* where to go when done */
|
||||
FIX_SRR1(r10,r12)
|
||||
mtspr SPRN_SRR0,r11
|
||||
mtspr SPRN_SRR1,r10
|
||||
mtlr r9
|
||||
|
@ -158,7 +155,9 @@ transfer_to_handler_cont:
|
|||
RFI /* jump to handler, enable MMU */
|
||||
|
||||
#ifdef CONFIG_6xx
|
||||
4: b power_save_6xx_restore
|
||||
4: rlwinm r12,r12,0,~_TLF_NAPPING
|
||||
stw r12,TI_LOCAL_FLAGS(r9)
|
||||
b power_save_6xx_restore
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -167,10 +166,10 @@ transfer_to_handler_cont:
|
|||
*/
|
||||
stack_ovf:
|
||||
/* sometimes we use a statically-allocated stack, which is OK. */
|
||||
lis r11,_end@h
|
||||
ori r11,r11,_end@l
|
||||
cmplw r1,r11
|
||||
ble 3b /* r1 <= &_end is OK */
|
||||
lis r12,_end@h
|
||||
ori r12,r12,_end@l
|
||||
cmplw r1,r12
|
||||
ble 5b /* r1 <= &_end is OK */
|
||||
SAVE_NVGPRS(r11)
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
lis r1,init_thread_union@ha
|
||||
|
|
|
@ -94,6 +94,7 @@ EXPORT_SYMBOL(strcat);
|
|||
EXPORT_SYMBOL(strlen);
|
||||
EXPORT_SYMBOL(strcmp);
|
||||
EXPORT_SYMBOL(strcasecmp);
|
||||
EXPORT_SYMBOL(strncasecmp);
|
||||
EXPORT_SYMBOL(__div64_32);
|
||||
|
||||
EXPORT_SYMBOL(csum_partial);
|
||||
|
|
|
@ -27,5 +27,5 @@ $(obj)/vsyscall-sysenter.so $(obj)/vsyscall-syscall.so: \
|
|||
$(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
|
||||
$(call if_changed,syscall)
|
||||
|
||||
AFLAGS_vsyscall-sysenter.o = -m32
|
||||
AFLAGS_vsyscall-syscall.o = -m32
|
||||
AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
|
||||
AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
|
||||
|
|
|
@ -112,10 +112,6 @@ static unsigned long alloc_iommu(int size)
|
|||
static void free_iommu(unsigned long offset, int size)
|
||||
{
|
||||
unsigned long flags;
|
||||
if (size == 1) {
|
||||
clear_bit(offset, iommu_gart_bitmap);
|
||||
return;
|
||||
}
|
||||
spin_lock_irqsave(&iommu_bitmap_lock, flags);
|
||||
__clear_bit_string(iommu_gart_bitmap, offset, size);
|
||||
spin_unlock_irqrestore(&iommu_bitmap_lock, flags);
|
||||
|
|
|
@ -188,11 +188,13 @@ void __init setup_node_zones(int nodeid)
|
|||
memory. */
|
||||
memmapsize = sizeof(struct page) * (end_pfn-start_pfn);
|
||||
limit = end_pfn << PAGE_SHIFT;
|
||||
#ifdef CONFIG_FLAT_NODE_MEM_MAP
|
||||
NODE_DATA(nodeid)->node_mem_map =
|
||||
__alloc_bootmem_core(NODE_DATA(nodeid)->bdata,
|
||||
memmapsize, SMP_CACHE_BYTES,
|
||||
round_down(limit - memmapsize, PAGE_SIZE),
|
||||
limit);
|
||||
#endif
|
||||
|
||||
size_zones(zones, holes, start_pfn, end_pfn);
|
||||
free_area_init_node(nodeid, NODE_DATA(nodeid), zones,
|
||||
|
|
|
@ -889,7 +889,6 @@ extern int drm_lock_free(drm_device_t * dev,
|
|||
/* Buffer management support (drm_bufs.h) */
|
||||
extern int drm_addbufs_agp(drm_device_t * dev, drm_buf_desc_t * request);
|
||||
extern int drm_addbufs_pci(drm_device_t * dev, drm_buf_desc_t * request);
|
||||
extern int drm_addbufs_fb(drm_device_t *dev, drm_buf_desc_t *request);
|
||||
extern int drm_addmap(drm_device_t * dev, unsigned int offset,
|
||||
unsigned int size, drm_map_type_t type,
|
||||
drm_map_flags_t flags, drm_local_map_t ** map_ptr);
|
||||
|
|
|
@ -503,8 +503,6 @@ int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start)
|
|||
return agp_bind_memory(handle, start);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(drm_agp_bind_memory);
|
||||
|
||||
/** Calls agp_unbind_memory() */
|
||||
int drm_agp_unbind_memory(DRM_AGP_MEM * handle)
|
||||
{
|
||||
|
|
|
@ -386,7 +386,6 @@ int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_rmmap_locked);
|
||||
|
||||
int drm_rmmap(drm_device_t *dev, drm_local_map_t *map)
|
||||
{
|
||||
|
@ -398,7 +397,6 @@ int drm_rmmap(drm_device_t *dev, drm_local_map_t *map)
|
|||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_rmmap);
|
||||
|
||||
/* The rmmap ioctl appears to be unnecessary. All mappings are torn down on
|
||||
* the last close of the device, and this is necessary for cleanup when things
|
||||
|
@ -1053,7 +1051,7 @@ static int drm_addbufs_sg(drm_device_t * dev, drm_buf_desc_t * request)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
|
||||
static int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
|
||||
{
|
||||
drm_device_dma_t *dma = dev->dma;
|
||||
drm_buf_entry_t *entry;
|
||||
|
@ -1212,7 +1210,6 @@ int drm_addbufs_fb(drm_device_t * dev, drm_buf_desc_t * request)
|
|||
atomic_dec(&dev->buf_alloc);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_addbufs_fb);
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -229,8 +229,6 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
|
|||
return ret;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(drm_get_dev);
|
||||
|
||||
/**
|
||||
* Put a device minor number.
|
||||
*
|
||||
|
|
|
@ -723,7 +723,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
|
|||
|
||||
dev_priv->scratch_ages[header.scratch.reg]++;
|
||||
|
||||
ref_age_base = *(u32 **)cmdbuf->buf;
|
||||
ref_age_base = (u32 *)(unsigned long)*((uint64_t *)cmdbuf->buf);
|
||||
|
||||
cmdbuf->buf += sizeof(u64);
|
||||
cmdbuf->bufsz -= sizeof(u64);
|
||||
|
|
|
@ -390,7 +390,8 @@ scdrv_init(void)
|
|||
format_module_id(devnamep, geo_module(geoid),
|
||||
MODULE_FORMAT_BRIEF);
|
||||
devnamep = devname + strlen(devname);
|
||||
sprintf(devnamep, "#%d", geo_slab(geoid));
|
||||
sprintf(devnamep, "^%d#%d", geo_slot(geoid),
|
||||
geo_slab(geoid));
|
||||
|
||||
/* allocate sysctl device data */
|
||||
scd = kzalloc(sizeof (struct sysctl_data_s),
|
||||
|
|
|
@ -20,9 +20,18 @@ config TCG_TPM
|
|||
Note: For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI
|
||||
and CONFIG_PNPACPI.
|
||||
|
||||
config TCG_TIS
|
||||
tristate "TPM Interface Specification 1.2 Interface"
|
||||
depends on TCG_TPM
|
||||
---help---
|
||||
If you have a TPM security chip that is compliant with the
|
||||
TCG TIS 1.2 TPM specification say Yes and it will be accessible
|
||||
from within Linux. To compile this driver as a module, choose
|
||||
M here; the module will be called tpm_tis.
|
||||
|
||||
config TCG_NSC
|
||||
tristate "National Semiconductor TPM Interface"
|
||||
depends on TCG_TPM
|
||||
depends on TCG_TPM && PNPACPI
|
||||
---help---
|
||||
If you have a TPM security chip from National Semicondutor
|
||||
say Yes and it will be accessible from within Linux. To
|
||||
|
|
|
@ -5,6 +5,7 @@ obj-$(CONFIG_TCG_TPM) += tpm.o
|
|||
ifdef CONFIG_ACPI
|
||||
obj-$(CONFIG_TCG_TPM) += tpm_bios.o
|
||||
endif
|
||||
obj-$(CONFIG_TCG_TIS) += tpm_tis.o
|
||||
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
|
||||
obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
|
||||
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -42,18 +42,30 @@ extern ssize_t tpm_show_pcrs(struct device *, struct device_attribute *attr,
|
|||
char *);
|
||||
extern ssize_t tpm_show_caps(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_show_caps_1_2(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_store_cancel(struct device *, struct device_attribute *attr,
|
||||
const char *, size_t);
|
||||
extern ssize_t tpm_show_enabled(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_show_active(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
|
||||
char *);
|
||||
extern ssize_t tpm_show_temp_deactivated(struct device *,
|
||||
struct device_attribute *attr, char *);
|
||||
|
||||
struct tpm_chip;
|
||||
|
||||
struct tpm_vendor_specific {
|
||||
u8 req_complete_mask;
|
||||
u8 req_complete_val;
|
||||
u8 req_canceled;
|
||||
const u8 req_complete_mask;
|
||||
const u8 req_complete_val;
|
||||
const u8 req_canceled;
|
||||
void __iomem *iobase; /* ioremapped address */
|
||||
unsigned long base; /* TPM base address */
|
||||
|
||||
int irq;
|
||||
|
||||
int region_size;
|
||||
int have_region;
|
||||
|
||||
|
@ -63,6 +75,13 @@ struct tpm_vendor_specific {
|
|||
u8 (*status) (struct tpm_chip *);
|
||||
struct miscdevice miscdev;
|
||||
struct attribute_group *attr_group;
|
||||
struct list_head list;
|
||||
int locality;
|
||||
unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
|
||||
unsigned long duration[3]; /* jiffies */
|
||||
|
||||
wait_queue_head_t read_queue;
|
||||
wait_queue_head_t int_queue;
|
||||
};
|
||||
|
||||
struct tpm_chip {
|
||||
|
@ -81,13 +100,15 @@ struct tpm_chip {
|
|||
struct work_struct work;
|
||||
struct semaphore tpm_mutex; /* tpm is processing */
|
||||
|
||||
struct tpm_vendor_specific *vendor;
|
||||
struct tpm_vendor_specific vendor;
|
||||
|
||||
struct dentry **bios_dir;
|
||||
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
#define to_tpm_chip(n) container_of(n, struct tpm_chip, vendor)
|
||||
|
||||
static inline int tpm_read_index(int base, int index)
|
||||
{
|
||||
outb(index, base);
|
||||
|
@ -100,8 +121,12 @@ static inline void tpm_write_index(int base, int index, int value)
|
|||
outb(value & 0xFF, base+1);
|
||||
}
|
||||
|
||||
extern int tpm_register_hardware(struct device *,
|
||||
struct tpm_vendor_specific *);
|
||||
extern void tpm_get_timeouts(struct tpm_chip *);
|
||||
extern void tpm_gen_interrupt(struct tpm_chip *);
|
||||
extern void tpm_continue_selftest(struct tpm_chip *);
|
||||
extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32);
|
||||
extern struct tpm_chip* tpm_register_hardware(struct device *,
|
||||
const struct tpm_vendor_specific *);
|
||||
extern int tpm_open(struct inode *, struct file *);
|
||||
extern int tpm_release(struct inode *, struct file *);
|
||||
extern ssize_t tpm_write(struct file *, const char __user *, size_t,
|
||||
|
|
|
@ -47,12 +47,12 @@ static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
return -EIO;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
status = ioread8(chip->vendor->iobase + 1);
|
||||
status = ioread8(chip->vendor.iobase + 1);
|
||||
if ((status & ATML_STATUS_DATA_AVAIL) == 0) {
|
||||
dev_err(chip->dev, "error reading header\n");
|
||||
return -EIO;
|
||||
}
|
||||
*buf++ = ioread8(chip->vendor->iobase);
|
||||
*buf++ = ioread8(chip->vendor.iobase);
|
||||
}
|
||||
|
||||
/* size of the data received */
|
||||
|
@ -63,7 +63,7 @@ static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
dev_err(chip->dev,
|
||||
"Recv size(%d) less than available space\n", size);
|
||||
for (; i < size; i++) { /* clear the waiting data anyway */
|
||||
status = ioread8(chip->vendor->iobase + 1);
|
||||
status = ioread8(chip->vendor.iobase + 1);
|
||||
if ((status & ATML_STATUS_DATA_AVAIL) == 0) {
|
||||
dev_err(chip->dev, "error reading data\n");
|
||||
return -EIO;
|
||||
|
@ -74,16 +74,16 @@ static int tpm_atml_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
|
||||
/* read all the data available */
|
||||
for (; i < size; i++) {
|
||||
status = ioread8(chip->vendor->iobase + 1);
|
||||
status = ioread8(chip->vendor.iobase + 1);
|
||||
if ((status & ATML_STATUS_DATA_AVAIL) == 0) {
|
||||
dev_err(chip->dev, "error reading data\n");
|
||||
return -EIO;
|
||||
}
|
||||
*buf++ = ioread8(chip->vendor->iobase);
|
||||
*buf++ = ioread8(chip->vendor.iobase);
|
||||
}
|
||||
|
||||
/* make sure data available is gone */
|
||||
status = ioread8(chip->vendor->iobase + 1);
|
||||
status = ioread8(chip->vendor.iobase + 1);
|
||||
|
||||
if (status & ATML_STATUS_DATA_AVAIL) {
|
||||
dev_err(chip->dev, "data available is stuck\n");
|
||||
|
@ -100,7 +100,7 @@ static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
dev_dbg(chip->dev, "tpm_atml_send:\n");
|
||||
for (i = 0; i < count; i++) {
|
||||
dev_dbg(chip->dev, "%d 0x%x(%d)\n", i, buf[i], buf[i]);
|
||||
iowrite8(buf[i], chip->vendor->iobase);
|
||||
iowrite8(buf[i], chip->vendor.iobase);
|
||||
}
|
||||
|
||||
return count;
|
||||
|
@ -108,12 +108,12 @@ static int tpm_atml_send(struct tpm_chip *chip, u8 *buf, size_t count)
|
|||
|
||||
static void tpm_atml_cancel(struct tpm_chip *chip)
|
||||
{
|
||||
iowrite8(ATML_STATUS_ABORT, chip->vendor->iobase + 1);
|
||||
iowrite8(ATML_STATUS_ABORT, chip->vendor.iobase + 1);
|
||||
}
|
||||
|
||||
static u8 tpm_atml_status(struct tpm_chip *chip)
|
||||
{
|
||||
return ioread8(chip->vendor->iobase + 1);
|
||||
return ioread8(chip->vendor.iobase + 1);
|
||||
}
|
||||
|
||||
static struct file_operations atmel_ops = {
|
||||
|
@ -140,7 +140,7 @@ static struct attribute* atmel_attrs[] = {
|
|||
|
||||
static struct attribute_group atmel_attr_grp = { .attrs = atmel_attrs };
|
||||
|
||||
static struct tpm_vendor_specific tpm_atmel = {
|
||||
static const struct tpm_vendor_specific tpm_atmel = {
|
||||
.recv = tpm_atml_recv,
|
||||
.send = tpm_atml_send,
|
||||
.cancel = tpm_atml_cancel,
|
||||
|
@ -159,10 +159,10 @@ static void atml_plat_remove(void)
|
|||
struct tpm_chip *chip = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
if (chip) {
|
||||
if (chip->vendor->have_region)
|
||||
atmel_release_region(chip->vendor->base,
|
||||
chip->vendor->region_size);
|
||||
atmel_put_base_addr(chip->vendor);
|
||||
if (chip->vendor.have_region)
|
||||
atmel_release_region(chip->vendor.base,
|
||||
chip->vendor.region_size);
|
||||
atmel_put_base_addr(chip->vendor.iobase);
|
||||
tpm_remove_hardware(chip->dev);
|
||||
platform_device_unregister(pdev);
|
||||
}
|
||||
|
@ -179,18 +179,22 @@ static struct device_driver atml_drv = {
|
|||
static int __init init_atmel(void)
|
||||
{
|
||||
int rc = 0;
|
||||
void __iomem *iobase = NULL;
|
||||
int have_region, region_size;
|
||||
unsigned long base;
|
||||
struct tpm_chip *chip;
|
||||
|
||||
driver_register(&atml_drv);
|
||||
|
||||
if ((tpm_atmel.iobase = atmel_get_base_addr(&tpm_atmel)) == NULL) {
|
||||
if ((iobase = atmel_get_base_addr(&base, ®ion_size)) == NULL) {
|
||||
rc = -ENODEV;
|
||||
goto err_unreg_drv;
|
||||
}
|
||||
|
||||
tpm_atmel.have_region =
|
||||
have_region =
|
||||
(atmel_request_region
|
||||
(tpm_atmel.base, tpm_atmel.region_size,
|
||||
"tpm_atmel0") == NULL) ? 0 : 1;
|
||||
(tpm_atmel.base, region_size, "tpm_atmel0") == NULL) ? 0 : 1;
|
||||
|
||||
|
||||
if (IS_ERR
|
||||
(pdev =
|
||||
|
@ -199,17 +203,25 @@ static int __init init_atmel(void)
|
|||
goto err_rel_reg;
|
||||
}
|
||||
|
||||
if ((rc = tpm_register_hardware(&pdev->dev, &tpm_atmel)) < 0)
|
||||
if (!(chip = tpm_register_hardware(&pdev->dev, &tpm_atmel))) {
|
||||
rc = -ENODEV;
|
||||
goto err_unreg_dev;
|
||||
}
|
||||
|
||||
chip->vendor.iobase = iobase;
|
||||
chip->vendor.base = base;
|
||||
chip->vendor.have_region = have_region;
|
||||
chip->vendor.region_size = region_size;
|
||||
|
||||
return 0;
|
||||
|
||||
err_unreg_dev:
|
||||
platform_device_unregister(pdev);
|
||||
err_rel_reg:
|
||||
atmel_put_base_addr(&tpm_atmel);
|
||||
if (tpm_atmel.have_region)
|
||||
atmel_release_region(tpm_atmel.base,
|
||||
tpm_atmel.region_size);
|
||||
atmel_put_base_addr(iobase);
|
||||
if (have_region)
|
||||
atmel_release_region(base,
|
||||
region_size);
|
||||
err_unreg_drv:
|
||||
driver_unregister(&atml_drv);
|
||||
return rc;
|
||||
|
|
|
@ -28,13 +28,12 @@
|
|||
#define atmel_request_region request_mem_region
|
||||
#define atmel_release_region release_mem_region
|
||||
|
||||
static inline void atmel_put_base_addr(struct tpm_vendor_specific
|
||||
*vendor)
|
||||
static inline void atmel_put_base_addr(void __iomem *iobase)
|
||||
{
|
||||
iounmap(vendor->iobase);
|
||||
iounmap(iobase);
|
||||
}
|
||||
|
||||
static void __iomem * atmel_get_base_addr(struct tpm_vendor_specific *vendor)
|
||||
static void __iomem * atmel_get_base_addr(unsigned long *base, int *region_size)
|
||||
{
|
||||
struct device_node *dn;
|
||||
unsigned long address, size;
|
||||
|
@ -71,9 +70,9 @@ static void __iomem * atmel_get_base_addr(struct tpm_vendor_specific *vendor)
|
|||
else
|
||||
size = reg[naddrc];
|
||||
|
||||
vendor->base = address;
|
||||
vendor->region_size = size;
|
||||
return ioremap(vendor->base, vendor->region_size);
|
||||
*base = address;
|
||||
*region_size = size;
|
||||
return ioremap(*base, *region_size);
|
||||
}
|
||||
#else
|
||||
#define atmel_getb(chip, offset) inb(chip->vendor->base + offset)
|
||||
|
@ -106,14 +105,12 @@ static int atmel_verify_tpm11(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void atmel_put_base_addr(struct tpm_vendor_specific
|
||||
*vendor)
|
||||
static inline void atmel_put_base_addr(void __iomem *iobase)
|
||||
{
|
||||
}
|
||||
|
||||
/* Determine where to talk to device */
|
||||
static void __iomem * atmel_get_base_addr(struct tpm_vendor_specific
|
||||
*vendor)
|
||||
static void __iomem * atmel_get_base_addr(unsigned long *base, int *region_size)
|
||||
{
|
||||
int lo, hi;
|
||||
|
||||
|
@ -123,9 +120,9 @@ static void __iomem * atmel_get_base_addr(struct tpm_vendor_specific
|
|||
lo = tpm_read_index(TPM_ADDR, TPM_ATMEL_BASE_ADDR_LO);
|
||||
hi = tpm_read_index(TPM_ADDR, TPM_ATMEL_BASE_ADDR_HI);
|
||||
|
||||
vendor->base = (hi << 8) | lo;
|
||||
vendor->region_size = 2;
|
||||
*base = (hi << 8) | lo;
|
||||
*region_size = 2;
|
||||
|
||||
return ioport_map(vendor->base, vendor->region_size);
|
||||
return ioport_map(*base, *region_size);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,11 @@
|
|||
#define MAX_TEXT_EVENT 1000 /* Max event string length */
|
||||
#define ACPI_TCPA_SIG "TCPA" /* 0x41504354 /'TCPA' */
|
||||
|
||||
enum bios_platform_class {
|
||||
BIOS_CLIENT = 0x00,
|
||||
BIOS_SERVER = 0x01,
|
||||
};
|
||||
|
||||
struct tpm_bios_log {
|
||||
void *bios_event_log;
|
||||
void *bios_event_log_end;
|
||||
|
@ -36,9 +41,18 @@ struct tpm_bios_log {
|
|||
|
||||
struct acpi_tcpa {
|
||||
struct acpi_table_header hdr;
|
||||
u16 reserved;
|
||||
u32 log_max_len __attribute__ ((packed));
|
||||
u32 log_start_addr __attribute__ ((packed));
|
||||
u16 platform_class;
|
||||
union {
|
||||
struct client_hdr {
|
||||
u32 log_max_len __attribute__ ((packed));
|
||||
u64 log_start_addr __attribute__ ((packed));
|
||||
} client;
|
||||
struct server_hdr {
|
||||
u16 reserved;
|
||||
u64 log_max_len __attribute__ ((packed));
|
||||
u64 log_start_addr __attribute__ ((packed));
|
||||
} server;
|
||||
};
|
||||
};
|
||||
|
||||
struct tcpa_event {
|
||||
|
@ -120,6 +134,7 @@ static const char* tcpa_pc_event_id_strings[] = {
|
|||
"S-CRTM Version",
|
||||
"S-CRTM Contents",
|
||||
"S-CRTM POST Contents",
|
||||
"POST Contents",
|
||||
};
|
||||
|
||||
/* returns pointer to start of pos. entry of tcg log */
|
||||
|
@ -306,6 +321,7 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
|
|||
/* 5th: delimiter */
|
||||
seq_putc(m, '\0');
|
||||
|
||||
kfree(eventname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -353,6 +369,7 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v)
|
|||
/* 4th: eventname <= max + \'0' delimiter */
|
||||
seq_printf(m, " %s\n", eventname);
|
||||
|
||||
kfree(eventname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -376,6 +393,7 @@ static int read_log(struct tpm_bios_log *log)
|
|||
struct acpi_tcpa *buff;
|
||||
acpi_status status;
|
||||
struct acpi_table_header *virt;
|
||||
u64 len, start;
|
||||
|
||||
if (log->bios_event_log != NULL) {
|
||||
printk(KERN_ERR
|
||||
|
@ -396,27 +414,37 @@ static int read_log(struct tpm_bios_log *log)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
if (buff->log_max_len == 0) {
|
||||
switch(buff->platform_class) {
|
||||
case BIOS_SERVER:
|
||||
len = buff->server.log_max_len;
|
||||
start = buff->server.log_start_addr;
|
||||
break;
|
||||
case BIOS_CLIENT:
|
||||
default:
|
||||
len = buff->client.log_max_len;
|
||||
start = buff->client.log_start_addr;
|
||||
break;
|
||||
}
|
||||
if (!len) {
|
||||
printk(KERN_ERR "%s: ERROR - TCPA log area empty\n", __func__);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* malloc EventLog space */
|
||||
log->bios_event_log = kmalloc(buff->log_max_len, GFP_KERNEL);
|
||||
log->bios_event_log = kmalloc(len, GFP_KERNEL);
|
||||
if (!log->bios_event_log) {
|
||||
printk
|
||||
("%s: ERROR - Not enough Memory for BIOS measurements\n",
|
||||
__func__);
|
||||
printk("%s: ERROR - Not enough Memory for BIOS measurements\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
log->bios_event_log_end = log->bios_event_log + buff->log_max_len;
|
||||
log->bios_event_log_end = log->bios_event_log + len;
|
||||
|
||||
acpi_os_map_memory(buff->log_start_addr, buff->log_max_len, (void *) &virt);
|
||||
acpi_os_map_memory(start, len, (void *) &virt);
|
||||
|
||||
memcpy(log->bios_event_log, virt, buff->log_max_len);
|
||||
memcpy(log->bios_event_log, virt, len);
|
||||
|
||||
acpi_os_unmap_memory(virt, buff->log_max_len);
|
||||
acpi_os_unmap_memory(virt, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
* License.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/pnp.h>
|
||||
#include "tpm.h"
|
||||
|
||||
|
@ -104,7 +105,7 @@ static int empty_fifo(struct tpm_chip *chip, int clear_wrfifo)
|
|||
|
||||
if (clear_wrfifo) {
|
||||
for (i = 0; i < 4096; i++) {
|
||||
status = inb(chip->vendor->base + WRFIFO);
|
||||
status = inb(chip->vendor.base + WRFIFO);
|
||||
if (status == 0xff) {
|
||||
if (check == 5)
|
||||
break;
|
||||
|
@ -124,8 +125,8 @@ static int empty_fifo(struct tpm_chip *chip, int clear_wrfifo)
|
|||
*/
|
||||
i = 0;
|
||||
do {
|
||||
status = inb(chip->vendor->base + RDFIFO);
|
||||
status = inb(chip->vendor->base + STAT);
|
||||
status = inb(chip->vendor.base + RDFIFO);
|
||||
status = inb(chip->vendor.base + STAT);
|
||||
i++;
|
||||
if (i == TPM_MAX_TRIES)
|
||||
return -EIO;
|
||||
|
@ -138,7 +139,7 @@ static int wait(struct tpm_chip *chip, int wait_for_bit)
|
|||
int status;
|
||||
int i;
|
||||
for (i = 0; i < TPM_MAX_TRIES; i++) {
|
||||
status = inb(chip->vendor->base + STAT);
|
||||
status = inb(chip->vendor.base + STAT);
|
||||
/* check the status-register if wait_for_bit is set */
|
||||
if (status & 1 << wait_for_bit)
|
||||
break;
|
||||
|
@ -157,7 +158,7 @@ static int wait(struct tpm_chip *chip, int wait_for_bit)
|
|||
static void wait_and_send(struct tpm_chip *chip, u8 sendbyte)
|
||||
{
|
||||
wait(chip, STAT_XFE);
|
||||
outb(sendbyte, chip->vendor->base + WRFIFO);
|
||||
outb(sendbyte, chip->vendor.base + WRFIFO);
|
||||
}
|
||||
|
||||
/* Note: WTX means Waiting-Time-Extension. Whenever the TPM needs more
|
||||
|
@ -204,7 +205,7 @@ recv_begin:
|
|||
ret = wait(chip, STAT_RDA);
|
||||
if (ret)
|
||||
return -EIO;
|
||||
buf[i] = inb(chip->vendor->base + RDFIFO);
|
||||
buf[i] = inb(chip->vendor.base + RDFIFO);
|
||||
}
|
||||
|
||||
if (buf[0] != TPM_VL_VER) {
|
||||
|
@ -219,7 +220,7 @@ recv_begin:
|
|||
|
||||
for (i = 0; i < size; i++) {
|
||||
wait(chip, STAT_RDA);
|
||||
buf[i] = inb(chip->vendor->base + RDFIFO);
|
||||
buf[i] = inb(chip->vendor.base + RDFIFO);
|
||||
}
|
||||
|
||||
if ((size == 0x6D00) && (buf[1] == 0x80)) {
|
||||
|
@ -268,7 +269,7 @@ static int tpm_inf_send(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
u8 count_high, count_low, count_4, count_3, count_2, count_1;
|
||||
|
||||
/* Disabling Reset, LP and IRQC */
|
||||
outb(RESET_LP_IRQC_DISABLE, chip->vendor->base + CMD);
|
||||
outb(RESET_LP_IRQC_DISABLE, chip->vendor.base + CMD);
|
||||
|
||||
ret = empty_fifo(chip, 1);
|
||||
if (ret) {
|
||||
|
@ -319,7 +320,7 @@ static void tpm_inf_cancel(struct tpm_chip *chip)
|
|||
|
||||
static u8 tpm_inf_status(struct tpm_chip *chip)
|
||||
{
|
||||
return inb(chip->vendor->base + STAT);
|
||||
return inb(chip->vendor.base + STAT);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(pubek, S_IRUGO, tpm_show_pubek, NULL);
|
||||
|
@ -346,7 +347,7 @@ static struct file_operations inf_ops = {
|
|||
.release = tpm_release,
|
||||
};
|
||||
|
||||
static struct tpm_vendor_specific tpm_inf = {
|
||||
static const struct tpm_vendor_specific tpm_inf = {
|
||||
.recv = tpm_inf_recv,
|
||||
.send = tpm_inf_send,
|
||||
.cancel = tpm_inf_cancel,
|
||||
|
@ -375,6 +376,7 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
int version[2];
|
||||
int productid[2];
|
||||
char chipname[20];
|
||||
struct tpm_chip *chip;
|
||||
|
||||
/* read IO-ports through PnP */
|
||||
if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) &&
|
||||
|
@ -395,14 +397,13 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
goto err_last;
|
||||
}
|
||||
/* publish my base address and request region */
|
||||
tpm_inf.base = TPM_INF_BASE;
|
||||
if (request_region
|
||||
(tpm_inf.base, TPM_INF_PORT_LEN, "tpm_infineon0") == NULL) {
|
||||
(TPM_INF_BASE, TPM_INF_PORT_LEN, "tpm_infineon0") == NULL) {
|
||||
rc = -EINVAL;
|
||||
goto err_last;
|
||||
}
|
||||
if (request_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN,
|
||||
"tpm_infineon0") == NULL) {
|
||||
if (request_region
|
||||
(TPM_INF_ADDR, TPM_INF_ADDR_LEN, "tpm_infineon0") == NULL) {
|
||||
rc = -EINVAL;
|
||||
goto err_last;
|
||||
}
|
||||
|
@ -442,9 +443,9 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
|
||||
/* configure TPM with IO-ports */
|
||||
outb(IOLIMH, TPM_INF_ADDR);
|
||||
outb(((tpm_inf.base >> 8) & 0xff), TPM_INF_DATA);
|
||||
outb(((TPM_INF_BASE >> 8) & 0xff), TPM_INF_DATA);
|
||||
outb(IOLIML, TPM_INF_ADDR);
|
||||
outb((tpm_inf.base & 0xff), TPM_INF_DATA);
|
||||
outb((TPM_INF_BASE & 0xff), TPM_INF_DATA);
|
||||
|
||||
/* control if IO-ports are set correctly */
|
||||
outb(IOLIMH, TPM_INF_ADDR);
|
||||
|
@ -452,10 +453,10 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
outb(IOLIML, TPM_INF_ADDR);
|
||||
iol = inb(TPM_INF_DATA);
|
||||
|
||||
if ((ioh << 8 | iol) != tpm_inf.base) {
|
||||
if ((ioh << 8 | iol) != TPM_INF_BASE) {
|
||||
dev_err(&dev->dev,
|
||||
"Could not set IO-ports to 0x%lx\n",
|
||||
tpm_inf.base);
|
||||
"Could not set IO-ports to 0x%x\n",
|
||||
TPM_INF_BASE);
|
||||
rc = -EIO;
|
||||
goto err_release_region;
|
||||
}
|
||||
|
@ -466,15 +467,15 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
outb(DISABLE_REGISTER_PAIR, TPM_INF_ADDR);
|
||||
|
||||
/* disable RESET, LP and IRQC */
|
||||
outb(RESET_LP_IRQC_DISABLE, tpm_inf.base + CMD);
|
||||
outb(RESET_LP_IRQC_DISABLE, TPM_INF_BASE + CMD);
|
||||
|
||||
/* Finally, we're done, print some infos */
|
||||
dev_info(&dev->dev, "TPM found: "
|
||||
"config base 0x%x, "
|
||||
"io base 0x%x, "
|
||||
"chip version %02x%02x, "
|
||||
"vendor id %x%x (Infineon), "
|
||||
"product id %02x%02x"
|
||||
"chip version 0x%02x%02x, "
|
||||
"vendor id 0x%x%x (Infineon), "
|
||||
"product id 0x%02x%02x"
|
||||
"%s\n",
|
||||
TPM_INF_ADDR,
|
||||
TPM_INF_BASE,
|
||||
|
@ -482,11 +483,10 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
vendorid[0], vendorid[1],
|
||||
productid[0], productid[1], chipname);
|
||||
|
||||
rc = tpm_register_hardware(&dev->dev, &tpm_inf);
|
||||
if (rc < 0) {
|
||||
rc = -ENODEV;
|
||||
if (!(chip = tpm_register_hardware(&dev->dev, &tpm_inf))) {
|
||||
goto err_release_region;
|
||||
}
|
||||
chip->vendor.base = TPM_INF_BASE;
|
||||
return 0;
|
||||
} else {
|
||||
rc = -ENODEV;
|
||||
|
@ -494,7 +494,7 @@ static int __devinit tpm_inf_pnp_probe(struct pnp_dev *dev,
|
|||
}
|
||||
|
||||
err_release_region:
|
||||
release_region(tpm_inf.base, TPM_INF_PORT_LEN);
|
||||
release_region(TPM_INF_BASE, TPM_INF_PORT_LEN);
|
||||
release_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN);
|
||||
|
||||
err_last:
|
||||
|
@ -506,7 +506,8 @@ static __devexit void tpm_inf_pnp_remove(struct pnp_dev *dev)
|
|||
struct tpm_chip *chip = pnp_get_drvdata(dev);
|
||||
|
||||
if (chip) {
|
||||
release_region(chip->vendor->base, TPM_INF_PORT_LEN);
|
||||
release_region(TPM_INF_BASE, TPM_INF_PORT_LEN);
|
||||
release_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN);
|
||||
tpm_remove_hardware(chip->dev);
|
||||
}
|
||||
}
|
||||
|
@ -520,7 +521,7 @@ static struct pnp_driver tpm_inf_pnp = {
|
|||
},
|
||||
.id_table = tpm_pnp_tbl,
|
||||
.probe = tpm_inf_pnp_probe,
|
||||
.remove = tpm_inf_pnp_remove,
|
||||
.remove = __devexit_p(tpm_inf_pnp_remove),
|
||||
};
|
||||
|
||||
static int __init init_inf(void)
|
||||
|
@ -538,5 +539,5 @@ module_exit(cleanup_inf);
|
|||
|
||||
MODULE_AUTHOR("Marcel Selhorst <selhorst@crypto.rub.de>");
|
||||
MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2");
|
||||
MODULE_VERSION("1.7");
|
||||
MODULE_VERSION("1.8");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -71,7 +71,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
|
|||
unsigned long stop;
|
||||
|
||||
/* status immediately available check */
|
||||
*data = inb(chip->vendor->base + NSC_STATUS);
|
||||
*data = inb(chip->vendor.base + NSC_STATUS);
|
||||
if ((*data & mask) == val)
|
||||
return 0;
|
||||
|
||||
|
@ -79,7 +79,7 @@ static int wait_for_stat(struct tpm_chip *chip, u8 mask, u8 val, u8 * data)
|
|||
stop = jiffies + 10 * HZ;
|
||||
do {
|
||||
msleep(TPM_TIMEOUT);
|
||||
*data = inb(chip->vendor->base + 1);
|
||||
*data = inb(chip->vendor.base + 1);
|
||||
if ((*data & mask) == val)
|
||||
return 0;
|
||||
}
|
||||
|
@ -94,9 +94,9 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
|
|||
unsigned long stop;
|
||||
|
||||
/* status immediately available check */
|
||||
status = inb(chip->vendor->base + NSC_STATUS);
|
||||
status = inb(chip->vendor.base + NSC_STATUS);
|
||||
if (status & NSC_STATUS_OBF)
|
||||
status = inb(chip->vendor->base + NSC_DATA);
|
||||
status = inb(chip->vendor.base + NSC_DATA);
|
||||
if (status & NSC_STATUS_RDY)
|
||||
return 0;
|
||||
|
||||
|
@ -104,9 +104,9 @@ static int nsc_wait_for_ready(struct tpm_chip *chip)
|
|||
stop = jiffies + 100;
|
||||
do {
|
||||
msleep(TPM_TIMEOUT);
|
||||
status = inb(chip->vendor->base + NSC_STATUS);
|
||||
status = inb(chip->vendor.base + NSC_STATUS);
|
||||
if (status & NSC_STATUS_OBF)
|
||||
status = inb(chip->vendor->base + NSC_DATA);
|
||||
status = inb(chip->vendor.base + NSC_DATA);
|
||||
if (status & NSC_STATUS_RDY)
|
||||
return 0;
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
return -EIO;
|
||||
}
|
||||
if ((data =
|
||||
inb(chip->vendor->base + NSC_DATA)) != NSC_COMMAND_NORMAL) {
|
||||
inb(chip->vendor.base + NSC_DATA)) != NSC_COMMAND_NORMAL) {
|
||||
dev_err(chip->dev, "not in normal mode (0x%x)\n",
|
||||
data);
|
||||
return -EIO;
|
||||
|
@ -148,7 +148,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
}
|
||||
if (data & NSC_STATUS_F0)
|
||||
break;
|
||||
*p = inb(chip->vendor->base + NSC_DATA);
|
||||
*p = inb(chip->vendor.base + NSC_DATA);
|
||||
}
|
||||
|
||||
if ((data & NSC_STATUS_F0) == 0 &&
|
||||
|
@ -156,7 +156,7 @@ static int tpm_nsc_recv(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
dev_err(chip->dev, "F0 not set\n");
|
||||
return -EIO;
|
||||
}
|
||||
if ((data = inb(chip->vendor->base + NSC_DATA)) != NSC_COMMAND_EOC) {
|
||||
if ((data = inb(chip->vendor.base + NSC_DATA)) != NSC_COMMAND_EOC) {
|
||||
dev_err(chip->dev,
|
||||
"expected end of command(0x%x)\n", data);
|
||||
return -EIO;
|
||||
|
@ -182,7 +182,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
* fix it. Not sure why this is needed, we followed the flow
|
||||
* chart in the manual to the letter.
|
||||
*/
|
||||
outb(NSC_COMMAND_CANCEL, chip->vendor->base + NSC_COMMAND);
|
||||
outb(NSC_COMMAND_CANCEL, chip->vendor.base + NSC_COMMAND);
|
||||
|
||||
if (nsc_wait_for_ready(chip) != 0)
|
||||
return -EIO;
|
||||
|
@ -192,7 +192,7 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
outb(NSC_COMMAND_NORMAL, chip->vendor->base + NSC_COMMAND);
|
||||
outb(NSC_COMMAND_NORMAL, chip->vendor.base + NSC_COMMAND);
|
||||
if (wait_for_stat(chip, NSC_STATUS_IBR, NSC_STATUS_IBR, &data) < 0) {
|
||||
dev_err(chip->dev, "IBR timeout\n");
|
||||
return -EIO;
|
||||
|
@ -204,26 +204,26 @@ static int tpm_nsc_send(struct tpm_chip *chip, u8 * buf, size_t count)
|
|||
"IBF timeout (while writing data)\n");
|
||||
return -EIO;
|
||||
}
|
||||
outb(buf[i], chip->vendor->base + NSC_DATA);
|
||||
outb(buf[i], chip->vendor.base + NSC_DATA);
|
||||
}
|
||||
|
||||
if (wait_for_stat(chip, NSC_STATUS_IBF, 0, &data) < 0) {
|
||||
dev_err(chip->dev, "IBF timeout\n");
|
||||
return -EIO;
|
||||
}
|
||||
outb(NSC_COMMAND_EOC, chip->vendor->base + NSC_COMMAND);
|
||||
outb(NSC_COMMAND_EOC, chip->vendor.base + NSC_COMMAND);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static void tpm_nsc_cancel(struct tpm_chip *chip)
|
||||
{
|
||||
outb(NSC_COMMAND_CANCEL, chip->vendor->base + NSC_COMMAND);
|
||||
outb(NSC_COMMAND_CANCEL, chip->vendor.base + NSC_COMMAND);
|
||||
}
|
||||
|
||||
static u8 tpm_nsc_status(struct tpm_chip *chip)
|
||||
{
|
||||
return inb(chip->vendor->base + NSC_STATUS);
|
||||
return inb(chip->vendor.base + NSC_STATUS);
|
||||
}
|
||||
|
||||
static struct file_operations nsc_ops = {
|
||||
|
@ -250,7 +250,7 @@ static struct attribute * nsc_attrs[] = {
|
|||
|
||||
static struct attribute_group nsc_attr_grp = { .attrs = nsc_attrs };
|
||||
|
||||
static struct tpm_vendor_specific tpm_nsc = {
|
||||
static const struct tpm_vendor_specific tpm_nsc = {
|
||||
.recv = tpm_nsc_recv,
|
||||
.send = tpm_nsc_send,
|
||||
.cancel = tpm_nsc_cancel,
|
||||
|
@ -268,7 +268,7 @@ static void __devexit tpm_nsc_remove(struct device *dev)
|
|||
{
|
||||
struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
if ( chip ) {
|
||||
release_region(chip->vendor->base, 2);
|
||||
release_region(chip->vendor.base, 2);
|
||||
tpm_remove_hardware(chip->dev);
|
||||
}
|
||||
}
|
||||
|
@ -286,7 +286,8 @@ static int __init init_nsc(void)
|
|||
int rc = 0;
|
||||
int lo, hi;
|
||||
int nscAddrBase = TPM_ADDR;
|
||||
|
||||
struct tpm_chip *chip;
|
||||
unsigned long base;
|
||||
|
||||
/* verify that it is a National part (SID) */
|
||||
if (tpm_read_index(TPM_ADDR, NSC_SID_INDEX) != 0xEF) {
|
||||
|
@ -300,7 +301,7 @@ static int __init init_nsc(void)
|
|||
|
||||
hi = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_HI);
|
||||
lo = tpm_read_index(nscAddrBase, TPM_NSC_BASE0_LO);
|
||||
tpm_nsc.base = (hi<<8) | lo;
|
||||
base = (hi<<8) | lo;
|
||||
|
||||
/* enable the DPM module */
|
||||
tpm_write_index(nscAddrBase, NSC_LDC_INDEX, 0x01);
|
||||
|
@ -320,13 +321,15 @@ static int __init init_nsc(void)
|
|||
if ((rc = platform_device_register(pdev)) < 0)
|
||||
goto err_free_dev;
|
||||
|
||||
if (request_region(tpm_nsc.base, 2, "tpm_nsc0") == NULL ) {
|
||||
if (request_region(base, 2, "tpm_nsc0") == NULL ) {
|
||||
rc = -EBUSY;
|
||||
goto err_unreg_dev;
|
||||
}
|
||||
|
||||
if ((rc = tpm_register_hardware(&pdev->dev, &tpm_nsc)) < 0)
|
||||
if (!(chip = tpm_register_hardware(&pdev->dev, &tpm_nsc))) {
|
||||
rc = -ENODEV;
|
||||
goto err_rel_reg;
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "NSC TPM detected\n");
|
||||
dev_dbg(&pdev->dev,
|
||||
|
@ -361,10 +364,12 @@ static int __init init_nsc(void)
|
|||
"NSC TPM revision %d\n",
|
||||
tpm_read_index(nscAddrBase, 0x27) & 0x1F);
|
||||
|
||||
chip->vendor.base = base;
|
||||
|
||||
return 0;
|
||||
|
||||
err_rel_reg:
|
||||
release_region(tpm_nsc.base, 2);
|
||||
release_region(base, 2);
|
||||
err_unreg_dev:
|
||||
platform_device_unregister(pdev);
|
||||
err_free_dev:
|
||||
|
|
|
@ -0,0 +1,669 @@
|
|||
/*
|
||||
* Copyright (C) 2005, 2006 IBM Corporation
|
||||
*
|
||||
* Authors:
|
||||
* Leendert van Doorn <leendert@watson.ibm.com>
|
||||
* Kylene Hall <kjhall@us.ibm.com>
|
||||
*
|
||||
* Device driver for TCG/TCPA TPM (trusted platform module).
|
||||
* Specifications at www.trustedcomputinggroup.org
|
||||
*
|
||||
* This device driver implements the TPM interface as defined in
|
||||
* the TCG TPM Interface Spec version 1.2, revision 1.0.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation, version 2 of the
|
||||
* License.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/pnp.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/wait.h>
|
||||
#include "tpm.h"
|
||||
|
||||
#define TPM_HEADER_SIZE 10
|
||||
|
||||
enum tis_access {
|
||||
TPM_ACCESS_VALID = 0x80,
|
||||
TPM_ACCESS_ACTIVE_LOCALITY = 0x20,
|
||||
TPM_ACCESS_REQUEST_PENDING = 0x04,
|
||||
TPM_ACCESS_REQUEST_USE = 0x02,
|
||||
};
|
||||
|
||||
enum tis_status {
|
||||
TPM_STS_VALID = 0x80,
|
||||
TPM_STS_COMMAND_READY = 0x40,
|
||||
TPM_STS_GO = 0x20,
|
||||
TPM_STS_DATA_AVAIL = 0x10,
|
||||
TPM_STS_DATA_EXPECT = 0x08,
|
||||
};
|
||||
|
||||
enum tis_int_flags {
|
||||
TPM_GLOBAL_INT_ENABLE = 0x80000000,
|
||||
TPM_INTF_BURST_COUNT_STATIC = 0x100,
|
||||
TPM_INTF_CMD_READY_INT = 0x080,
|
||||
TPM_INTF_INT_EDGE_FALLING = 0x040,
|
||||
TPM_INTF_INT_EDGE_RISING = 0x020,
|
||||
TPM_INTF_INT_LEVEL_LOW = 0x010,
|
||||
TPM_INTF_INT_LEVEL_HIGH = 0x008,
|
||||
TPM_INTF_LOCALITY_CHANGE_INT = 0x004,
|
||||
TPM_INTF_STS_VALID_INT = 0x002,
|
||||
TPM_INTF_DATA_AVAIL_INT = 0x001,
|
||||
};
|
||||
|
||||
enum tis_defaults {
|
||||
TIS_MEM_BASE = 0xFED4000,
|
||||
TIS_MEM_LEN = 0x5000,
|
||||
TIS_SHORT_TIMEOUT = 750, /* ms */
|
||||
TIS_LONG_TIMEOUT = 2000, /* 2 sec */
|
||||
};
|
||||
|
||||
#define TPM_ACCESS(l) (0x0000 | ((l) << 12))
|
||||
#define TPM_INT_ENABLE(l) (0x0008 | ((l) << 12))
|
||||
#define TPM_INT_VECTOR(l) (0x000C | ((l) << 12))
|
||||
#define TPM_INT_STATUS(l) (0x0010 | ((l) << 12))
|
||||
#define TPM_INTF_CAPS(l) (0x0014 | ((l) << 12))
|
||||
#define TPM_STS(l) (0x0018 | ((l) << 12))
|
||||
#define TPM_DATA_FIFO(l) (0x0024 | ((l) << 12))
|
||||
|
||||
#define TPM_DID_VID(l) (0x0F00 | ((l) << 12))
|
||||
#define TPM_RID(l) (0x0F04 | ((l) << 12))
|
||||
|
||||
static LIST_HEAD(tis_chips);
|
||||
static DEFINE_SPINLOCK(tis_lock);
|
||||
|
||||
static int check_locality(struct tpm_chip *chip, int l)
|
||||
{
|
||||
if ((ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
|
||||
(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
|
||||
(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID))
|
||||
return chip->vendor.locality = l;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void release_locality(struct tpm_chip *chip, int l, int force)
|
||||
{
|
||||
if (force || (ioread8(chip->vendor.iobase + TPM_ACCESS(l)) &
|
||||
(TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID)) ==
|
||||
(TPM_ACCESS_REQUEST_PENDING | TPM_ACCESS_VALID))
|
||||
iowrite8(TPM_ACCESS_ACTIVE_LOCALITY,
|
||||
chip->vendor.iobase + TPM_ACCESS(l));
|
||||
}
|
||||
|
||||
static int request_locality(struct tpm_chip *chip, int l)
|
||||
{
|
||||
unsigned long stop;
|
||||
long rc;
|
||||
|
||||
if (check_locality(chip, l) >= 0)
|
||||
return l;
|
||||
|
||||
iowrite8(TPM_ACCESS_REQUEST_USE,
|
||||
chip->vendor.iobase + TPM_ACCESS(l));
|
||||
|
||||
if (chip->vendor.irq) {
|
||||
rc = wait_event_interruptible_timeout(chip->vendor.int_queue,
|
||||
(check_locality
|
||||
(chip, l) >= 0),
|
||||
chip->vendor.timeout_a);
|
||||
if (rc > 0)
|
||||
return l;
|
||||
|
||||
} else {
|
||||
/* wait for burstcount */
|
||||
stop = jiffies + chip->vendor.timeout_a;
|
||||
do {
|
||||
if (check_locality(chip, l) >= 0)
|
||||
return l;
|
||||
msleep(TPM_TIMEOUT);
|
||||
}
|
||||
while (time_before(jiffies, stop));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static u8 tpm_tis_status(struct tpm_chip *chip)
|
||||
{
|
||||
return ioread8(chip->vendor.iobase +
|
||||
TPM_STS(chip->vendor.locality));
|
||||
}
|
||||
|
||||
static void tpm_tis_ready(struct tpm_chip *chip)
|
||||
{
|
||||
/* this causes the current command to be aborted */
|
||||
iowrite8(TPM_STS_COMMAND_READY,
|
||||
chip->vendor.iobase + TPM_STS(chip->vendor.locality));
|
||||
}
|
||||
|
||||
static int get_burstcount(struct tpm_chip *chip)
|
||||
{
|
||||
unsigned long stop;
|
||||
int burstcnt;
|
||||
|
||||
/* wait for burstcount */
|
||||
/* which timeout value, spec has 2 answers (c & d) */
|
||||
stop = jiffies + chip->vendor.timeout_d;
|
||||
do {
|
||||
burstcnt = ioread8(chip->vendor.iobase +
|
||||
TPM_STS(chip->vendor.locality) + 1);
|
||||
burstcnt += ioread8(chip->vendor.iobase +
|
||||
TPM_STS(chip->vendor.locality) +
|
||||
2) << 8;
|
||||
if (burstcnt)
|
||||
return burstcnt;
|
||||
msleep(TPM_TIMEOUT);
|
||||
} while (time_before(jiffies, stop));
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
static int wait_for_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
|
||||
wait_queue_head_t *queue)
|
||||
{
|
||||
unsigned long stop;
|
||||
long rc;
|
||||
u8 status;
|
||||
|
||||
/* check current status */
|
||||
status = tpm_tis_status(chip);
|
||||
if ((status & mask) == mask)
|
||||
return 0;
|
||||
|
||||
if (chip->vendor.irq) {
|
||||
rc = wait_event_interruptible_timeout(*queue,
|
||||
((tpm_tis_status
|
||||
(chip) & mask) ==
|
||||
mask), timeout);
|
||||
if (rc > 0)
|
||||
return 0;
|
||||
} else {
|
||||
stop = jiffies + timeout;
|
||||
do {
|
||||
msleep(TPM_TIMEOUT);
|
||||
status = tpm_tis_status(chip);
|
||||
if ((status & mask) == mask)
|
||||
return 0;
|
||||
} while (time_before(jiffies, stop));
|
||||
}
|
||||
return -ETIME;
|
||||
}
|
||||
|
||||
static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count)
|
||||
{
|
||||
int size = 0, burstcnt;
|
||||
while (size < count &&
|
||||
wait_for_stat(chip,
|
||||
TPM_STS_DATA_AVAIL | TPM_STS_VALID,
|
||||
chip->vendor.timeout_c,
|
||||
&chip->vendor.read_queue)
|
||||
== 0) {
|
||||
burstcnt = get_burstcount(chip);
|
||||
for (; burstcnt > 0 && size < count; burstcnt--)
|
||||
buf[size++] = ioread8(chip->vendor.iobase +
|
||||
TPM_DATA_FIFO(chip->vendor.
|
||||
locality));
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
||||
{
|
||||
int size = 0;
|
||||
int expected, status;
|
||||
|
||||
if (count < TPM_HEADER_SIZE) {
|
||||
size = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* read first 10 bytes, including tag, paramsize, and result */
|
||||
if ((size =
|
||||
recv_data(chip, buf, TPM_HEADER_SIZE)) < TPM_HEADER_SIZE) {
|
||||
dev_err(chip->dev, "Unable to read header\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
expected = be32_to_cpu(*(__be32 *) (buf + 2));
|
||||
if (expected > count) {
|
||||
size = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((size +=
|
||||
recv_data(chip, &buf[TPM_HEADER_SIZE],
|
||||
expected - TPM_HEADER_SIZE)) < expected) {
|
||||
dev_err(chip->dev, "Unable to read remainder of result\n");
|
||||
size = -ETIME;
|
||||
goto out;
|
||||
}
|
||||
|
||||
wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
|
||||
&chip->vendor.int_queue);
|
||||
status = tpm_tis_status(chip);
|
||||
if (status & TPM_STS_DATA_AVAIL) { /* retry? */
|
||||
dev_err(chip->dev, "Error left over data\n");
|
||||
size = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
tpm_tis_ready(chip);
|
||||
release_locality(chip, chip->vendor.locality, 0);
|
||||
return size;
|
||||
}
|
||||
|
||||
/*
|
||||
* If interrupts are used (signaled by an irq set in the vendor structure)
|
||||
* tpm.c can skip polling for the data to be available as the interrupt is
|
||||
* waited for here
|
||||
*/
|
||||
static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len)
|
||||
{
|
||||
int rc, status, burstcnt;
|
||||
size_t count = 0;
|
||||
u32 ordinal;
|
||||
|
||||
if (request_locality(chip, 0) < 0)
|
||||
return -EBUSY;
|
||||
|
||||
status = tpm_tis_status(chip);
|
||||
if ((status & TPM_STS_COMMAND_READY) == 0) {
|
||||
tpm_tis_ready(chip);
|
||||
if (wait_for_stat
|
||||
(chip, TPM_STS_COMMAND_READY, chip->vendor.timeout_b,
|
||||
&chip->vendor.int_queue) < 0) {
|
||||
rc = -ETIME;
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
|
||||
while (count < len - 1) {
|
||||
burstcnt = get_burstcount(chip);
|
||||
for (; burstcnt > 0 && count < len - 1; burstcnt--) {
|
||||
iowrite8(buf[count], chip->vendor.iobase +
|
||||
TPM_DATA_FIFO(chip->vendor.locality));
|
||||
count++;
|
||||
}
|
||||
|
||||
wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
|
||||
&chip->vendor.int_queue);
|
||||
status = tpm_tis_status(chip);
|
||||
if ((status & TPM_STS_DATA_EXPECT) == 0) {
|
||||
rc = -EIO;
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
|
||||
/* write last byte */
|
||||
iowrite8(buf[count],
|
||||
chip->vendor.iobase +
|
||||
TPM_DATA_FIFO(chip->vendor.locality));
|
||||
wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c,
|
||||
&chip->vendor.int_queue);
|
||||
status = tpm_tis_status(chip);
|
||||
if ((status & TPM_STS_DATA_EXPECT) != 0) {
|
||||
rc = -EIO;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
/* go and do it */
|
||||
iowrite8(TPM_STS_GO,
|
||||
chip->vendor.iobase + TPM_STS(chip->vendor.locality));
|
||||
|
||||
if (chip->vendor.irq) {
|
||||
ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
|
||||
if (wait_for_stat
|
||||
(chip, TPM_STS_DATA_AVAIL | TPM_STS_VALID,
|
||||
tpm_calc_ordinal_duration(chip, ordinal),
|
||||
&chip->vendor.read_queue) < 0) {
|
||||
rc = -ETIME;
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
out_err:
|
||||
tpm_tis_ready(chip);
|
||||
release_locality(chip, chip->vendor.locality, 0);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static struct file_operations tis_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = no_llseek,
|
||||
.open = tpm_open,
|
||||
.read = tpm_read,
|
||||
.write = tpm_write,
|
||||
.release = tpm_release,
|
||||
};
|
||||
|
||||
static DEVICE_ATTR(pubek, S_IRUGO, tpm_show_pubek, NULL);
|
||||
static DEVICE_ATTR(pcrs, S_IRUGO, tpm_show_pcrs, NULL);
|
||||
static DEVICE_ATTR(enabled, S_IRUGO, tpm_show_enabled, NULL);
|
||||
static DEVICE_ATTR(active, S_IRUGO, tpm_show_active, NULL);
|
||||
static DEVICE_ATTR(owned, S_IRUGO, tpm_show_owned, NULL);
|
||||
static DEVICE_ATTR(temp_deactivated, S_IRUGO, tpm_show_temp_deactivated,
|
||||
NULL);
|
||||
static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL);
|
||||
static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel);
|
||||
|
||||
static struct attribute *tis_attrs[] = {
|
||||
&dev_attr_pubek.attr,
|
||||
&dev_attr_pcrs.attr,
|
||||
&dev_attr_enabled.attr,
|
||||
&dev_attr_active.attr,
|
||||
&dev_attr_owned.attr,
|
||||
&dev_attr_temp_deactivated.attr,
|
||||
&dev_attr_caps.attr,
|
||||
&dev_attr_cancel.attr, NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group tis_attr_grp = {
|
||||
.attrs = tis_attrs
|
||||
};
|
||||
|
||||
static struct tpm_vendor_specific tpm_tis = {
|
||||
.status = tpm_tis_status,
|
||||
.recv = tpm_tis_recv,
|
||||
.send = tpm_tis_send,
|
||||
.cancel = tpm_tis_ready,
|
||||
.req_complete_mask = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
|
||||
.req_complete_val = TPM_STS_DATA_AVAIL | TPM_STS_VALID,
|
||||
.req_canceled = TPM_STS_COMMAND_READY,
|
||||
.attr_group = &tis_attr_grp,
|
||||
.miscdev = {
|
||||
.fops = &tis_ops,},
|
||||
};
|
||||
|
||||
static irqreturn_t tis_int_probe(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
struct tpm_chip *chip = (struct tpm_chip *) dev_id;
|
||||
u32 interrupt;
|
||||
|
||||
interrupt = ioread32(chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
|
||||
if (interrupt == 0)
|
||||
return IRQ_NONE;
|
||||
|
||||
chip->vendor.irq = irq;
|
||||
|
||||
/* Clear interrupts handled with TPM_EOI */
|
||||
iowrite32(interrupt,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static irqreturn_t tis_int_handler(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
struct tpm_chip *chip = (struct tpm_chip *) dev_id;
|
||||
u32 interrupt;
|
||||
int i;
|
||||
|
||||
interrupt = ioread32(chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
|
||||
if (interrupt == 0)
|
||||
return IRQ_NONE;
|
||||
|
||||
if (interrupt & TPM_INTF_DATA_AVAIL_INT)
|
||||
wake_up_interruptible(&chip->vendor.read_queue);
|
||||
if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT)
|
||||
for (i = 0; i < 5; i++)
|
||||
if (check_locality(chip, i) >= 0)
|
||||
break;
|
||||
if (interrupt &
|
||||
(TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_STS_VALID_INT |
|
||||
TPM_INTF_CMD_READY_INT))
|
||||
wake_up_interruptible(&chip->vendor.int_queue);
|
||||
|
||||
/* Clear interrupts handled with TPM_EOI */
|
||||
iowrite32(interrupt,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int interrupts = 1;
|
||||
module_param(interrupts, bool, 0444);
|
||||
MODULE_PARM_DESC(interrupts, "Enable interrupts");
|
||||
|
||||
static int __devinit tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
|
||||
const struct pnp_device_id *pnp_id)
|
||||
{
|
||||
u32 vendor, intfcaps, intmask;
|
||||
int rc, i;
|
||||
unsigned long start, len;
|
||||
struct tpm_chip *chip;
|
||||
|
||||
start = pnp_mem_start(pnp_dev, 0);
|
||||
len = pnp_mem_len(pnp_dev, 0);
|
||||
|
||||
if (!start)
|
||||
start = TIS_MEM_BASE;
|
||||
if (!len)
|
||||
len = TIS_MEM_LEN;
|
||||
|
||||
if (!(chip = tpm_register_hardware(&pnp_dev->dev, &tpm_tis)))
|
||||
return -ENODEV;
|
||||
|
||||
chip->vendor.iobase = ioremap(start, len);
|
||||
if (!chip->vendor.iobase) {
|
||||
rc = -EIO;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
vendor = ioread32(chip->vendor.iobase + TPM_DID_VID(0));
|
||||
if ((vendor & 0xFFFF) == 0xFFFF) {
|
||||
rc = -ENODEV;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
/* Default timeouts */
|
||||
chip->vendor.timeout_a = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
|
||||
chip->vendor.timeout_b = msecs_to_jiffies(TIS_LONG_TIMEOUT);
|
||||
chip->vendor.timeout_c = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
|
||||
chip->vendor.timeout_d = msecs_to_jiffies(TIS_SHORT_TIMEOUT);
|
||||
|
||||
dev_info(&pnp_dev->dev,
|
||||
"1.2 TPM (device-id 0x%X, rev-id %d)\n",
|
||||
vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
|
||||
|
||||
/* Figure out the capabilities */
|
||||
intfcaps =
|
||||
ioread32(chip->vendor.iobase +
|
||||
TPM_INTF_CAPS(chip->vendor.locality));
|
||||
dev_dbg(&pnp_dev->dev, "TPM interface capabilities (0x%x):\n",
|
||||
intfcaps);
|
||||
if (intfcaps & TPM_INTF_BURST_COUNT_STATIC)
|
||||
dev_dbg(&pnp_dev->dev, "\tBurst Count Static\n");
|
||||
if (intfcaps & TPM_INTF_CMD_READY_INT)
|
||||
dev_dbg(&pnp_dev->dev, "\tCommand Ready Int Support\n");
|
||||
if (intfcaps & TPM_INTF_INT_EDGE_FALLING)
|
||||
dev_dbg(&pnp_dev->dev, "\tInterrupt Edge Falling\n");
|
||||
if (intfcaps & TPM_INTF_INT_EDGE_RISING)
|
||||
dev_dbg(&pnp_dev->dev, "\tInterrupt Edge Rising\n");
|
||||
if (intfcaps & TPM_INTF_INT_LEVEL_LOW)
|
||||
dev_dbg(&pnp_dev->dev, "\tInterrupt Level Low\n");
|
||||
if (intfcaps & TPM_INTF_INT_LEVEL_HIGH)
|
||||
dev_dbg(&pnp_dev->dev, "\tInterrupt Level High\n");
|
||||
if (intfcaps & TPM_INTF_LOCALITY_CHANGE_INT)
|
||||
dev_dbg(&pnp_dev->dev, "\tLocality Change Int Support\n");
|
||||
if (intfcaps & TPM_INTF_STS_VALID_INT)
|
||||
dev_dbg(&pnp_dev->dev, "\tSts Valid Int Support\n");
|
||||
if (intfcaps & TPM_INTF_DATA_AVAIL_INT)
|
||||
dev_dbg(&pnp_dev->dev, "\tData Avail Int Support\n");
|
||||
|
||||
if (request_locality(chip, 0) != 0) {
|
||||
rc = -ENODEV;
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
/* INTERRUPT Setup */
|
||||
init_waitqueue_head(&chip->vendor.read_queue);
|
||||
init_waitqueue_head(&chip->vendor.int_queue);
|
||||
|
||||
intmask =
|
||||
ioread32(chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
|
||||
intmask |= TPM_INTF_CMD_READY_INT
|
||||
| TPM_INTF_LOCALITY_CHANGE_INT | TPM_INTF_DATA_AVAIL_INT
|
||||
| TPM_INTF_STS_VALID_INT;
|
||||
|
||||
iowrite32(intmask,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
if (interrupts) {
|
||||
chip->vendor.irq =
|
||||
ioread8(chip->vendor.iobase +
|
||||
TPM_INT_VECTOR(chip->vendor.locality));
|
||||
|
||||
for (i = 3; i < 16 && chip->vendor.irq == 0; i++) {
|
||||
iowrite8(i, chip->vendor.iobase +
|
||||
TPM_INT_VECTOR(chip->vendor.locality));
|
||||
if (request_irq
|
||||
(i, tis_int_probe, SA_SHIRQ,
|
||||
chip->vendor.miscdev.name, chip) != 0) {
|
||||
dev_info(chip->dev,
|
||||
"Unable to request irq: %d for probe\n",
|
||||
i);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Clear all existing */
|
||||
iowrite32(ioread32
|
||||
(chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality)),
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
|
||||
/* Turn on */
|
||||
iowrite32(intmask | TPM_GLOBAL_INT_ENABLE,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
|
||||
/* Generate Interrupts */
|
||||
tpm_gen_interrupt(chip);
|
||||
|
||||
/* Turn off */
|
||||
iowrite32(intmask,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
free_irq(i, chip);
|
||||
}
|
||||
}
|
||||
if (chip->vendor.irq) {
|
||||
iowrite8(chip->vendor.irq,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_VECTOR(chip->vendor.locality));
|
||||
if (request_irq
|
||||
(chip->vendor.irq, tis_int_handler, SA_SHIRQ,
|
||||
chip->vendor.miscdev.name, chip) != 0) {
|
||||
dev_info(chip->dev,
|
||||
"Unable to request irq: %d for use\n",
|
||||
chip->vendor.irq);
|
||||
chip->vendor.irq = 0;
|
||||
} else {
|
||||
/* Clear all existing */
|
||||
iowrite32(ioread32
|
||||
(chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality)),
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_STATUS(chip->vendor.locality));
|
||||
|
||||
/* Turn on */
|
||||
iowrite32(intmask | TPM_GLOBAL_INT_ENABLE,
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
}
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&chip->vendor.list);
|
||||
spin_lock(&tis_lock);
|
||||
list_add(&chip->vendor.list, &tis_chips);
|
||||
spin_unlock(&tis_lock);
|
||||
|
||||
tpm_get_timeouts(chip);
|
||||
tpm_continue_selftest(chip);
|
||||
|
||||
return 0;
|
||||
out_err:
|
||||
if (chip->vendor.iobase)
|
||||
iounmap(chip->vendor.iobase);
|
||||
tpm_remove_hardware(chip->dev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int tpm_tis_pnp_suspend(struct pnp_dev *dev, pm_message_t msg)
|
||||
{
|
||||
return tpm_pm_suspend(&dev->dev, msg);
|
||||
}
|
||||
|
||||
static int tpm_tis_pnp_resume(struct pnp_dev *dev)
|
||||
{
|
||||
return tpm_pm_resume(&dev->dev);
|
||||
}
|
||||
|
||||
static struct pnp_device_id tpm_pnp_tbl[] __devinitdata = {
|
||||
{"PNP0C31", 0}, /* TPM */
|
||||
{"ATM1200", 0}, /* Atmel */
|
||||
{"IFX0102", 0}, /* Infineon */
|
||||
{"BCM0101", 0}, /* Broadcom */
|
||||
{"NSC1200", 0}, /* National */
|
||||
/* Add new here */
|
||||
{"", 0}, /* User Specified */
|
||||
{"", 0} /* Terminator */
|
||||
};
|
||||
|
||||
static struct pnp_driver tis_pnp_driver = {
|
||||
.name = "tpm_tis",
|
||||
.id_table = tpm_pnp_tbl,
|
||||
.probe = tpm_tis_pnp_init,
|
||||
.suspend = tpm_tis_pnp_suspend,
|
||||
.resume = tpm_tis_pnp_resume,
|
||||
};
|
||||
|
||||
#define TIS_HID_USR_IDX sizeof(tpm_pnp_tbl)/sizeof(struct pnp_device_id) -2
|
||||
module_param_string(hid, tpm_pnp_tbl[TIS_HID_USR_IDX].id,
|
||||
sizeof(tpm_pnp_tbl[TIS_HID_USR_IDX].id), 0444);
|
||||
MODULE_PARM_DESC(hid, "Set additional specific HID for this driver to probe");
|
||||
|
||||
static int __init init_tis(void)
|
||||
{
|
||||
return pnp_register_driver(&tis_pnp_driver);
|
||||
}
|
||||
|
||||
static void __exit cleanup_tis(void)
|
||||
{
|
||||
struct tpm_vendor_specific *i, *j;
|
||||
struct tpm_chip *chip;
|
||||
spin_lock(&tis_lock);
|
||||
list_for_each_entry_safe(i, j, &tis_chips, list) {
|
||||
chip = to_tpm_chip(i);
|
||||
iowrite32(~TPM_GLOBAL_INT_ENABLE &
|
||||
ioread32(chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.
|
||||
locality)),
|
||||
chip->vendor.iobase +
|
||||
TPM_INT_ENABLE(chip->vendor.locality));
|
||||
release_locality(chip, chip->vendor.locality, 1);
|
||||
if (chip->vendor.irq)
|
||||
free_irq(chip->vendor.irq, chip);
|
||||
iounmap(i->iobase);
|
||||
list_del(&i->list);
|
||||
tpm_remove_hardware(chip->dev);
|
||||
}
|
||||
spin_unlock(&tis_lock);
|
||||
pnp_unregister_driver(&tis_pnp_driver);
|
||||
}
|
||||
|
||||
module_init(init_tis);
|
||||
module_exit(cleanup_tis);
|
||||
MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
|
||||
MODULE_DESCRIPTION("TPM Driver");
|
||||
MODULE_VERSION("2.0");
|
||||
MODULE_LICENSE("GPL");
|
|
@ -350,11 +350,11 @@ static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
return 0;
|
||||
bail2:
|
||||
serio_close(serio);
|
||||
serio_set_drvdata(serio, NULL);
|
||||
bail1:
|
||||
input_free_device(kbd->dev);
|
||||
bail0:
|
||||
kfree(kbd);
|
||||
serio_set_drvdata(serio, NULL);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -781,8 +781,7 @@ error: if (cs)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(gigaset_initcs);
|
||||
|
||||
/* ReInitialize the b-channel structure */
|
||||
/* e.g. called on hangup, disconnect */
|
||||
/* ReInitialize the b-channel structure on hangup */
|
||||
void gigaset_bcs_reinit(struct bc_state *bcs)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
|
|
@ -373,6 +373,9 @@ struct reply_t gigaset_tab_cid_m10x[] = /* for M10x */
|
|||
|
||||
{EV_TIMEOUT, 750,750, -1, 0, 0, {ACT_CONNTIMEOUT}},
|
||||
|
||||
/* B channel closed (general case) */
|
||||
{EV_BC_CLOSED, -1, -1, -1, -1,-1, {ACT_NOTIFY_BC_DOWN}}, //FIXME
|
||||
|
||||
/* misc. */
|
||||
{EV_PROTO_L2, -1, -1, -1, -1,-1, {ACT_PROTO_L2}}, //FIXME
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ extern int gigaset_debuglevel; /* "needs" cast to (enum debuglevel) */
|
|||
* e.g. 'insmod usb_gigaset.o debug=0x2c' will set DEBUG_OPEN, DEBUG_CMD and
|
||||
* DEBUG_INTR.
|
||||
*/
|
||||
enum debuglevel { /* up to 24 bits (atomic_t) */
|
||||
enum debuglevel {
|
||||
DEBUG_REG = 0x0002, /* serial port I/O register operations */
|
||||
DEBUG_OPEN = 0x0004, /* open/close serial port */
|
||||
DEBUG_INTR = 0x0008, /* interrupt processing */
|
||||
|
@ -141,7 +141,7 @@ enum debuglevel { /* up to 24 bits (atomic_t) */
|
|||
printk(KERN_DEBUG KBUILD_MODNAME ": " format "\n", \
|
||||
## arg); \
|
||||
} while (0)
|
||||
#define DEBUG_DEFAULT (DEBUG_INIT | DEBUG_TRANSCMD | DEBUG_CMD | DEBUG_USBREQ)
|
||||
#define DEBUG_DEFAULT (DEBUG_TRANSCMD | DEBUG_CMD | DEBUG_USBREQ)
|
||||
|
||||
#else
|
||||
|
||||
|
@ -627,8 +627,7 @@ struct gigaset_ops {
|
|||
/* Called by gigaset_freecs() for freeing bcs->hw.xxx */
|
||||
int (*freebcshw)(struct bc_state *bcs);
|
||||
|
||||
/* Called by gigaset_stop() or gigaset_bchannel_down() for resetting
|
||||
bcs->hw.xxx */
|
||||
/* Called by gigaset_bchannel_down() for resetting bcs->hw.xxx */
|
||||
void (*reinitbcshw)(struct bc_state *bcs);
|
||||
|
||||
/* Called by gigaset_initcs() for setting up cs->hw.xxx */
|
||||
|
|
|
@ -73,7 +73,7 @@ static int writebuf_from_LL(int driverID, int channel, int ack,
|
|||
len, skblen, (unsigned) skb->head[0], (unsigned) skb->head[1]);
|
||||
|
||||
/* pass to device-specific module */
|
||||
return cs->ops->send_skb(bcs, skb); //FIXME cs->ops->send_skb() must handle !cs->connected correctly
|
||||
return cs->ops->send_skb(bcs, skb);
|
||||
}
|
||||
|
||||
void gigaset_skb_sent(struct bc_state *bcs, struct sk_buff *skb)
|
||||
|
|
|
@ -992,14 +992,18 @@ int gigaset_isoc_send_skb(struct bc_state *bcs, struct sk_buff *skb)
|
|||
int len = skb->len;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&bcs->cs->lock, flags);
|
||||
if (!bcs->cs->connected) {
|
||||
spin_unlock_irqrestore(&bcs->cs->lock, flags);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
skb_queue_tail(&bcs->squeue, skb);
|
||||
gig_dbg(DEBUG_ISO, "%s: skb queued, qlen=%d",
|
||||
__func__, skb_queue_len(&bcs->squeue));
|
||||
|
||||
/* tasklet submits URB if necessary */
|
||||
spin_lock_irqsave(&bcs->cs->lock, flags);
|
||||
if (bcs->cs->connected)
|
||||
tasklet_schedule(&bcs->hw.bas->sent_tasklet);
|
||||
tasklet_schedule(&bcs->hw.bas->sent_tasklet);
|
||||
spin_unlock_irqrestore(&bcs->cs->lock, flags);
|
||||
|
||||
return len; /* ok so far */
|
||||
|
|
|
@ -627,8 +627,8 @@ thermostat_init(void)
|
|||
if(therm_type == ADT7460)
|
||||
device_create_file(&of_dev->dev, &dev_attr_sensor2_fan_speed);
|
||||
|
||||
#ifndef CONFIG_I2C_KEYWEST
|
||||
request_module("i2c-keywest");
|
||||
#ifndef CONFIG_I2C_POWERMAC
|
||||
request_module("i2c-powermac");
|
||||
#endif
|
||||
|
||||
return i2c_add_driver(&thermostat_driver);
|
||||
|
|
|
@ -1639,6 +1639,7 @@ static struct pcmcia_device_id pcnet_ids[] = {
|
|||
PCMCIA_DEVICE_PROD_ID12("CONTEC", "C-NET(PC)C-10L", 0x21cab552, 0xf6f90722),
|
||||
PCMCIA_DEVICE_PROD_ID12("corega", "FEther PCC-TXF", 0x0a21501a, 0xa51564a2),
|
||||
PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-T", 0x5261440f, 0xfa9d85bd),
|
||||
PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega EtherII PCC-TD", 0x5261440f, 0xc49bd73d),
|
||||
PCMCIA_DEVICE_PROD_ID12("Corega K.K.", "corega EtherII PCC-TD", 0xd4fdcbd8, 0xc49bd73d),
|
||||
PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega Ether PCC-T", 0x5261440f, 0x6705fcaa),
|
||||
PCMCIA_DEVICE_PROD_ID12("corega K.K.", "corega FastEther PCC-TX", 0x5261440f, 0x485e85d9),
|
||||
|
|
|
@ -275,7 +275,7 @@ static int bcm5411_init(struct mii_phy* phy)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bcm5411_suspend(struct mii_phy* phy)
|
||||
static int generic_suspend(struct mii_phy* phy)
|
||||
{
|
||||
phy_write(phy, MII_BMCR, BMCR_PDOWN);
|
||||
|
||||
|
@ -738,7 +738,7 @@ static struct mii_phy_def bcm5401_phy_def = {
|
|||
/* Broadcom BCM 5411 */
|
||||
static struct mii_phy_ops bcm5411_phy_ops = {
|
||||
.init = bcm5411_init,
|
||||
.suspend = bcm5411_suspend,
|
||||
.suspend = generic_suspend,
|
||||
.setup_aneg = bcm54xx_setup_aneg,
|
||||
.setup_forced = bcm54xx_setup_forced,
|
||||
.poll_link = genmii_poll_link,
|
||||
|
@ -757,7 +757,7 @@ static struct mii_phy_def bcm5411_phy_def = {
|
|||
/* Broadcom BCM 5421 */
|
||||
static struct mii_phy_ops bcm5421_phy_ops = {
|
||||
.init = bcm5421_init,
|
||||
.suspend = bcm5411_suspend,
|
||||
.suspend = generic_suspend,
|
||||
.setup_aneg = bcm54xx_setup_aneg,
|
||||
.setup_forced = bcm54xx_setup_forced,
|
||||
.poll_link = genmii_poll_link,
|
||||
|
@ -776,7 +776,7 @@ static struct mii_phy_def bcm5421_phy_def = {
|
|||
/* Broadcom BCM 5421 built-in K2 */
|
||||
static struct mii_phy_ops bcm5421k2_phy_ops = {
|
||||
.init = bcm5421_init,
|
||||
.suspend = bcm5411_suspend,
|
||||
.suspend = generic_suspend,
|
||||
.setup_aneg = bcm54xx_setup_aneg,
|
||||
.setup_forced = bcm54xx_setup_forced,
|
||||
.poll_link = genmii_poll_link,
|
||||
|
@ -795,7 +795,7 @@ static struct mii_phy_def bcm5421k2_phy_def = {
|
|||
/* Broadcom BCM 5462 built-in Vesta */
|
||||
static struct mii_phy_ops bcm5462V_phy_ops = {
|
||||
.init = bcm5421_init,
|
||||
.suspend = bcm5411_suspend,
|
||||
.suspend = generic_suspend,
|
||||
.setup_aneg = bcm54xx_setup_aneg,
|
||||
.setup_forced = bcm54xx_setup_forced,
|
||||
.poll_link = genmii_poll_link,
|
||||
|
@ -816,6 +816,7 @@ static struct mii_phy_def bcm5462V_phy_def = {
|
|||
* would be useful here) --BenH.
|
||||
*/
|
||||
static struct mii_phy_ops marvell_phy_ops = {
|
||||
.suspend = generic_suspend,
|
||||
.setup_aneg = marvell_setup_aneg,
|
||||
.setup_forced = marvell_setup_forced,
|
||||
.poll_link = genmii_poll_link,
|
||||
|
|
|
@ -535,7 +535,7 @@ pdcs_auto_read(struct subsystem *entry, char *buf, int knob)
|
|||
{
|
||||
char *out = buf;
|
||||
struct pdcspath_entry *pathentry;
|
||||
|
||||
|
||||
if (!entry || !buf)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
@ -178,6 +178,11 @@ extern struct proc_dir_entry * proc_mckinley_root;
|
|||
#define ROPE6_CTL 0x230
|
||||
#define ROPE7_CTL 0x238
|
||||
|
||||
#define IOC_ROPE0_CFG 0x500 /* pluto only */
|
||||
#define IOC_ROPE_AO 0x10 /* Allow "Relaxed Ordering" */
|
||||
|
||||
|
||||
|
||||
#define HF_ENABLE 0x40
|
||||
|
||||
|
||||
|
@ -1759,19 +1764,33 @@ printk("sba_hw_init(): mem_boot 0x%x 0x%x 0x%x 0x%x\n", PAGE0->mem_boot.hpa,
|
|||
|
||||
sba_dev->num_ioc = num_ioc;
|
||||
for (i = 0; i < num_ioc; i++) {
|
||||
/*
|
||||
** Make sure the box crashes if we get any errors on a rope.
|
||||
*/
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE0_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE1_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE2_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE3_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE4_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE5_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE6_CTL);
|
||||
WRITE_REG(HF_ENABLE, sba_dev->ioc[i].ioc_hpa + ROPE7_CTL);
|
||||
unsigned long ioc_hpa = sba_dev->ioc[i].ioc_hpa;
|
||||
unsigned int j;
|
||||
|
||||
/* flush out the writes */
|
||||
for (j=0; j < sizeof(u64) * ROPES_PER_IOC; j+=sizeof(u64)) {
|
||||
|
||||
/*
|
||||
* Clear ROPE(N)_CONFIG AO bit.
|
||||
* Disables "NT Ordering" (~= !"Relaxed Ordering")
|
||||
* Overrides bit 1 in DMA Hint Sets.
|
||||
* Improves netperf UDP_STREAM by ~10% for bcm5701.
|
||||
*/
|
||||
if (IS_PLUTO(sba_dev->iodc)) {
|
||||
unsigned long rope_cfg, cfg_val;
|
||||
|
||||
rope_cfg = ioc_hpa + IOC_ROPE0_CFG + j;
|
||||
cfg_val = READ_REG(rope_cfg);
|
||||
cfg_val &= ~IOC_ROPE_AO;
|
||||
WRITE_REG(cfg_val, rope_cfg);
|
||||
}
|
||||
|
||||
/*
|
||||
** Make sure the box crashes on rope errors.
|
||||
*/
|
||||
WRITE_REG(HF_ENABLE, ioc_hpa + ROPE0_CTL + j);
|
||||
}
|
||||
|
||||
/* flush out the last writes */
|
||||
READ_REG(sba_dev->ioc[i].ioc_hpa + ROPE7_CTL);
|
||||
|
||||
DBG_INIT(" ioc[%d] ROPE_CFG 0x%Lx ROPE_DBG 0x%Lx\n",
|
||||
|
|
|
@ -155,7 +155,7 @@ superio_init(struct pci_dev *pcidev)
|
|||
struct pci_dev *pdev = sio->lio_pdev;
|
||||
u16 word;
|
||||
|
||||
if (sio->suckyio_irq_enabled)
|
||||
if (sio->suckyio_irq_enabled)
|
||||
return;
|
||||
|
||||
BUG_ON(!pdev);
|
||||
|
@ -194,7 +194,7 @@ superio_init(struct pci_dev *pcidev)
|
|||
request_region (sio->acpi_base, 0x1f, "acpi");
|
||||
|
||||
/* Enable the legacy I/O function */
|
||||
pci_read_config_word (pdev, PCI_COMMAND, &word);
|
||||
pci_read_config_word (pdev, PCI_COMMAND, &word);
|
||||
word |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_IO;
|
||||
pci_write_config_word (pdev, PCI_COMMAND, word);
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ config M32R_CFC_NUM
|
|||
|
||||
config PCMCIA_VRC4171
|
||||
tristate "NEC VRC4171 Card Controllers support"
|
||||
depends on VRC4171 && PCMCIA
|
||||
depends on CPU_VR41XX && ISA && PCMCIA
|
||||
|
||||
config PCMCIA_VRC4173
|
||||
tristate "NEC VRC4173 CARDU support"
|
||||
|
|
|
@ -236,11 +236,11 @@ static void pcmcia_check_driver(struct pcmcia_driver *p_drv)
|
|||
/**
|
||||
* pcmcia_load_firmware - load CIS from userspace if device-provided is broken
|
||||
* @dev - the pcmcia device which needs a CIS override
|
||||
* @filename - requested filename in /lib/firmware/cis/
|
||||
* @filename - requested filename in /lib/firmware/
|
||||
*
|
||||
* This uses the in-kernel firmware loading mechanism to use a "fake CIS" if
|
||||
* the one provided by the card is broken. The firmware files reside in
|
||||
* /lib/firmware/cis/ in userspace.
|
||||
* /lib/firmware/ in userspace.
|
||||
*/
|
||||
static int pcmcia_load_firmware(struct pcmcia_device *dev, char * filename)
|
||||
{
|
||||
|
@ -298,9 +298,6 @@ static inline int pcmcia_load_firmware(struct pcmcia_device *dev, char * filenam
|
|||
*
|
||||
* Registers a PCMCIA driver with the PCMCIA bus core.
|
||||
*/
|
||||
static int pcmcia_device_probe(struct device *dev);
|
||||
static int pcmcia_device_remove(struct device * dev);
|
||||
|
||||
int pcmcia_register_driver(struct pcmcia_driver *driver)
|
||||
{
|
||||
if (!driver)
|
||||
|
@ -400,7 +397,7 @@ static int pcmcia_device_probe(struct device * dev)
|
|||
* call which will then check whether there are two
|
||||
* pseudo devices, and if not, add the second one.
|
||||
*/
|
||||
did = (struct pcmcia_device_id *) p_dev->dev.driver_data;
|
||||
did = p_dev->dev.driver_data;
|
||||
if (did && (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) &&
|
||||
(p_dev->socket->device_count == 1) && (p_dev->device_no == 0))
|
||||
pcmcia_add_pseudo_device(p_dev->socket);
|
||||
|
@ -448,7 +445,6 @@ static void pcmcia_card_remove(struct pcmcia_socket *s, struct pcmcia_device *le
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
static int pcmcia_device_remove(struct device * dev)
|
||||
{
|
||||
struct pcmcia_device *p_dev;
|
||||
|
@ -463,7 +459,7 @@ static int pcmcia_device_remove(struct device * dev)
|
|||
* pseudo multi-function card, we need to unbind
|
||||
* all devices
|
||||
*/
|
||||
did = (struct pcmcia_device_id *) p_dev->dev.driver_data;
|
||||
did = p_dev->dev.driver_data;
|
||||
if (did && (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) &&
|
||||
(p_dev->socket->device_count != 0) &&
|
||||
(p_dev->device_no == 0))
|
||||
|
@ -476,6 +472,8 @@ static int pcmcia_device_remove(struct device * dev)
|
|||
if (p_drv->remove)
|
||||
p_drv->remove(p_dev);
|
||||
|
||||
p_dev->dev_node = NULL;
|
||||
|
||||
/* check for proper unloading */
|
||||
if (p_dev->_irq || p_dev->_io || p_dev->_locked)
|
||||
printk(KERN_INFO "pcmcia: driver %s did not release config properly\n",
|
||||
|
@ -628,7 +626,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
|
|||
}
|
||||
|
||||
/* Add to the list in pcmcia_bus_socket */
|
||||
list_add_tail(&p_dev->socket_device_list, &s->devices_list);
|
||||
list_add(&p_dev->socket_device_list, &s->devices_list);
|
||||
|
||||
spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
|
||||
|
||||
|
|
|
@ -88,7 +88,6 @@ static int alloc_io_space(struct pcmcia_socket *s, u_int attr, ioaddr_t *base,
|
|||
}
|
||||
if ((s->features & SS_CAP_STATIC_MAP) && s->io_offset) {
|
||||
*base = s->io_offset | (*base & 0x0fff);
|
||||
s->io[0].res->flags = (s->io[0].res->flags & ~IORESOURCE_BITS) | (attr & IORESOURCE_BITS);
|
||||
return 0;
|
||||
}
|
||||
/* Check for an already-allocated window that must conflict with
|
||||
|
@ -209,7 +208,6 @@ int pccard_get_configuration_info(struct pcmcia_socket *s,
|
|||
if (!(s->state & SOCKET_PRESENT))
|
||||
return CS_NO_CARD;
|
||||
|
||||
config->Function = p_dev->func;
|
||||
|
||||
#ifdef CONFIG_CARDBUS
|
||||
if (s->state & SOCKET_CARDBUS) {
|
||||
|
@ -223,14 +221,22 @@ int pccard_get_configuration_info(struct pcmcia_socket *s,
|
|||
config->AssignedIRQ = s->irq.AssignedIRQ;
|
||||
if (config->AssignedIRQ)
|
||||
config->Attributes |= CONF_ENABLE_IRQ;
|
||||
config->BasePort1 = s->io[0].res->start;
|
||||
config->NumPorts1 = s->io[0].res->end - config->BasePort1 + 1;
|
||||
if (s->io[0].res) {
|
||||
config->BasePort1 = s->io[0].res->start;
|
||||
config->NumPorts1 = s->io[0].res->end - config->BasePort1 + 1;
|
||||
}
|
||||
}
|
||||
return CS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
c = (p_dev) ? p_dev->function_config : NULL;
|
||||
if (p_dev) {
|
||||
c = p_dev->function_config;
|
||||
config->Function = p_dev->func;
|
||||
} else {
|
||||
c = NULL;
|
||||
config->Function = 0;
|
||||
}
|
||||
|
||||
if ((c == NULL) || !(c->state & CONFIG_LOCKED)) {
|
||||
config->Attributes = 0;
|
||||
|
@ -947,7 +953,5 @@ void pcmcia_disable_device(struct pcmcia_device *p_dev) {
|
|||
pcmcia_release_irq(p_dev, &p_dev->irq);
|
||||
if (&p_dev->win)
|
||||
pcmcia_release_window(p_dev->win);
|
||||
|
||||
p_dev->dev_node = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(pcmcia_disable_device);
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
Version 1.42
|
||||
------------
|
||||
Fix slow oplock break when mounted to different servers at the same time and
|
||||
the tids match and we try to find matching fid on wrong server.
|
||||
the tids match and we try to find matching fid on wrong server. Fix read
|
||||
looping when signing required by server (2.6.16 kernel only). Fix readdir
|
||||
vs. rename race which could cause each to hang. Return . and .. even
|
||||
if server does not. Allow searches to skip first three entries and
|
||||
begin at any location. Fix oops in find_writeable_file.
|
||||
|
||||
Version 1.41
|
||||
------------
|
||||
|
|
|
@ -511,6 +511,14 @@ LinuxExtensionsEnabled If set to one then the client will attempt to
|
|||
support and want to map the uid and gid fields
|
||||
to values supplied at mount (rather than the
|
||||
actual values, then set this to zero. (default 1)
|
||||
Experimental When set to 1 used to enable certain experimental
|
||||
features (currently enables multipage writes
|
||||
when signing is enabled, the multipage write
|
||||
performance enhancement was disabled when
|
||||
signing turned on in case buffer was modified
|
||||
just before it was sent, also this flag will
|
||||
be used to use the new experimental sessionsetup
|
||||
code).
|
||||
|
||||
These experimental features and tracing can be enabled by changing flags in
|
||||
/proc/fs/cifs (after the cifs module has been installed or built into the
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <linux/vfs.h>
|
||||
#include <linux/mempool.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/kthread.h>
|
||||
#include "cifsfs.h"
|
||||
#include "cifspdu.h"
|
||||
#define DECLARE_GLOBALS_HERE
|
||||
|
@ -75,9 +76,6 @@ unsigned int cifs_max_pending = CIFS_MAX_REQ;
|
|||
module_param(cifs_max_pending, int, 0);
|
||||
MODULE_PARM_DESC(cifs_max_pending,"Simultaneous requests to server. Default: 50 Range: 2 to 256");
|
||||
|
||||
static DECLARE_COMPLETION(cifs_oplock_exited);
|
||||
static DECLARE_COMPLETION(cifs_dnotify_exited);
|
||||
|
||||
extern mempool_t *cifs_sm_req_poolp;
|
||||
extern mempool_t *cifs_req_poolp;
|
||||
extern mempool_t *cifs_mid_poolp;
|
||||
|
@ -841,10 +839,6 @@ static int cifs_oplock_thread(void * dummyarg)
|
|||
__u16 netfid;
|
||||
int rc;
|
||||
|
||||
daemonize("cifsoplockd");
|
||||
allow_signal(SIGTERM);
|
||||
|
||||
oplockThread = current;
|
||||
do {
|
||||
if (try_to_freeze())
|
||||
continue;
|
||||
|
@ -900,9 +894,9 @@ static int cifs_oplock_thread(void * dummyarg)
|
|||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
schedule_timeout(1); /* yield in case q were corrupt */
|
||||
}
|
||||
} while(!signal_pending(current));
|
||||
oplockThread = NULL;
|
||||
complete_and_exit (&cifs_oplock_exited, 0);
|
||||
} while (!kthread_should_stop());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cifs_dnotify_thread(void * dummyarg)
|
||||
|
@ -910,10 +904,6 @@ static int cifs_dnotify_thread(void * dummyarg)
|
|||
struct list_head *tmp;
|
||||
struct cifsSesInfo *ses;
|
||||
|
||||
daemonize("cifsdnotifyd");
|
||||
allow_signal(SIGTERM);
|
||||
|
||||
dnotifyThread = current;
|
||||
do {
|
||||
if(try_to_freeze())
|
||||
continue;
|
||||
|
@ -931,8 +921,9 @@ static int cifs_dnotify_thread(void * dummyarg)
|
|||
wake_up_all(&ses->server->response_q);
|
||||
}
|
||||
read_unlock(&GlobalSMBSeslock);
|
||||
} while(!signal_pending(current));
|
||||
complete_and_exit (&cifs_dnotify_exited, 0);
|
||||
} while (!kthread_should_stop());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init
|
||||
|
@ -982,32 +973,48 @@ init_cifs(void)
|
|||
}
|
||||
|
||||
rc = cifs_init_inodecache();
|
||||
if (!rc) {
|
||||
rc = cifs_init_mids();
|
||||
if (!rc) {
|
||||
rc = cifs_init_request_bufs();
|
||||
if (!rc) {
|
||||
rc = register_filesystem(&cifs_fs_type);
|
||||
if (!rc) {
|
||||
rc = (int)kernel_thread(cifs_oplock_thread, NULL,
|
||||
CLONE_FS | CLONE_FILES | CLONE_VM);
|
||||
if(rc > 0) {
|
||||
rc = (int)kernel_thread(cifs_dnotify_thread, NULL,
|
||||
CLONE_FS | CLONE_FILES | CLONE_VM);
|
||||
if(rc > 0)
|
||||
return 0;
|
||||
else
|
||||
cERROR(1,("error %d create dnotify thread", rc));
|
||||
} else {
|
||||
cERROR(1,("error %d create oplock thread",rc));
|
||||
}
|
||||
}
|
||||
cifs_destroy_request_bufs();
|
||||
}
|
||||
cifs_destroy_mids();
|
||||
}
|
||||
cifs_destroy_inodecache();
|
||||
if (rc)
|
||||
goto out_clean_proc;
|
||||
|
||||
rc = cifs_init_mids();
|
||||
if (rc)
|
||||
goto out_destroy_inodecache;
|
||||
|
||||
rc = cifs_init_request_bufs();
|
||||
if (rc)
|
||||
goto out_destroy_mids;
|
||||
|
||||
rc = register_filesystem(&cifs_fs_type);
|
||||
if (rc)
|
||||
goto out_destroy_request_bufs;
|
||||
|
||||
oplockThread = kthread_run(cifs_oplock_thread, NULL, "cifsoplockd");
|
||||
if (IS_ERR(oplockThread)) {
|
||||
rc = PTR_ERR(oplockThread);
|
||||
cERROR(1,("error %d create oplock thread", rc));
|
||||
goto out_unregister_filesystem;
|
||||
}
|
||||
|
||||
dnotifyThread = kthread_run(cifs_dnotify_thread, NULL, "cifsdnotifyd");
|
||||
if (IS_ERR(dnotifyThread)) {
|
||||
rc = PTR_ERR(dnotifyThread);
|
||||
cERROR(1,("error %d create dnotify thread", rc));
|
||||
goto out_stop_oplock_thread;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_stop_oplock_thread:
|
||||
kthread_stop(oplockThread);
|
||||
out_unregister_filesystem:
|
||||
unregister_filesystem(&cifs_fs_type);
|
||||
out_destroy_request_bufs:
|
||||
cifs_destroy_request_bufs();
|
||||
out_destroy_mids:
|
||||
cifs_destroy_mids();
|
||||
out_destroy_inodecache:
|
||||
cifs_destroy_inodecache();
|
||||
out_clean_proc:
|
||||
#ifdef CONFIG_PROC_FS
|
||||
cifs_proc_clean();
|
||||
#endif
|
||||
|
@ -1025,14 +1032,8 @@ exit_cifs(void)
|
|||
cifs_destroy_inodecache();
|
||||
cifs_destroy_mids();
|
||||
cifs_destroy_request_bufs();
|
||||
if(oplockThread) {
|
||||
send_sig(SIGTERM, oplockThread, 1);
|
||||
wait_for_completion(&cifs_oplock_exited);
|
||||
}
|
||||
if(dnotifyThread) {
|
||||
send_sig(SIGTERM, dnotifyThread, 1);
|
||||
wait_for_completion(&cifs_dnotify_exited);
|
||||
}
|
||||
kthread_stop(oplockThread);
|
||||
kthread_stop(dnotifyThread);
|
||||
}
|
||||
|
||||
MODULE_AUTHOR("Steve French <sfrench@us.ibm.com>");
|
||||
|
|
|
@ -3119,7 +3119,7 @@ findFirstRetry:
|
|||
psrch_inf->endOfSearch = FALSE;
|
||||
|
||||
psrch_inf->entries_in_buffer = le16_to_cpu(parms->SearchCount);
|
||||
psrch_inf->index_of_last_entry =
|
||||
psrch_inf->index_of_last_entry = 2 /* skip . and .. */ +
|
||||
psrch_inf->entries_in_buffer;
|
||||
*pnetfid = parms->SearchHandle;
|
||||
} else {
|
||||
|
|
|
@ -3447,6 +3447,12 @@ int cifs_setup_session(unsigned int xid, struct cifsSesInfo *pSesInfo,
|
|||
pSesInfo->server->secMode,
|
||||
pSesInfo->server->capabilities,
|
||||
pSesInfo->server->timeZone));
|
||||
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
||||
if(experimEnabled > 1)
|
||||
rc = CIFS_SessSetup(xid, pSesInfo, CIFS_NTLM /* type */,
|
||||
&ntlmv2_flag, nls_info);
|
||||
else
|
||||
#endif
|
||||
if (extended_security
|
||||
&& (pSesInfo->capabilities & CAP_EXTENDED_SECURITY)
|
||||
&& (pSesInfo->server->secType == NTLMSSP)) {
|
||||
|
|
|
@ -139,9 +139,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -316,9 +314,7 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode,
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL)
|
||||
rc = -ENOMEM;
|
||||
else if (pTcon->ses->capabilities & CAP_UNIX) {
|
||||
|
@ -440,6 +436,20 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct name
|
|||
cifs_sb = CIFS_SB(parent_dir_inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
/*
|
||||
* Don't allow the separator character in a path component.
|
||||
* The VFS will not allow "/", but "\" is allowed by posix.
|
||||
*/
|
||||
if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)) {
|
||||
int i;
|
||||
for (i = 0; i < direntry->d_name.len; i++)
|
||||
if (direntry->d_name.name[i] == '\\') {
|
||||
cFYI(1, ("Invalid file name"));
|
||||
FreeXid(xid);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
}
|
||||
|
||||
/* can not grab the rename sem here since it would
|
||||
deadlock in the cases (beginning of sys_rename itself)
|
||||
in which we already have the sb rename sem */
|
||||
|
|
|
@ -86,9 +86,7 @@ int cifs_dir_notify(struct file * file, unsigned long arg)
|
|||
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&file->f_dentry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(file->f_dentry);
|
||||
mutex_unlock(&file->f_dentry->d_sb->s_vfs_rename_mutex);
|
||||
|
||||
if(full_path == NULL) {
|
||||
rc = -ENOMEM;
|
||||
|
|
|
@ -203,9 +203,7 @@ int cifs_open(struct inode *inode, struct file *file)
|
|||
}
|
||||
}
|
||||
|
||||
mutex_lock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(file->f_dentry);
|
||||
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
if (full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -906,8 +904,7 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
|
|||
if (rc != 0)
|
||||
break;
|
||||
}
|
||||
/* BB FIXME We can not sign across two buffers yet */
|
||||
if((pTcon->ses->server->secMode &
|
||||
if(experimEnabled || (pTcon->ses->server->secMode &
|
||||
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) == 0) {
|
||||
struct kvec iov[2];
|
||||
unsigned int len;
|
||||
|
@ -923,13 +920,13 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
|
|||
*poffset, &bytes_written,
|
||||
iov, 1, long_op);
|
||||
} else
|
||||
/* BB FIXME fixup indentation of line below */
|
||||
rc = CIFSSMBWrite(xid, pTcon,
|
||||
open_file->netfid,
|
||||
min_t(const int, cifs_sb->wsize,
|
||||
write_size - total_written),
|
||||
*poffset, &bytes_written,
|
||||
write_data + total_written, NULL, long_op);
|
||||
rc = CIFSSMBWrite(xid, pTcon,
|
||||
open_file->netfid,
|
||||
min_t(const int, cifs_sb->wsize,
|
||||
write_size - total_written),
|
||||
*poffset, &bytes_written,
|
||||
write_data + total_written,
|
||||
NULL, long_op);
|
||||
}
|
||||
if (rc || (bytes_written == 0)) {
|
||||
if (total_written)
|
||||
|
@ -968,6 +965,16 @@ struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
|
|||
struct cifsFileInfo *open_file;
|
||||
int rc;
|
||||
|
||||
/* Having a null inode here (because mapping->host was set to zero by
|
||||
the VFS or MM) should not happen but we had reports of on oops (due to
|
||||
it being zero) during stress testcases so we need to check for it */
|
||||
|
||||
if(cifs_inode == NULL) {
|
||||
cERROR(1,("Null inode passed to cifs_writeable_file"));
|
||||
dump_stack();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
read_lock(&GlobalSMBSeslock);
|
||||
list_for_each_entry(open_file, &cifs_inode->openFileList, flist) {
|
||||
if (open_file->closePend)
|
||||
|
@ -1093,12 +1100,11 @@ static int cifs_writepages(struct address_space *mapping,
|
|||
if (cifs_sb->wsize < PAGE_CACHE_SIZE)
|
||||
return generic_writepages(mapping, wbc);
|
||||
|
||||
/* BB FIXME we do not have code to sign across multiple buffers yet,
|
||||
so go to older writepage style write which we can sign if needed */
|
||||
if((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server))
|
||||
if(cifs_sb->tcon->ses->server->secMode &
|
||||
(SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
|
||||
return generic_writepages(mapping, wbc);
|
||||
if(!experimEnabled)
|
||||
return generic_writepages(mapping, wbc);
|
||||
|
||||
/*
|
||||
* BB: Is this meaningful for a non-block-device file system?
|
||||
|
|
|
@ -722,9 +722,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
if (full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -807,9 +805,7 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
if (full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -1141,9 +1137,7 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
|||
rc = 0;
|
||||
}
|
||||
|
||||
mutex_lock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
if (full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -48,10 +48,8 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode,
|
|||
/* No need to check for cross device links since server will do that
|
||||
BB note DFS case in future though (when we may have to check) */
|
||||
|
||||
mutex_lock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
fromName = build_path_from_dentry(old_file);
|
||||
toName = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
if((fromName == NULL) || (toName == NULL)) {
|
||||
rc = -ENOMEM;
|
||||
goto cifs_hl_exit;
|
||||
|
@ -103,9 +101,7 @@ cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
|
|||
|
||||
xid = GetXid();
|
||||
|
||||
mutex_lock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&direntry->d_sb->s_vfs_rename_mutex);
|
||||
|
||||
if (!full_path)
|
||||
goto out_no_free;
|
||||
|
@ -164,9 +160,7 @@ cifs_symlink(struct inode *inode, struct dentry *direntry, const char *symname)
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&inode->i_sb->s_vfs_rename_mutex);
|
||||
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
|
|
|
@ -121,6 +121,20 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, const int type,
|
|||
}
|
||||
|
||||
|
||||
/* copy session key */
|
||||
|
||||
/* if Unicode, align strings to two byte boundary */
|
||||
|
||||
/* copy user name */ /* BB Do we need to special case null user name? */
|
||||
|
||||
/* copy domain name */
|
||||
|
||||
/* copy Linux version */
|
||||
|
||||
/* copy network operating system name */
|
||||
|
||||
/* update bcc and smb buffer length */
|
||||
|
||||
/* rc = SendReceive2(xid, ses, iov, num_iovecs, &resp_buf_type, 0); */
|
||||
/* SMB request buf freed in SendReceive2 */
|
||||
|
||||
|
|
|
@ -404,9 +404,7 @@ static int initiate_cifs_search(const int xid, struct file *file)
|
|||
if(pTcon == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&file->f_dentry->d_sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(file->f_dentry);
|
||||
mutex_unlock(&file->f_dentry->d_sb->s_vfs_rename_mutex);
|
||||
|
||||
if(full_path == NULL) {
|
||||
return -ENOMEM;
|
||||
|
@ -592,6 +590,13 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
|
|||
first_entry_in_buffer =
|
||||
cifsFile->srch_inf.index_of_last_entry -
|
||||
cifsFile->srch_inf.entries_in_buffer;
|
||||
|
||||
/* if first entry in buf is zero then is first buffer
|
||||
in search response data which means it is likely . and ..
|
||||
will be in this buffer, although some servers do not return
|
||||
. and .. for the root of a drive and for those we need
|
||||
to start two entries earlier */
|
||||
|
||||
/* dump_cifs_file_struct(file, "In fce ");*/
|
||||
if(((index_to_find < cifsFile->srch_inf.index_of_last_entry) &&
|
||||
is_dir_changed(file)) ||
|
||||
|
@ -634,23 +639,14 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
|
|||
char * end_of_smb = cifsFile->srch_inf.ntwrk_buf_start +
|
||||
smbCalcSize((struct smb_hdr *)
|
||||
cifsFile->srch_inf.ntwrk_buf_start);
|
||||
|
||||
current_entry = cifsFile->srch_inf.srch_entries_start;
|
||||
first_entry_in_buffer = cifsFile->srch_inf.index_of_last_entry
|
||||
- cifsFile->srch_inf.entries_in_buffer;
|
||||
pos_in_buf = index_to_find - first_entry_in_buffer;
|
||||
cFYI(1,("found entry - pos_in_buf %d",pos_in_buf));
|
||||
current_entry = cifsFile->srch_inf.srch_entries_start;
|
||||
for(i=0;(i<(pos_in_buf)) && (current_entry != NULL);i++) {
|
||||
/* go entry by entry figuring out which is first */
|
||||
/* if( . or ..)
|
||||
skip */
|
||||
rc = cifs_entry_is_dot(current_entry,cifsFile);
|
||||
if(rc == 1) /* is . or .. so skip */ {
|
||||
cFYI(1,("Entry is .")); /* BB removeme BB */
|
||||
/* continue; */
|
||||
} else if (rc == 2 ) {
|
||||
cFYI(1,("Entry is ..")); /* BB removeme BB */
|
||||
/* continue; */
|
||||
}
|
||||
current_entry = nxt_dir_entry(current_entry,end_of_smb);
|
||||
}
|
||||
if((current_entry == NULL) && (i < pos_in_buf)) {
|
||||
|
@ -770,6 +766,11 @@ static int cifs_filldir(char *pfindEntry, struct file *file,
|
|||
if(file->f_dentry == NULL)
|
||||
return -ENOENT;
|
||||
|
||||
rc = cifs_entry_is_dot(pfindEntry,pCifsF);
|
||||
/* skip . and .. since we added them first */
|
||||
if(rc != 0)
|
||||
return 0;
|
||||
|
||||
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
|
||||
|
||||
qstring.name = scratch_buf;
|
||||
|
@ -898,22 +899,22 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
|||
|
||||
switch ((int) file->f_pos) {
|
||||
case 0:
|
||||
/*if (filldir(direntry, ".", 1, file->f_pos,
|
||||
if (filldir(direntry, ".", 1, file->f_pos,
|
||||
file->f_dentry->d_inode->i_ino, DT_DIR) < 0) {
|
||||
cERROR(1, ("Filldir for current dir failed "));
|
||||
cERROR(1, ("Filldir for current dir failed"));
|
||||
rc = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
file->f_pos++; */
|
||||
file->f_pos++;
|
||||
case 1:
|
||||
/* if (filldir(direntry, "..", 2, file->f_pos,
|
||||
if (filldir(direntry, "..", 2, file->f_pos,
|
||||
file->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
|
||||
cERROR(1, ("Filldir for parent dir failed "));
|
||||
rc = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
file->f_pos++; */
|
||||
case 2:
|
||||
file->f_pos++;
|
||||
default:
|
||||
/* 1) If search is active,
|
||||
is in current search buffer?
|
||||
if it before then restart search
|
||||
|
@ -927,7 +928,6 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
|||
return rc;
|
||||
}
|
||||
}
|
||||
default:
|
||||
if(file->private_data == NULL) {
|
||||
rc = -EINVAL;
|
||||
FreeXid(xid);
|
||||
|
@ -947,8 +947,6 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
|||
kfree(cifsFile->search_resume_name);
|
||||
cifsFile->search_resume_name = NULL; */
|
||||
|
||||
/* BB account for . and .. in f_pos as special case */
|
||||
|
||||
rc = find_cifs_entry(xid,pTcon, file,
|
||||
¤t_entry,&num_to_fill);
|
||||
if(rc) {
|
||||
|
@ -977,7 +975,8 @@ int cifs_readdir(struct file *file, void *direntry, filldir_t filldir)
|
|||
num_to_fill, i));
|
||||
break;
|
||||
}
|
||||
|
||||
/* if buggy server returns . and .. late do
|
||||
we want to check for that here? */
|
||||
rc = cifs_filldir(current_entry, file,
|
||||
filldir, direntry,tmp_buf);
|
||||
file->f_pos++;
|
||||
|
|
|
@ -62,9 +62,7 @@ int cifs_removexattr(struct dentry * direntry, const char * ea_name)
|
|||
cifs_sb = CIFS_SB(sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -116,9 +114,7 @@ int cifs_setxattr(struct dentry * direntry, const char * ea_name,
|
|||
cifs_sb = CIFS_SB(sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -223,9 +219,7 @@ ssize_t cifs_getxattr(struct dentry * direntry, const char * ea_name,
|
|||
cifs_sb = CIFS_SB(sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
@ -341,9 +335,7 @@ ssize_t cifs_listxattr(struct dentry * direntry, char * data, size_t buf_size)
|
|||
cifs_sb = CIFS_SB(sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
mutex_lock(&sb->s_vfs_rename_mutex);
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
mutex_unlock(&sb->s_vfs_rename_mutex);
|
||||
if(full_path == NULL) {
|
||||
FreeXid(xid);
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -408,8 +408,9 @@ int reiserfs_cache_default_acl(struct inode *inode)
|
|||
acl = reiserfs_get_acl(inode, ACL_TYPE_DEFAULT);
|
||||
reiserfs_read_unlock_xattrs(inode->i_sb);
|
||||
reiserfs_read_unlock_xattr_i(inode);
|
||||
ret = acl ? 1 : 0;
|
||||
posix_acl_release(acl);
|
||||
ret = (acl && !IS_ERR(acl));
|
||||
if (ret)
|
||||
posix_acl_release(acl);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -126,24 +126,17 @@ static inline void gsc_writeq(unsigned long long val, unsigned long addr)
|
|||
|
||||
extern void __iomem * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
|
||||
|
||||
/* Most machines react poorly to I/O-space being cacheable... Instead let's
|
||||
* define ioremap() in terms of ioremap_nocache().
|
||||
*/
|
||||
extern inline void __iomem * ioremap(unsigned long offset, unsigned long size)
|
||||
{
|
||||
return __ioremap(offset, size, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* This one maps high address device memory and turns off caching for that area.
|
||||
* it's useful if some control registers are in such an area and write combining
|
||||
* or read caching is not desirable:
|
||||
*/
|
||||
extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
|
||||
{
|
||||
return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */);
|
||||
return __ioremap(offset, size, _PAGE_NO_CACHE);
|
||||
}
|
||||
#define ioremap_nocache(off, sz) ioremap((off), (sz))
|
||||
|
||||
extern void iounmap(void __iomem *addr);
|
||||
|
||||
|
||||
static inline unsigned char __raw_readb(const volatile void __iomem *addr)
|
||||
{
|
||||
return (*(volatile unsigned char __force *) (addr));
|
||||
|
|
|
@ -1,13 +1,30 @@
|
|||
#ifndef _PARISC_PAGE_H
|
||||
#define _PARISC_PAGE_H
|
||||
|
||||
/* PAGE_SHIFT determines the page size */
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
#if !defined(__KERNEL__)
|
||||
/* this is for userspace applications (4k page size) */
|
||||
# define PAGE_SHIFT 12 /* 4k */
|
||||
# define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
# define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/config.h>
|
||||
|
||||
#if defined(CONFIG_PARISC_PAGE_SIZE_4KB)
|
||||
# define PAGE_SHIFT 12 /* 4k */
|
||||
#elif defined(CONFIG_PARISC_PAGE_SIZE_16KB)
|
||||
# define PAGE_SHIFT 14 /* 16k */
|
||||
#elif defined(CONFIG_PARISC_PAGE_SIZE_64KB)
|
||||
# define PAGE_SHIFT 16 /* 64k */
|
||||
#else
|
||||
# error "unknown default kernel page size"
|
||||
#endif
|
||||
#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE-1))
|
||||
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/types.h>
|
||||
|
|
|
@ -59,16 +59,15 @@
|
|||
#define ISTACK_SIZE 32768 /* Interrupt Stack Size */
|
||||
#define ISTACK_ORDER 3
|
||||
|
||||
/* This is the size of the initially mapped kernel memory (i.e. currently
|
||||
* 0 to 1<<23 == 8MB */
|
||||
/* This is the size of the initially mapped kernel memory */
|
||||
#ifdef CONFIG_64BIT
|
||||
#define KERNEL_INITIAL_ORDER 24
|
||||
#define KERNEL_INITIAL_ORDER 24 /* 0 to 1<<24 = 16MB */
|
||||
#else
|
||||
#define KERNEL_INITIAL_ORDER 23
|
||||
#define KERNEL_INITIAL_ORDER 23 /* 0 to 1<<23 = 8MB */
|
||||
#endif
|
||||
#define KERNEL_INITIAL_SIZE (1 << KERNEL_INITIAL_ORDER)
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#if defined(CONFIG_64BIT) && defined(CONFIG_PARISC_PAGE_SIZE_4KB)
|
||||
#define PT_NLEVELS 3
|
||||
#define PGD_ORDER 1 /* Number of pages per pgd */
|
||||
#define PMD_ORDER 1 /* Number of pages per pmd */
|
||||
|
@ -111,11 +110,15 @@
|
|||
#define MAX_ADDRBITS (PGDIR_SHIFT + BITS_PER_PGD)
|
||||
#define MAX_ADDRESS (1UL << MAX_ADDRBITS)
|
||||
|
||||
#define SPACEID_SHIFT (MAX_ADDRBITS - 32)
|
||||
#define SPACEID_SHIFT (MAX_ADDRBITS - 32)
|
||||
|
||||
/* This calculates the number of initial pages we need for the initial
|
||||
* page tables */
|
||||
#define PT_INITIAL (1 << (KERNEL_INITIAL_ORDER - PMD_SHIFT))
|
||||
#if (KERNEL_INITIAL_ORDER) >= (PMD_SHIFT)
|
||||
# define PT_INITIAL (1 << (KERNEL_INITIAL_ORDER - PMD_SHIFT))
|
||||
#else
|
||||
# define PT_INITIAL (1) /* all initial PTEs fit into one page */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* pgd entries used up by user/kernel:
|
||||
|
@ -160,6 +163,10 @@ extern void *vmalloc_start;
|
|||
* to zero */
|
||||
#define PTE_SHIFT xlate_pabit(_PAGE_USER_BIT)
|
||||
|
||||
/* PFN_PTE_SHIFT defines the shift of a PTE value to access the PFN field */
|
||||
#define PFN_PTE_SHIFT 12
|
||||
|
||||
|
||||
/* this is how many bits may be used by the file functions */
|
||||
#define PTE_FILE_MAX_BITS (BITS_PER_LONG - PTE_SHIFT)
|
||||
|
||||
|
@ -188,7 +195,8 @@ extern void *vmalloc_start;
|
|||
/* The pgd/pmd contains a ptr (in phys addr space); since all pgds/pmds
|
||||
* are page-aligned, we don't care about the PAGE_OFFSET bits, except
|
||||
* for a few meta-information bits, so we shift the address to be
|
||||
* able to effectively address 40-bits of physical address space. */
|
||||
* able to effectively address 40/42/44-bits of physical address space
|
||||
* depending on 4k/16k/64k PAGE_SIZE */
|
||||
#define _PxD_PRESENT_BIT 31
|
||||
#define _PxD_ATTACHED_BIT 30
|
||||
#define _PxD_VALID_BIT 29
|
||||
|
@ -198,7 +206,7 @@ extern void *vmalloc_start;
|
|||
#define PxD_FLAG_VALID (1 << xlate_pabit(_PxD_VALID_BIT))
|
||||
#define PxD_FLAG_MASK (0xf)
|
||||
#define PxD_FLAG_SHIFT (4)
|
||||
#define PxD_VALUE_SHIFT (8)
|
||||
#define PxD_VALUE_SHIFT (8) /* (PAGE_SHIFT-PxD_FLAG_SHIFT) */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
@ -246,6 +254,7 @@ extern void *vmalloc_start;
|
|||
#define __S110 PAGE_RWX
|
||||
#define __S111 PAGE_RWX
|
||||
|
||||
|
||||
extern pgd_t swapper_pg_dir[]; /* declared in init_task.c */
|
||||
|
||||
/* initial page tables for 0-8MB for kernel */
|
||||
|
@ -272,7 +281,7 @@ extern unsigned long *empty_zero_page;
|
|||
#define pgd_flag(x) (pgd_val(x) & PxD_FLAG_MASK)
|
||||
#define pgd_address(x) ((unsigned long)(pgd_val(x) &~ PxD_FLAG_MASK) << PxD_VALUE_SHIFT)
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#if PT_NLEVELS == 3
|
||||
/* The first entry of the permanent pmd is not there if it contains
|
||||
* the gateway marker */
|
||||
#define pmd_none(x) (!pmd_val(x) || pmd_flag(x) == PxD_FLAG_ATTACHED)
|
||||
|
@ -282,7 +291,7 @@ extern unsigned long *empty_zero_page;
|
|||
#define pmd_bad(x) (!(pmd_flag(x) & PxD_FLAG_VALID))
|
||||
#define pmd_present(x) (pmd_flag(x) & PxD_FLAG_PRESENT)
|
||||
static inline void pmd_clear(pmd_t *pmd) {
|
||||
#ifdef CONFIG_64BIT
|
||||
#if PT_NLEVELS == 3
|
||||
if (pmd_flag(*pmd) & PxD_FLAG_ATTACHED)
|
||||
/* This is the entry pointing to the permanent pmd
|
||||
* attached to the pgd; cannot clear it */
|
||||
|
@ -303,7 +312,7 @@ static inline void pmd_clear(pmd_t *pmd) {
|
|||
#define pgd_bad(x) (!(pgd_flag(x) & PxD_FLAG_VALID))
|
||||
#define pgd_present(x) (pgd_flag(x) & PxD_FLAG_PRESENT)
|
||||
static inline void pgd_clear(pgd_t *pgd) {
|
||||
#ifdef CONFIG_64BIT
|
||||
#if PT_NLEVELS == 3
|
||||
if(pgd_flag(*pgd) & PxD_FLAG_ATTACHED)
|
||||
/* This is the permanent pmd attached to the pgd; cannot
|
||||
* free it */
|
||||
|
@ -351,7 +360,7 @@ extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return
|
|||
({ \
|
||||
pte_t __pte; \
|
||||
\
|
||||
pte_val(__pte) = ((addr)+pgprot_val(pgprot)); \
|
||||
pte_val(__pte) = ((((addr)>>PAGE_SHIFT)<<PFN_PTE_SHIFT) + pgprot_val(pgprot)); \
|
||||
\
|
||||
__pte; \
|
||||
})
|
||||
|
@ -361,20 +370,16 @@ extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return
|
|||
static inline pte_t pfn_pte(unsigned long pfn, pgprot_t pgprot)
|
||||
{
|
||||
pte_t pte;
|
||||
pte_val(pte) = (pfn << PAGE_SHIFT) | pgprot_val(pgprot);
|
||||
pte_val(pte) = (pfn << PFN_PTE_SHIFT) | pgprot_val(pgprot);
|
||||
return pte;
|
||||
}
|
||||
|
||||
/* This takes a physical page address that is used by the remapping functions */
|
||||
#define mk_pte_phys(physpage, pgprot) \
|
||||
({ pte_t __pte; pte_val(__pte) = physpage + pgprot_val(pgprot); __pte; })
|
||||
|
||||
extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||
{ pte_val(pte) = (pte_val(pte) & _PAGE_CHG_MASK) | pgprot_val(newprot); return pte; }
|
||||
|
||||
/* Permanent address of a page. On parisc we don't have highmem. */
|
||||
|
||||
#define pte_pfn(x) (pte_val(x) >> PAGE_SHIFT)
|
||||
#define pte_pfn(x) (pte_val(x) >> PFN_PTE_SHIFT)
|
||||
|
||||
#define pte_page(pte) (pfn_to_page(pte_pfn(pte)))
|
||||
|
||||
|
@ -499,6 +504,26 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
|
|||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
/* TLB page size encoding - see table 3-1 in parisc20.pdf */
|
||||
#define _PAGE_SIZE_ENCODING_4K 0
|
||||
#define _PAGE_SIZE_ENCODING_16K 1
|
||||
#define _PAGE_SIZE_ENCODING_64K 2
|
||||
#define _PAGE_SIZE_ENCODING_256K 3
|
||||
#define _PAGE_SIZE_ENCODING_1M 4
|
||||
#define _PAGE_SIZE_ENCODING_4M 5
|
||||
#define _PAGE_SIZE_ENCODING_16M 6
|
||||
#define _PAGE_SIZE_ENCODING_64M 7
|
||||
|
||||
#if defined(CONFIG_PARISC_PAGE_SIZE_4KB)
|
||||
# define _PAGE_SIZE_ENCODING_DEFAULT _PAGE_SIZE_ENCODING_4K
|
||||
#elif defined(CONFIG_PARISC_PAGE_SIZE_16KB)
|
||||
# define _PAGE_SIZE_ENCODING_DEFAULT _PAGE_SIZE_ENCODING_16K
|
||||
#elif defined(CONFIG_PARISC_PAGE_SIZE_64KB)
|
||||
# define _PAGE_SIZE_ENCODING_DEFAULT _PAGE_SIZE_ENCODING_64K
|
||||
#endif
|
||||
|
||||
|
||||
#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
|
||||
remap_pfn_range(vma, vaddr, pfn, size, prot)
|
||||
|
||||
|
|
|
@ -780,8 +780,14 @@
|
|||
#define __NR_readlinkat (__NR_Linux + 285)
|
||||
#define __NR_fchmodat (__NR_Linux + 286)
|
||||
#define __NR_faccessat (__NR_Linux + 287)
|
||||
#define __NR_unshare (__NR_Linux + 288)
|
||||
#define __NR_set_robust_list (__NR_Linux + 289)
|
||||
#define __NR_get_robust_list (__NR_Linux + 290)
|
||||
#define __NR_splice (__NR_Linux + 291)
|
||||
#define __NR_sync_file_range (__NR_Linux + 292)
|
||||
#define __NR_tee (__NR_Linux + 293)
|
||||
|
||||
#define __NR_Linux_syscalls 288
|
||||
#define __NR_Linux_syscalls 294
|
||||
|
||||
#define HPUX_GATEWAY_ADDR 0xC0000004
|
||||
#define LINUX_GATEWAY_ADDR 0x100
|
||||
|
|
|
@ -70,17 +70,18 @@ extern void iommu_free_table(struct device_node *dn);
|
|||
extern struct iommu_table *iommu_init_table(struct iommu_table * tbl);
|
||||
|
||||
extern int iommu_map_sg(struct device *dev, struct iommu_table *tbl,
|
||||
struct scatterlist *sglist, int nelems,
|
||||
struct scatterlist *sglist, int nelems, unsigned long mask,
|
||||
enum dma_data_direction direction);
|
||||
extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist,
|
||||
int nelems, enum dma_data_direction direction);
|
||||
|
||||
extern void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
dma_addr_t *dma_handle, unsigned long mask, gfp_t flag);
|
||||
extern void iommu_free_coherent(struct iommu_table *tbl, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle);
|
||||
extern dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr,
|
||||
size_t size, enum dma_data_direction direction);
|
||||
size_t size, unsigned long mask,
|
||||
enum dma_data_direction direction);
|
||||
extern void iommu_unmap_single(struct iommu_table *tbl, dma_addr_t dma_handle,
|
||||
size_t size, enum dma_data_direction direction);
|
||||
|
||||
|
|
|
@ -253,7 +253,11 @@ extern struct machdep_calls *machine_id;
|
|||
|
||||
#define __machine_desc __attribute__ ((__section__ (".machine.desc")))
|
||||
|
||||
#define define_machine(name) struct machdep_calls mach_##name __machine_desc =
|
||||
#define define_machine(name) \
|
||||
extern struct machdep_calls mach_##name; \
|
||||
EXPORT_SYMBOL(mach_##name); \
|
||||
struct machdep_calls mach_##name __machine_desc =
|
||||
|
||||
#define machine_is(name) \
|
||||
({ \
|
||||
extern struct machdep_calls mach_##name \
|
||||
|
|
|
@ -271,7 +271,7 @@
|
|||
#define __NR_getsid 252
|
||||
#define __NR_fdatasync 253
|
||||
#define __NR_nfsservctl 254
|
||||
#define __NR_sys_sync_file_range 255
|
||||
#define __NR_sync_file_range 255
|
||||
#define __NR_clock_settime 256
|
||||
#define __NR_clock_gettime 257
|
||||
#define __NR_clock_getres 258
|
||||
|
|
|
@ -273,7 +273,7 @@
|
|||
#define __NR_getsid 252
|
||||
#define __NR_fdatasync 253
|
||||
#define __NR_nfsservctl 254
|
||||
#define __NR_sys_sync_file_range 255
|
||||
#define __NR_sync_file_range 255
|
||||
#define __NR_clock_settime 256
|
||||
#define __NR_clock_gettime 257
|
||||
#define __NR_clock_getres 258
|
||||
|
|
|
@ -361,7 +361,11 @@ struct compat_xt_entry_target
|
|||
|
||||
struct compat_xt_counters
|
||||
{
|
||||
#if defined(CONFIG_X86_64) || defined(CONFIG_IA64)
|
||||
u_int32_t cnt[4];
|
||||
#else
|
||||
u_int64_t cnt[2];
|
||||
#endif
|
||||
};
|
||||
|
||||
struct compat_xt_counters_info
|
||||
|
|
|
@ -344,6 +344,13 @@ extern void skb_over_panic(struct sk_buff *skb, int len,
|
|||
void *here);
|
||||
extern void skb_under_panic(struct sk_buff *skb, int len,
|
||||
void *here);
|
||||
extern void skb_truesize_bug(struct sk_buff *skb);
|
||||
|
||||
static inline void skb_truesize_check(struct sk_buff *skb)
|
||||
{
|
||||
if (unlikely((int)skb->truesize < sizeof(struct sk_buff) + skb->len))
|
||||
skb_truesize_bug(skb);
|
||||
}
|
||||
|
||||
extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
|
||||
int getfrag(void *from, char *to, int offset,
|
||||
|
|
|
@ -454,6 +454,7 @@ static inline void sk_stream_set_owner_r(struct sk_buff *skb, struct sock *sk)
|
|||
|
||||
static inline void sk_stream_free_skb(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
skb_truesize_check(skb);
|
||||
sock_set_flag(sk, SOCK_QUEUE_SHRUNK);
|
||||
sk->sk_wmem_queued -= skb->truesize;
|
||||
sk->sk_forward_alloc += skb->truesize;
|
||||
|
|
|
@ -46,6 +46,8 @@
|
|||
#include <linux/mempolicy.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/migrate.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/div64.h>
|
||||
#include <asm/pgtable.h>
|
||||
|
@ -2173,6 +2175,7 @@ static struct address_space_operations shmem_aops = {
|
|||
.prepare_write = shmem_prepare_write,
|
||||
.commit_write = simple_commit_write,
|
||||
#endif
|
||||
.migratepage = migrate_page,
|
||||
};
|
||||
|
||||
static struct file_operations shmem_file_operations = {
|
||||
|
|
|
@ -831,7 +831,7 @@ static int translate_table(struct ebt_replace *repl,
|
|||
return -ENOMEM;
|
||||
for_each_possible_cpu(i) {
|
||||
newinfo->chainstack[i] =
|
||||
vmalloc(udc_cnt * sizeof(struct ebt_chainstack));
|
||||
vmalloc(udc_cnt * sizeof(*(newinfo->chainstack[0])));
|
||||
if (!newinfo->chainstack[i]) {
|
||||
while (i)
|
||||
vfree(newinfo->chainstack[--i]);
|
||||
|
@ -841,8 +841,7 @@ static int translate_table(struct ebt_replace *repl,
|
|||
}
|
||||
}
|
||||
|
||||
cl_s = (struct ebt_cl_stack *)
|
||||
vmalloc(udc_cnt * sizeof(struct ebt_cl_stack));
|
||||
cl_s = vmalloc(udc_cnt * sizeof(*cl_s));
|
||||
if (!cl_s)
|
||||
return -ENOMEM;
|
||||
i = 0; /* the i'th udc */
|
||||
|
@ -944,8 +943,7 @@ static int do_replace(void __user *user, unsigned int len)
|
|||
|
||||
countersize = COUNTER_OFFSET(tmp.nentries) *
|
||||
(highest_possible_processor_id()+1);
|
||||
newinfo = (struct ebt_table_info *)
|
||||
vmalloc(sizeof(struct ebt_table_info) + countersize);
|
||||
newinfo = vmalloc(sizeof(*newinfo) + countersize);
|
||||
if (!newinfo)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -967,8 +965,7 @@ static int do_replace(void __user *user, unsigned int len)
|
|||
/* the user wants counters back
|
||||
the check on the size is done later, when we have the lock */
|
||||
if (tmp.num_counters) {
|
||||
counterstmp = (struct ebt_counter *)
|
||||
vmalloc(tmp.num_counters * sizeof(struct ebt_counter));
|
||||
counterstmp = vmalloc(tmp.num_counters * sizeof(*counterstmp));
|
||||
if (!counterstmp) {
|
||||
ret = -ENOMEM;
|
||||
goto free_entries;
|
||||
|
@ -1148,8 +1145,7 @@ int ebt_register_table(struct ebt_table *table)
|
|||
|
||||
countersize = COUNTER_OFFSET(table->table->nentries) *
|
||||
(highest_possible_processor_id()+1);
|
||||
newinfo = (struct ebt_table_info *)
|
||||
vmalloc(sizeof(struct ebt_table_info) + countersize);
|
||||
newinfo = vmalloc(sizeof(*newinfo) + countersize);
|
||||
ret = -ENOMEM;
|
||||
if (!newinfo)
|
||||
return -ENOMEM;
|
||||
|
@ -1247,8 +1243,7 @@ static int update_counters(void __user *user, unsigned int len)
|
|||
if (hlp.num_counters == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if ( !(tmp = (struct ebt_counter *)
|
||||
vmalloc(hlp.num_counters * sizeof(struct ebt_counter))) ){
|
||||
if (!(tmp = vmalloc(hlp.num_counters * sizeof(*tmp)))) {
|
||||
MEMPRINT("Update_counters && nomemory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -1377,8 +1372,7 @@ static int copy_everything_to_user(struct ebt_table *t, void __user *user,
|
|||
BUGPRINT("Num_counters wrong\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
counterstmp = (struct ebt_counter *)
|
||||
vmalloc(nentries * sizeof(struct ebt_counter));
|
||||
counterstmp = vmalloc(nentries * sizeof(*counterstmp));
|
||||
if (!counterstmp) {
|
||||
MEMPRINT("Couldn't copy counters, out of memory\n");
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -112,6 +112,14 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here)
|
|||
BUG();
|
||||
}
|
||||
|
||||
void skb_truesize_bug(struct sk_buff *skb)
|
||||
{
|
||||
printk(KERN_ERR "SKB BUG: Invalid truesize (%u) "
|
||||
"len=%u, sizeof(sk_buff)=%Zd\n",
|
||||
skb->truesize, skb->len, sizeof(struct sk_buff));
|
||||
}
|
||||
EXPORT_SYMBOL(skb_truesize_bug);
|
||||
|
||||
/* Allocate a new skbuff. We do this ourselves so we can fill in a few
|
||||
* 'private' fields and also do memory statistics to find all the
|
||||
* [BEEP] leaks.
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче