Merge branch 'forlinus' of git://parisc-linux.org/home/kyle/git/parisc-2.6
This commit is contained in:
commit
8ed5759043
6
CREDITS
6
CREDITS
|
@ -2247,6 +2247,12 @@ S: 249 Nichols Avenue
|
|||
S: Syracuse, New York 13206
|
||||
S: USA
|
||||
|
||||
N: Kyle McMartin
|
||||
E: kyle@parisc-linux.org
|
||||
D: Linux/PARISC hacker
|
||||
D: AD1889 sound driver
|
||||
S: Ottawa, Canada
|
||||
|
||||
N: Dirk Melchers
|
||||
E: dirk@merlin.nbg.sub.org
|
||||
D: 8 bit XT hard disk driver for OMTI5520
|
||||
|
|
|
@ -197,6 +197,15 @@ M: Thorsten Knabe <linux@thorsten-knabe.de>
|
|||
W: http://linux.thorsten-knabe.de
|
||||
S: Maintained
|
||||
|
||||
AD1889 SOUND DRIVER
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
P: Thibaut Varene
|
||||
M: T-Bone@parisc-linux.org
|
||||
W: http://wiki.parisc-linux.org/AD1889
|
||||
L: parisc-linux@lists.parisc-linux.org
|
||||
S: Maintained
|
||||
|
||||
ADM1025 HARDWARE MONITOR DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
|
|
|
@ -47,10 +47,10 @@ config PM
|
|||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_MAY_HAVE_PC_FDC
|
||||
bool
|
||||
depends on BROKEN
|
||||
default y
|
||||
|
||||
source "init/Kconfig"
|
||||
|
@ -154,13 +154,14 @@ config HOTPLUG_CPU
|
|||
|
||||
config ARCH_DISCONTIGMEM_ENABLE
|
||||
bool "Discontiguous memory support (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
depends on 64BIT && EXPERIMENTAL
|
||||
help
|
||||
Say Y to support efficient handling of discontiguous physical memory,
|
||||
for architectures which are either NUMA (Non-Uniform Memory Access)
|
||||
or have huge holes in the physical address space for other reasons.
|
||||
See <file:Documentation/vm/numa> for more.
|
||||
|
||||
source "kernel/Kconfig.hz"
|
||||
source "mm/Kconfig"
|
||||
|
||||
config PREEMPT
|
||||
|
|
|
@ -20,7 +20,8 @@ NM = sh $(srctree)/arch/parisc/nm
|
|||
CHECKFLAGS += -D__hppa__=1
|
||||
|
||||
ifdef CONFIG_64BIT
|
||||
CROSS_COMPILE := hppa64-linux-
|
||||
CROSS_COMPILE := $(shell if [ -x /usr/bin/hppa64-linux-gnu-gcc ]; then \
|
||||
echo hppa64-linux-gnu-; else echo hppa64-linux-; fi)
|
||||
UTS_MACHINE := parisc64
|
||||
CHECKFLAGS += -D__LP64__=1 -m64
|
||||
else
|
||||
|
@ -34,6 +35,14 @@ FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align
|
|||
|
||||
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
|
||||
|
||||
GCC_VERSION := $(call cc-version)
|
||||
ifneq ($(shell if [ -z $(GCC_VERSION) ] ; then echo "bad"; fi ;),)
|
||||
$(error Sorry, couldn't find ($(cc-version)).)
|
||||
endif
|
||||
ifneq ($(shell if [ $(GCC_VERSION) -lt 0303 ] ; then echo "bad"; fi ;),)
|
||||
$(error Sorry, your compiler is too old ($(GCC_VERSION)). GCC v3.3 or above is required.)
|
||||
endif
|
||||
|
||||
cflags-y := -pipe
|
||||
|
||||
# These flags should be implied by an hppa-linux configuration, but they
|
||||
|
@ -43,7 +52,7 @@ cflags-y += -mno-space-regs -mfast-indirect-calls
|
|||
# Currently we save and restore fpregs on all kernel entry/interruption paths.
|
||||
# If that gets optimized, we might need to disable the use of fpregs in the
|
||||
# kernel.
|
||||
#cflags-y += -mdisable-fpregs
|
||||
cflags-y += -mdisable-fpregs
|
||||
|
||||
# Without this, "ld -r" results in .text sections that are too big
|
||||
# (> 0x40000) for branches to reach stubs.
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.10-pa5
|
||||
# Wed Jan 5 13:20:32 2005
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:04:34 2005
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_STACK_GROWSUP=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -15,35 +19,40 @@ CONFIG_EXPERIMENTAL=y
|
|||
# CONFIG_CLEAN_COMPILE is not set
|
||||
CONFIG_BROKEN=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -65,9 +74,18 @@ CONFIG_PA7100LC=y
|
|||
# CONFIG_PA7300LC is not set
|
||||
# CONFIG_PA8X00 is not set
|
||||
CONFIG_PA11=y
|
||||
# CONFIG_64BIT is not set
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_DISCONTIGMEM is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
|
@ -81,8 +99,6 @@ CONFIG_GSC_LASI=y
|
|||
# CONFIG_GSC_WAX is not set
|
||||
# CONFIG_EISA is not set
|
||||
# CONFIG_PCI is not set
|
||||
CONFIG_CHASSIS_LCD_LED=y
|
||||
# CONFIG_PDC_CHASSIS is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -90,12 +106,15 @@ CONFIG_CHASSIS_LCD_LED=y
|
|||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
# PA-RISC specific drivers
|
||||
#
|
||||
CONFIG_CHASSIS_LCD_LED=y
|
||||
# CONFIG_PDC_CHASSIS is not set
|
||||
CONFIG_PDC_STABLE=y
|
||||
|
||||
#
|
||||
# Executable file formats
|
||||
|
@ -104,137 +123,7 @@ CONFIG_BINFMT_ELF=y
|
|||
CONFIG_BINFMT_MISC=m
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=m
|
||||
CONFIG_PARPORT_PC_CML1=m
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# CONFIG_PARPORT_OTHER is not set
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=y
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
#
|
||||
# SCSI support type (disk, tape, CD-ROM)
|
||||
#
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
# CONFIG_CHR_DEV_OSST is not set
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
#
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
# CONFIG_SCSI_CONSTANTS is not set
|
||||
# CONFIG_SCSI_LOGGING is not set
|
||||
|
||||
#
|
||||
# SCSI Transport Attributes
|
||||
#
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
# CONFIG_SCSI_IMM is not set
|
||||
CONFIG_SCSI_LASI700=y
|
||||
CONFIG_53C700_MEM_MAPPED=y
|
||||
CONFIG_53C700_LE_ON_BE=y
|
||||
# CONFIG_SCSI_ZALON is not set
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=m
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_MD_RAID1=m
|
||||
# CONFIG_MD_RAID10 is not set
|
||||
# CONFIG_MD_RAID5 is not set
|
||||
# CONFIG_MD_RAID6 is not set
|
||||
# CONFIG_MD_MULTIPATH is not set
|
||||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
# CONFIG_IEEE1394 is not set
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
#
|
||||
|
||||
#
|
||||
# Networking support
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
|
@ -243,12 +132,14 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_NETLINK_DEV=y
|
||||
CONFIG_UNIX=y
|
||||
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=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
|
@ -262,8 +153,10 @@ CONFIG_INET_AH=m
|
|||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
CONFIG_INET_TUNNEL=m
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=m
|
||||
CONFIG_INET_TCP_DIAG=m
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
#
|
||||
# IP: Virtual Server Configuration
|
||||
|
@ -272,6 +165,7 @@ CONFIG_IP_TCPDIAG=y
|
|||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -279,11 +173,14 @@ CONFIG_NETFILTER=y
|
|||
CONFIG_IP_NF_CONNTRACK=m
|
||||
# CONFIG_IP_NF_CT_ACCT is not set
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
|
@ -307,21 +204,23 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
|||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
# CONFIG_IP_NF_MATCH_STRING is not set
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
# CONFIG_IP_NF_TARGET_NFQUEUE is not set
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
# CONFIG_IP_NF_NAT_LOCAL is not set
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
|
@ -333,6 +232,7 @@ CONFIG_IP_NF_TARGET_ECN=m
|
|||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
# CONFIG_IP_NF_TARGET_TTL is not set
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
|
@ -340,10 +240,11 @@ CONFIG_IP_NF_TARGET_NOTRACK=m
|
|||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
|
||||
# CONFIG_IP_NF_COMPAT_IPFWADM is not set
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
|
@ -362,10 +263,6 @@ CONFIG_LLC2=m
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
|
@ -373,17 +270,162 @@ CONFIG_LLC2=m
|
|||
# Network testing
|
||||
#
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
# CONFIG_STANDALONE is not set
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=m
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=y
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
#
|
||||
# SCSI support type (disk, tape, CD-ROM)
|
||||
#
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
# CONFIG_CHR_DEV_OSST is not set
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
# CONFIG_CHR_DEV_SCH is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
#
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
# CONFIG_SCSI_CONSTANTS is not set
|
||||
# CONFIG_SCSI_LOGGING is not set
|
||||
|
||||
#
|
||||
# SCSI Transport Attributes
|
||||
#
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
# CONFIG_SCSI_IMM is not set
|
||||
CONFIG_SCSI_LASI700=y
|
||||
CONFIG_53C700_LE_ON_BE=y
|
||||
# CONFIG_SCSI_ZALON is not set
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=m
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_MD_RAID1=m
|
||||
# CONFIG_MD_RAID10 is not set
|
||||
# CONFIG_MD_RAID5 is not set
|
||||
# CONFIG_MD_RAID6 is not set
|
||||
# CONFIG_MD_MULTIPATH is not set
|
||||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
# CONFIG_IEEE1394 is not set
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
#
|
||||
|
||||
#
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
# CONFIG_EQUALIZER is not set
|
||||
CONFIG_TUN=m
|
||||
# CONFIG_ETHERTAP is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
|
@ -391,6 +433,7 @@ CONFIG_TUN=m
|
|||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=m
|
||||
CONFIG_LASI_82596=y
|
||||
# CONFIG_NET_POCKET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
|
@ -414,6 +457,7 @@ CONFIG_NET_RADIO=y
|
|||
#
|
||||
# CONFIG_STRIP is not set
|
||||
# CONFIG_ATMEL is not set
|
||||
# CONFIG_HOSTAP is not set
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
|
@ -431,6 +475,8 @@ CONFIG_PPPOE=m
|
|||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
|
@ -459,19 +505,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
CONFIG_SERIO_GSCPS2=y
|
||||
CONFIG_HP_SDC=y
|
||||
CONFIG_HIL_MLC=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -483,6 +516,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
|
|||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
CONFIG_KEYBOARD_HIL_OLD=y
|
||||
# CONFIG_KEYBOARD_HIL is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
|
@ -493,6 +527,19 @@ CONFIG_MOUSE_HIL=m
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
CONFIG_SERIO_GSCPS2=y
|
||||
CONFIG_HP_SDC=y
|
||||
CONFIG_HIL_MLC=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -511,7 +558,6 @@ CONFIG_SERIAL_8250_EXTENDED=y
|
|||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_MULTIPORT is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
|
||||
#
|
||||
|
@ -546,11 +592,13 @@ CONFIG_GEN_RTC_X=y
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
|
@ -561,10 +609,20 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -579,28 +637,36 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
# Graphics support
|
||||
#
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
CONFIG_FB_STI=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
CONFIG_STI_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_STI_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
# CONFIG_FONT_6x11 is not set
|
||||
# CONFIG_FONT_7x14 is not set
|
||||
# CONFIG_FONT_PEARL_8x8 is not set
|
||||
# CONFIG_FONT_ACORN_8x8 is not set
|
||||
# CONFIG_FONT_MINI_4x6 is not set
|
||||
# CONFIG_FONT_SUN8x16 is not set
|
||||
# CONFIG_FONT_SUN12x22 is not set
|
||||
# CONFIG_FONT_10x18 is not set
|
||||
|
||||
#
|
||||
# Logo configuration
|
||||
|
@ -610,6 +676,7 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_LOGO_PARISC_CLUT224=y
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -656,10 +723,6 @@ CONFIG_SND_HARMONY=y
|
|||
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
|
@ -670,11 +733,21 @@ CONFIG_SND_HARMONY=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_JBD=y
|
||||
|
@ -682,20 +755,24 @@ CONFIG_JBD=y
|
|||
# CONFIG_REISERFS_FS is not set
|
||||
CONFIG_JFS_FS=m
|
||||
# CONFIG_JFS_POSIX_ACL is not set
|
||||
# CONFIG_JFS_SECURITY is not set
|
||||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_XFS_FS=m
|
||||
# CONFIG_XFS_RT is not set
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
# CONFIG_XFS_SECURITY is not set
|
||||
# CONFIG_XFS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
|
@ -722,14 +799,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
# CONFIG_TMPFS_SECURITY is not set
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -754,16 +828,19 @@ CONFIG_UFS_FS=m
|
|||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_DIRECTIO=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=m
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
|
@ -778,6 +855,7 @@ CONFIG_CIFS=m
|
|||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
|
@ -838,13 +916,19 @@ CONFIG_OPROFILE=m
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
@ -865,6 +949,7 @@ CONFIG_CRYPTO_SHA1=m
|
|||
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
|
||||
|
@ -881,10 +966,15 @@ CONFIG_CRYPTO_MICHAEL_MIC=m
|
|||
CONFIG_CRYPTO_CRC32C=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
#
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=m
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11-rc4-pa1
|
||||
# Wed Feb 16 11:32:49 2005
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:04:54 2005
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -10,6 +10,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -19,26 +20,32 @@ CONFIG_EXPERIMENTAL=y
|
|||
CONFIG_BROKEN=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
|
@ -48,6 +55,7 @@ CONFIG_CC_ALIGN_LABELS=0
|
|||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -74,7 +82,19 @@ CONFIG_PREFETCH=y
|
|||
CONFIG_64BIT=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
# CONFIG_FLATMEM_MANUAL is not set
|
||||
CONFIG_DISCONTIGMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_NEED_MULTIPLE_NODES=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_NR_CPUS=8
|
||||
|
@ -85,7 +105,7 @@ CONFIG_NR_CPUS=8
|
|||
# CONFIG_GSC is not set
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_PCI_LBA=y
|
||||
CONFIG_IOSAPIC=y
|
||||
CONFIG_IOMMU_SBA=y
|
||||
|
@ -96,6 +116,8 @@ CONFIG_IOMMU_SBA=y
|
|||
CONFIG_PCCARD=m
|
||||
# CONFIG_PCMCIA_DEBUG is not set
|
||||
CONFIG_PCMCIA=m
|
||||
# CONFIG_PCMCIA_LOAD_CIS is not set
|
||||
CONFIG_PCMCIA_IOCTL=y
|
||||
CONFIG_CARDBUS=y
|
||||
|
||||
#
|
||||
|
@ -104,7 +126,6 @@ CONFIG_CARDBUS=y
|
|||
CONFIG_YENTA=m
|
||||
CONFIG_PD6729=m
|
||||
CONFIG_I82092=m
|
||||
CONFIG_TCIC=m
|
||||
CONFIG_PCCARD_NONSTATIC=m
|
||||
|
||||
#
|
||||
|
@ -126,6 +147,203 @@ CONFIG_PDC_STABLE=y
|
|||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
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=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
CONFIG_INET_TUNNEL=m
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
#
|
||||
# IP: Virtual Server Configuration
|
||||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
CONFIG_IPV6=m
|
||||
# CONFIG_IPV6_PRIVACY is not set
|
||||
CONFIG_INET6_AH=m
|
||||
CONFIG_INET6_ESP=m
|
||||
CONFIG_INET6_IPCOMP=m
|
||||
CONFIG_INET6_TUNNEL=m
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
#
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
# CONFIG_IP_NF_CT_ACCT is not set
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MAC=m
|
||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||
CONFIG_IP_NF_MATCH_MARK=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_LENGTH=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||
CONFIG_IP_NF_MATCH_HELPER=m
|
||||
CONFIG_IP_NF_MATCH_STATE=m
|
||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
# CONFIG_IP_NF_MATCH_STRING is not set
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
# CONFIG_IP_NF_TARGET_NFQUEUE is not set
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
CONFIG_IP_NF_NAT_TFTP=m
|
||||
CONFIG_IP_NF_NAT_AMANDA=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_TOS=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
# CONFIG_IP_NF_TARGET_TTL is not set
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# IPv6: Netfilter Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP6_NF_QUEUE is not set
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
# CONFIG_IP6_NF_MATCH_LIMIT is not set
|
||||
CONFIG_IP6_NF_MATCH_MAC=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
|
||||
# CONFIG_IP6_NF_MATCH_OWNER is not set
|
||||
# CONFIG_IP6_NF_MATCH_MARK is not set
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
# CONFIG_IP6_NF_MATCH_AHESP is not set
|
||||
# CONFIG_IP6_NF_MATCH_LENGTH is not set
|
||||
# CONFIG_IP6_NF_MATCH_EUI64 is not set
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_LOG=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
|
||||
CONFIG_IP6_NF_MANGLE=m
|
||||
# CONFIG_IP6_NF_TARGET_MARK is not set
|
||||
# CONFIG_IP6_NF_TARGET_HL is not set
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
CONFIG_IP_DCCP=m
|
||||
CONFIG_INET_DCCP_DIAG=m
|
||||
|
||||
#
|
||||
# DCCP CCIDs Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
|
||||
#
|
||||
# DCCP Kernel Hacking
|
||||
#
|
||||
# CONFIG_IP_DCCP_DEBUG is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
CONFIG_LLC=m
|
||||
CONFIG_LLC2=m
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
@ -138,6 +356,11 @@ CONFIG_BINFMT_ELF=y
|
|||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -169,7 +392,6 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
|
@ -189,6 +411,7 @@ CONFIG_IOSCHED_CFQ=y
|
|||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
|
@ -201,6 +424,7 @@ CONFIG_CHR_DEV_ST=y
|
|||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
# CONFIG_CHR_DEV_SCH is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
|
@ -215,6 +439,7 @@ CONFIG_SCSI_MULTI_LUN=y
|
|||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
CONFIG_SCSI_FC_ATTRS=m
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
CONFIG_SCSI_SAS_ATTRS=m
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
|
@ -229,14 +454,12 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
|||
# CONFIG_SCSI_ADVANSYS is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_CPQFCTS is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_SCSI_INITIO is not set
|
||||
# CONFIG_SCSI_INIA100 is not set
|
||||
|
@ -246,8 +469,6 @@ CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
|||
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
||||
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_PCI2000 is not set
|
||||
# CONFIG_SCSI_PCI2220I is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
CONFIG_SCSI_QLOGIC_FC=m
|
||||
# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
|
||||
|
@ -258,7 +479,9 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
# CONFIG_SCSI_QLA22XX is not set
|
||||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA6312=m
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_QLA24XX is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
|
@ -288,8 +511,11 @@ CONFIG_MD_RAID1=y
|
|||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
CONFIG_FUSION=m
|
||||
CONFIG_FUSION_MAX_SGE=40
|
||||
CONFIG_FUSION=y
|
||||
CONFIG_FUSION_SPI=m
|
||||
CONFIG_FUSION_FC=m
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
CONFIG_FUSION_MAX_SGE=128
|
||||
CONFIG_FUSION_CTL=m
|
||||
|
||||
#
|
||||
|
@ -303,159 +529,24 @@ CONFIG_FUSION_CTL=m
|
|||
# CONFIG_I2O is not set
|
||||
|
||||
#
|
||||
# Networking support
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_NETLINK_DEV=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
CONFIG_INET_TUNNEL=m
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
|
||||
#
|
||||
# IP: Virtual Server Configuration
|
||||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
#
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
# CONFIG_IP_NF_CT_ACCT is not set
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
CONFIG_IP_NF_TFTP=m
|
||||
CONFIG_IP_NF_AMANDA=m
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||
CONFIG_IP_NF_MATCH_MAC=m
|
||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||
CONFIG_IP_NF_MATCH_MARK=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_LENGTH=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||
CONFIG_IP_NF_MATCH_HELPER=m
|
||||
CONFIG_IP_NF_MATCH_STATE=m
|
||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||
CONFIG_IP_NF_MATCH_OWNER=m
|
||||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||
CONFIG_IP_NF_TARGET_SAME=m
|
||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
CONFIG_IP_NF_NAT_TFTP=m
|
||||
CONFIG_IP_NF_NAT_AMANDA=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP_NF_TARGET_TOS=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_TARGET_DSCP=m
|
||||
CONFIG_IP_NF_TARGET_MARK=m
|
||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
CONFIG_LLC=m
|
||||
CONFIG_LLC2=m
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_BONDING=m
|
||||
# CONFIG_EQUALIZER is not set
|
||||
CONFIG_TUN=m
|
||||
# CONFIG_ETHERTAP is not set
|
||||
|
||||
#
|
||||
# ARCnet devices
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
|
@ -463,6 +554,7 @@ CONFIG_NET_ETHERNET=y
|
|||
CONFIG_MII=m
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
CONFIG_VORTEX=m
|
||||
CONFIG_TYPHOON=m
|
||||
|
@ -479,6 +571,7 @@ CONFIG_TULIP_MMIO=y
|
|||
# CONFIG_DE4X5 is not set
|
||||
# CONFIG_WINBOND_840 is not set
|
||||
# CONFIG_DM9102 is not set
|
||||
# CONFIG_ULI526X is not set
|
||||
CONFIG_PCMCIA_XIRCOM=m
|
||||
# CONFIG_PCMCIA_XIRTULIP is not set
|
||||
CONFIG_HP100=m
|
||||
|
@ -489,48 +582,43 @@ CONFIG_PCNET32=m
|
|||
# CONFIG_B44 is not set
|
||||
# CONFIG_FORCEDETH is not set
|
||||
# CONFIG_DGRS is not set
|
||||
CONFIG_EEPRO100=m
|
||||
# CONFIG_EEPRO100 is not set
|
||||
CONFIG_E100=m
|
||||
CONFIG_E100_NAPI=y
|
||||
# CONFIG_FEALNX is not set
|
||||
CONFIG_NATSEMI=m
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
# CONFIG_8139CP is not set
|
||||
CONFIG_8139TOO=m
|
||||
# CONFIG_8139TOO_PIO is not set
|
||||
# CONFIG_8139TOO_TUNE_TWISTER is not set
|
||||
# CONFIG_8139TOO_8129 is not set
|
||||
# CONFIG_8139_OLD_RX_RESET is not set
|
||||
# CONFIG_8139TOO is not set
|
||||
# CONFIG_SIS900 is not set
|
||||
CONFIG_EPIC100=m
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
CONFIG_VIA_RHINE=m
|
||||
CONFIG_VIA_RHINE_MMIO=y
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
#
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_DL2K=m
|
||||
# CONFIG_DL2K is not set
|
||||
CONFIG_E1000=m
|
||||
CONFIG_E1000_NAPI=y
|
||||
# CONFIG_NS83820 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=m
|
||||
# CONFIG_BNX2 is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
CONFIG_IXGB=m
|
||||
CONFIG_IXGB_NAPI=y
|
||||
CONFIG_S2IO=m
|
||||
CONFIG_S2IO_NAPI=y
|
||||
# CONFIG_2BUFF_MODE is not set
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -560,6 +648,7 @@ CONFIG_PCMCIA_RAYCS=m
|
|||
CONFIG_HERMES=m
|
||||
CONFIG_PLX_HERMES=m
|
||||
CONFIG_TMD_HERMES=m
|
||||
# CONFIG_NORTEL_HERMES is not set
|
||||
CONFIG_PCI_HERMES=m
|
||||
# CONFIG_ATMEL is not set
|
||||
|
||||
|
@ -567,6 +656,7 @@ CONFIG_PCI_HERMES=m
|
|||
# Wireless 802.11b Pcmcia/Cardbus cards support
|
||||
#
|
||||
CONFIG_PCMCIA_HERMES=m
|
||||
# CONFIG_PCMCIA_SPECTRUM is not set
|
||||
CONFIG_AIRO_CS=m
|
||||
CONFIG_PCMCIA_WL3501=m
|
||||
|
||||
|
@ -574,6 +664,7 @@ CONFIG_PCMCIA_WL3501=m
|
|||
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
|
||||
#
|
||||
# CONFIG_PRISM54 is not set
|
||||
# CONFIG_HOSTAP is not set
|
||||
CONFIG_NET_WIRELESS=y
|
||||
|
||||
#
|
||||
|
@ -607,6 +698,8 @@ CONFIG_PPP_BSDCOMP=m
|
|||
# CONFIG_NET_FC is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
|
@ -632,13 +725,6 @@ CONFIG_INPUT=y
|
|||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
# CONFIG_SERIO is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -648,6 +734,12 @@ CONFIG_SOUND_GAMEPORT=y
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -667,7 +759,6 @@ CONFIG_SERIAL_8250_EXTENDED=y
|
|||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_MULTIPORT is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
|
||||
#
|
||||
|
@ -677,6 +768,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
CONFIG_PDC_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
|
||||
|
@ -707,6 +799,11 @@ CONFIG_GEN_RTC_X=y
|
|||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
|
@ -717,10 +814,20 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -742,6 +849,7 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||
# CONFIG_STI_CONSOLE is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -751,13 +859,9 @@ CONFIG_DUMMY_CONSOLE_ROWS=64
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
|
@ -772,17 +876,18 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_MTHCA=m
|
||||
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
|
||||
CONFIG_INFINIBAND_IPOIB=m
|
||||
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_JBD=y
|
||||
|
@ -794,22 +899,20 @@ CONFIG_JFS_FS=m
|
|||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
# CONFIG_XFS_SECURITY is not set
|
||||
# CONFIG_XFS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
|
@ -836,13 +939,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_XATTR is not set
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -867,15 +968,18 @@ CONFIG_UFS_FS=m
|
|||
#
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_DIRECTIO=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_V4=y
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_LOCKD=m
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=m
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=m
|
||||
CONFIG_SUNRPC_GSS=m
|
||||
CONFIG_RPCSEC_GSS_KRB5=m
|
||||
|
@ -890,6 +994,7 @@ CONFIG_CIFS=m
|
|||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
|
@ -906,15 +1011,15 @@ CONFIG_NLS_CODEPAGE_437=m
|
|||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
# 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=m
|
||||
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
# 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
|
||||
|
@ -926,10 +1031,10 @@ CONFIG_NLS_CODEPAGE_865=m
|
|||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
# 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
|
||||
|
@ -950,11 +1055,15 @@ CONFIG_OPROFILE=m
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP is not set
|
||||
|
@ -974,25 +1083,26 @@ CONFIG_KEYS_DEBUG_PROC_KEYS=y
|
|||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MD5=m
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_SHA1=m
|
||||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
# 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=m
|
||||
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_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=m
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
CONFIG_CRYPTO_CRC32C=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
|
||||
|
@ -1004,6 +1114,7 @@ CONFIG_CRYPTO_TEST=m
|
|||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=m
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.10-pa5
|
||||
# Wed Jan 5 13:35:54 2005
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:06:10 2005
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_STACK_GROWSUP=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -14,33 +17,39 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
# CONFIG_EXPERIMENTAL is not set
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -60,8 +69,14 @@ CONFIG_PA7100LC=y
|
|||
# CONFIG_PA7300LC is not set
|
||||
# CONFIG_PA8X00 is not set
|
||||
CONFIG_PA11=y
|
||||
# CONFIG_64BIT is not set
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_HZ_100 is not set
|
||||
CONFIG_HZ_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=250
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
|
@ -78,11 +93,25 @@ CONFIG_EISA_NAMES=y
|
|||
CONFIG_ISA=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_GSC_DINO=y
|
||||
# CONFIG_PCI_LBA is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
||||
#
|
||||
# PA-RISC specific drivers
|
||||
#
|
||||
CONFIG_CHASSIS_LCD_LED=y
|
||||
# CONFIG_PDC_CHASSIS is not set
|
||||
CONFIG_PDC_STABLE=y
|
||||
|
||||
#
|
||||
# Executable file formats
|
||||
|
@ -90,6 +119,64 @@ CONFIG_CHASSIS_LCD_LED=y
|
|||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP 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=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_IPV6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
@ -99,8 +186,14 @@ CONFIG_BINFMT_ELF=y
|
|||
#
|
||||
CONFIG_STANDALONE=y
|
||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -111,10 +204,8 @@ CONFIG_STANDALONE=y
|
|||
#
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=y
|
||||
CONFIG_PARPORT_PC_CML1=y
|
||||
# CONFIG_PARPORT_SERIAL is not set
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# CONFIG_PARPORT_OTHER is not set
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
|
@ -125,19 +216,17 @@ CONFIG_PARPORT_GSC=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_CPQ_DA is not set
|
||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=y
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_SX8 is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
|
||||
|
@ -149,6 +238,7 @@ CONFIG_IOSCHED_NOOP=y
|
|||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_ATA_OVER_ETH=y
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
|
@ -158,6 +248,7 @@ CONFIG_IOSCHED_CFQ=y
|
|||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
|
@ -170,6 +261,7 @@ CONFIG_CHR_DEV_ST=y
|
|||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
# CONFIG_CHR_DEV_SCH is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
|
@ -183,16 +275,16 @@ CONFIG_CHR_DEV_SG=y
|
|||
#
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX is not set
|
||||
# CONFIG_SCSI_7000FASST is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
# CONFIG_SCSI_AHA152X is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_AHA1740 is not set
|
||||
# CONFIG_SCSI_AACRAID is not set
|
||||
# CONFIG_SCSI_AIC7XXX is not set
|
||||
|
@ -202,14 +294,11 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_DTC3280 is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380 is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -219,7 +308,6 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
# CONFIG_SCSI_IMM is not set
|
||||
# CONFIG_SCSI_NCR53C406A is not set
|
||||
CONFIG_SCSI_LASI700=y
|
||||
CONFIG_53C700_MEM_MAPPED=y
|
||||
CONFIG_53C700_LE_ON_BE=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||
|
@ -231,7 +319,6 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
|||
# CONFIG_SCSI_PAS16 is not set
|
||||
# CONFIG_SCSI_PSI240I is not set
|
||||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
|
@ -240,12 +327,12 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_QLA6322 is not set
|
||||
# CONFIG_SCSI_QLA24XX is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_SIM710 is not set
|
||||
# CONFIG_SCSI_SYM53C416 is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_T128 is not set
|
||||
# CONFIG_SCSI_U14_34F is not set
|
||||
# CONFIG_SCSI_NSP32 is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
|
@ -263,6 +350,7 @@ CONFIG_MD_LINEAR=y
|
|||
CONFIG_MD_RAID0=y
|
||||
CONFIG_MD_RAID1=y
|
||||
CONFIG_MD_RAID5=y
|
||||
CONFIG_MD_RAID6=y
|
||||
# CONFIG_MD_MULTIPATH is not set
|
||||
# CONFIG_MD_FAULTY is not set
|
||||
# CONFIG_BLK_DEV_DM is not set
|
||||
|
@ -271,6 +359,9 @@ CONFIG_MD_RAID5=y
|
|||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
|
@ -283,58 +374,8 @@ CONFIG_MD_RAID5=y
|
|||
# CONFIG_I2O is not set
|
||||
|
||||
#
|
||||
# Networking support
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_NETLINK_DEV=y
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
|
@ -346,6 +387,11 @@ CONFIG_NETDEVICES=y
|
|||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
|
@ -354,8 +400,8 @@ CONFIG_NET_ETHERNET=y
|
|||
# CONFIG_LASI_82596 is not set
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_NET_VENDOR_RACAL is not set
|
||||
|
||||
|
@ -369,6 +415,7 @@ CONFIG_TULIP=y
|
|||
# CONFIG_DE4X5 is not set
|
||||
# CONFIG_WINBOND_840 is not set
|
||||
# CONFIG_DM9102 is not set
|
||||
# CONFIG_ULI526X is not set
|
||||
# CONFIG_DEPCA is not set
|
||||
# CONFIG_HP100 is not set
|
||||
# CONFIG_NET_ISA is not set
|
||||
|
@ -384,12 +431,15 @@ CONFIG_TULIP=y
|
|||
# CONFIG_NS83820 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
|
@ -413,12 +463,12 @@ CONFIG_NET_RADIO=y
|
|||
#
|
||||
# Wireless 802.11b ISA/PCI cards support
|
||||
#
|
||||
# CONFIG_AIRO is not set
|
||||
# CONFIG_HERMES is not set
|
||||
|
||||
#
|
||||
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
|
||||
#
|
||||
# CONFIG_HOSTAP is not set
|
||||
CONFIG_NET_WIRELESS=y
|
||||
|
||||
#
|
||||
|
@ -435,6 +485,8 @@ CONFIG_PPP=y
|
|||
# CONFIG_PPP_BSDCOMP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_NET_FC is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
|
@ -463,24 +515,13 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
CONFIG_SERIO_GSCPS2=y
|
||||
# CONFIG_HP_SDC is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW 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
|
||||
|
@ -488,7 +529,7 @@ CONFIG_INPUT_KEYBOARD=y
|
|||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
# CONFIG_KEYBOARD_HIL is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_MOUSE_PS2=y
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_INPORT is not set
|
||||
# CONFIG_MOUSE_LOGIBM is not set
|
||||
|
@ -501,6 +542,19 @@ CONFIG_INPUT_MISC=y
|
|||
# CONFIG_INPUT_UINPUT is not set
|
||||
# CONFIG_HP_SDC_RTC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
CONFIG_SERIO_GSCPS2=y
|
||||
# CONFIG_HP_SDC is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -519,8 +573,11 @@ CONFIG_SERIAL_8250_EXTENDED=y
|
|||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_MULTIPORT is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
# CONFIG_SERIAL_8250_FOURPORT is not set
|
||||
# CONFIG_SERIAL_8250_ACCENT is not set
|
||||
# CONFIG_SERIAL_8250_BOCA is not set
|
||||
# CONFIG_SERIAL_8250_HUB6 is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
|
@ -529,6 +586,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
# CONFIG_PDC_CONSOLE is not set
|
||||
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
|
||||
|
@ -555,10 +613,13 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
|
@ -569,10 +630,20 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -587,6 +658,11 @@ CONFIG_GEN_RTC=y
|
|||
# Graphics support
|
||||
#
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -595,6 +671,7 @@ CONFIG_FB=y
|
|||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
CONFIG_FB_STI=y
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA is not set
|
||||
# CONFIG_FB_MATROX is not set
|
||||
# CONFIG_FB_RADEON_OLD is not set
|
||||
|
@ -606,18 +683,19 @@ CONFIG_FB_STI=y
|
|||
# CONFIG_FB_KYRO is not set
|
||||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
# CONFIG_MDA_CONSOLE is not set
|
||||
CONFIG_STI_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_STI_CONSOLE=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
@ -630,6 +708,7 @@ CONFIG_LOGO_LINUX_MONO=y
|
|||
CONFIG_LOGO_LINUX_VGA16=y
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
CONFIG_LOGO_PARISC_CLUT224=y
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -639,13 +718,9 @@ CONFIG_LOGO_PARISC_CLUT224=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
|
@ -657,24 +732,37 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# SN Devices
|
||||
#
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
|
@ -697,11 +785,10 @@ CONFIG_JOLIET=y
|
|||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_XATTR is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -719,15 +806,19 @@ CONFIG_RAMFS=y
|
|||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_SMB_FS is not set
|
||||
CONFIG_SMB_FS=y
|
||||
# CONFIG_SMB_NLS_DEFAULT is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
|
@ -785,13 +876,19 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
@ -815,6 +912,7 @@ CONFIG_CRYPTO=y
|
|||
# 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
|
||||
|
@ -831,9 +929,14 @@ CONFIG_CRYPTO=y
|
|||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
#
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -27,6 +27,7 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
int split_tlb;
|
||||
int dcache_stride;
|
||||
|
@ -207,6 +208,9 @@ parisc_cache_init(void)
|
|||
|
||||
/* "New and Improved" version from Jim Hull
|
||||
* (1 << (cc_block-1)) * (cc_line << (4 + cnf.cc_shift))
|
||||
* The following CAFL_STRIDE is an optimized version, see
|
||||
* http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023625.html
|
||||
* http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023671.html
|
||||
*/
|
||||
#define CAFL_STRIDE(cnf) (cnf.cc_line << (3 + cnf.cc_block + cnf.cc_shift))
|
||||
dcache_stride = CAFL_STRIDE(cache_info.dc_conf);
|
||||
|
@ -339,17 +343,15 @@ int parisc_cache_flush_threshold = FLUSH_THRESHOLD;
|
|||
void parisc_setup_cache_timing(void)
|
||||
{
|
||||
unsigned long rangetime, alltime;
|
||||
extern char _text; /* start of kernel code, defined by linker */
|
||||
extern char _end; /* end of BSS, defined by linker */
|
||||
unsigned long size;
|
||||
|
||||
alltime = mfctl(16);
|
||||
flush_data_cache();
|
||||
alltime = mfctl(16) - alltime;
|
||||
|
||||
size = (unsigned long)(&_end - _text);
|
||||
size = (unsigned long)(_end - _text);
|
||||
rangetime = mfctl(16);
|
||||
flush_kernel_dcache_range((unsigned long)&_text, size);
|
||||
flush_kernel_dcache_range((unsigned long)_text, size);
|
||||
rangetime = mfctl(16) - rangetime;
|
||||
|
||||
printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
|
||||
|
|
|
@ -46,36 +46,51 @@ static struct device root = {
|
|||
.bus_id = "parisc",
|
||||
};
|
||||
|
||||
#define for_each_padev(padev) \
|
||||
for (padev = next_dev(&root); padev != NULL; \
|
||||
padev = next_dev(&padev->dev))
|
||||
static inline int check_dev(struct device *dev)
|
||||
{
|
||||
if (dev->bus == &parisc_bus_type) {
|
||||
struct parisc_device *pdev;
|
||||
pdev = to_parisc_device(dev);
|
||||
return pdev->id.hw_type != HPHW_FAULTY;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define check_dev(padev) \
|
||||
(padev->id.hw_type != HPHW_FAULTY) ? padev : next_dev(&padev->dev)
|
||||
static struct device *
|
||||
parse_tree_node(struct device *parent, int index, struct hardware_path *modpath);
|
||||
|
||||
struct recurse_struct {
|
||||
void * obj;
|
||||
int (*fn)(struct device *, void *);
|
||||
};
|
||||
|
||||
static int descend_children(struct device * dev, void * data)
|
||||
{
|
||||
struct recurse_struct * recurse_data = (struct recurse_struct *)data;
|
||||
|
||||
if (recurse_data->fn(dev, recurse_data->obj))
|
||||
return 1;
|
||||
else
|
||||
return device_for_each_child(dev, recurse_data, descend_children);
|
||||
}
|
||||
|
||||
/**
|
||||
* next_dev - enumerates registered devices
|
||||
* @dev: the previous device returned from next_dev
|
||||
* for_each_padev - Iterate over all devices in the tree
|
||||
* @fn: Function to call for each device.
|
||||
* @data: Data to pass to the called function.
|
||||
*
|
||||
* next_dev does a depth-first search of the tree, returning parents
|
||||
* before children. Returns NULL when there are no more devices.
|
||||
* This performs a depth-first traversal of the tree, calling the
|
||||
* function passed for each node. It calls the function for parents
|
||||
* before children.
|
||||
*/
|
||||
static struct parisc_device *next_dev(struct device *dev)
|
||||
|
||||
static int for_each_padev(int (*fn)(struct device *, void *), void * data)
|
||||
{
|
||||
if (!list_empty(&dev->children)) {
|
||||
dev = list_to_dev(dev->children.next);
|
||||
return check_dev(to_parisc_device(dev));
|
||||
}
|
||||
|
||||
while (dev != &root) {
|
||||
if (dev->node.next != &dev->parent->children) {
|
||||
dev = list_to_dev(dev->node.next);
|
||||
return to_parisc_device(dev);
|
||||
}
|
||||
dev = dev->parent;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
struct recurse_struct recurse_data = {
|
||||
.obj = data,
|
||||
.fn = fn,
|
||||
};
|
||||
return device_for_each_child(&root, &recurse_data, descend_children);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,12 +120,6 @@ static int match_device(struct parisc_driver *driver, struct parisc_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void claim_device(struct parisc_driver *driver, struct parisc_device *dev)
|
||||
{
|
||||
dev->driver = driver;
|
||||
request_mem_region(dev->hpa, 0x1000, driver->name);
|
||||
}
|
||||
|
||||
static int parisc_driver_probe(struct device *dev)
|
||||
{
|
||||
int rc;
|
||||
|
@ -119,8 +128,8 @@ static int parisc_driver_probe(struct device *dev)
|
|||
|
||||
rc = pa_drv->probe(pa_dev);
|
||||
|
||||
if(!rc)
|
||||
claim_device(pa_drv, pa_dev);
|
||||
if (!rc)
|
||||
pa_dev->driver = pa_drv;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -131,7 +140,6 @@ static int parisc_driver_remove(struct device *dev)
|
|||
struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
|
||||
if (pa_drv->remove)
|
||||
pa_drv->remove(pa_dev);
|
||||
release_mem_region(pa_dev->hpa, 0x1000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -173,6 +181,24 @@ int register_parisc_driver(struct parisc_driver *driver)
|
|||
}
|
||||
EXPORT_SYMBOL(register_parisc_driver);
|
||||
|
||||
|
||||
struct match_count {
|
||||
struct parisc_driver * driver;
|
||||
int count;
|
||||
};
|
||||
|
||||
static int match_and_count(struct device * dev, void * data)
|
||||
{
|
||||
struct match_count * m = data;
|
||||
struct parisc_device * pdev = to_parisc_device(dev);
|
||||
|
||||
if (check_dev(dev)) {
|
||||
if (match_device(m->driver, pdev))
|
||||
m->count++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* count_parisc_driver - count # of devices this driver would match
|
||||
* @driver: the PA-RISC driver to try
|
||||
|
@ -182,15 +208,14 @@ EXPORT_SYMBOL(register_parisc_driver);
|
|||
*/
|
||||
int count_parisc_driver(struct parisc_driver *driver)
|
||||
{
|
||||
struct parisc_device *device;
|
||||
int cnt = 0;
|
||||
struct match_count m = {
|
||||
.driver = driver,
|
||||
.count = 0,
|
||||
};
|
||||
|
||||
for_each_padev(device) {
|
||||
if (match_device(driver, device))
|
||||
cnt++;
|
||||
}
|
||||
for_each_padev(match_and_count, &m);
|
||||
|
||||
return cnt;
|
||||
return m.count;
|
||||
}
|
||||
|
||||
|
||||
|
@ -206,14 +231,34 @@ int unregister_parisc_driver(struct parisc_driver *driver)
|
|||
}
|
||||
EXPORT_SYMBOL(unregister_parisc_driver);
|
||||
|
||||
struct find_data {
|
||||
unsigned long hpa;
|
||||
struct parisc_device * dev;
|
||||
};
|
||||
|
||||
static int find_device(struct device * dev, void * data)
|
||||
{
|
||||
struct parisc_device * pdev = to_parisc_device(dev);
|
||||
struct find_data * d = (struct find_data*)data;
|
||||
|
||||
if (check_dev(dev)) {
|
||||
if (pdev->hpa.start == d->hpa) {
|
||||
d->dev = pdev;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct parisc_device *find_device_by_addr(unsigned long hpa)
|
||||
{
|
||||
struct parisc_device *dev;
|
||||
for_each_padev(dev) {
|
||||
if (dev->hpa == hpa)
|
||||
return dev;
|
||||
}
|
||||
return NULL;
|
||||
struct find_data d = {
|
||||
.hpa = hpa,
|
||||
};
|
||||
int ret;
|
||||
|
||||
ret = for_each_padev(find_device, &d);
|
||||
return ret ? d.dev : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -387,6 +432,23 @@ struct parisc_device * create_tree_node(char id, struct device *parent)
|
|||
return dev;
|
||||
}
|
||||
|
||||
struct match_id_data {
|
||||
char id;
|
||||
struct parisc_device * dev;
|
||||
};
|
||||
|
||||
static int match_by_id(struct device * dev, void * data)
|
||||
{
|
||||
struct parisc_device * pdev = to_parisc_device(dev);
|
||||
struct match_id_data * d = data;
|
||||
|
||||
if (pdev->hw_path == d->id) {
|
||||
d->dev = pdev;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* alloc_tree_node - returns a device entry in the iotree
|
||||
* @parent: the parent node in the tree
|
||||
|
@ -397,15 +459,13 @@ struct parisc_device * create_tree_node(char id, struct device *parent)
|
|||
*/
|
||||
static struct parisc_device * alloc_tree_node(struct device *parent, char id)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
list_for_each_entry(dev, &parent->children, node) {
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
if (padev->hw_path == id)
|
||||
return padev;
|
||||
}
|
||||
|
||||
return create_tree_node(id, parent);
|
||||
struct match_id_data d = {
|
||||
.id = id,
|
||||
};
|
||||
if (device_for_each_child(parent, &d, match_by_id))
|
||||
return d.dev;
|
||||
else
|
||||
return create_tree_node(id, parent);
|
||||
}
|
||||
|
||||
static struct parisc_device *create_parisc_device(struct hardware_path *modpath)
|
||||
|
@ -439,10 +499,8 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
|
|||
|
||||
dev = create_parisc_device(mod_path);
|
||||
if (dev->id.hw_type != HPHW_FAULTY) {
|
||||
char p[64];
|
||||
print_pa_hwpath(dev, p);
|
||||
printk("Two devices have hardware path %s. Please file a bug with HP.\n"
|
||||
"In the meantime, you could try rearranging your cards.\n", p);
|
||||
"In the meantime, you could try rearranging your cards.\n", parisc_pathname(dev));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -451,12 +509,27 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
|
|||
dev->id.hversion_rev = iodc_data[1] & 0x0f;
|
||||
dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) |
|
||||
(iodc_data[5] << 8) | iodc_data[6];
|
||||
dev->hpa = hpa;
|
||||
dev->hpa.name = parisc_pathname(dev);
|
||||
dev->hpa.start = hpa;
|
||||
if (hpa == 0xf4000000 || hpa == 0xf6000000 ||
|
||||
hpa == 0xf8000000 || hpa == 0xfa000000) {
|
||||
dev->hpa.end = hpa + 0x01ffffff;
|
||||
} else {
|
||||
dev->hpa.end = hpa + 0xfff;
|
||||
}
|
||||
dev->hpa.flags = IORESOURCE_MEM;
|
||||
name = parisc_hardware_description(&dev->id);
|
||||
if (name) {
|
||||
strlcpy(dev->name, name, sizeof(dev->name));
|
||||
}
|
||||
|
||||
/* Silently fail things like mouse ports which are subsumed within
|
||||
* the keyboard controller
|
||||
*/
|
||||
if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa))
|
||||
printk("Unable to claim HPA %lx for device %s\n",
|
||||
hpa, name);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
|
@ -555,6 +628,33 @@ static int match_parisc_device(struct device *dev, int index,
|
|||
return (curr->hw_path == id);
|
||||
}
|
||||
|
||||
struct parse_tree_data {
|
||||
int index;
|
||||
struct hardware_path * modpath;
|
||||
struct device * dev;
|
||||
};
|
||||
|
||||
static int check_parent(struct device * dev, void * data)
|
||||
{
|
||||
struct parse_tree_data * d = data;
|
||||
|
||||
if (check_dev(dev)) {
|
||||
if (dev->bus == &parisc_bus_type) {
|
||||
if (match_parisc_device(dev, d->index, d->modpath))
|
||||
d->dev = dev;
|
||||
} else if (is_pci_dev(dev)) {
|
||||
if (match_pci_device(dev, d->index, d->modpath))
|
||||
d->dev = dev;
|
||||
} else if (dev->bus == NULL) {
|
||||
/* we are on a bus bridge */
|
||||
struct device *new = parse_tree_node(dev, d->index, d->modpath);
|
||||
if (new)
|
||||
d->dev = new;
|
||||
}
|
||||
}
|
||||
return d->dev != NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse_tree_node - returns a device entry in the iotree
|
||||
* @parent: the parent node in the tree
|
||||
|
@ -568,24 +668,18 @@ static int match_parisc_device(struct device *dev, int index,
|
|||
static struct device *
|
||||
parse_tree_node(struct device *parent, int index, struct hardware_path *modpath)
|
||||
{
|
||||
struct device *device;
|
||||
|
||||
list_for_each_entry(device, &parent->children, node) {
|
||||
if (device->bus == &parisc_bus_type) {
|
||||
if (match_parisc_device(device, index, modpath))
|
||||
return device;
|
||||
} else if (is_pci_dev(device)) {
|
||||
if (match_pci_device(device, index, modpath))
|
||||
return device;
|
||||
} else if (device->bus == NULL) {
|
||||
/* we are on a bus bridge */
|
||||
struct device *new = parse_tree_node(device, index, modpath);
|
||||
if (new)
|
||||
return new;
|
||||
}
|
||||
}
|
||||
struct parse_tree_data d = {
|
||||
.index = index,
|
||||
.modpath = modpath,
|
||||
};
|
||||
|
||||
return NULL;
|
||||
struct recurse_struct recurse_data = {
|
||||
.obj = &d,
|
||||
.fn = check_parent,
|
||||
};
|
||||
|
||||
device_for_each_child(parent, &recurse_data, descend_children);
|
||||
return d.dev;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -636,7 +730,7 @@ EXPORT_SYMBOL(device_to_hwpath);
|
|||
((dev->id.hw_type == HPHW_IOA) || (dev->id.hw_type == HPHW_BCPORT))
|
||||
|
||||
#define IS_LOWER_PORT(dev) \
|
||||
((gsc_readl(dev->hpa + offsetof(struct bc_module, io_status)) \
|
||||
((gsc_readl(dev->hpa.start + offsetof(struct bc_module, io_status)) \
|
||||
& BC_PORT_MASK) == BC_LOWER_PORT)
|
||||
|
||||
#define MAX_NATIVE_DEVICES 64
|
||||
|
@ -645,8 +739,8 @@ EXPORT_SYMBOL(device_to_hwpath);
|
|||
#define FLEX_MASK F_EXTEND(0xfffc0000)
|
||||
#define IO_IO_LOW offsetof(struct bc_module, io_io_low)
|
||||
#define IO_IO_HIGH offsetof(struct bc_module, io_io_high)
|
||||
#define READ_IO_IO_LOW(dev) (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_LOW)
|
||||
#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_HIGH)
|
||||
#define READ_IO_IO_LOW(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_LOW)
|
||||
#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_HIGH)
|
||||
|
||||
static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
|
||||
struct device *parent);
|
||||
|
@ -655,10 +749,10 @@ void walk_lower_bus(struct parisc_device *dev)
|
|||
{
|
||||
unsigned long io_io_low, io_io_high;
|
||||
|
||||
if(!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev))
|
||||
if (!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev))
|
||||
return;
|
||||
|
||||
if(dev->id.hw_type == HPHW_IOA) {
|
||||
if (dev->id.hw_type == HPHW_IOA) {
|
||||
io_io_low = (unsigned long)(signed int)(READ_IO_IO_LOW(dev) << 16);
|
||||
io_io_high = io_io_low + MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET;
|
||||
} else {
|
||||
|
@ -731,7 +825,7 @@ static void print_parisc_device(struct parisc_device *dev)
|
|||
|
||||
print_pa_hwpath(dev, hw_path);
|
||||
printk(KERN_INFO "%d. %s at 0x%lx [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }",
|
||||
++count, dev->name, dev->hpa, hw_path, dev->id.hw_type,
|
||||
++count, dev->name, dev->hpa.start, hw_path, dev->id.hw_type,
|
||||
dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);
|
||||
|
||||
if (dev->num_addrs) {
|
||||
|
@ -753,13 +847,20 @@ void init_parisc_bus(void)
|
|||
get_device(&root);
|
||||
}
|
||||
|
||||
|
||||
static int print_one_device(struct device * dev, void * data)
|
||||
{
|
||||
struct parisc_device * pdev = to_parisc_device(dev);
|
||||
|
||||
if (check_dev(dev))
|
||||
print_parisc_device(pdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* print_parisc_devices - Print out a list of devices found in this system
|
||||
*/
|
||||
void print_parisc_devices(void)
|
||||
{
|
||||
struct parisc_device *dev;
|
||||
for_each_padev(dev) {
|
||||
print_parisc_device(dev);
|
||||
}
|
||||
for_each_padev(print_one_device, NULL);
|
||||
}
|
||||
|
|
|
@ -30,14 +30,14 @@
|
|||
* - save registers to kernel stack and handle in assembly or C */
|
||||
|
||||
|
||||
#include <asm/psw.h>
|
||||
#include <asm/assembly.h> /* for LDREG/STREG defines */
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/psw.h>
|
||||
#include <asm/signal.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
#define CMPIB cmpib,*
|
||||
#define CMPB cmpb,*
|
||||
#define COND(x) *x
|
||||
|
@ -67,19 +67,22 @@
|
|||
|
||||
/* Switch to virtual mapping, trashing only %r1 */
|
||||
.macro virt_map
|
||||
rsm PSW_SM_Q,%r0
|
||||
tovirt_r1 %r29
|
||||
mfsp %sr7, %r1
|
||||
or,= %r0,%r1,%r0 /* Only save sr7 in sr3 if sr7 != 0 */
|
||||
mtsp %r1, %sr3
|
||||
/* pcxt_ssm_bug */
|
||||
rsm PSW_SM_I, %r0 /* barrier for "Relied upon Translation */
|
||||
mtsp %r0, %sr4
|
||||
mtsp %r0, %sr5
|
||||
mfsp %sr7, %r1
|
||||
or,= %r0,%r1,%r0 /* Only save sr7 in sr3 if sr7 != 0 */
|
||||
mtsp %r1, %sr3
|
||||
tovirt_r1 %r29
|
||||
load32 KERNEL_PSW, %r1
|
||||
|
||||
rsm PSW_SM_QUIET,%r0 /* second "heavy weight" ctl op */
|
||||
mtsp %r0, %sr6
|
||||
mtsp %r0, %sr7
|
||||
load32 KERNEL_PSW, %r1
|
||||
mtctl %r1, %cr22
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
mtctl %r1, %ipsw
|
||||
load32 4f, %r1
|
||||
mtctl %r1, %cr18 /* Set IIAOQ tail */
|
||||
ldo 4(%r1), %r1
|
||||
|
@ -214,7 +217,7 @@
|
|||
va = r8 /* virtual address for which the trap occured */
|
||||
spc = r24 /* space for which the trap occured */
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
|
||||
/*
|
||||
* itlb miss interruption handler (parisc 1.1 - 32 bit)
|
||||
|
@ -236,7 +239,7 @@
|
|||
|
||||
.macro itlb_20 code
|
||||
mfctl %pcsq, spc
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b itlb_miss_20w
|
||||
#else
|
||||
b itlb_miss_20
|
||||
|
@ -246,7 +249,7 @@
|
|||
.align 32
|
||||
.endm
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
/*
|
||||
* naitlb miss interruption handler (parisc 1.1 - 32 bit)
|
||||
*
|
||||
|
@ -283,7 +286,7 @@
|
|||
.macro naitlb_20 code
|
||||
|
||||
mfctl %isr,spc
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b itlb_miss_20w
|
||||
#else
|
||||
b itlb_miss_20
|
||||
|
@ -296,7 +299,7 @@
|
|||
.align 32
|
||||
.endm
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
/*
|
||||
* dtlb miss interruption handler (parisc 1.1 - 32 bit)
|
||||
*/
|
||||
|
@ -318,7 +321,7 @@
|
|||
.macro dtlb_20 code
|
||||
|
||||
mfctl %isr, spc
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b dtlb_miss_20w
|
||||
#else
|
||||
b dtlb_miss_20
|
||||
|
@ -328,7 +331,7 @@
|
|||
.align 32
|
||||
.endm
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
/* nadtlb miss interruption handler (parisc 1.1 - 32 bit) */
|
||||
|
||||
.macro nadtlb_11 code
|
||||
|
@ -346,7 +349,7 @@
|
|||
.macro nadtlb_20 code
|
||||
|
||||
mfctl %isr,spc
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b nadtlb_miss_20w
|
||||
#else
|
||||
b nadtlb_miss_20
|
||||
|
@ -356,7 +359,7 @@
|
|||
.align 32
|
||||
.endm
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
/*
|
||||
* dirty bit trap interruption handler (parisc 1.1 - 32 bit)
|
||||
*/
|
||||
|
@ -378,7 +381,7 @@
|
|||
.macro dbit_20 code
|
||||
|
||||
mfctl %isr,spc
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b dbit_trap_20w
|
||||
#else
|
||||
b dbit_trap_20
|
||||
|
@ -391,7 +394,7 @@
|
|||
/* The following are simple 32 vs 64 bit instruction
|
||||
* abstractions for the macros */
|
||||
.macro EXTR reg1,start,length,reg2
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u \reg1,32+\start,\length,\reg2
|
||||
#else
|
||||
extrw,u \reg1,\start,\length,\reg2
|
||||
|
@ -399,7 +402,7 @@
|
|||
.endm
|
||||
|
||||
.macro DEP reg1,start,length,reg2
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depd \reg1,32+\start,\length,\reg2
|
||||
#else
|
||||
depw \reg1,\start,\length,\reg2
|
||||
|
@ -407,7 +410,7 @@
|
|||
.endm
|
||||
|
||||
.macro DEPI val,start,length,reg
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi \val,32+\start,\length,\reg
|
||||
#else
|
||||
depwi \val,\start,\length,\reg
|
||||
|
@ -418,7 +421,7 @@
|
|||
* fault. We have to extract this and place it in the va,
|
||||
* zeroing the corresponding bits in the space register */
|
||||
.macro space_adjust spc,va,tmp
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u \spc,63,SPACEID_SHIFT,\tmp
|
||||
depd %r0,63,SPACEID_SHIFT,\spc
|
||||
depd \tmp,31,SPACEID_SHIFT,\va
|
||||
|
@ -476,7 +479,7 @@
|
|||
bb,>=,n \pmd,_PxD_PRESENT_BIT,\fault
|
||||
DEP %r0,31,PxD_FLAG_SHIFT,\pmd /* clear flags */
|
||||
copy \pmd,%r9
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
shld %r9,PxD_VALUE_SHIFT,\pmd
|
||||
#else
|
||||
shlw %r9,PxD_VALUE_SHIFT,\pmd
|
||||
|
@ -607,7 +610,7 @@
|
|||
.macro do_alias spc,tmp,tmp1,va,pte,prot,fault
|
||||
cmpib,COND(<>),n 0,\spc,\fault
|
||||
ldil L%(TMPALIAS_MAP_START),\tmp
|
||||
#if defined(__LP64__) && (TMPALIAS_MAP_START >= 0x80000000)
|
||||
#if defined(CONFIG_64BIT) && (TMPALIAS_MAP_START >= 0x80000000)
|
||||
/* on LP64, ldi will sign extend into the upper 32 bits,
|
||||
* which is behaviour we don't want */
|
||||
depdi 0,31,32,\tmp
|
||||
|
@ -621,7 +624,7 @@
|
|||
* OK, it is in the temp alias region, check whether "from" or "to".
|
||||
* Check "subtle" note in pacache.S re: r23/r26.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u,*= \va,41,1,%r0
|
||||
#else
|
||||
extrw,u,= \va,9,1,%r0
|
||||
|
@ -688,7 +691,7 @@ fault_vector_20:
|
|||
def 30
|
||||
def 31
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
|
||||
.export fault_vector_11
|
||||
|
||||
|
@ -761,7 +764,7 @@ __kernel_thread:
|
|||
|
||||
copy %r30, %r1
|
||||
ldo PT_SZ_ALGN(%r30),%r30
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Yo, function pointers in wide mode are little structs... -PB */
|
||||
ldd 24(%r26), %r2
|
||||
STREG %r2, PT_GR27(%r1) /* Store childs %dp */
|
||||
|
@ -777,7 +780,7 @@ __kernel_thread:
|
|||
or %r26, %r24, %r26 /* will have kernel mappings. */
|
||||
ldi 1, %r25 /* stack_start, signals kernel thread */
|
||||
stw %r0, -52(%r30) /* user_tid */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
BL do_fork, %r2
|
||||
|
@ -806,7 +809,7 @@ ret_from_kernel_thread:
|
|||
|
||||
LDREG TI_TASK-THREAD_SZ_ALGN(%r30), %r1
|
||||
LDREG TASK_PT_GR25(%r1), %r26
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
LDREG TASK_PT_GR27(%r1), %r27
|
||||
LDREG TASK_PT_GR22(%r1), %r22
|
||||
#endif
|
||||
|
@ -814,11 +817,16 @@ ret_from_kernel_thread:
|
|||
ble 0(%sr7, %r1)
|
||||
copy %r31, %r2
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
loadgp /* Thread could have been in a module */
|
||||
#endif
|
||||
#ifndef CONFIG_64BIT
|
||||
b sys_exit
|
||||
#else
|
||||
load32 sys_exit, %r1
|
||||
bv %r0(%r1)
|
||||
#endif
|
||||
ldi 0, %r26
|
||||
|
||||
.import sys_execve, code
|
||||
|
@ -830,7 +838,7 @@ __execve:
|
|||
STREG %r26, PT_GR26(%r16)
|
||||
STREG %r25, PT_GR25(%r16)
|
||||
STREG %r24, PT_GR24(%r16)
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
BL sys_execve, %r2
|
||||
|
@ -855,6 +863,7 @@ __execve:
|
|||
_switch_to:
|
||||
STREG %r2, -RP_OFFSET(%r30)
|
||||
|
||||
callee_save_float
|
||||
callee_save
|
||||
|
||||
load32 _switch_to_ret, %r2
|
||||
|
@ -871,6 +880,7 @@ _switch_to:
|
|||
_switch_to_ret:
|
||||
mtctl %r0, %cr0 /* Needed for single stepping */
|
||||
callee_rest
|
||||
callee_rest_float
|
||||
|
||||
LDREG -RP_OFFSET(%r30), %r2
|
||||
bv %r0(%r2)
|
||||
|
@ -888,9 +898,6 @@ _switch_to_ret:
|
|||
* this way, then we will need to copy %sr3 in to PT_SR[3..7], and
|
||||
* adjust IASQ[0..1].
|
||||
*
|
||||
* Note that the following code uses a "relied upon translation".
|
||||
* See the parisc ACD for details. The ssm is necessary due to a
|
||||
* PCXT bug.
|
||||
*/
|
||||
|
||||
.align 4096
|
||||
|
@ -911,7 +918,7 @@ syscall_exit_rfi:
|
|||
STREG %r19,PT_IAOQ1(%r16)
|
||||
LDREG PT_PSW(%r16),%r19
|
||||
load32 USER_PSW_MASK,%r1
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
load32 USER_PSW_HI_MASK,%r20
|
||||
depd %r20,31,32,%r1
|
||||
#endif
|
||||
|
@ -955,7 +962,7 @@ intr_return:
|
|||
/* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) amount
|
||||
** irq_stat[] is defined using ____cacheline_aligned.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
shld %r1, 6, %r20
|
||||
#else
|
||||
shlw %r1, 5, %r20
|
||||
|
@ -963,9 +970,6 @@ intr_return:
|
|||
add %r19,%r20,%r19 /* now have &irq_stat[smp_processor_id()] */
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
LDREG IRQSTAT_SIRQ_PEND(%r19),%r20 /* hardirq.h: unsigned long */
|
||||
cmpib,<>,n 0,%r20,intr_do_softirq /* forward */
|
||||
|
||||
intr_check_resched:
|
||||
|
||||
/* check for reschedule */
|
||||
|
@ -985,24 +989,19 @@ intr_restore:
|
|||
rest_fp %r1
|
||||
rest_general %r29
|
||||
|
||||
/* Create a "relied upon translation" PA 2.0 Arch. F-5 */
|
||||
ssm 0,%r0
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
/* inverse of virt_map */
|
||||
pcxt_ssm_bug
|
||||
rsm PSW_SM_QUIET,%r0 /* prepare for rfi */
|
||||
tophys_r1 %r29
|
||||
rsm (PSW_SM_Q|PSW_SM_P|PSW_SM_D|PSW_SM_I),%r0
|
||||
|
||||
/* Restore space id's and special cr's from PT_REGS
|
||||
* structure pointed to by r29 */
|
||||
* structure pointed to by r29
|
||||
*/
|
||||
rest_specials %r29
|
||||
|
||||
/* Important: Note that rest_stack restores r29
|
||||
* last (we are using it)! It also restores r1 and r30. */
|
||||
/* IMPORTANT: rest_stack restores r29 last (we are using it)!
|
||||
* It also restores r1 and r30.
|
||||
*/
|
||||
rest_stack
|
||||
|
||||
rfi
|
||||
|
@ -1015,17 +1014,6 @@ intr_restore:
|
|||
nop
|
||||
nop
|
||||
|
||||
.import do_softirq,code
|
||||
intr_do_softirq:
|
||||
bl do_softirq,%r2
|
||||
#ifdef __LP64__
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#else
|
||||
nop
|
||||
#endif
|
||||
b intr_check_resched
|
||||
nop
|
||||
|
||||
.import schedule,code
|
||||
intr_do_resched:
|
||||
/* Only do reschedule if we are returning to user space */
|
||||
|
@ -1036,12 +1024,17 @@ intr_do_resched:
|
|||
CMPIB= 0,%r20,intr_restore /* backward */
|
||||
nop
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
ldil L%intr_check_sig, %r2
|
||||
#ifndef CONFIG_64BIT
|
||||
b schedule
|
||||
#else
|
||||
load32 schedule, %r20
|
||||
bv %r0(%r20)
|
||||
#endif
|
||||
ldo R%intr_check_sig(%r2), %r2
|
||||
|
||||
|
||||
|
@ -1064,7 +1057,7 @@ intr_do_signal:
|
|||
|
||||
copy %r0, %r24 /* unsigned long in_syscall */
|
||||
copy %r16, %r25 /* struct pt_regs *regs */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1088,7 +1081,7 @@ intr_extint:
|
|||
mfctl %cr31,%r1
|
||||
copy %r30,%r17
|
||||
/* FIXME! depi below has hardcoded idea of interrupt stack size (32k)*/
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi 0,63,15,%r17
|
||||
#else
|
||||
depi 0,31,15,%r17
|
||||
|
@ -1115,7 +1108,7 @@ intr_extint:
|
|||
|
||||
ldil L%intr_return, %r2
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1153,15 +1146,17 @@ intr_save:
|
|||
|
||||
CMPIB=,n 6,%r26,skip_save_ior
|
||||
|
||||
/* save_specials left ipsw value in r8 for us to test */
|
||||
|
||||
mfctl %cr20, %r16 /* isr */
|
||||
nop /* serialize mfctl on PA 2.0 to avoid 4 cycle penalty */
|
||||
mfctl %cr21, %r17 /* ior */
|
||||
|
||||
#ifdef __LP64__
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
/*
|
||||
* If the interrupted code was running with W bit off (32 bit),
|
||||
* clear the b bits (bits 0 & 1) in the ior.
|
||||
* save_specials left ipsw value in r8 for us to test.
|
||||
*/
|
||||
extrd,u,*<> %r8,PSW_W_BIT,1,%r0
|
||||
depdi 0,1,2,%r17
|
||||
|
@ -1192,7 +1187,7 @@ skip_save_ior:
|
|||
loadgp
|
||||
|
||||
copy %r29, %r25 /* arg1 is pt_regs */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1230,7 +1225,7 @@ skip_save_ior:
|
|||
spc = r24 /* space for which the trap occured */
|
||||
ptp = r25 /* page directory/page table pointer */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
|
||||
dtlb_miss_20w:
|
||||
space_adjust spc,va,t0
|
||||
|
@ -1487,10 +1482,10 @@ nadtlb_emulate:
|
|||
add,l %r1,%r24,%r1 /* doesn't affect c/b bits */
|
||||
|
||||
nadtlb_nullify:
|
||||
mfctl %cr22,%r8 /* Get ipsw */
|
||||
mfctl %ipsw,%r8
|
||||
ldil L%PSW_N,%r9
|
||||
or %r8,%r9,%r8 /* Set PSW_N */
|
||||
mtctl %r8,%cr22
|
||||
mtctl %r8,%ipsw
|
||||
|
||||
rfir
|
||||
nop
|
||||
|
@ -1521,7 +1516,7 @@ nadtlb_probe_check:
|
|||
nop
|
||||
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
itlb_miss_20w:
|
||||
|
||||
/*
|
||||
|
@ -1588,7 +1583,7 @@ itlb_miss_20:
|
|||
|
||||
#endif
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
|
||||
dbit_trap_20w:
|
||||
space_adjust spc,va,t0
|
||||
|
@ -1797,7 +1792,7 @@ sys_fork_wrapper:
|
|||
|
||||
STREG %r2,-RP_OFFSET(%r30)
|
||||
ldo FRAME_SIZE(%r30),%r30
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1847,7 +1842,7 @@ sys_clone_wrapper:
|
|||
|
||||
STREG %r2,-RP_OFFSET(%r30)
|
||||
ldo FRAME_SIZE(%r30),%r30
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1869,7 +1864,7 @@ sys_vfork_wrapper:
|
|||
|
||||
STREG %r2,-RP_OFFSET(%r30)
|
||||
ldo FRAME_SIZE(%r30),%r30
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
|
||||
|
@ -1897,10 +1892,10 @@ sys_vfork_wrapper:
|
|||
|
||||
STREG %r2,-RP_OFFSET(%r30)
|
||||
ldo FRAME_SIZE(%r30),%r30
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
bl \execve,%r2
|
||||
BL \execve,%r2
|
||||
copy %r1,%arg0
|
||||
|
||||
ldo -FRAME_SIZE(%r30),%r30
|
||||
|
@ -1923,7 +1918,7 @@ error_\execve:
|
|||
sys_execve_wrapper:
|
||||
execve_wrapper sys_execve
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
.export sys32_execve_wrapper
|
||||
.import sys32_execve
|
||||
|
||||
|
@ -1937,7 +1932,7 @@ sys_rt_sigreturn_wrapper:
|
|||
ldo TASK_REGS(%r26),%r26 /* get pt regs */
|
||||
/* Don't save regs, we are going to restore them from sigcontext. */
|
||||
STREG %r2, -RP_OFFSET(%r30)
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo FRAME_SIZE(%r30), %r30
|
||||
BL sys_rt_sigreturn,%r2
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
|
@ -1968,7 +1963,7 @@ sys_sigaltstack_wrapper:
|
|||
ldo TASK_REGS(%r1),%r24 /* get pt regs */
|
||||
LDREG TASK_PT_GR30(%r24),%r24
|
||||
STREG %r2, -RP_OFFSET(%r30)
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo FRAME_SIZE(%r30), %r30
|
||||
b,l do_sigaltstack,%r2
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
|
@ -1982,7 +1977,7 @@ sys_sigaltstack_wrapper:
|
|||
bv %r0(%r2)
|
||||
nop
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
.export sys32_sigaltstack_wrapper
|
||||
sys32_sigaltstack_wrapper:
|
||||
/* Get the user stack pointer */
|
||||
|
@ -2006,7 +2001,7 @@ sys_rt_sigsuspend_wrapper:
|
|||
reg_save %r24
|
||||
|
||||
STREG %r2, -RP_OFFSET(%r30)
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo FRAME_SIZE(%r30), %r30
|
||||
b,l sys_rt_sigsuspend,%r2
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
|
@ -2079,7 +2074,7 @@ syscall_check_bh:
|
|||
ldw TI_CPU-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r26 /* cpu # */
|
||||
|
||||
/* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) bits */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
shld %r26, 6, %r20
|
||||
#else
|
||||
shlw %r26, 5, %r20
|
||||
|
@ -2087,9 +2082,6 @@ syscall_check_bh:
|
|||
add %r19,%r20,%r19 /* now have &irq_stat[smp_processor_id()] */
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
LDREG IRQSTAT_SIRQ_PEND(%r19),%r20 /* hardirq.h: unsigned long */
|
||||
cmpib,<>,n 0,%r20,syscall_do_softirq /* forward */
|
||||
|
||||
syscall_check_resched:
|
||||
|
||||
/* check for reschedule */
|
||||
|
@ -2144,7 +2136,7 @@ syscall_restore:
|
|||
|
||||
depi 3,31,2,%r31 /* ensure return to user mode. */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* decide whether to reset the wide mode bit
|
||||
*
|
||||
* For a syscall, the W bit is stored in the lowest bit
|
||||
|
@ -2227,20 +2219,10 @@ pt_regs_ok:
|
|||
b intr_restore
|
||||
nop
|
||||
|
||||
.import do_softirq,code
|
||||
syscall_do_softirq:
|
||||
bl do_softirq,%r2
|
||||
nop
|
||||
/* NOTE: We enable I-bit incase we schedule later,
|
||||
* and we might be going back to userspace if we were
|
||||
* traced. */
|
||||
b syscall_check_resched
|
||||
ssm PSW_SM_I, %r0 /* do_softirq returns with I bit off */
|
||||
|
||||
.import schedule,code
|
||||
syscall_do_resched:
|
||||
BL schedule,%r2
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#else
|
||||
nop
|
||||
|
@ -2260,7 +2242,7 @@ syscall_do_signal:
|
|||
|
||||
ldi 1, %r24 /* unsigned long in_syscall */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
BL do_signal,%r2
|
||||
|
|
|
@ -83,15 +83,15 @@ static unsigned long pdc_result2[32] __attribute__ ((aligned (8)));
|
|||
int parisc_narrow_firmware = 1;
|
||||
#endif
|
||||
|
||||
/* on all currently-supported platforms, IODC I/O calls are always
|
||||
* 32-bit calls, and MEM_PDC calls are always the same width as the OS.
|
||||
* This means Cxxx boxes can't run wide kernels right now. -PB
|
||||
/* On most currently-supported platforms, IODC I/O calls are 32-bit calls
|
||||
* and MEM_PDC calls are always the same width as the OS.
|
||||
* Some PAT boxes may have 64-bit IODC I/O.
|
||||
*
|
||||
* CONFIG_PDC_NARROW has been added to allow 64-bit kernels to run on
|
||||
* systems with 32-bit MEM_PDC calls. This will allow wide kernels to
|
||||
* run on Cxxx boxes now. -RB
|
||||
*
|
||||
* Note that some PAT boxes may have 64-bit IODC I/O...
|
||||
* Ryan Bradetich added the now obsolete CONFIG_PDC_NARROW to allow
|
||||
* 64-bit kernels to run on systems with 32-bit MEM_PDC calls.
|
||||
* This allowed wide kernels to run on Cxxx boxes.
|
||||
* We now detect 32-bit-only PDC and dynamically switch to 32-bit mode
|
||||
* when running a 64-bit kernel on such boxes (e.g. C200 or C360).
|
||||
*/
|
||||
|
||||
#ifdef __LP64__
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
* Initial Version 04-23-1999 by Helge Deller <deller@gmx.de>
|
||||
*/
|
||||
|
||||
#include <linux/autoconf.h> /* for CONFIG_SMP */
|
||||
#include <linux/config.h> /* for CONFIG_SMP */
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/psw.h>
|
||||
|
@ -36,10 +36,10 @@ boot_args:
|
|||
.align 4
|
||||
.import init_thread_union,data
|
||||
.import fault_vector_20,code /* IVA parisc 2.0 32 bit */
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
.import fault_vector_11,code /* IVA parisc 1.1 32 bit */
|
||||
.import $global$ /* forward declaration */
|
||||
#endif /*!LP64*/
|
||||
#endif /*!CONFIG_64BIT*/
|
||||
.export stext
|
||||
.export _stext,data /* Kernel want it this way! */
|
||||
_stext:
|
||||
|
@ -76,7 +76,7 @@ $bss_loop:
|
|||
mtctl %r4,%cr24 /* Initialize kernel root pointer */
|
||||
mtctl %r4,%cr25 /* Initialize user root pointer */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Set pmd in pgd */
|
||||
load32 PA(pmd0),%r5
|
||||
shrd %r5,PxD_VALUE_SHIFT,%r3
|
||||
|
@ -99,7 +99,7 @@ $bss_loop:
|
|||
stw %r3,0(%r4)
|
||||
ldo (ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3
|
||||
addib,> -1,%r1,1b
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo ASM_PMD_ENTRY_SIZE(%r4),%r4
|
||||
#else
|
||||
ldo ASM_PGD_ENTRY_SIZE(%r4),%r4
|
||||
|
@ -170,7 +170,7 @@ common_stext:
|
|||
stw %r0,0x28(%r0) /* MEM_RENDEZ_HI */
|
||||
#endif /*CONFIG_SMP*/
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
tophys_r1 %sp
|
||||
|
||||
/* Save the rfi target address */
|
||||
|
@ -224,8 +224,6 @@ stext_pdc_ret:
|
|||
mtctl %r0,%cr12
|
||||
mtctl %r0,%cr13
|
||||
|
||||
/* Prepare to RFI! Man all the cannons! */
|
||||
|
||||
/* Initialize the global data pointer */
|
||||
loadgp
|
||||
|
||||
|
@ -235,7 +233,7 @@ stext_pdc_ret:
|
|||
* following short sequence of instructions can determine this
|
||||
* (without being illegal on a PA1.1 machine).
|
||||
*/
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
ldi 32,%r10
|
||||
mtctl %r10,%cr11
|
||||
.level 2.0
|
||||
|
@ -248,52 +246,22 @@ stext_pdc_ret:
|
|||
|
||||
$is_pa20:
|
||||
.level LEVEL /* restore 1.1 || 2.0w */
|
||||
#endif /*!LP64*/
|
||||
#endif /*!CONFIG_64BIT*/
|
||||
load32 PA(fault_vector_20),%r10
|
||||
|
||||
$install_iva:
|
||||
mtctl %r10,%cr14
|
||||
|
||||
#ifdef __LP64__
|
||||
b aligned_rfi
|
||||
b aligned_rfi /* Prepare to RFI! Man all the cannons! */
|
||||
nop
|
||||
|
||||
.align 256
|
||||
.align 128
|
||||
aligned_rfi:
|
||||
ssm 0,0
|
||||
nop /* 1 */
|
||||
nop /* 2 */
|
||||
nop /* 3 */
|
||||
nop /* 4 */
|
||||
nop /* 5 */
|
||||
nop /* 6 */
|
||||
nop /* 7 */
|
||||
nop /* 8 */
|
||||
#endif
|
||||
pcxt_ssm_bug
|
||||
|
||||
#ifdef __LP64__ /* move to psw.h? */
|
||||
#define PSW_BITS PSW_Q+PSW_I+PSW_D+PSW_P+PSW_R
|
||||
#else
|
||||
#define PSW_BITS PSW_SM_Q
|
||||
#endif
|
||||
rsm PSW_SM_QUIET,%r0 /* off troublesome PSW bits */
|
||||
/* Don't need NOPs, have 8 compliant insn before rfi */
|
||||
|
||||
$rfi:
|
||||
/* turn off troublesome PSW bits */
|
||||
rsm PSW_BITS,%r0
|
||||
|
||||
/* kernel PSW:
|
||||
* - no interruptions except HPMC and TOC (which are handled by PDC)
|
||||
* - Q bit set (IODC / PDC interruptions)
|
||||
* - big-endian
|
||||
* - virtually mapped
|
||||
*/
|
||||
load32 KERNEL_PSW,%r10
|
||||
mtctl %r10,%ipsw
|
||||
|
||||
/* Set the space pointers for the post-RFI world
|
||||
** Clear the two-level IIA Space Queue, effectively setting
|
||||
** Kernel space.
|
||||
*/
|
||||
mtctl %r0,%cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0,%cr17 /* Clear IIASQ head */
|
||||
|
||||
|
@ -301,8 +269,11 @@ $rfi:
|
|||
mtctl %r11,%cr18 /* IIAOQ head */
|
||||
ldo 4(%r11),%r11
|
||||
mtctl %r11,%cr18 /* IIAOQ tail */
|
||||
|
||||
load32 KERNEL_PSW,%r10
|
||||
mtctl %r10,%ipsw
|
||||
|
||||
/* Jump to hyperspace */
|
||||
/* Jump through hyperspace to Virt Mode */
|
||||
rfi
|
||||
nop
|
||||
|
||||
|
@ -313,7 +284,7 @@ $rfi:
|
|||
.import smp_init_current_idle_task,data
|
||||
.import smp_callin,code
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
smp_callin_rtn:
|
||||
.proc
|
||||
.callinfo
|
||||
|
@ -321,7 +292,7 @@ smp_callin_rtn:
|
|||
nop
|
||||
nop
|
||||
.procend
|
||||
#endif /*!LP64*/
|
||||
#endif /*!CONFIG_64BIT*/
|
||||
|
||||
/***************************************************************************
|
||||
* smp_slave_stext is executed by all non-monarch Processors when the Monarch
|
||||
|
@ -356,7 +327,7 @@ smp_slave_stext:
|
|||
mtctl %r4,%cr24 /* Initialize kernel root pointer */
|
||||
mtctl %r4,%cr25 /* Initialize user root pointer */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Setup PDCE_PROC entry */
|
||||
copy %arg0,%r3
|
||||
#else
|
||||
|
@ -373,7 +344,7 @@ smp_slave_stext:
|
|||
|
||||
.procend
|
||||
#endif /* CONFIG_SMP */
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
.data
|
||||
|
||||
.align 4
|
||||
|
@ -383,4 +354,4 @@ smp_slave_stext:
|
|||
.size $global$,4
|
||||
$global$:
|
||||
.word 0
|
||||
#endif /*!LP64*/
|
||||
#endif /*!CONFIG_64BIT*/
|
||||
|
|
|
@ -104,12 +104,9 @@ static int drm32_version(unsigned int fd, unsigned int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
out:
|
||||
if (kversion.name)
|
||||
kfree(kversion.name);
|
||||
if (kversion.date)
|
||||
kfree(kversion.date);
|
||||
if (kversion.desc)
|
||||
kfree(kversion.desc);
|
||||
kfree(kversion.name);
|
||||
kfree(kversion.date);
|
||||
kfree(kversion.desc);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -166,9 +163,7 @@ static int drm32_getsetunique(unsigned int fd, unsigned int cmd, unsigned long a
|
|||
ret = -EFAULT;
|
||||
}
|
||||
|
||||
if (karg.unique != NULL)
|
||||
kfree(karg.unique);
|
||||
|
||||
kfree(karg.unique);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -265,7 +260,6 @@ static int drm32_info_bufs(unsigned int fd, unsigned int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
kfree(karg.list);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -305,7 +299,6 @@ static int drm32_free_bufs(unsigned int fd, unsigned int cmd, unsigned long arg)
|
|||
|
||||
out:
|
||||
kfree(karg.list);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -494,15 +487,10 @@ static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
out:
|
||||
if (karg.send_indices)
|
||||
kfree(karg.send_indices);
|
||||
if (karg.send_sizes)
|
||||
kfree(karg.send_sizes);
|
||||
if (karg.request_indices)
|
||||
kfree(karg.request_indices);
|
||||
if (karg.request_sizes)
|
||||
kfree(karg.request_sizes);
|
||||
|
||||
kfree(karg.send_indices);
|
||||
kfree(karg.send_sizes);
|
||||
kfree(karg.request_indices);
|
||||
kfree(karg.request_sizes);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -555,9 +543,7 @@ static int drm32_res_ctx(unsigned int fd, unsigned int cmd, unsigned long arg)
|
|||
ret = -EFAULT;
|
||||
}
|
||||
|
||||
if (karg.contexts)
|
||||
kfree(karg.contexts);
|
||||
|
||||
kfree(karg.contexts);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
* can be used.
|
||||
*/
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
#define ADDIB addib,*
|
||||
#define CMPB cmpb,*
|
||||
#define ANDCM andcm,*
|
||||
|
@ -40,8 +40,10 @@
|
|||
.level 2.0
|
||||
#endif
|
||||
|
||||
#include <asm/assembly.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
#include <asm/psw.h>
|
||||
#include <asm/assembly.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/cache.h>
|
||||
|
||||
|
@ -62,32 +64,23 @@ flush_tlb_all_local:
|
|||
* to happen in real mode with all interruptions disabled.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Once again, we do the rfi dance ... some day we need examine
|
||||
* all of our uses of this type of code and see what can be
|
||||
* consolidated.
|
||||
*/
|
||||
/* pcxt_ssm_bug - relied upon translation! PA 2.0 Arch. F-4 and F-5 */
|
||||
rsm PSW_SM_I, %r19 /* save I-bit state */
|
||||
load32 PA(1f), %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
rsm PSW_SM_I, %r19 /* relied upon translation! PA 2.0 Arch. F-5 */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
rsm PSW_SM_Q, %r0 /* Turn off Q bit to load iia queue */
|
||||
ldil L%REAL_MODE_PSW, %r1
|
||||
ldo R%REAL_MODE_PSW(%r1), %r1
|
||||
mtctl %r1, %cr22
|
||||
rsm PSW_SM_Q, %r0 /* prep to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
ldil L%PA(1f), %r1
|
||||
ldo R%PA(1f)(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
load32 REAL_MODE_PSW, %r1
|
||||
mtctl %r1, %ipsw
|
||||
rfi
|
||||
nop
|
||||
|
||||
|
@ -178,29 +171,36 @@ fdtonemiddle: /* Loop if LOOP = 1 */
|
|||
ADDIB> -1, %r22, fdtoneloop /* Outer loop count decr */
|
||||
add %r21, %r20, %r20 /* increment space */
|
||||
|
||||
|
||||
fdtdone:
|
||||
/*
|
||||
* Switch back to virtual mode
|
||||
*/
|
||||
/* pcxt_ssm_bug */
|
||||
rsm PSW_SM_I, %r0
|
||||
load32 2f, %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
/* Switch back to virtual mode */
|
||||
|
||||
rsm PSW_SM_Q, %r0 /* clear Q bit to load iia queue */
|
||||
ldil L%KERNEL_PSW, %r1
|
||||
ldo R%KERNEL_PSW(%r1), %r1
|
||||
or %r1, %r19, %r1 /* Set I bit if set on entry */
|
||||
mtctl %r1, %cr22
|
||||
rsm PSW_SM_Q, %r0 /* prep to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
ldil L%(2f), %r1
|
||||
ldo R%(2f)(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
load32 KERNEL_PSW, %r1
|
||||
or %r1, %r19, %r1 /* I-bit to state on entry */
|
||||
mtctl %r1, %ipsw /* restore I-bit (entire PSW) */
|
||||
rfi
|
||||
nop
|
||||
|
||||
2: bv %r0(%r2)
|
||||
nop
|
||||
.exit
|
||||
|
||||
.exit
|
||||
.procend
|
||||
|
||||
.export flush_instruction_cache_local,code
|
||||
|
@ -227,7 +227,7 @@ flush_instruction_cache_local:
|
|||
|
||||
fimanyloop: /* Loop if LOOP >= 2 */
|
||||
ADDIB> -1, %r31, fimanyloop /* Adjusted inner loop decr */
|
||||
fice 0(%sr1, %arg0)
|
||||
fice %r0(%sr1, %arg0)
|
||||
fice,m %arg1(%sr1, %arg0) /* Last fice and addr adjust */
|
||||
movb,tr %arg3, %r31, fimanyloop /* Re-init inner loop count */
|
||||
ADDIB<=,n -1, %arg2, fisync /* Outer loop decr */
|
||||
|
@ -238,7 +238,7 @@ fioneloop: /* Loop if LOOP = 1 */
|
|||
|
||||
fisync:
|
||||
sync
|
||||
mtsm %r22
|
||||
mtsm %r22 /* restore I-bit */
|
||||
bv %r0(%r2)
|
||||
nop
|
||||
.exit
|
||||
|
@ -269,7 +269,7 @@ flush_data_cache_local:
|
|||
|
||||
fdmanyloop: /* Loop if LOOP >= 2 */
|
||||
ADDIB> -1, %r31, fdmanyloop /* Adjusted inner loop decr */
|
||||
fdce 0(%sr1, %arg0)
|
||||
fdce %r0(%sr1, %arg0)
|
||||
fdce,m %arg1(%sr1, %arg0) /* Last fdce and addr adjust */
|
||||
movb,tr %arg3, %r31, fdmanyloop /* Re-init inner loop count */
|
||||
ADDIB<=,n -1, %arg2, fdsync /* Outer loop decr */
|
||||
|
@ -281,7 +281,7 @@ fdoneloop: /* Loop if LOOP = 1 */
|
|||
fdsync:
|
||||
syncdma
|
||||
sync
|
||||
mtsm %r22
|
||||
mtsm %r22 /* restore I-bit */
|
||||
bv %r0(%r2)
|
||||
nop
|
||||
.exit
|
||||
|
@ -296,7 +296,7 @@ copy_user_page_asm:
|
|||
.callinfo NO_CALLS
|
||||
.entry
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* PA8x00 CPUs can consume 2 loads or 1 store per cycle.
|
||||
* Unroll the loop by hand and arrange insn appropriately.
|
||||
* GCC probably can do this just as well.
|
||||
|
@ -351,7 +351,11 @@ copy_user_page_asm:
|
|||
std %r22, 120(%r26)
|
||||
ldo 128(%r26), %r26
|
||||
|
||||
ADDIB> -1, %r1, 1b /* bundle 10 */
|
||||
/* conditional branches nullify on forward taken branch, and on
|
||||
* non-taken backward branch. Note that .+4 is a backwards branch.
|
||||
* The ldd should only get executed if the branch is taken.
|
||||
*/
|
||||
ADDIB>,n -1, %r1, 1b /* bundle 10 */
|
||||
ldd 0(%r25), %r19 /* start next loads */
|
||||
|
||||
#else
|
||||
|
@ -363,10 +367,10 @@ copy_user_page_asm:
|
|||
* the full 64 bit register values on interrupt, we can't
|
||||
* use ldd/std on a 32 bit kernel.
|
||||
*/
|
||||
ldw 0(%r25), %r19
|
||||
ldi 64, %r1 /* PAGE_SIZE/64 == 64 */
|
||||
|
||||
1:
|
||||
ldw 0(%r25), %r19
|
||||
ldw 4(%r25), %r20
|
||||
ldw 8(%r25), %r21
|
||||
ldw 12(%r25), %r22
|
||||
|
@ -396,11 +400,12 @@ copy_user_page_asm:
|
|||
ldw 60(%r25), %r22
|
||||
stw %r19, 48(%r26)
|
||||
stw %r20, 52(%r26)
|
||||
ldo 64(%r25), %r25
|
||||
stw %r21, 56(%r26)
|
||||
stw %r22, 60(%r26)
|
||||
ldo 64(%r26), %r26
|
||||
ADDIB> -1, %r1, 1b
|
||||
ldo 64(%r25), %r25
|
||||
ADDIB>,n -1, %r1, 1b
|
||||
ldw 0(%r25), %r19
|
||||
#endif
|
||||
bv %r0(%r2)
|
||||
nop
|
||||
|
@ -456,7 +461,7 @@ copy_user_page_asm:
|
|||
sub %r25, %r1, %r23 /* move physical addr into non shadowed reg */
|
||||
|
||||
ldil L%(TMPALIAS_MAP_START), %r28
|
||||
#ifdef __LP64__
|
||||
#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 */
|
||||
depd %r24,63,22, %r28 /* Form aliased virtual address 'to' */
|
||||
|
@ -543,7 +548,7 @@ __clear_user_page_asm:
|
|||
tophys_r1 %r26
|
||||
|
||||
ldil L%(TMPALIAS_MAP_START), %r28
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
#if (TMPALIAS_MAP_START >= 0x80000000)
|
||||
depdi 0, 31,32, %r28 /* clear any sign extension */
|
||||
#endif
|
||||
|
@ -560,7 +565,7 @@ __clear_user_page_asm:
|
|||
|
||||
pdtlb 0(%r28)
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldi 32, %r1 /* PAGE_SIZE/128 == 32 */
|
||||
|
||||
/* PREFETCH (Write) has not (yet) been proven to help here */
|
||||
|
@ -585,7 +590,7 @@ __clear_user_page_asm:
|
|||
ADDIB> -1, %r1, 1b
|
||||
ldo 128(%r28), %r28
|
||||
|
||||
#else /* ! __LP64 */
|
||||
#else /* ! CONFIG_64BIT */
|
||||
|
||||
ldi 64, %r1 /* PAGE_SIZE/64 == 64 */
|
||||
|
||||
|
@ -608,7 +613,7 @@ __clear_user_page_asm:
|
|||
stw %r0, 60(%r28)
|
||||
ADDIB> -1, %r1, 1b
|
||||
ldo 64(%r28), %r28
|
||||
#endif /* __LP64 */
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
||||
bv %r0(%r2)
|
||||
nop
|
||||
|
@ -626,7 +631,7 @@ flush_kernel_dcache_page:
|
|||
ldil L%dcache_stride, %r1
|
||||
ldw R%dcache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1, 63-PAGE_SHIFT,1, %r25
|
||||
#else
|
||||
depwi,z 1, 31-PAGE_SHIFT,1, %r25
|
||||
|
@ -670,7 +675,7 @@ flush_user_dcache_page:
|
|||
ldil L%dcache_stride, %r1
|
||||
ldw R%dcache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1,63-PAGE_SHIFT,1, %r25
|
||||
#else
|
||||
depwi,z 1,31-PAGE_SHIFT,1, %r25
|
||||
|
@ -714,7 +719,7 @@ flush_user_icache_page:
|
|||
ldil L%dcache_stride, %r1
|
||||
ldw R%dcache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1, 63-PAGE_SHIFT,1, %r25
|
||||
#else
|
||||
depwi,z 1, 31-PAGE_SHIFT,1, %r25
|
||||
|
@ -759,7 +764,7 @@ purge_kernel_dcache_page:
|
|||
ldil L%dcache_stride, %r1
|
||||
ldw R%dcache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1, 63-PAGE_SHIFT,1, %r25
|
||||
#else
|
||||
depwi,z 1, 31-PAGE_SHIFT,1, %r25
|
||||
|
@ -807,7 +812,7 @@ flush_alias_page:
|
|||
tophys_r1 %r26
|
||||
|
||||
ldil L%(TMPALIAS_MAP_START), %r28
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u %r26, 56,32, %r26 /* convert phys addr to tlb insert format */
|
||||
depd %r25, 63,22, %r28 /* Form aliased virtual address 'to' */
|
||||
depdi 0, 63,12, %r28 /* Clear any offset bits */
|
||||
|
@ -824,7 +829,7 @@ flush_alias_page:
|
|||
ldil L%dcache_stride, %r1
|
||||
ldw R%dcache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1, 63-PAGE_SHIFT,1, %r29
|
||||
#else
|
||||
depwi,z 1, 31-PAGE_SHIFT,1, %r29
|
||||
|
@ -935,7 +940,7 @@ flush_kernel_icache_page:
|
|||
ldil L%icache_stride, %r1
|
||||
ldw R%icache_stride(%r1), %r23
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
depdi,z 1, 63-PAGE_SHIFT,1, %r25
|
||||
#else
|
||||
depwi,z 1, 31-PAGE_SHIFT,1, %r25
|
||||
|
@ -944,23 +949,23 @@ flush_kernel_icache_page:
|
|||
sub %r25, %r23, %r25
|
||||
|
||||
|
||||
1: fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%r26)
|
||||
1: fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
CMPB<< %r26, %r25, 1b
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
|
||||
sync
|
||||
bv %r0(%r2)
|
||||
|
@ -982,17 +987,18 @@ flush_kernel_icache_range_asm:
|
|||
ANDCM %r26, %r21, %r26
|
||||
|
||||
1: CMPB<<,n %r26, %r25, 1b
|
||||
fic,m %r23(%r26)
|
||||
fic,m %r23(%sr4, %r26)
|
||||
|
||||
sync
|
||||
bv %r0(%r2)
|
||||
nop
|
||||
.exit
|
||||
|
||||
.procend
|
||||
|
||||
.align 128
|
||||
|
||||
/* align should cover use of rfi in disable_sr_hashing_asm and
|
||||
* srdis_done.
|
||||
*/
|
||||
.align 256
|
||||
.export disable_sr_hashing_asm,code
|
||||
|
||||
disable_sr_hashing_asm:
|
||||
|
@ -1000,28 +1006,26 @@ disable_sr_hashing_asm:
|
|||
.callinfo NO_CALLS
|
||||
.entry
|
||||
|
||||
/* Switch to real mode */
|
||||
/*
|
||||
* Switch to real mode
|
||||
*/
|
||||
/* pcxt_ssm_bug */
|
||||
rsm PSW_SM_I, %r0
|
||||
load32 PA(1f), %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
ssm 0, %r0 /* relied upon translation! */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
rsm (PSW_SM_Q|PSW_SM_I), %r0 /* disable Q&I to load the iia queue */
|
||||
ldil L%REAL_MODE_PSW, %r1
|
||||
ldo R%REAL_MODE_PSW(%r1), %r1
|
||||
mtctl %r1, %cr22
|
||||
rsm PSW_SM_Q, %r0 /* prep to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
ldil L%PA(1f), %r1
|
||||
ldo R%PA(1f)(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
load32 REAL_MODE_PSW, %r1
|
||||
mtctl %r1, %ipsw
|
||||
rfi
|
||||
nop
|
||||
|
||||
|
@ -1053,27 +1057,31 @@ srdis_pcxl:
|
|||
|
||||
srdis_pa20:
|
||||
|
||||
/* Disable Space Register Hashing for PCXU,PCXU+,PCXW,PCXW+ */
|
||||
/* Disable Space Register Hashing for PCXU,PCXU+,PCXW,PCXW+,PCXW2 */
|
||||
|
||||
.word 0x144008bc /* mfdiag %dr2, %r28 */
|
||||
depdi 0, 54,1, %r28 /* clear DIAG_SPHASH_ENAB (bit 54) */
|
||||
.word 0x145c1840 /* mtdiag %r28, %dr2 */
|
||||
|
||||
|
||||
srdis_done:
|
||||
|
||||
/* Switch back to virtual mode */
|
||||
rsm PSW_SM_I, %r0 /* prep to load iia queue */
|
||||
load32 2f, %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
rsm PSW_SM_Q, %r0 /* clear Q bit to load iia queue */
|
||||
ldil L%KERNEL_PSW, %r1
|
||||
ldo R%KERNEL_PSW(%r1), %r1
|
||||
mtctl %r1, %cr22
|
||||
rsm PSW_SM_Q, %r0 /* prep to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
ldil L%(2f), %r1
|
||||
ldo R%(2f)(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
load32 KERNEL_PSW, %r1
|
||||
mtctl %r1, %ipsw
|
||||
rfi
|
||||
nop
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include <asm/page.h> /* get_order */
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#include <asm/tlbflush.h> /* for purge_tlb_*() macros */
|
||||
|
||||
static struct proc_dir_entry * proc_gsc_root = NULL;
|
||||
static int pcxl_proc_info(char *buffer, char **start, off_t offset, int length);
|
||||
|
@ -333,18 +333,28 @@ pcxl_free_range(unsigned long vaddr, size_t size)
|
|||
static int __init
|
||||
pcxl_dma_init(void)
|
||||
{
|
||||
if (pcxl_dma_start == 0)
|
||||
return 0;
|
||||
if (pcxl_dma_start == 0)
|
||||
return 0;
|
||||
|
||||
spin_lock_init(&pcxl_res_lock);
|
||||
pcxl_res_size = PCXL_DMA_MAP_SIZE >> (PAGE_SHIFT + 3);
|
||||
pcxl_res_hint = 0;
|
||||
pcxl_res_map = (char *)__get_free_pages(GFP_KERNEL,
|
||||
spin_lock_init(&pcxl_res_lock);
|
||||
pcxl_res_size = PCXL_DMA_MAP_SIZE >> (PAGE_SHIFT + 3);
|
||||
pcxl_res_hint = 0;
|
||||
pcxl_res_map = (char *)__get_free_pages(GFP_KERNEL,
|
||||
get_order(pcxl_res_size));
|
||||
memset(pcxl_res_map, 0, pcxl_res_size);
|
||||
proc_gsc_root = proc_mkdir("gsc", 0);
|
||||
create_proc_info_entry("dino", 0, proc_gsc_root, pcxl_proc_info);
|
||||
return 0;
|
||||
memset(pcxl_res_map, 0, pcxl_res_size);
|
||||
proc_gsc_root = proc_mkdir("gsc", 0);
|
||||
if (!proc_gsc_root)
|
||||
printk(KERN_WARNING
|
||||
"pcxl_dma_init: Unable to create gsc /proc dir entry\n");
|
||||
else {
|
||||
struct proc_dir_entry* ent;
|
||||
ent = create_proc_info_entry("pcxl_dma", 0,
|
||||
proc_gsc_root, pcxl_proc_info);
|
||||
if (!ent)
|
||||
printk(KERN_WARNING
|
||||
"pci-dma.c: Unable to create pcxl_dma /proc entry.\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
__initcall(pcxl_dma_init);
|
||||
|
@ -545,16 +555,16 @@ struct hppa_dma_ops pcx_dma_ops = {
|
|||
|
||||
static int pcxl_proc_info(char *buf, char **start, off_t offset, int len)
|
||||
{
|
||||
#if 0
|
||||
u_long i = 0;
|
||||
unsigned long *res_ptr = (u_long *)pcxl_res_map;
|
||||
unsigned long total_pages = pcxl_res_size << 3; /* 8 bits per byte */
|
||||
#endif
|
||||
unsigned long total_pages = pcxl_res_size << 3; /* 8 bits per byte */
|
||||
|
||||
sprintf(buf, "\nDMA Mapping Area size : %d bytes (%d pages)\n",
|
||||
PCXL_DMA_MAP_SIZE,
|
||||
(pcxl_res_size << 3) ); /* 1 bit per page */
|
||||
sprintf(buf, "\nDMA Mapping Area size : %d bytes (%ld pages)\n",
|
||||
PCXL_DMA_MAP_SIZE, total_pages);
|
||||
|
||||
sprintf(buf, "%sResource bitmap : %d bytes (%d pages)\n",
|
||||
buf, pcxl_res_size, pcxl_res_size << 3); /* 8 bits per byte */
|
||||
sprintf(buf, "%sResource bitmap : %d bytes\n", buf, pcxl_res_size);
|
||||
|
||||
strcat(buf, " total: free: used: % used:\n");
|
||||
sprintf(buf, "%sblocks %8d %8ld %8ld %8ld%%\n", buf, pcxl_res_size,
|
||||
|
@ -564,7 +574,8 @@ static int pcxl_proc_info(char *buf, char **start, off_t offset, int len)
|
|||
sprintf(buf, "%spages %8ld %8ld %8ld %8ld%%\n", buf, total_pages,
|
||||
total_pages - pcxl_used_pages, pcxl_used_pages,
|
||||
(pcxl_used_pages * 100 / total_pages));
|
||||
|
||||
|
||||
#if 0
|
||||
strcat(buf, "\nResource bitmap:");
|
||||
|
||||
for(; i < (pcxl_res_size / sizeof(u_long)); ++i, ++res_ptr) {
|
||||
|
@ -572,6 +583,7 @@ static int pcxl_proc_info(char *buf, char **start, off_t offset, int len)
|
|||
strcat(buf,"\n ");
|
||||
sprintf(buf, "%s %08lx", buf, *res_ptr);
|
||||
}
|
||||
#endif
|
||||
strcat(buf, "\n");
|
||||
return strlen(buf);
|
||||
}
|
||||
|
|
|
@ -202,7 +202,8 @@ static void
|
|||
pcibios_link_hba_resources( struct resource *hba_res, struct resource *r)
|
||||
{
|
||||
if (!r->parent) {
|
||||
printk(KERN_EMERG "PCI: Tell willy he's wrong\n");
|
||||
printk(KERN_EMERG "PCI: resource not parented! [%lx-%lx]\n",
|
||||
r->start, r->end);
|
||||
r->parent = hba_res;
|
||||
|
||||
/* reverse link is harder *sigh* */
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
/* Define EARLY_BOOTUP_DEBUG to debug kernel related boot problems.
|
||||
* On production kernels EARLY_BOOTUP_DEBUG should be undefined. */
|
||||
#undef EARLY_BOOTUP_DEBUG
|
||||
#define EARLY_BOOTUP_DEBUG
|
||||
|
||||
|
||||
#include <linux/config.h>
|
||||
|
@ -49,14 +49,8 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/tty.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/pdc.h> /* for iodc_call() proto and friends */
|
||||
|
||||
|
||||
|
@ -96,7 +90,6 @@ static int pdc_console_setup(struct console *co, char *options)
|
|||
}
|
||||
|
||||
#if defined(CONFIG_PDC_CONSOLE)
|
||||
#define PDC_CONSOLE_DEVICE pdc_console_device
|
||||
static struct tty_driver * pdc_console_device (struct console *c, int *index)
|
||||
{
|
||||
extern struct tty_driver console_driver;
|
||||
|
@ -104,22 +97,19 @@ static struct tty_driver * pdc_console_device (struct console *c, int *index)
|
|||
return &console_driver;
|
||||
}
|
||||
#else
|
||||
#define PDC_CONSOLE_DEVICE NULL
|
||||
#define pdc_console_device NULL
|
||||
#endif
|
||||
|
||||
static struct console pdc_cons = {
|
||||
.name = "ttyB",
|
||||
.write = pdc_console_write,
|
||||
.device = PDC_CONSOLE_DEVICE,
|
||||
.device = pdc_console_device,
|
||||
.setup = pdc_console_setup,
|
||||
.flags = CON_BOOT|CON_PRINTBUFFER|CON_ENABLED,
|
||||
.flags = CON_BOOT | CON_PRINTBUFFER | CON_ENABLED,
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
static int pdc_console_initialized;
|
||||
extern unsigned long con_start; /* kernel/printk.c */
|
||||
extern unsigned long log_end; /* kernel/printk.c */
|
||||
|
||||
|
||||
static void pdc_console_init_force(void)
|
||||
{
|
||||
|
@ -146,27 +136,11 @@ void __init pdc_console_init(void)
|
|||
}
|
||||
|
||||
|
||||
/* Unregister the pdc console with the printk console layer */
|
||||
void pdc_console_die(void)
|
||||
{
|
||||
if (!pdc_console_initialized)
|
||||
return;
|
||||
--pdc_console_initialized;
|
||||
|
||||
printk(KERN_INFO "Switching from PDC console\n");
|
||||
|
||||
/* Don't repeat what we've already printed */
|
||||
con_start = log_end;
|
||||
|
||||
unregister_console(&pdc_cons);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Used for emergencies. Currently only used if an HPMC occurs. If an
|
||||
* HPMC occurs, it is possible that the current console may not be
|
||||
* properly initialed after the PDC IO reset. This routine unregisters all
|
||||
* of the current consoles, reinitializes the pdc console and
|
||||
* properly initialised after the PDC IO reset. This routine unregisters
|
||||
* all of the current consoles, reinitializes the pdc console and
|
||||
* registers it.
|
||||
*/
|
||||
|
||||
|
@ -177,13 +151,13 @@ void pdc_console_restart(void)
|
|||
if (pdc_console_initialized)
|
||||
return;
|
||||
|
||||
/* If we've already seen the output, don't bother to print it again */
|
||||
if (console_drivers != NULL)
|
||||
pdc_cons.flags &= ~CON_PRINTBUFFER;
|
||||
|
||||
while ((console = console_drivers) != NULL)
|
||||
unregister_console(console_drivers);
|
||||
|
||||
/* Don't repeat what we've already printed */
|
||||
con_start = log_end;
|
||||
|
||||
/* force registering the pdc console */
|
||||
pdc_console_init_force();
|
||||
}
|
||||
|
||||
|
|
|
@ -746,7 +746,8 @@ static int perf_write_image(uint64_t *memaddr)
|
|||
uint64_t *bptr;
|
||||
uint32_t dwords;
|
||||
uint32_t *intrigue_rdr;
|
||||
uint64_t *intrigue_bitmask, tmp64, proc_hpa;
|
||||
uint64_t *intrigue_bitmask, tmp64;
|
||||
void __iomem *runway;
|
||||
struct rdr_tbl_ent *tentry;
|
||||
int i;
|
||||
|
||||
|
@ -798,15 +799,16 @@ static int perf_write_image(uint64_t *memaddr)
|
|||
return -1;
|
||||
}
|
||||
|
||||
proc_hpa = cpu_device->hpa;
|
||||
runway = ioremap(cpu_device->hpa.start, 4096);
|
||||
|
||||
/* Merge intrigue bits into Runway STATUS 0 */
|
||||
tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecfffffffffffful;
|
||||
__raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul), proc_hpa + RUNWAY_STATUS);
|
||||
tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
|
||||
__raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul),
|
||||
runway + RUNWAY_STATUS);
|
||||
|
||||
/* Write RUNWAY DEBUG registers */
|
||||
for (i = 0; i < 8; i++) {
|
||||
__raw_writeq(*memaddr++, proc_hpa + RUNWAY_DEBUG + i);
|
||||
__raw_writeq(*memaddr++, runway + RUNWAY_DEBUG);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
* Copyright (C) 2000-2003 Paul Bame <bame at parisc-linux.org>
|
||||
* Copyright (C) 2000 Philipp Rumpf <prumpf with tux.org>
|
||||
* Copyright (C) 2000 David Kennedy <dkennedy with linuxcare.com>
|
||||
* Copyright (C) 2000 Richard Hirst <rhirst with parisc-lixux.org>
|
||||
* Copyright (C) 2000 Richard Hirst <rhirst with parisc-linux.org>
|
||||
* Copyright (C) 2000 Grant Grundler <grundler with parisc-linux.org>
|
||||
* Copyright (C) 2001 Alan Modra <amodra at parisc-linux.org>
|
||||
* Copyright (C) 2001-2002 Ryan Bradetich <rbrad at parisc-linux.org>
|
||||
|
@ -245,7 +245,17 @@ int
|
|||
sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
int __user *user_tid = (int __user *)regs->gr[26];
|
||||
/* Arugments from userspace are:
|
||||
r26 = Clone flags.
|
||||
r25 = Child stack.
|
||||
r24 = parent_tidptr.
|
||||
r23 = Is the TLS storage descriptor
|
||||
r22 = child_tidptr
|
||||
|
||||
However, these last 3 args are only examined
|
||||
if the proper flags are set. */
|
||||
int __user *child_tidptr;
|
||||
int __user *parent_tidptr;
|
||||
|
||||
/* usp must be word aligned. This also prevents users from
|
||||
* passing in the value 1 (which is the signal for a special
|
||||
|
@ -253,10 +263,20 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
|
|||
usp = ALIGN(usp, 4);
|
||||
|
||||
/* A zero value for usp means use the current stack */
|
||||
if(usp == 0)
|
||||
usp = regs->gr[30];
|
||||
if (usp == 0)
|
||||
usp = regs->gr[30];
|
||||
|
||||
return do_fork(clone_flags, usp, regs, 0, user_tid, NULL);
|
||||
if (clone_flags & CLONE_PARENT_SETTID)
|
||||
parent_tidptr = (int __user *)regs->gr[24];
|
||||
else
|
||||
parent_tidptr = NULL;
|
||||
|
||||
if (clone_flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID))
|
||||
child_tidptr = (int __user *)regs->gr[22];
|
||||
else
|
||||
child_tidptr = NULL;
|
||||
|
||||
return do_fork(clone_flags, usp, regs, 0, parent_tidptr, child_tidptr);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -332,6 +352,10 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
|
|||
} else {
|
||||
cregs->kpc = (unsigned long) &child_return;
|
||||
}
|
||||
/* Setup thread TLS area from the 4th parameter in clone */
|
||||
if (clone_flags & CLONE_SETTLS)
|
||||
cregs->cr27 = pregs->gr[23];
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -92,7 +92,7 @@ static int __init processor_probe(struct parisc_device *dev)
|
|||
* May get overwritten by PAT code.
|
||||
*/
|
||||
cpuid = boot_cpu_data.cpu_count;
|
||||
txn_addr = dev->hpa; /* for legacy PDC */
|
||||
txn_addr = dev->hpa.start; /* for legacy PDC */
|
||||
|
||||
#ifdef __LP64__
|
||||
if (is_pdc_pat()) {
|
||||
|
@ -122,7 +122,7 @@ static int __init processor_probe(struct parisc_device *dev)
|
|||
* boot time (ie shutdown a CPU from an OS perspective).
|
||||
*/
|
||||
/* get the cpu number */
|
||||
status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa);
|
||||
status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa.start);
|
||||
|
||||
BUG_ON(PDC_OK != status);
|
||||
|
||||
|
@ -130,7 +130,7 @@ static int __init processor_probe(struct parisc_device *dev)
|
|||
printk(KERN_WARNING "IGNORING CPU at 0x%x,"
|
||||
" cpu_slot_id > NR_CPUS"
|
||||
" (%ld > %d)\n",
|
||||
dev->hpa, cpu_info.cpu_num, NR_CPUS);
|
||||
dev->hpa.start, cpu_info.cpu_num, NR_CPUS);
|
||||
/* Ignore CPU since it will only crash */
|
||||
boot_cpu_data.cpu_count--;
|
||||
return 1;
|
||||
|
@ -149,7 +149,7 @@ static int __init processor_probe(struct parisc_device *dev)
|
|||
|
||||
p->loops_per_jiffy = loops_per_jiffy;
|
||||
p->dev = dev; /* Save IODC data in case we need it */
|
||||
p->hpa = dev->hpa; /* save CPU hpa */
|
||||
p->hpa = dev->hpa.start; /* save CPU hpa */
|
||||
p->cpuid = cpuid; /* save CPU id */
|
||||
p->txn_addr = txn_addr; /* save CPU IRQ address */
|
||||
#ifdef CONFIG_SMP
|
||||
|
|
|
@ -7,8 +7,10 @@
|
|||
* Copyright (C) 2000 Hewlett Packard (Paul Bame bame@puffin.external.hp.com)
|
||||
*
|
||||
*/
|
||||
#include <asm/assembly.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
#include <asm/psw.h>
|
||||
#include <asm/assembly.h>
|
||||
|
||||
.section .bss
|
||||
.export real_stack
|
||||
|
@ -20,7 +22,7 @@ real32_stack:
|
|||
real64_stack:
|
||||
.block 8192
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
# define REG_SZ 8
|
||||
#else
|
||||
# define REG_SZ 4
|
||||
|
@ -50,7 +52,7 @@ save_cr_end:
|
|||
|
||||
real32_call_asm:
|
||||
STREG %rp, -RP_OFFSET(%sp) /* save RP */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
callee_save
|
||||
ldo 2*REG_SZ(%sp), %sp /* room for a couple more saves */
|
||||
STREG %r27, -1*REG_SZ(%sp)
|
||||
|
@ -77,7 +79,7 @@ real32_call_asm:
|
|||
b,l save_control_regs,%r2 /* modifies r1, r2, r28 */
|
||||
nop
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
rsm PSW_SM_W, %r0 /* go narrow */
|
||||
#endif
|
||||
|
||||
|
@ -85,7 +87,7 @@ real32_call_asm:
|
|||
bv 0(%r31)
|
||||
nop
|
||||
ric_ret:
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ssm PSW_SM_W, %r0 /* go wide */
|
||||
#endif
|
||||
/* restore CRs before going virtual in case we page fault */
|
||||
|
@ -97,7 +99,7 @@ ric_ret:
|
|||
|
||||
tovirt_r1 %sp
|
||||
LDREG -REG_SZ(%sp), %sp /* restore SP */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
LDREG -1*REG_SZ(%sp), %r27
|
||||
LDREG -2*REG_SZ(%sp), %r29
|
||||
ldo -2*REG_SZ(%sp), %sp
|
||||
|
@ -143,24 +145,21 @@ restore_control_regs:
|
|||
/* rfi_virt2real() and rfi_real2virt() could perhaps be adapted for
|
||||
* more general-purpose use by the several places which need RFIs
|
||||
*/
|
||||
.align 128
|
||||
.text
|
||||
.align 128
|
||||
rfi_virt2real:
|
||||
/* switch to real mode... */
|
||||
ssm 0,0 /* See "relied upon translation" */
|
||||
nop /* PA 2.0 Arch. F-5 */
|
||||
nop
|
||||
nop
|
||||
rsm PSW_SM_I,%r0
|
||||
load32 PA(rfi_v2r_1), %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
rsm (PSW_SM_Q|PSW_SM_I),%r0 /* disable Q & I bits to load iia queue */
|
||||
rsm PSW_SM_Q,%r0 /* disable Q & I bits to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
load32 PA(rfi_v2r_1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
|
@ -184,10 +183,8 @@ rfi_v2r_1:
|
|||
.text
|
||||
.align 128
|
||||
rfi_real2virt:
|
||||
ssm 0,0 /* See "relied upon translation" */
|
||||
nop /* PA 2.0 Arch. F-5 */
|
||||
nop
|
||||
nop
|
||||
rsm PSW_SM_I,%r0
|
||||
load32 (rfi_r2v_1), %r1
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
@ -197,7 +194,6 @@ rfi_real2virt:
|
|||
rsm PSW_SM_Q,%r0 /* disable Q bit to load iia queue */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ tail */
|
||||
mtctl %r0, %cr17 /* Clear IIASQ head */
|
||||
load32 (rfi_r2v_1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ head */
|
||||
ldo 4(%r1), %r1
|
||||
mtctl %r1, %cr18 /* IIAOQ tail */
|
||||
|
@ -218,7 +214,7 @@ rfi_r2v_1:
|
|||
bv 0(%r2)
|
||||
nop
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
|
||||
/************************ 64-bit real-mode calls ***********************/
|
||||
/* This is only usable in wide kernels right now and will probably stay so */
|
||||
|
@ -296,7 +292,7 @@ pc_in_user_space:
|
|||
** comparing function pointers.
|
||||
*/
|
||||
__canonicalize_funcptr_for_compare:
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
bve (%r2)
|
||||
#else
|
||||
bv %r0(%r2)
|
||||
|
|
|
@ -490,15 +490,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||
|
||||
give_sigsegv:
|
||||
DBG(1,"setup_rt_frame: sending SIGSEGV\n");
|
||||
if (sig == SIGSEGV)
|
||||
ka->sa.sa_handler = SIG_DFL;
|
||||
si.si_signo = SIGSEGV;
|
||||
si.si_errno = 0;
|
||||
si.si_code = SI_KERNEL;
|
||||
si.si_pid = current->pid;
|
||||
si.si_uid = current->uid;
|
||||
si.si_addr = frame;
|
||||
force_sig_info(SIGSEGV, &si, current);
|
||||
force_sigsegv(sig, current);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -633,10 +625,14 @@ do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall)
|
|||
put_user(0xe0008200, &usp[3]);
|
||||
put_user(0x34140000, &usp[4]);
|
||||
|
||||
/* Stack is 64-byte aligned, and we only
|
||||
* need to flush 1 cache line */
|
||||
asm("fdc 0(%%sr3, %0)\n"
|
||||
"fic 0(%%sr3, %0)\n"
|
||||
/* Stack is 64-byte aligned, and we only need
|
||||
* to flush 1 cache line.
|
||||
* Flushing one cacheline is cheap.
|
||||
* "sync" on bigger (> 4 way) boxes is not.
|
||||
*/
|
||||
asm("fdc %%r0(%%sr3, %0)\n"
|
||||
"sync\n"
|
||||
"fic %%r0(%%sr3, %0)\n"
|
||||
"sync\n"
|
||||
: : "r"(regs->gr[30]));
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
#undef ENTRY_SYS_CPUS /* syscall support for iCOD-like functionality */
|
||||
|
||||
#include <linux/autoconf.h>
|
||||
#include <linux/config.h>
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
* thanks to Philipp Rumpf, Mike Shaver and various others
|
||||
* sorry about the wall, puffin..
|
||||
*/
|
||||
#include <linux/config.h> /* for CONFIG_SMP */
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/unistd.h>
|
||||
|
@ -22,15 +23,13 @@
|
|||
*/
|
||||
#define KILL_INSN break 0,0
|
||||
|
||||
#include <linux/config.h> /* for CONFIG_SMP */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
.level 2.0w
|
||||
#else
|
||||
.level 1.1
|
||||
#endif
|
||||
|
||||
#ifndef __LP64__
|
||||
#ifndef CONFIG_64BIT
|
||||
.macro fixup_branch,lbl
|
||||
b \lbl
|
||||
.endm
|
||||
|
@ -103,7 +102,7 @@ linux_gateway_entry:
|
|||
mfsp %sr7,%r1 /* save user sr7 */
|
||||
mtsp %r1,%sr3 /* and store it in sr3 */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* for now we can *always* set the W bit on entry to the syscall
|
||||
* since we don't support wide userland processes. We could
|
||||
* also save the current SM other than in r0 and restore it on
|
||||
|
@ -155,7 +154,7 @@ linux_gateway_entry:
|
|||
STREG %r19, TASK_PT_GR19(%r1)
|
||||
|
||||
LDREGM -FRAME_SIZE(%r30), %r2 /* get users sp back */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
extrd,u %r2,63,1,%r19 /* W hidden in bottom bit */
|
||||
#if 0
|
||||
xor %r19,%r2,%r2 /* clear bottom bit */
|
||||
|
@ -186,7 +185,7 @@ linux_gateway_entry:
|
|||
|
||||
loadgp
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
copy %r19,%r2 /* W bit back to r2 */
|
||||
#else
|
||||
|
@ -205,7 +204,7 @@ linux_gateway_entry:
|
|||
/* Note! We cannot use the syscall table that is mapped
|
||||
nearby since the gateway page is mapped execute-only. */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldil L%sys_call_table, %r1
|
||||
or,= %r2,%r2,%r2
|
||||
addil L%(sys_call_table64-sys_call_table), %r1
|
||||
|
@ -321,7 +320,7 @@ tracesys_next:
|
|||
LDREG TASK_PT_GR25(%r1), %r25
|
||||
LDREG TASK_PT_GR24(%r1), %r24
|
||||
LDREG TASK_PT_GR23(%r1), %r23
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
LDREG TASK_PT_GR22(%r1), %r22
|
||||
LDREG TASK_PT_GR21(%r1), %r21
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
|
@ -350,7 +349,7 @@ tracesys_next:
|
|||
tracesys_exit:
|
||||
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
|
||||
LDREG TI_TASK(%r1), %r1
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
bl syscall_trace, %r2
|
||||
|
@ -371,7 +370,7 @@ tracesys_exit:
|
|||
tracesys_sigexit:
|
||||
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
|
||||
LDREG 0(%r1), %r1
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
ldo -16(%r30),%r29 /* Reference param save area */
|
||||
#endif
|
||||
bl syscall_trace, %r2
|
||||
|
@ -404,7 +403,7 @@ lws_start:
|
|||
gate .+8, %r0
|
||||
depi 3, 31, 2, %r31 /* Ensure we return to userspace */
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* FIXME: If we are a 64-bit kernel just
|
||||
* turn this on unconditionally.
|
||||
*/
|
||||
|
@ -440,7 +439,7 @@ lws_exit_nosys:
|
|||
/* Fall through: Return to userspace */
|
||||
|
||||
lws_exit:
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* decide whether to reset the wide mode bit
|
||||
*
|
||||
* For a syscall, the W bit is stored in the lowest bit
|
||||
|
@ -486,7 +485,7 @@ lws_exit:
|
|||
|
||||
/* ELF64 Process entry path */
|
||||
lws_compare_and_swap64:
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
b,n lws_compare_and_swap
|
||||
#else
|
||||
/* If we are not a 64-bit kernel, then we don't
|
||||
|
@ -497,7 +496,7 @@ lws_compare_and_swap64:
|
|||
|
||||
/* ELF32 Process entry path */
|
||||
lws_compare_and_swap32:
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Clip all the input registers */
|
||||
depdi 0, 31, 32, %r26
|
||||
depdi 0, 31, 32, %r25
|
||||
|
@ -608,7 +607,7 @@ cas_action:
|
|||
the other for the store. Either return -EFAULT.
|
||||
Each of the entries must be relocated. */
|
||||
.section __ex_table,"aw"
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Pad the address calculation */
|
||||
.word 0,(2b - linux_gateway_page)
|
||||
.word 0,(3b - linux_gateway_page)
|
||||
|
@ -619,7 +618,7 @@ cas_action:
|
|||
.previous
|
||||
|
||||
.section __ex_table,"aw"
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* Pad the address calculation */
|
||||
.word 0,(1b - linux_gateway_page)
|
||||
.word 0,(3b - linux_gateway_page)
|
||||
|
@ -638,7 +637,7 @@ end_linux_gateway_page:
|
|||
|
||||
/* Relocate symbols assuming linux_gateway_page is mapped
|
||||
to virtual address 0x0 */
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/* FIXME: The code will always be on the gateay page
|
||||
and thus it will be on the first 4k, the
|
||||
assembler seems to think that the final
|
||||
|
@ -666,7 +665,7 @@ lws_table:
|
|||
sys_call_table:
|
||||
#include "syscall_table.S"
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
.align 4096
|
||||
.export sys_call_table64
|
||||
.Lsys_call_table64:
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#undef ENTRY_UHOH
|
||||
#undef ENTRY_COMP
|
||||
#undef ENTRY_OURS
|
||||
#if defined(__LP64__) && !defined(SYSCALL_TABLE_64BIT)
|
||||
#if defined(CONFIG_64BIT) && !defined(SYSCALL_TABLE_64BIT)
|
||||
/* Use ENTRY_SAME for 32-bit syscalls which are the same on wide and
|
||||
* narrow palinux. Use ENTRY_DIFF for those where a 32-bit specific
|
||||
* implementation is required on wide palinux. Use ENTRY_COMP where
|
||||
|
@ -46,7 +46,7 @@
|
|||
#define ENTRY_UHOH(_name_) .dword sys32_##unimplemented
|
||||
#define ENTRY_OURS(_name_) .dword parisc_##_name_
|
||||
#define ENTRY_COMP(_name_) .dword compat_sys_##_name_
|
||||
#elif defined(__LP64__) && defined(SYSCALL_TABLE_64BIT)
|
||||
#elif defined(CONFIG_64BIT) && defined(SYSCALL_TABLE_64BIT)
|
||||
#define ENTRY_SAME(_name_) .dword sys_##_name_
|
||||
#define ENTRY_DIFF(_name_) .dword sys_##_name_
|
||||
#define ENTRY_UHOH(_name_) .dword sys_##_name_
|
||||
|
@ -368,5 +368,11 @@
|
|||
ENTRY_COMP(mbind) /* 260 */
|
||||
ENTRY_COMP(get_mempolicy)
|
||||
ENTRY_COMP(set_mempolicy)
|
||||
ENTRY_SAME(ni_syscall) /* 263: reserved for vserver */
|
||||
ENTRY_SAME(add_key)
|
||||
ENTRY_SAME(request_key) /* 265 */
|
||||
ENTRY_SAME(keyctl)
|
||||
ENTRY_SAME(ioprio_set)
|
||||
ENTRY_SAME(ioprio_get)
|
||||
/* Nothing yet */
|
||||
|
||||
|
|
|
@ -89,14 +89,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CHASSIS_LCD_LED
|
||||
/* Only schedule the led tasklet on cpu 0, and only if it
|
||||
* is enabled.
|
||||
*/
|
||||
if (cpu == 0 && !atomic_read(&led_tasklet.count))
|
||||
tasklet_schedule(&led_tasklet);
|
||||
#endif
|
||||
|
||||
/* check soft power switch status */
|
||||
if (cpu == 0 && !atomic_read(&power_tasklet.count))
|
||||
tasklet_schedule(&power_tasklet);
|
||||
|
@ -104,6 +96,24 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
||||
unsigned long profile_pc(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long pc = instruction_pointer(regs);
|
||||
|
||||
if (regs->gr[0] & PSW_N)
|
||||
pc -= 4;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
if (in_lock_functions(pc))
|
||||
pc = regs->gr[2];
|
||||
#endif
|
||||
|
||||
return pc;
|
||||
}
|
||||
EXPORT_SYMBOL(profile_pc);
|
||||
|
||||
|
||||
/*** converted from ia64 ***/
|
||||
/*
|
||||
* Return the number of micro-seconds that elapsed since the last
|
||||
|
|
|
@ -74,7 +74,10 @@ void show_regs(struct pt_regs *regs)
|
|||
char *level;
|
||||
unsigned long cr30;
|
||||
unsigned long cr31;
|
||||
|
||||
/* carlos says that gcc understands better memory in a struct,
|
||||
* and it makes our life easier with fpregs -- T-Bone */
|
||||
struct { u32 sw[2]; } s;
|
||||
|
||||
level = user_mode(regs) ? KERN_DEBUG : KERN_CRIT;
|
||||
|
||||
printk("%s\n", level); /* don't want to have that pretty register dump messed up */
|
||||
|
@ -103,11 +106,33 @@ void show_regs(struct pt_regs *regs)
|
|||
printk("%s\n", buf);
|
||||
}
|
||||
|
||||
#if RIDICULOUSLY_VERBOSE
|
||||
for (i = 0; i < 32; i += 2)
|
||||
printk("%sFR%02d : %016lx FR%2d : %016lx", level, i,
|
||||
regs->fr[i], i+1, regs->fr[i+1]);
|
||||
#endif
|
||||
/* FR are 64bit everywhere. Need to use asm to get the content
|
||||
* of fpsr/fper1, and we assume that we won't have a FP Identify
|
||||
* in our way, otherwise we're screwed.
|
||||
* The fldd is used to restore the T-bit if there was one, as the
|
||||
* store clears it anyway.
|
||||
* BTW, PA2.0 book says "thou shall not use fstw on FPSR/FPERs". */
|
||||
__asm__ (
|
||||
"fstd %%fr0,0(%1) \n\t"
|
||||
"fldd 0(%1),%%fr0 \n\t"
|
||||
: "=m" (s) : "r" (&s) : "%r0"
|
||||
);
|
||||
|
||||
printk("%s\n", level);
|
||||
printk("%s VZOUICununcqcqcqcqcqcrmunTDVZOUI\n", level);
|
||||
printbinary(buf, s.sw[0], 32);
|
||||
printk("%sFPSR: %s\n", level, buf);
|
||||
printk("%sFPER1: %08x\n", level, s.sw[1]);
|
||||
|
||||
/* here we'll print fr0 again, tho it'll be meaningless */
|
||||
for (i = 0; i < 32; i += 4) {
|
||||
int j;
|
||||
p = buf;
|
||||
p += sprintf(p, "%sfr%02d-%02d ", level, i, i + 3);
|
||||
for (j = 0; j < 4; j++)
|
||||
p += sprintf(p, " %016llx", (i+j) == 0 ? 0 : regs->fr[i+j]);
|
||||
printk("%s\n", buf);
|
||||
}
|
||||
|
||||
cr30 = mfctl(30);
|
||||
cr31 = mfctl(31);
|
||||
|
|
|
@ -513,15 +513,18 @@ void handle_unaligned(struct pt_regs *regs)
|
|||
register int flop=0; /* true if this is a flop */
|
||||
|
||||
/* log a message with pacing */
|
||||
if (user_mode(regs))
|
||||
{
|
||||
if (unaligned_count > 5 && jiffies - last_time > 5*HZ)
|
||||
{
|
||||
if (user_mode(regs)) {
|
||||
if (current->thread.flags & PARISC_UAC_SIGBUS) {
|
||||
goto force_sigbus;
|
||||
}
|
||||
|
||||
if (unaligned_count > 5 && jiffies - last_time > 5*HZ) {
|
||||
unaligned_count = 0;
|
||||
last_time = jiffies;
|
||||
}
|
||||
if (++unaligned_count < 5)
|
||||
{
|
||||
|
||||
if (!(current->thread.flags & PARISC_UAC_NOPRINT)
|
||||
&& ++unaligned_count < 5) {
|
||||
char buf[256];
|
||||
sprintf(buf, "%s(%d): unaligned access to 0x" RFMT " at ip=0x" RFMT "\n",
|
||||
current->comm, current->pid, regs->ior, regs->iaoq[0]);
|
||||
|
@ -530,6 +533,7 @@ void handle_unaligned(struct pt_regs *regs)
|
|||
show_regs(regs);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!unaligned_enabled)
|
||||
goto force_sigbus;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
extrd,u \t2,63,32,\t2
|
||||
#endif
|
||||
/* t2 = &__per_cpu_offset[smp_processor_id()]; */
|
||||
LDREG,s \t2(\t1),\t2
|
||||
LDREGX \t2(\t1),\t2
|
||||
addil LT%per_cpu__exception_data,%r27
|
||||
LDREG RT%per_cpu__exception_data(%r1),\t1
|
||||
/* t1 = &__get_cpu_var(exception_data) */
|
||||
|
@ -53,6 +53,8 @@
|
|||
.endm
|
||||
#endif
|
||||
|
||||
.level LEVEL
|
||||
|
||||
.text
|
||||
.section .fixup, "ax"
|
||||
|
||||
|
|
|
@ -339,6 +339,7 @@ unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len)
|
|||
pds = (double *)pcs;
|
||||
pdd = (double *)pcd;
|
||||
|
||||
#if 0
|
||||
/* Copy 8 doubles at a time */
|
||||
while (len >= 8*sizeof(double)) {
|
||||
register double r1, r2, r3, r4, r5, r6, r7, r8;
|
||||
|
@ -366,6 +367,7 @@ unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len)
|
|||
fstdma(d_space, r8, pdd, pmc_store_exc);
|
||||
len -= 8*sizeof(double);
|
||||
}
|
||||
#endif
|
||||
|
||||
pws = (unsigned int *)pds;
|
||||
pwd = (unsigned int *)pdd;
|
||||
|
|
|
@ -204,7 +204,7 @@ static irqreturn_t hil_kbd_interrupt(struct serio *serio,
|
|||
hil_packet packet;
|
||||
int idx;
|
||||
|
||||
kbd = (struct hil_kbd *)serio->private;
|
||||
kbd = serio_get_drvdata(serio);
|
||||
if (kbd == NULL) {
|
||||
BUG();
|
||||
return IRQ_HANDLED;
|
||||
|
@ -234,7 +234,7 @@ static void hil_kbd_disconnect(struct serio *serio)
|
|||
{
|
||||
struct hil_kbd *kbd;
|
||||
|
||||
kbd = (struct hil_kbd *)serio->private;
|
||||
kbd = serio_get_drvdata(serio);
|
||||
if (kbd == NULL) {
|
||||
BUG();
|
||||
return;
|
||||
|
@ -245,20 +245,20 @@ static void hil_kbd_disconnect(struct serio *serio)
|
|||
kfree(kbd);
|
||||
}
|
||||
|
||||
static void hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
||||
static int hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
||||
{
|
||||
struct hil_kbd *kbd;
|
||||
uint8_t did, *idd;
|
||||
int i;
|
||||
|
||||
if (serio->type != (SERIO_HIL_MLC | SERIO_HIL)) return;
|
||||
|
||||
if (!(kbd = kmalloc(sizeof(struct hil_kbd), GFP_KERNEL))) return;
|
||||
kbd = kmalloc(sizeof(*kbd), GFP_KERNEL);
|
||||
if (!kbd)
|
||||
return -ENOMEM;
|
||||
memset(kbd, 0, sizeof(struct hil_kbd));
|
||||
|
||||
if (serio_open(serio, drv)) goto bail0;
|
||||
|
||||
serio->private = kbd;
|
||||
serio_set_drvdata(serio, kbd);
|
||||
kbd->serio = serio;
|
||||
kbd->dev.private = kbd;
|
||||
|
||||
|
@ -342,19 +342,31 @@ static void hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
down(&(kbd->sem));
|
||||
up(&(kbd->sem));
|
||||
|
||||
return;
|
||||
return 0;
|
||||
bail1:
|
||||
serio_close(serio);
|
||||
bail0:
|
||||
kfree(kbd);
|
||||
serio_set_drvdata(serio, NULL);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static struct serio_device_id hil_kbd_ids[] = {
|
||||
{
|
||||
.type = SERIO_HIL_MLC,
|
||||
.proto = SERIO_HIL,
|
||||
.id = SERIO_ANY,
|
||||
.extra = SERIO_ANY,
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct serio_driver hil_kbd_serio_drv = {
|
||||
.driver = {
|
||||
.name = "hil_kbd",
|
||||
},
|
||||
.description = "HP HIL keyboard driver",
|
||||
.id_table = hil_kbd_ids,
|
||||
.connect = hil_kbd_connect,
|
||||
.disconnect = hil_kbd_disconnect,
|
||||
.interrupt = hil_kbd_interrupt
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <linux/errno.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/hil.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
|
@ -278,11 +278,11 @@ static int __init
|
|||
hil_init_chip(struct parisc_device *dev)
|
||||
{
|
||||
if (!dev->irq) {
|
||||
printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa);
|
||||
printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa.start);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
hil_base = dev->hpa;
|
||||
hil_base = dev->hpa.start;
|
||||
hil_irq = dev->irq;
|
||||
hil_dev.dev_id = dev;
|
||||
|
||||
|
@ -299,7 +299,7 @@ static struct parisc_device_id hil_tbl[] = {
|
|||
MODULE_DEVICE_TABLE(parisc, hil_tbl);
|
||||
|
||||
static struct parisc_driver hil_driver = {
|
||||
.name = "HIL",
|
||||
.name = "hil",
|
||||
.id_table = hil_tbl,
|
||||
.probe = hil_init_chip,
|
||||
};
|
||||
|
|
|
@ -196,7 +196,7 @@ static irqreturn_t hil_ptr_interrupt(struct serio *serio,
|
|||
hil_packet packet;
|
||||
int idx;
|
||||
|
||||
ptr = (struct hil_ptr *)serio->private;
|
||||
ptr = serio_get_drvdata(serio);
|
||||
if (ptr == NULL) {
|
||||
BUG();
|
||||
return IRQ_HANDLED;
|
||||
|
@ -227,7 +227,7 @@ static void hil_ptr_disconnect(struct serio *serio)
|
|||
{
|
||||
struct hil_ptr *ptr;
|
||||
|
||||
ptr = (struct hil_ptr *)serio->private;
|
||||
ptr = serio_get_drvdata(serio);
|
||||
if (ptr == NULL) {
|
||||
BUG();
|
||||
return;
|
||||
|
@ -238,21 +238,19 @@ static void hil_ptr_disconnect(struct serio *serio)
|
|||
kfree(ptr);
|
||||
}
|
||||
|
||||
static void hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
||||
static int hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
||||
{
|
||||
struct hil_ptr *ptr;
|
||||
char *txt;
|
||||
unsigned int i, naxsets, btntype;
|
||||
uint8_t did, *idd;
|
||||
|
||||
if (serio->type != (SERIO_HIL_MLC | SERIO_HIL)) return;
|
||||
|
||||
if (!(ptr = kmalloc(sizeof(struct hil_ptr), GFP_KERNEL))) return;
|
||||
if (!(ptr = kmalloc(sizeof(struct hil_ptr), GFP_KERNEL))) return -ENOMEM;
|
||||
memset(ptr, 0, sizeof(struct hil_ptr));
|
||||
|
||||
if (serio_open(serio, driver)) goto bail0;
|
||||
|
||||
serio->private = ptr;
|
||||
serio_set_drvdata(serio, ptr);
|
||||
ptr->serio = serio;
|
||||
ptr->dev.private = ptr;
|
||||
|
||||
|
@ -380,23 +378,34 @@ static void hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
|
|||
(btntype == BTN_MOUSE) ? "HIL mouse":"HIL tablet or touchpad",
|
||||
did);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
bail1:
|
||||
serio_close(serio);
|
||||
bail0:
|
||||
kfree(ptr);
|
||||
return;
|
||||
serio_set_drvdata(serio, NULL);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct serio_device_id hil_ptr_ids[] = {
|
||||
{
|
||||
.type = SERIO_HIL_MLC,
|
||||
.proto = SERIO_HIL,
|
||||
.id = SERIO_ANY,
|
||||
.extra = SERIO_ANY,
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static struct serio_driver hil_ptr_serio_driver = {
|
||||
.driver = {
|
||||
.name = "hil_ptr",
|
||||
},
|
||||
.description = "HP HIL mouse/tablet driver",
|
||||
.connect = hil_ptr_connect,
|
||||
.disconnect = hil_ptr_disconnect,
|
||||
.interrupt = hil_ptr_interrupt
|
||||
.id_table = hil_ptr_ids,
|
||||
.connect = hil_ptr_connect,
|
||||
.disconnect = hil_ptr_disconnect,
|
||||
.interrupt = hil_ptr_interrupt
|
||||
};
|
||||
|
||||
static int __init hil_ptr_init(void)
|
||||
|
|
|
@ -211,9 +211,6 @@ static void gscps2_reset(struct gscps2port *ps2port)
|
|||
writeb(0xff, addr+GSC_RESET);
|
||||
gscps2_flush(ps2port);
|
||||
spin_unlock_irqrestore(&ps2port->lock, flags);
|
||||
|
||||
/* enable it */
|
||||
gscps2_enable(ps2port, ENABLE);
|
||||
}
|
||||
|
||||
static LIST_HEAD(ps2port_list);
|
||||
|
@ -307,6 +304,9 @@ static int gscps2_open(struct serio *port)
|
|||
|
||||
gscps2_reset(ps2port);
|
||||
|
||||
/* enable it */
|
||||
gscps2_enable(ps2port, ENABLE);
|
||||
|
||||
gscps2_interrupt(0, NULL, NULL);
|
||||
|
||||
return 0;
|
||||
|
@ -331,7 +331,7 @@ static int __init gscps2_probe(struct parisc_device *dev)
|
|||
{
|
||||
struct gscps2port *ps2port;
|
||||
struct serio *serio;
|
||||
unsigned long hpa = dev->hpa;
|
||||
unsigned long hpa = dev->hpa.start;
|
||||
int ret;
|
||||
|
||||
if (!dev->irq)
|
||||
|
@ -370,8 +370,6 @@ static int __init gscps2_probe(struct parisc_device *dev)
|
|||
serio->port_data = ps2port;
|
||||
serio->dev.parent = &dev->dev;
|
||||
|
||||
list_add_tail(&ps2port->node, &ps2port_list);
|
||||
|
||||
ret = -EBUSY;
|
||||
if (request_irq(dev->irq, gscps2_interrupt, SA_SHIRQ, ps2port->port->name, ps2port))
|
||||
goto fail_miserably;
|
||||
|
@ -396,15 +394,16 @@ static int __init gscps2_probe(struct parisc_device *dev)
|
|||
|
||||
serio_register_port(ps2port->port);
|
||||
|
||||
list_add_tail(&ps2port->node, &ps2port_list);
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
free_irq(dev->irq, ps2port);
|
||||
|
||||
fail_miserably:
|
||||
list_del(&ps2port->node);
|
||||
iounmap(ps2port->addr);
|
||||
release_mem_region(dev->hpa, GSC_STATUS + 4);
|
||||
release_mem_region(dev->hpa.start, GSC_STATUS + 4);
|
||||
|
||||
fail_nomem:
|
||||
kfree(ps2port);
|
||||
|
@ -444,7 +443,7 @@ static struct parisc_device_id gscps2_device_tbl[] = {
|
|||
};
|
||||
|
||||
static struct parisc_driver parisc_ps2_driver = {
|
||||
.name = "GSC PS2",
|
||||
.name = "gsc_ps2",
|
||||
.id_table = gscps2_device_tbl,
|
||||
.probe = gscps2_probe,
|
||||
.remove = gscps2_remove,
|
||||
|
|
|
@ -801,7 +801,8 @@ static int hil_mlc_serio_open(struct serio *serio) {
|
|||
struct hil_mlc_serio_map *map;
|
||||
struct hil_mlc *mlc;
|
||||
|
||||
if (serio->private != NULL) return -EBUSY;
|
||||
if (serio_get_drvdata(serio) != NULL)
|
||||
return -EBUSY;
|
||||
|
||||
map = serio->port_data;
|
||||
if (map == NULL) {
|
||||
|
@ -832,11 +833,18 @@ static void hil_mlc_serio_close(struct serio *serio) {
|
|||
return;
|
||||
}
|
||||
|
||||
serio->private = NULL;
|
||||
serio_set_drvdata(serio, NULL);
|
||||
serio->drv = NULL;
|
||||
/* TODO wake up interruptable */
|
||||
}
|
||||
|
||||
static struct serio_device_id hil_mlc_serio_id = {
|
||||
.type = SERIO_HIL_MLC,
|
||||
.proto = SERIO_HIL,
|
||||
.extra = SERIO_ANY,
|
||||
.id = SERIO_ANY,
|
||||
};
|
||||
|
||||
int hil_mlc_register(hil_mlc *mlc) {
|
||||
int i;
|
||||
unsigned long flags;
|
||||
|
@ -867,7 +875,7 @@ int hil_mlc_register(hil_mlc *mlc) {
|
|||
mlc_serio = kmalloc(sizeof(*mlc_serio), GFP_KERNEL);
|
||||
mlc->serio[i] = mlc_serio;
|
||||
memset(mlc_serio, 0, sizeof(*mlc_serio));
|
||||
mlc_serio->type = SERIO_HIL | SERIO_HIL_MLC;
|
||||
mlc_serio->id = hil_mlc_serio_id;
|
||||
mlc_serio->write = hil_mlc_serio_write;
|
||||
mlc_serio->open = hil_mlc_serio_open;
|
||||
mlc_serio->close = hil_mlc_serio_close;
|
||||
|
|
|
@ -764,7 +764,7 @@ MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl);
|
|||
static int __init hp_sdc_init_hppa(struct parisc_device *d);
|
||||
|
||||
static struct parisc_driver hp_sdc_driver = {
|
||||
.name = "HP SDC",
|
||||
.name = "hp_sdc",
|
||||
.id_table = hp_sdc_tbl,
|
||||
.probe = hp_sdc_init_hppa,
|
||||
};
|
||||
|
@ -875,9 +875,9 @@ static int __init hp_sdc_init_hppa(struct parisc_device *d)
|
|||
hp_sdc.dev = d;
|
||||
hp_sdc.irq = d->irq;
|
||||
hp_sdc.nmi = d->aux_irq;
|
||||
hp_sdc.base_io = d->hpa;
|
||||
hp_sdc.data_io = d->hpa + 0x800;
|
||||
hp_sdc.status_io = d->hpa + 0x801;
|
||||
hp_sdc.base_io = d->hpa.start;
|
||||
hp_sdc.data_io = d->hpa.start + 0x800;
|
||||
hp_sdc.status_io = d->hpa.start + 0x801;
|
||||
|
||||
return hp_sdc_init();
|
||||
}
|
||||
|
|
|
@ -415,6 +415,10 @@ static int rx_ring_size = RX_RING_SIZE;
|
|||
static int ticks_limit = 100;
|
||||
static int max_cmd_backlog = TX_RING_SIZE-1;
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
static void i596_poll_controller(struct net_device *dev);
|
||||
#endif
|
||||
|
||||
|
||||
static inline void CA(struct net_device *dev)
|
||||
{
|
||||
|
@ -636,11 +640,11 @@ static int init_i596_mem(struct net_device *dev)
|
|||
|
||||
disable_irq(dev->irq); /* disable IRQs from LAN */
|
||||
DEB(DEB_INIT,
|
||||
printk("RESET 82596 port: %p (with IRQ %d disabled)\n",
|
||||
(void*)(dev->base_addr + PA_I82596_RESET),
|
||||
printk("RESET 82596 port: %lx (with IRQ %d disabled)\n",
|
||||
(dev->base_addr + PA_I82596_RESET),
|
||||
dev->irq));
|
||||
|
||||
gsc_writel(0, (void*)(dev->base_addr + PA_I82596_RESET)); /* Hard Reset */
|
||||
gsc_writel(0, (dev->base_addr + PA_I82596_RESET)); /* Hard Reset */
|
||||
udelay(100); /* Wait 100us - seems to help */
|
||||
|
||||
/* change the scp address */
|
||||
|
@ -1209,6 +1213,9 @@ static int __devinit i82596_probe(struct net_device *dev,
|
|||
dev->set_multicast_list = set_multicast_list;
|
||||
dev->tx_timeout = i596_tx_timeout;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
dev->poll_controller = i596_poll_controller;
|
||||
#endif
|
||||
|
||||
dev->priv = (void *)(dev->mem_start);
|
||||
|
||||
|
@ -1242,6 +1249,14 @@ static int __devinit i82596_probe(struct net_device *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
static void i596_poll_controller(struct net_device *dev)
|
||||
{
|
||||
disable_irq(dev->irq);
|
||||
i596_interrupt(dev->irq, dev, NULL);
|
||||
enable_irq(dev->irq);
|
||||
}
|
||||
#endif
|
||||
|
||||
static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
|
@ -1528,17 +1543,18 @@ lan_init_chip(struct parisc_device *dev)
|
|||
|
||||
if (!dev->irq) {
|
||||
printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
|
||||
__FILE__, dev->hpa);
|
||||
__FILE__, dev->hpa.start);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa, dev->irq);
|
||||
printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start,
|
||||
dev->irq);
|
||||
|
||||
netdevice = alloc_etherdev(0);
|
||||
if (!netdevice)
|
||||
return -ENOMEM;
|
||||
|
||||
netdevice->base_addr = dev->hpa;
|
||||
netdevice->base_addr = dev->hpa.start;
|
||||
netdevice->irq = dev->irq;
|
||||
|
||||
retval = i82596_probe(netdevice, &dev->dev);
|
||||
|
@ -1566,7 +1582,7 @@ static struct parisc_device_id lan_tbl[] = {
|
|||
MODULE_DEVICE_TABLE(parisc, lan_tbl);
|
||||
|
||||
static struct parisc_driver lan_driver = {
|
||||
.name = "Apricot",
|
||||
.name = "lasi_82596",
|
||||
.id_table = lan_tbl,
|
||||
.probe = lan_init_chip,
|
||||
};
|
||||
|
|
|
@ -77,12 +77,12 @@ asp_init_chip(struct parisc_device *dev)
|
|||
struct gsc_irq gsc_irq;
|
||||
int ret;
|
||||
|
||||
asp.version = gsc_readb(dev->hpa + ASP_VER_OFFSET) & 0xf;
|
||||
asp.version = gsc_readb(dev->hpa.start + ASP_VER_OFFSET) & 0xf;
|
||||
asp.name = (asp.version == 1) ? "Asp" : "Cutoff";
|
||||
asp.hpa = ASP_INTERRUPT_ADDR;
|
||||
|
||||
printk(KERN_INFO "%s version %d at 0x%lx found.\n",
|
||||
asp.name, asp.version, dev->hpa);
|
||||
asp.name, asp.version, dev->hpa.start);
|
||||
|
||||
/* the IRQ ASP should use */
|
||||
ret = -EBUSY;
|
||||
|
@ -126,7 +126,7 @@ static struct parisc_device_id asp_tbl[] = {
|
|||
};
|
||||
|
||||
struct parisc_driver asp_driver = {
|
||||
.name = "Asp",
|
||||
.name = "asp",
|
||||
.id_table = asp_tbl,
|
||||
.probe = asp_init_chip,
|
||||
};
|
||||
|
|
|
@ -100,9 +100,9 @@
|
|||
#define DBG_RUN_SG(x...)
|
||||
#endif
|
||||
|
||||
#define CCIO_INLINE /* inline */
|
||||
#define WRITE_U32(value, addr) gsc_writel(value, (u32 *)(addr))
|
||||
#define READ_U32(addr) gsc_readl((u32 *)(addr))
|
||||
#define CCIO_INLINE inline
|
||||
#define WRITE_U32(value, addr) __raw_writel(value, addr)
|
||||
#define READ_U32(addr) __raw_readl(addr)
|
||||
|
||||
#define U2_IOA_RUNWAY 0x580
|
||||
#define U2_BC_GSC 0x501
|
||||
|
@ -115,28 +115,28 @@
|
|||
|
||||
struct ioa_registers {
|
||||
/* Runway Supervisory Set */
|
||||
volatile int32_t unused1[12];
|
||||
volatile uint32_t io_command; /* Offset 12 */
|
||||
volatile uint32_t io_status; /* Offset 13 */
|
||||
volatile uint32_t io_control; /* Offset 14 */
|
||||
volatile int32_t unused2[1];
|
||||
int32_t unused1[12];
|
||||
uint32_t io_command; /* Offset 12 */
|
||||
uint32_t io_status; /* Offset 13 */
|
||||
uint32_t io_control; /* Offset 14 */
|
||||
int32_t unused2[1];
|
||||
|
||||
/* Runway Auxiliary Register Set */
|
||||
volatile uint32_t io_err_resp; /* Offset 0 */
|
||||
volatile uint32_t io_err_info; /* Offset 1 */
|
||||
volatile uint32_t io_err_req; /* Offset 2 */
|
||||
volatile uint32_t io_err_resp_hi; /* Offset 3 */
|
||||
volatile uint32_t io_tlb_entry_m; /* Offset 4 */
|
||||
volatile uint32_t io_tlb_entry_l; /* Offset 5 */
|
||||
volatile uint32_t unused3[1];
|
||||
volatile uint32_t io_pdir_base; /* Offset 7 */
|
||||
volatile uint32_t io_io_low_hv; /* Offset 8 */
|
||||
volatile uint32_t io_io_high_hv; /* Offset 9 */
|
||||
volatile uint32_t unused4[1];
|
||||
volatile uint32_t io_chain_id_mask; /* Offset 11 */
|
||||
volatile uint32_t unused5[2];
|
||||
volatile uint32_t io_io_low; /* Offset 14 */
|
||||
volatile uint32_t io_io_high; /* Offset 15 */
|
||||
uint32_t io_err_resp; /* Offset 0 */
|
||||
uint32_t io_err_info; /* Offset 1 */
|
||||
uint32_t io_err_req; /* Offset 2 */
|
||||
uint32_t io_err_resp_hi; /* Offset 3 */
|
||||
uint32_t io_tlb_entry_m; /* Offset 4 */
|
||||
uint32_t io_tlb_entry_l; /* Offset 5 */
|
||||
uint32_t unused3[1];
|
||||
uint32_t io_pdir_base; /* Offset 7 */
|
||||
uint32_t io_io_low_hv; /* Offset 8 */
|
||||
uint32_t io_io_high_hv; /* Offset 9 */
|
||||
uint32_t unused4[1];
|
||||
uint32_t io_chain_id_mask; /* Offset 11 */
|
||||
uint32_t unused5[2];
|
||||
uint32_t io_io_low; /* Offset 14 */
|
||||
uint32_t io_io_high; /* Offset 15 */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -226,7 +226,7 @@ struct ioa_registers {
|
|||
*/
|
||||
|
||||
struct ioc {
|
||||
struct ioa_registers *ioc_hpa; /* I/O MMU base address */
|
||||
struct ioa_registers __iomem *ioc_regs; /* I/O MMU base address */
|
||||
u8 *res_map; /* resource map, bit == pdir entry */
|
||||
u64 *pdir_base; /* physical base address */
|
||||
u32 pdir_size; /* bytes, function of IOV Space size */
|
||||
|
@ -595,7 +595,7 @@ ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
|
|||
** Grab virtual index [0:11]
|
||||
** Deposit virt_idx bits into I/O PDIR word
|
||||
*/
|
||||
asm volatile ("lci 0(%%sr1, %1), %0" : "=r" (ci) : "r" (vba));
|
||||
asm volatile ("lci %%r0(%%sr1, %1), %0" : "=r" (ci) : "r" (vba));
|
||||
asm volatile ("extru %1,19,12,%0" : "+r" (ci) : "r" (ci));
|
||||
asm volatile ("depw %1,15,12,%0" : "+r" (pa) : "r" (ci));
|
||||
|
||||
|
@ -613,7 +613,7 @@ ccio_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
|
|||
** the real mode coherence index generation of U2, the PDIR entry
|
||||
** must be flushed to memory to retain coherence."
|
||||
*/
|
||||
asm volatile("fdc 0(%0)" : : "r" (pdir_ptr));
|
||||
asm volatile("fdc %%r0(%0)" : : "r" (pdir_ptr));
|
||||
asm volatile("sync");
|
||||
}
|
||||
|
||||
|
@ -636,7 +636,7 @@ ccio_clear_io_tlb(struct ioc *ioc, dma_addr_t iovp, size_t byte_cnt)
|
|||
byte_cnt += chain_size;
|
||||
|
||||
while(byte_cnt > chain_size) {
|
||||
WRITE_U32(CMD_TLB_PURGE | iovp, &ioc->ioc_hpa->io_command);
|
||||
WRITE_U32(CMD_TLB_PURGE | iovp, &ioc->ioc_regs->io_command);
|
||||
iovp += chain_size;
|
||||
byte_cnt -= chain_size;
|
||||
}
|
||||
|
@ -684,7 +684,7 @@ ccio_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt)
|
|||
** Hopefully someone figures out how to patch (NOP) the
|
||||
** FDC/SYNC out at boot time.
|
||||
*/
|
||||
asm volatile("fdc 0(%0)" : : "r" (pdir_ptr[7]));
|
||||
asm volatile("fdc %%r0(%0)" : : "r" (pdir_ptr[7]));
|
||||
|
||||
iovp += IOVP_SIZE;
|
||||
byte_cnt -= IOVP_SIZE;
|
||||
|
@ -1251,7 +1251,7 @@ static struct parisc_device_id ccio_tbl[] = {
|
|||
static int ccio_probe(struct parisc_device *dev);
|
||||
|
||||
static struct parisc_driver ccio_driver = {
|
||||
.name = "U2:Uturn",
|
||||
.name = "ccio",
|
||||
.id_table = ccio_tbl,
|
||||
.probe = ccio_probe,
|
||||
};
|
||||
|
@ -1314,14 +1314,13 @@ ccio_ioc_init(struct ioc *ioc)
|
|||
|
||||
ioc->pdir_size = (iova_space_size / IOVP_SIZE) * sizeof(u64);
|
||||
|
||||
BUG_ON(ioc->pdir_size >= 4 * 1024 * 1024); /* max pdir size < 4MB */
|
||||
BUG_ON(ioc->pdir_size > 8 * 1024 * 1024); /* max pdir size <= 8MB */
|
||||
|
||||
/* Verify it's a power of two */
|
||||
BUG_ON((1 << get_order(ioc->pdir_size)) != (ioc->pdir_size >> PAGE_SHIFT));
|
||||
|
||||
DBG_INIT("%s() hpa 0x%lx mem %luMB IOV %dMB (%d bits)\n",
|
||||
__FUNCTION__,
|
||||
ioc->ioc_hpa,
|
||||
DBG_INIT("%s() hpa 0x%p mem %luMB IOV %dMB (%d bits)\n",
|
||||
__FUNCTION__, ioc->ioc_regs,
|
||||
(unsigned long) num_physpages >> (20 - PAGE_SHIFT),
|
||||
iova_space_size>>20,
|
||||
iov_order + PAGE_SHIFT);
|
||||
|
@ -1329,13 +1328,12 @@ ccio_ioc_init(struct ioc *ioc)
|
|||
ioc->pdir_base = (u64 *)__get_free_pages(GFP_KERNEL,
|
||||
get_order(ioc->pdir_size));
|
||||
if(NULL == ioc->pdir_base) {
|
||||
panic("%s:%s() could not allocate I/O Page Table\n", __FILE__,
|
||||
__FUNCTION__);
|
||||
panic("%s() could not allocate I/O Page Table\n", __FUNCTION__);
|
||||
}
|
||||
memset(ioc->pdir_base, 0, ioc->pdir_size);
|
||||
|
||||
BUG_ON((((unsigned long)ioc->pdir_base) & PAGE_MASK) != (unsigned long)ioc->pdir_base);
|
||||
DBG_INIT(" base %p", ioc->pdir_base);
|
||||
DBG_INIT(" base %p\n", ioc->pdir_base);
|
||||
|
||||
/* resource map size dictated by pdir_size */
|
||||
ioc->res_size = (ioc->pdir_size / sizeof(u64)) >> 3;
|
||||
|
@ -1344,8 +1342,7 @@ ccio_ioc_init(struct ioc *ioc)
|
|||
ioc->res_map = (u8 *)__get_free_pages(GFP_KERNEL,
|
||||
get_order(ioc->res_size));
|
||||
if(NULL == ioc->res_map) {
|
||||
panic("%s:%s() could not allocate resource map\n", __FILE__,
|
||||
__FUNCTION__);
|
||||
panic("%s() could not allocate resource map\n", __FUNCTION__);
|
||||
}
|
||||
memset(ioc->res_map, 0, ioc->res_size);
|
||||
|
||||
|
@ -1366,44 +1363,58 @@ ccio_ioc_init(struct ioc *ioc)
|
|||
** Initialize IOA hardware
|
||||
*/
|
||||
WRITE_U32(CCIO_CHAINID_MASK << ioc->chainid_shift,
|
||||
&ioc->ioc_hpa->io_chain_id_mask);
|
||||
&ioc->ioc_regs->io_chain_id_mask);
|
||||
|
||||
WRITE_U32(virt_to_phys(ioc->pdir_base),
|
||||
&ioc->ioc_hpa->io_pdir_base);
|
||||
&ioc->ioc_regs->io_pdir_base);
|
||||
|
||||
/*
|
||||
** Go to "Virtual Mode"
|
||||
*/
|
||||
WRITE_U32(IOA_NORMAL_MODE, &ioc->ioc_hpa->io_control);
|
||||
WRITE_U32(IOA_NORMAL_MODE, &ioc->ioc_regs->io_control);
|
||||
|
||||
/*
|
||||
** Initialize all I/O TLB entries to 0 (Valid bit off).
|
||||
*/
|
||||
WRITE_U32(0, &ioc->ioc_hpa->io_tlb_entry_m);
|
||||
WRITE_U32(0, &ioc->ioc_hpa->io_tlb_entry_l);
|
||||
WRITE_U32(0, &ioc->ioc_regs->io_tlb_entry_m);
|
||||
WRITE_U32(0, &ioc->ioc_regs->io_tlb_entry_l);
|
||||
|
||||
for(i = 1 << CCIO_CHAINID_SHIFT; i ; i--) {
|
||||
WRITE_U32((CMD_TLB_DIRECT_WRITE | (i << ioc->chainid_shift)),
|
||||
&ioc->ioc_hpa->io_command);
|
||||
&ioc->ioc_regs->io_command);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ccio_init_resource(struct resource *res, char *name, unsigned long ioaddr)
|
||||
ccio_init_resource(struct resource *res, char *name, void __iomem *ioaddr)
|
||||
{
|
||||
int result;
|
||||
|
||||
res->parent = NULL;
|
||||
res->flags = IORESOURCE_MEM;
|
||||
res->start = (unsigned long)(signed) __raw_readl(ioaddr) << 16;
|
||||
res->end = (unsigned long)(signed) (__raw_readl(ioaddr + 4) << 16) - 1;
|
||||
/*
|
||||
* bracing ((signed) ...) are required for 64bit kernel because
|
||||
* we only want to sign extend the lower 16 bits of the register.
|
||||
* The upper 16-bits of range registers are hardcoded to 0xffff.
|
||||
*/
|
||||
res->start = (unsigned long)((signed) READ_U32(ioaddr) << 16);
|
||||
res->end = (unsigned long)((signed) (READ_U32(ioaddr + 4) << 16) - 1);
|
||||
res->name = name;
|
||||
/*
|
||||
* Check if this MMIO range is disable
|
||||
*/
|
||||
if (res->end + 1 == res->start)
|
||||
return;
|
||||
result = request_resource(&iomem_resource, res);
|
||||
|
||||
/* On some platforms (e.g. K-Class), we have already registered
|
||||
* resources for devices reported by firmware. Some are children
|
||||
* of ccio.
|
||||
* "insert" ccio ranges in the mmio hierarchy (/proc/iomem).
|
||||
*/
|
||||
result = insert_resource(&iomem_resource, res);
|
||||
if (result < 0) {
|
||||
printk(KERN_ERR "%s: failed to claim CCIO bus address space (%08lx,%08lx)\n",
|
||||
__FILE__, res->start, res->end);
|
||||
printk(KERN_ERR "%s() failed to claim CCIO bus address space (%08lx,%08lx)\n",
|
||||
__FUNCTION__, res->start, res->end);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1414,9 +1425,8 @@ static void __init ccio_init_resources(struct ioc *ioc)
|
|||
|
||||
sprintf(name, "GSC Bus [%d/]", ioc->hw_path);
|
||||
|
||||
ccio_init_resource(res, name, (unsigned long)&ioc->ioc_hpa->io_io_low);
|
||||
ccio_init_resource(res + 1, name,
|
||||
(unsigned long)&ioc->ioc_hpa->io_io_low_hv);
|
||||
ccio_init_resource(res, name, &ioc->ioc_regs->io_io_low);
|
||||
ccio_init_resource(res + 1, name, &ioc->ioc_regs->io_io_low_hv);
|
||||
}
|
||||
|
||||
static int new_ioc_area(struct resource *res, unsigned long size,
|
||||
|
@ -1427,7 +1437,12 @@ static int new_ioc_area(struct resource *res, unsigned long size,
|
|||
|
||||
res->start = (max - size + 1) &~ (align - 1);
|
||||
res->end = res->start + size;
|
||||
if (!request_resource(&iomem_resource, res))
|
||||
|
||||
/* We might be trying to expand the MMIO range to include
|
||||
* a child device that has already registered it's MMIO space.
|
||||
* Use "insert" instead of request_resource().
|
||||
*/
|
||||
if (!insert_resource(&iomem_resource, res))
|
||||
return 0;
|
||||
|
||||
return new_ioc_area(res, size, min, max - size, align);
|
||||
|
@ -1486,15 +1501,15 @@ int ccio_allocate_resource(const struct parisc_device *dev,
|
|||
|
||||
if (!expand_ioc_area(parent, size, min, max, align)) {
|
||||
__raw_writel(((parent->start)>>16) | 0xffff0000,
|
||||
(unsigned long)&(ioc->ioc_hpa->io_io_low));
|
||||
&ioc->ioc_regs->io_io_low);
|
||||
__raw_writel(((parent->end)>>16) | 0xffff0000,
|
||||
(unsigned long)&(ioc->ioc_hpa->io_io_high));
|
||||
&ioc->ioc_regs->io_io_high);
|
||||
} else if (!expand_ioc_area(parent + 1, size, min, max, align)) {
|
||||
parent++;
|
||||
__raw_writel(((parent->start)>>16) | 0xffff0000,
|
||||
(unsigned long)&(ioc->ioc_hpa->io_io_low_hv));
|
||||
&ioc->ioc_regs->io_io_low_hv);
|
||||
__raw_writel(((parent->end)>>16) | 0xffff0000,
|
||||
(unsigned long)&(ioc->ioc_hpa->io_io_high_hv));
|
||||
&ioc->ioc_regs->io_io_high_hv);
|
||||
} else {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
@ -1521,7 +1536,12 @@ int ccio_request_resource(const struct parisc_device *dev,
|
|||
return -EBUSY;
|
||||
}
|
||||
|
||||
return request_resource(parent, res);
|
||||
/* "transparent" bus bridges need to register MMIO resources
|
||||
* firmware assigned them. e.g. children of hppb.c (e.g. K-class)
|
||||
* registered their resources in the PDC "bus walk" (See
|
||||
* arch/parisc/kernel/inventory.c).
|
||||
*/
|
||||
return insert_resource(parent, res);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1546,7 +1566,7 @@ static int ccio_probe(struct parisc_device *dev)
|
|||
|
||||
ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn";
|
||||
|
||||
printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa);
|
||||
printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa.start);
|
||||
|
||||
for (i = 0; i < ioc_count; i++) {
|
||||
ioc_p = &(*ioc_p)->next;
|
||||
|
@ -1554,7 +1574,7 @@ static int ccio_probe(struct parisc_device *dev)
|
|||
*ioc_p = ioc;
|
||||
|
||||
ioc->hw_path = dev->hw_path;
|
||||
ioc->ioc_hpa = (struct ioa_registers *)dev->hpa;
|
||||
ioc->ioc_regs = ioremap(dev->hpa.start, 4096);
|
||||
ccio_ioc_init(ioc);
|
||||
ccio_init_resources(ioc);
|
||||
hppa_dma_ops = &ccio_ops;
|
||||
|
|
|
@ -167,7 +167,7 @@ ccio_probe(struct parisc_device *dev)
|
|||
{
|
||||
printk(KERN_INFO "%s found %s at 0x%lx\n", MODULE_NAME,
|
||||
dev->id.hversion == U2_BC_GSC ? "U2" : "UTurn",
|
||||
dev->hpa);
|
||||
dev->hpa.start);
|
||||
|
||||
/*
|
||||
** FIXME - should check U2 registers to verify it's really running
|
||||
|
|
|
@ -178,6 +178,8 @@ static int dino_cfg_read(struct pci_bus *bus, unsigned int devfn, int where,
|
|||
void __iomem *base_addr = d->hba.base_addr;
|
||||
unsigned long flags;
|
||||
|
||||
DBG("%s: %p, %d, %d, %d\n", __FUNCTION__, base_addr, devfn, where,
|
||||
size);
|
||||
spin_lock_irqsave(&d->dinosaur_pen, flags);
|
||||
|
||||
/* tell HW which CFG address */
|
||||
|
@ -211,6 +213,8 @@ static int dino_cfg_write(struct pci_bus *bus, unsigned int devfn, int where,
|
|||
void __iomem *base_addr = d->hba.base_addr;
|
||||
unsigned long flags;
|
||||
|
||||
DBG("%s: %p, %d, %d, %d\n", __FUNCTION__, base_addr, devfn, where,
|
||||
size);
|
||||
spin_lock_irqsave(&d->dinosaur_pen, flags);
|
||||
|
||||
/* avoid address stepping feature */
|
||||
|
@ -295,7 +299,7 @@ static void dino_disable_irq(unsigned int irq)
|
|||
struct dino_device *dino_dev = irq_desc[irq].handler_data;
|
||||
int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, irq);
|
||||
|
||||
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq);
|
||||
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq);
|
||||
|
||||
/* Clear the matching bit in the IMR register */
|
||||
dino_dev->imr &= ~(DINO_MASK_IRQ(local_irq));
|
||||
|
@ -308,7 +312,7 @@ static void dino_enable_irq(unsigned int irq)
|
|||
int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, irq);
|
||||
u32 tmp;
|
||||
|
||||
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq);
|
||||
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq);
|
||||
|
||||
/*
|
||||
** clear pending IRQ bits
|
||||
|
@ -490,7 +494,7 @@ dino_card_setup(struct pci_bus *bus, void __iomem *base_addr)
|
|||
if (res->start == F_EXTEND(0xf0000000UL | (i * _8MB)))
|
||||
break;
|
||||
}
|
||||
DBG("DINO GSC WRITE i=%d, start=%lx, dino addr = %lx\n",
|
||||
DBG("DINO GSC WRITE i=%d, start=%lx, dino addr = %p\n",
|
||||
i, res->start, base_addr + DINO_IO_ADDR_EN);
|
||||
__raw_writel(1 << i, base_addr + DINO_IO_ADDR_EN);
|
||||
}
|
||||
|
@ -683,6 +687,14 @@ static void __init
|
|||
dino_card_init(struct dino_device *dino_dev)
|
||||
{
|
||||
u32 brdg_feat = 0x00784e05;
|
||||
unsigned long status;
|
||||
|
||||
status = __raw_readl(dino_dev->hba.base_addr+DINO_IO_STATUS);
|
||||
if (status & 0x0000ff80) {
|
||||
__raw_writel(0x00000005,
|
||||
dino_dev->hba.base_addr+DINO_IO_COMMAND);
|
||||
udelay(1);
|
||||
}
|
||||
|
||||
__raw_writel(0x00000000, dino_dev->hba.base_addr+DINO_GMASK);
|
||||
__raw_writel(0x00000001, dino_dev->hba.base_addr+DINO_IO_FBB_EN);
|
||||
|
@ -902,15 +914,15 @@ void ccio_cujo20_fixup(struct parisc_device *dev, u32 iovp);
|
|||
** If so, initialize the chip appropriately (card-mode vs bridge mode).
|
||||
** Much of the initialization is common though.
|
||||
*/
|
||||
static int __init
|
||||
dino_driver_callback(struct parisc_device *dev)
|
||||
static int __init dino_probe(struct parisc_device *dev)
|
||||
{
|
||||
struct dino_device *dino_dev; // Dino specific control struct
|
||||
const char *version = "unknown";
|
||||
char *name;
|
||||
int is_cujo = 0;
|
||||
struct pci_bus *bus;
|
||||
|
||||
unsigned long hpa = dev->hpa.start;
|
||||
|
||||
name = "Dino";
|
||||
if (is_card_dino(&dev->id)) {
|
||||
version = "3.x (card mode)";
|
||||
|
@ -928,11 +940,11 @@ dino_driver_callback(struct parisc_device *dev)
|
|||
}
|
||||
}
|
||||
|
||||
printk("%s version %s found at 0x%lx\n", name, version, dev->hpa);
|
||||
printk("%s version %s found at 0x%lx\n", name, version, hpa);
|
||||
|
||||
if (!request_mem_region(dev->hpa, PAGE_SIZE, name)) {
|
||||
if (!request_mem_region(hpa, PAGE_SIZE, name)) {
|
||||
printk(KERN_ERR "DINO: Hey! Someone took my MMIO space (0x%ld)!\n",
|
||||
dev->hpa);
|
||||
hpa);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -940,12 +952,12 @@ dino_driver_callback(struct parisc_device *dev)
|
|||
if (is_cujo && dev->id.hversion_rev == 1) {
|
||||
#ifdef CONFIG_IOMMU_CCIO
|
||||
printk(KERN_WARNING "Enabling Cujo 2.0 bug workaround\n");
|
||||
if (dev->hpa == (unsigned long)CUJO_RAVEN_ADDR) {
|
||||
if (hpa == (unsigned long)CUJO_RAVEN_ADDR) {
|
||||
ccio_cujo20_fixup(dev, CUJO_RAVEN_BADPAGE);
|
||||
} else if (dev->hpa == (unsigned long)CUJO_FIREHAWK_ADDR) {
|
||||
} else if (hpa == (unsigned long)CUJO_FIREHAWK_ADDR) {
|
||||
ccio_cujo20_fixup(dev, CUJO_FIREHAWK_BADPAGE);
|
||||
} else {
|
||||
printk("Don't recognise Cujo at address 0x%lx, not enabling workaround\n", dev->hpa);
|
||||
printk("Don't recognise Cujo at address 0x%lx, not enabling workaround\n", hpa);
|
||||
}
|
||||
#endif
|
||||
} else if (!is_cujo && !is_card_dino(&dev->id) &&
|
||||
|
@ -970,7 +982,7 @@ dino_driver_callback(struct parisc_device *dev)
|
|||
memset(dino_dev, 0, sizeof(struct dino_device));
|
||||
|
||||
dino_dev->hba.dev = dev;
|
||||
dino_dev->hba.base_addr = ioremap(dev->hpa, 4096); /* faster access */
|
||||
dino_dev->hba.base_addr = ioremap(hpa, 4096);
|
||||
dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */
|
||||
spin_lock_init(&dino_dev->dinosaur_pen);
|
||||
dino_dev->hba.iommu = ccio_get_iommu(dev);
|
||||
|
@ -1027,9 +1039,9 @@ static struct parisc_device_id dino_tbl[] = {
|
|||
};
|
||||
|
||||
static struct parisc_driver dino_driver = {
|
||||
.name = "Dino",
|
||||
.name = "dino",
|
||||
.id_table = dino_tbl,
|
||||
.probe = dino_driver_callback,
|
||||
.probe = dino_probe,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -315,7 +315,7 @@ static int __devinit eisa_probe(struct parisc_device *dev)
|
|||
char *name = is_mongoose(dev) ? "Mongoose" : "Wax";
|
||||
|
||||
printk(KERN_INFO "%s EISA Adapter found at 0x%08lx\n",
|
||||
name, dev->hpa);
|
||||
name, dev->hpa.start);
|
||||
|
||||
eisa_dev.hba.dev = dev;
|
||||
eisa_dev.hba.iommu = ccio_get_iommu(dev);
|
||||
|
@ -397,7 +397,7 @@ static struct parisc_device_id eisa_tbl[] = {
|
|||
MODULE_DEVICE_TABLE(parisc, eisa_tbl);
|
||||
|
||||
static struct parisc_driver eisa_driver = {
|
||||
.name = "EISA Bus Adapter",
|
||||
.name = "eisa_ba",
|
||||
.id_table = eisa_tbl,
|
||||
.probe = eisa_probe,
|
||||
};
|
||||
|
|
|
@ -183,12 +183,20 @@ void gsc_asic_assign_irq(struct gsc_asic *asic, int local_irq, int *irqp)
|
|||
*irqp = irq;
|
||||
}
|
||||
|
||||
static struct device *next_device(struct klist_iter *i)
|
||||
{
|
||||
struct klist_node * n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
}
|
||||
|
||||
void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl,
|
||||
void (*choose_irq)(struct parisc_device *, void *))
|
||||
{
|
||||
struct device *dev;
|
||||
struct klist_iter i;
|
||||
|
||||
list_for_each_entry(dev, &parent->dev.children, node) {
|
||||
klist_iter_init(&parent->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
struct parisc_device *padev = to_parisc_device(dev);
|
||||
|
||||
/* work-around for 715/64 and others which have parent
|
||||
|
@ -197,6 +205,7 @@ void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl,
|
|||
return gsc_fixup_irqs(padev, ctrl, choose_irq);
|
||||
choose_irq(padev, ctrl);
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
}
|
||||
|
||||
int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic)
|
||||
|
|
|
@ -68,14 +68,14 @@ static int hppb_probe(struct parisc_device *dev)
|
|||
memset(card->next, '\0', sizeof(struct hppb_card));
|
||||
card = card->next;
|
||||
}
|
||||
printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa);
|
||||
printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa.start);
|
||||
|
||||
card->hpa = dev->hpa;
|
||||
card->hpa = dev->hpa.start;
|
||||
card->mmio_region.name = "HP-PB Bus";
|
||||
card->mmio_region.flags = IORESOURCE_MEM;
|
||||
|
||||
card->mmio_region.start = __raw_readl(dev->hpa + IO_IO_LOW);
|
||||
card->mmio_region.end = __raw_readl(dev->hpa + IO_IO_HIGH) - 1;
|
||||
card->mmio_region.start = gsc_readl(dev->hpa.start + IO_IO_LOW);
|
||||
card->mmio_region.end = gsc_readl(dev->hpa.start + IO_IO_HIGH) - 1;
|
||||
|
||||
status = ccio_request_resource(dev, &card->mmio_region);
|
||||
if(status < 0) {
|
||||
|
@ -93,7 +93,7 @@ static struct parisc_device_id hppb_tbl[] = {
|
|||
};
|
||||
|
||||
static struct parisc_driver hppb_driver = {
|
||||
.name = "Gecko Boa",
|
||||
.name = "gecko_boa",
|
||||
.id_table = hppb_tbl,
|
||||
.probe = hppb_probe,
|
||||
};
|
||||
|
|
|
@ -244,7 +244,7 @@ static struct irt_entry *iosapic_alloc_irt(int num_entries)
|
|||
* 4-byte alignment on 32-bit kernels
|
||||
*/
|
||||
a = (unsigned long)kmalloc(sizeof(struct irt_entry) * num_entries + 8, GFP_KERNEL);
|
||||
a = (a + 7) & ~7;
|
||||
a = (a + 7UL) & ~7UL;
|
||||
return (struct irt_entry *)a;
|
||||
}
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ lasi_init_chip(struct parisc_device *dev)
|
|||
return -ENOMEM;
|
||||
|
||||
lasi->name = "Lasi";
|
||||
lasi->hpa = dev->hpa;
|
||||
lasi->hpa = dev->hpa.start;
|
||||
|
||||
/* Check the 4-bit (yes, only 4) version register */
|
||||
lasi->version = gsc_readl(lasi->hpa + LASI_VER) & 0xf;
|
||||
|
@ -233,7 +233,7 @@ static struct parisc_device_id lasi_tbl[] = {
|
|||
};
|
||||
|
||||
struct parisc_driver lasi_driver = {
|
||||
.name = "Lasi",
|
||||
.name = "lasi",
|
||||
.id_table = lasi_tbl,
|
||||
.probe = lasi_init_chip,
|
||||
};
|
||||
|
|
|
@ -1288,7 +1288,7 @@ lba_legacy_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|||
** Adjust "window" for this rope.
|
||||
*/
|
||||
rsize /= ROPES_PER_IOC;
|
||||
r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa);
|
||||
r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa.start);
|
||||
r->end = r->start + rsize;
|
||||
} else {
|
||||
r->end = r->start = 0; /* Not enabled. */
|
||||
|
@ -1458,7 +1458,7 @@ lba_driver_probe(struct parisc_device *dev)
|
|||
u32 func_class;
|
||||
void *tmp_obj;
|
||||
char *version;
|
||||
void __iomem *addr = ioremap(dev->hpa, 4096);
|
||||
void __iomem *addr = ioremap(dev->hpa.start, 4096);
|
||||
|
||||
/* Read HW Rev First */
|
||||
func_class = READ_REG32(addr + LBA_FCLASS);
|
||||
|
@ -1476,7 +1476,7 @@ lba_driver_probe(struct parisc_device *dev)
|
|||
}
|
||||
|
||||
printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n",
|
||||
MODULE_NAME, version, func_class & 0xf, dev->hpa);
|
||||
MODULE_NAME, version, func_class & 0xf, dev->hpa.start);
|
||||
|
||||
if (func_class < 2) {
|
||||
printk(KERN_WARNING "Can't support LBA older than "
|
||||
|
@ -1503,17 +1503,17 @@ lba_driver_probe(struct parisc_device *dev)
|
|||
* but for the mask for func_class.
|
||||
*/
|
||||
printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n",
|
||||
MODULE_NAME, version, func_class & 0xff, dev->hpa);
|
||||
MODULE_NAME, version, func_class & 0xff, dev->hpa.start);
|
||||
cfg_ops = &mercury_cfg_ops;
|
||||
} else {
|
||||
printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa);
|
||||
printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa.start);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
** Tell I/O SAPIC driver we have a IRQ handler/region.
|
||||
*/
|
||||
tmp_obj = iosapic_register(dev->hpa + LBA_IOSAPIC_BASE);
|
||||
tmp_obj = iosapic_register(dev->hpa.start + LBA_IOSAPIC_BASE);
|
||||
|
||||
/* NOTE: PCI devices (e.g. 103c:1005 graphics card) which don't
|
||||
** have an IRT entry will get NULL back from iosapic code.
|
||||
|
@ -1635,7 +1635,7 @@ void __init lba_init(void)
|
|||
*/
|
||||
void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)
|
||||
{
|
||||
void __iomem * base_addr = ioremap(lba->hpa, 4096);
|
||||
void __iomem * base_addr = ioremap(lba->hpa.start, 4096);
|
||||
|
||||
imask <<= 2; /* adjust for hints - 2 more bits */
|
||||
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
* Changes:
|
||||
* - Audit copy_from_user in led_proc_write.
|
||||
* Daniele Bellucci <bellucda@tiscali.it>
|
||||
* - Switch from using a tasklet to a work queue, so the led_LCD_driver
|
||||
* can sleep.
|
||||
* David Pye <dmp@davidmpye.dyndns.org>
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
|
@ -37,6 +40,7 @@
|
|||
#include <linux/proc_fs.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/processor.h>
|
||||
|
@ -47,25 +51,30 @@
|
|||
#include <asm/uaccess.h>
|
||||
|
||||
/* The control of the LEDs and LCDs on PARISC-machines have to be done
|
||||
completely in software. The necessary calculations are done in a tasklet
|
||||
which is scheduled at every timer interrupt and since the calculations
|
||||
may consume relatively much CPU-time some of the calculations can be
|
||||
completely in software. The necessary calculations are done in a work queue
|
||||
task which is scheduled regularly, and since the calculations may consume a
|
||||
relatively large amount of CPU time, some of the calculations can be
|
||||
turned off with the following variables (controlled via procfs) */
|
||||
|
||||
static int led_type = -1;
|
||||
static int led_heartbeat = 1;
|
||||
static int led_diskio = 1;
|
||||
static int led_lanrxtx = 1;
|
||||
static unsigned char lastleds; /* LED state from most recent update */
|
||||
static unsigned int led_heartbeat = 1;
|
||||
static unsigned int led_diskio = 1;
|
||||
static unsigned int led_lanrxtx = 1;
|
||||
static char lcd_text[32];
|
||||
static char lcd_text_default[32];
|
||||
|
||||
|
||||
static struct workqueue_struct *led_wq;
|
||||
static void led_work_func(void *);
|
||||
static DECLARE_WORK(led_task, led_work_func, NULL);
|
||||
|
||||
#if 0
|
||||
#define DPRINTK(x) printk x
|
||||
#else
|
||||
#define DPRINTK(x)
|
||||
#endif
|
||||
|
||||
|
||||
struct lcd_block {
|
||||
unsigned char command; /* stores the command byte */
|
||||
unsigned char on; /* value for turning LED on */
|
||||
|
@ -116,12 +125,27 @@ lcd_info __attribute__((aligned(8))) =
|
|||
#define LCD_DATA_REG lcd_info.lcd_data_reg_addr
|
||||
#define LED_DATA_REG lcd_info.lcd_cmd_reg_addr /* LASI & ASP only */
|
||||
|
||||
#define LED_HASLCD 1
|
||||
#define LED_NOLCD 0
|
||||
|
||||
/* The workqueue must be created at init-time */
|
||||
static int start_task(void)
|
||||
{
|
||||
/* Display the default text now */
|
||||
if (led_type == LED_HASLCD) lcd_print( lcd_text_default );
|
||||
|
||||
/* Create the work queue and queue the LED task */
|
||||
led_wq = create_singlethread_workqueue("led_wq");
|
||||
queue_work(led_wq, &led_task);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
device_initcall(start_task);
|
||||
|
||||
/* ptr to LCD/LED-specific function */
|
||||
static void (*led_func_ptr) (unsigned char);
|
||||
|
||||
#define LED_HASLCD 1
|
||||
#define LED_NOLCD 0
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static int led_proc_read(char *page, char **start, off_t off, int count,
|
||||
int *eof, void *data)
|
||||
|
@ -286,52 +310,35 @@ static void led_LASI_driver(unsigned char leds)
|
|||
/*
|
||||
**
|
||||
** led_LCD_driver()
|
||||
**
|
||||
** The logic of the LCD driver is, that we write at every scheduled call
|
||||
** only to one of LCD_CMD_REG _or_ LCD_DATA_REG - registers.
|
||||
** That way we don't need to let this tasklet busywait for min_cmd_delay
|
||||
** milliseconds.
|
||||
**
|
||||
** TODO: check the value of "min_cmd_delay" against the value of HZ.
|
||||
**
|
||||
*/
|
||||
static void led_LCD_driver(unsigned char leds)
|
||||
{
|
||||
static int last_index; /* 0:heartbeat, 1:disk, 2:lan_in, 3:lan_out */
|
||||
static int last_was_cmd;/* 0: CMD was written last, 1: DATA was last */
|
||||
struct lcd_block *block_ptr;
|
||||
int value;
|
||||
|
||||
switch (last_index) {
|
||||
case 0: block_ptr = &lcd_info.heartbeat;
|
||||
value = leds & LED_HEARTBEAT;
|
||||
break;
|
||||
case 1: block_ptr = &lcd_info.disk_io;
|
||||
value = leds & LED_DISK_IO;
|
||||
break;
|
||||
case 2: block_ptr = &lcd_info.lan_rcv;
|
||||
value = leds & LED_LAN_RCV;
|
||||
break;
|
||||
case 3: block_ptr = &lcd_info.lan_tx;
|
||||
value = leds & LED_LAN_TX;
|
||||
break;
|
||||
default: /* should never happen: */
|
||||
return;
|
||||
}
|
||||
|
||||
if (last_was_cmd) {
|
||||
/* write the value to the LCD data port */
|
||||
gsc_writeb( value ? block_ptr->on : block_ptr->off, LCD_DATA_REG );
|
||||
} else {
|
||||
/* write the command-byte to the LCD command register */
|
||||
gsc_writeb( block_ptr->command, LCD_CMD_REG );
|
||||
}
|
||||
static int i;
|
||||
static unsigned char mask[4] = { LED_HEARTBEAT, LED_DISK_IO,
|
||||
LED_LAN_RCV, LED_LAN_TX };
|
||||
|
||||
/* now update the vars for the next interrupt iteration */
|
||||
if (++last_was_cmd == 2) { /* switch between cmd & data */
|
||||
last_was_cmd = 0;
|
||||
if (++last_index == 4)
|
||||
last_index = 0; /* switch back to heartbeat index */
|
||||
static struct lcd_block * blockp[4] = {
|
||||
&lcd_info.heartbeat,
|
||||
&lcd_info.disk_io,
|
||||
&lcd_info.lan_rcv,
|
||||
&lcd_info.lan_tx
|
||||
};
|
||||
|
||||
/* Convert min_cmd_delay to milliseconds */
|
||||
unsigned int msec_cmd_delay = 1 + (lcd_info.min_cmd_delay / 1000);
|
||||
|
||||
for (i=0; i<4; ++i)
|
||||
{
|
||||
if ((leds & mask[i]) != (lastleds & mask[i]))
|
||||
{
|
||||
gsc_writeb( blockp[i]->command, LCD_CMD_REG );
|
||||
msleep(msec_cmd_delay);
|
||||
|
||||
gsc_writeb( leds & mask[i] ? blockp[i]->on :
|
||||
blockp[i]->off, LCD_DATA_REG );
|
||||
msleep(msec_cmd_delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,7 +363,7 @@ static __inline__ int led_get_net_activity(void)
|
|||
|
||||
rx_total = tx_total = 0;
|
||||
|
||||
/* we are running as tasklet, so locking dev_base
|
||||
/* we are running as a workqueue task, so locking dev_base
|
||||
* for reading should be OK */
|
||||
read_lock(&dev_base_lock);
|
||||
rcu_read_lock();
|
||||
|
@ -405,7 +412,7 @@ static __inline__ int led_get_diskio_activity(void)
|
|||
static unsigned long last_pgpgin, last_pgpgout;
|
||||
struct page_state pgstat;
|
||||
int changed;
|
||||
|
||||
|
||||
get_full_page_state(&pgstat); /* get no of sectors in & out */
|
||||
|
||||
/* Just use a very simple calculation here. Do not care about overflow,
|
||||
|
@ -413,87 +420,71 @@ static __inline__ int led_get_diskio_activity(void)
|
|||
changed = (pgstat.pgpgin != last_pgpgin) || (pgstat.pgpgout != last_pgpgout);
|
||||
last_pgpgin = pgstat.pgpgin;
|
||||
last_pgpgout = pgstat.pgpgout;
|
||||
|
||||
|
||||
return (changed ? LED_DISK_IO : 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** led_tasklet_func()
|
||||
** led_work_func()
|
||||
**
|
||||
** is scheduled at every timer interrupt from time.c and
|
||||
** updates the chassis LCD/LED
|
||||
** manages when and which chassis LCD/LED gets updated
|
||||
|
||||
TODO:
|
||||
- display load average (older machines like 715/64 have 4 "free" LED's for that)
|
||||
- optimizations
|
||||
*/
|
||||
|
||||
#define HEARTBEAT_LEN (HZ*6/100)
|
||||
#define HEARTBEAT_2ND_RANGE_START (HZ*22/100)
|
||||
#define HEARTBEAT_LEN (HZ*10/100)
|
||||
#define HEARTBEAT_2ND_RANGE_START (HZ*28/100)
|
||||
#define HEARTBEAT_2ND_RANGE_END (HEARTBEAT_2ND_RANGE_START + HEARTBEAT_LEN)
|
||||
|
||||
#define NORMALIZED_COUNT(count) (count/(HZ/100))
|
||||
#define LED_UPDATE_INTERVAL (1 + (HZ*19/1000))
|
||||
|
||||
static void led_tasklet_func(unsigned long unused)
|
||||
static void led_work_func (void *unused)
|
||||
{
|
||||
static unsigned char lastleds;
|
||||
unsigned char currentleds; /* stores current value of the LEDs */
|
||||
static unsigned long count; /* static incremented value, not wrapped */
|
||||
static unsigned long last_jiffies;
|
||||
static unsigned long count_HZ; /* counter in range 0..HZ */
|
||||
unsigned char currentleds = 0; /* stores current value of the LEDs */
|
||||
|
||||
/* exit if not initialized */
|
||||
if (!led_func_ptr)
|
||||
return;
|
||||
|
||||
/* increment the local counters */
|
||||
++count;
|
||||
if (++count_HZ == HZ)
|
||||
/* increment the heartbeat timekeeper */
|
||||
count_HZ += jiffies - last_jiffies;
|
||||
last_jiffies = jiffies;
|
||||
if (count_HZ >= HZ)
|
||||
count_HZ = 0;
|
||||
|
||||
currentleds = lastleds;
|
||||
|
||||
if (led_heartbeat)
|
||||
if (likely(led_heartbeat))
|
||||
{
|
||||
/* flash heartbeat-LED like a real heart (2 x short then a long delay) */
|
||||
if (count_HZ<HEARTBEAT_LEN ||
|
||||
(count_HZ>=HEARTBEAT_2ND_RANGE_START && count_HZ<HEARTBEAT_2ND_RANGE_END))
|
||||
currentleds |= LED_HEARTBEAT;
|
||||
else
|
||||
currentleds &= ~LED_HEARTBEAT;
|
||||
/* flash heartbeat-LED like a real heart
|
||||
* (2 x short then a long delay)
|
||||
*/
|
||||
if (count_HZ < HEARTBEAT_LEN ||
|
||||
(count_HZ >= HEARTBEAT_2ND_RANGE_START &&
|
||||
count_HZ < HEARTBEAT_2ND_RANGE_END))
|
||||
currentleds |= LED_HEARTBEAT;
|
||||
}
|
||||
|
||||
/* look for network activity and flash LEDs respectively */
|
||||
if (led_lanrxtx && ((NORMALIZED_COUNT(count)+(8/2)) & 7) == 0)
|
||||
{
|
||||
currentleds &= ~(LED_LAN_RCV | LED_LAN_TX);
|
||||
currentleds |= led_get_net_activity();
|
||||
}
|
||||
|
||||
/* avoid to calculate diskio-stats at same irq as netio-stats */
|
||||
if (led_diskio && (NORMALIZED_COUNT(count) & 7) == 0)
|
||||
{
|
||||
currentleds &= ~LED_DISK_IO;
|
||||
currentleds |= led_get_diskio_activity();
|
||||
}
|
||||
if (likely(led_lanrxtx)) currentleds |= led_get_net_activity();
|
||||
if (likely(led_diskio)) currentleds |= led_get_diskio_activity();
|
||||
|
||||
/* blink all LEDs twice a second if we got an Oops (HPMC) */
|
||||
if (oops_in_progress) {
|
||||
if (unlikely(oops_in_progress))
|
||||
currentleds = (count_HZ<=(HZ/2)) ? 0 : 0xff;
|
||||
|
||||
if (currentleds != lastleds)
|
||||
{
|
||||
led_func_ptr(currentleds); /* Update the LCD/LEDs */
|
||||
lastleds = currentleds;
|
||||
}
|
||||
|
||||
/* update the LCD/LEDs */
|
||||
if (currentleds != lastleds) {
|
||||
led_func_ptr(currentleds);
|
||||
lastleds = currentleds;
|
||||
}
|
||||
|
||||
queue_delayed_work(led_wq, &led_task, LED_UPDATE_INTERVAL);
|
||||
}
|
||||
|
||||
/* main led tasklet struct (scheduled from time.c) */
|
||||
DECLARE_TASKLET_DISABLED(led_tasklet, led_tasklet_func, 0);
|
||||
|
||||
|
||||
/*
|
||||
** led_halt()
|
||||
**
|
||||
|
@ -522,9 +513,13 @@ static int led_halt(struct notifier_block *nb, unsigned long event, void *buf)
|
|||
default: return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
/* completely stop the LED/LCD tasklet */
|
||||
tasklet_disable(&led_tasklet);
|
||||
|
||||
/* Cancel the work item and delete the queue */
|
||||
if (led_wq) {
|
||||
cancel_rearming_delayed_workqueue(led_wq, &led_task);
|
||||
destroy_workqueue(led_wq);
|
||||
led_wq = NULL;
|
||||
}
|
||||
|
||||
if (lcd_info.model == DISPLAY_MODEL_LCD)
|
||||
lcd_print(txt);
|
||||
else
|
||||
|
@ -559,7 +554,6 @@ int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long d
|
|||
printk(KERN_INFO "LCD display at %lx,%lx registered\n",
|
||||
LCD_CMD_REG , LCD_DATA_REG);
|
||||
led_func_ptr = led_LCD_driver;
|
||||
lcd_print( lcd_text_default );
|
||||
led_type = LED_HASLCD;
|
||||
break;
|
||||
|
||||
|
@ -589,9 +583,11 @@ int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long d
|
|||
initialized++;
|
||||
register_reboot_notifier(&led_notifier);
|
||||
|
||||
/* start the led tasklet for the first time */
|
||||
tasklet_enable(&led_tasklet);
|
||||
|
||||
/* Ensure the work is queued */
|
||||
if (led_wq) {
|
||||
queue_work(led_wq, &led_task);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -626,8 +622,8 @@ void __init register_led_regions(void)
|
|||
** lcd_print()
|
||||
**
|
||||
** Displays the given string on the LCD-Display of newer machines.
|
||||
** lcd_print() disables the timer-based led tasklet during its
|
||||
** execution and enables it afterwards again.
|
||||
** lcd_print() disables/enables the timer-based led work queue to
|
||||
** avoid a race condition while writing the CMD/DATA register pair.
|
||||
**
|
||||
*/
|
||||
int lcd_print( char *str )
|
||||
|
@ -637,12 +633,13 @@ int lcd_print( char *str )
|
|||
if (!led_func_ptr || lcd_info.model != DISPLAY_MODEL_LCD)
|
||||
return 0;
|
||||
|
||||
/* temporarily disable the led tasklet */
|
||||
tasklet_disable(&led_tasklet);
|
||||
/* temporarily disable the led work task */
|
||||
if (led_wq)
|
||||
cancel_rearming_delayed_workqueue(led_wq, &led_task);
|
||||
|
||||
/* copy display string to buffer for procfs */
|
||||
strlcpy(lcd_text, str, sizeof(lcd_text));
|
||||
|
||||
|
||||
/* Set LCD Cursor to 1st character */
|
||||
gsc_writeb(lcd_info.reset_cmd1, LCD_CMD_REG);
|
||||
udelay(lcd_info.min_cmd_delay);
|
||||
|
@ -656,8 +653,10 @@ int lcd_print( char *str )
|
|||
udelay(lcd_info.min_cmd_delay);
|
||||
}
|
||||
|
||||
/* re-enable the led tasklet */
|
||||
tasklet_enable(&led_tasklet);
|
||||
/* re-queue the work */
|
||||
if (led_wq) {
|
||||
queue_work(led_wq, &led_task);
|
||||
}
|
||||
|
||||
return lcd_info.lcd_width;
|
||||
}
|
||||
|
|
|
@ -536,7 +536,7 @@ pdcs_info_read(struct subsystem *entry, char *buf)
|
|||
|
||||
out += sprintf(out, "Memory tested: ");
|
||||
if ((result & 0x0F) < 0x0E)
|
||||
out += sprintf(out, "%.3f MB", 0.256*(1<<(result & 0x0F)));
|
||||
out += sprintf(out, "%d kB", (1<<(result & 0x0F))*256);
|
||||
else
|
||||
out += sprintf(out, "All");
|
||||
out += sprintf(out, "\n");
|
||||
|
|
|
@ -91,8 +91,8 @@ extern struct proc_dir_entry * proc_mckinley_root;
|
|||
#define DBG_RES(x...)
|
||||
#endif
|
||||
|
||||
#if defined(__LP64__) && !defined(CONFIG_PDC_NARROW)
|
||||
/* "low end" PA8800 machines use ZX1 chipset */
|
||||
#if defined(CONFIG_64BIT)
|
||||
/* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */
|
||||
#define ZX1_SUPPORT
|
||||
#endif
|
||||
|
||||
|
@ -231,7 +231,7 @@ struct ioc {
|
|||
spinlock_t res_lock;
|
||||
unsigned int res_bitshift; /* from the LEFT! */
|
||||
unsigned int res_size; /* size of resource map in bytes */
|
||||
#if SBA_HINT_SUPPORT
|
||||
#ifdef SBA_HINT_SUPPORT
|
||||
/* FIXME : DMA HINTs not used */
|
||||
unsigned long hint_mask_pdir; /* bits used for DMA hints */
|
||||
unsigned int hint_shift_pdir;
|
||||
|
@ -294,7 +294,7 @@ static unsigned long piranha_bad_128k = 0;
|
|||
/* Looks nice and keeps the compiler happy */
|
||||
#define SBA_DEV(d) ((struct sba_device *) (d))
|
||||
|
||||
#if SBA_AGP_SUPPORT
|
||||
#ifdef SBA_AGP_SUPPORT
|
||||
static int reserve_sba_gart = 1;
|
||||
#endif
|
||||
|
||||
|
@ -314,7 +314,7 @@ static int reserve_sba_gart = 1;
|
|||
#define WRITE_REG32(val, addr) __raw_writel(cpu_to_le32(val), addr)
|
||||
#define WRITE_REG64(val, addr) __raw_writeq(cpu_to_le64(val), addr)
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
#define READ_REG(addr) READ_REG64(addr)
|
||||
#define WRITE_REG(value, addr) WRITE_REG64(value, addr)
|
||||
#else
|
||||
|
@ -324,7 +324,7 @@ static int reserve_sba_gart = 1;
|
|||
|
||||
#ifdef DEBUG_SBA_INIT
|
||||
|
||||
/* NOTE: When __LP64__ isn't defined, READ_REG64() is two 32-bit reads */
|
||||
/* NOTE: When CONFIG_64BIT isn't defined, READ_REG64() is two 32-bit reads */
|
||||
|
||||
/**
|
||||
* sba_dump_ranges - debugging only - print ranges assigned to this IOA
|
||||
|
@ -364,7 +364,7 @@ static void sba_dump_tlb(void __iomem *hpa)
|
|||
#else
|
||||
#define sba_dump_ranges(x)
|
||||
#define sba_dump_tlb(x)
|
||||
#endif
|
||||
#endif /* DEBUG_SBA_INIT */
|
||||
|
||||
|
||||
#ifdef ASSERT_PDIR_SANITY
|
||||
|
@ -674,7 +674,7 @@ sba_free_range(struct ioc *ioc, dma_addr_t iova, size_t size)
|
|||
*
|
||||
***************************************************************/
|
||||
|
||||
#if SBA_HINT_SUPPORT
|
||||
#ifdef SBA_HINT_SUPPORT
|
||||
#define SBA_DMA_HINT(ioc, val) ((val) << (ioc)->hint_shift_pdir)
|
||||
#endif
|
||||
|
||||
|
@ -743,9 +743,8 @@ sba_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
|
|||
* (bit #61, big endian), we have to flush and sync every time
|
||||
* IO-PDIR is changed in Ike/Astro.
|
||||
*/
|
||||
if (ioc_needs_fdc) {
|
||||
asm volatile("fdc 0(%%sr1,%0)\n\tsync" : : "r" (pdir_ptr));
|
||||
}
|
||||
if (ioc_needs_fdc)
|
||||
asm volatile("fdc %%r0(%0)" : : "r" (pdir_ptr));
|
||||
}
|
||||
|
||||
|
||||
|
@ -769,42 +768,57 @@ static SBA_INLINE void
|
|||
sba_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt)
|
||||
{
|
||||
u32 iovp = (u32) SBA_IOVP(ioc,iova);
|
||||
|
||||
/* Even though this is a big-endian machine, the entries
|
||||
** in the iopdir are little endian. That's why we clear the byte
|
||||
** at +7 instead of at +0.
|
||||
*/
|
||||
int off = PDIR_INDEX(iovp)*sizeof(u64)+7;
|
||||
u64 *pdir_ptr = &ioc->pdir_base[PDIR_INDEX(iovp)];
|
||||
|
||||
#ifdef ASSERT_PDIR_SANITY
|
||||
/* Assert first pdir entry is set */
|
||||
if (0x80 != (((u8 *) ioc->pdir_base)[off])) {
|
||||
/* Assert first pdir entry is set.
|
||||
**
|
||||
** Even though this is a big-endian machine, the entries
|
||||
** in the iopdir are little endian. That's why we look at
|
||||
** the byte at +7 instead of at +0.
|
||||
*/
|
||||
if (0x80 != (((u8 *) pdir_ptr)[7])) {
|
||||
sba_dump_pdir_entry(ioc,"sba_mark_invalid()", PDIR_INDEX(iovp));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (byte_cnt <= IOVP_SIZE)
|
||||
if (byte_cnt > IOVP_SIZE)
|
||||
{
|
||||
iovp |= IOVP_SHIFT; /* set "size" field for PCOM */
|
||||
#if 0
|
||||
unsigned long entries_per_cacheline = ioc_needs_fdc ?
|
||||
L1_CACHE_ALIGN(((unsigned long) pdir_ptr))
|
||||
- (unsigned long) pdir_ptr;
|
||||
: 262144;
|
||||
#endif
|
||||
|
||||
/*
|
||||
** clear I/O PDIR entry "valid" bit
|
||||
** Do NOT clear the rest - save it for debugging.
|
||||
** We should only clear bits that have previously
|
||||
** been enabled.
|
||||
*/
|
||||
((u8 *)(ioc->pdir_base))[off] = 0;
|
||||
} else {
|
||||
u32 t = get_order(byte_cnt) + PAGE_SHIFT;
|
||||
/* set "size" field for PCOM */
|
||||
iovp |= get_order(byte_cnt) + PAGE_SHIFT;
|
||||
|
||||
iovp |= t;
|
||||
do {
|
||||
/* clear I/O Pdir entry "valid" bit first */
|
||||
((u8 *)(ioc->pdir_base))[off] = 0;
|
||||
off += sizeof(u64);
|
||||
((u8 *) pdir_ptr)[7] = 0;
|
||||
if (ioc_needs_fdc) {
|
||||
asm volatile("fdc %%r0(%0)" : : "r" (pdir_ptr));
|
||||
#if 0
|
||||
entries_per_cacheline = L1_CACHE_SHIFT - 3;
|
||||
#endif
|
||||
}
|
||||
pdir_ptr++;
|
||||
byte_cnt -= IOVP_SIZE;
|
||||
} while (byte_cnt > 0);
|
||||
}
|
||||
} while (byte_cnt > IOVP_SIZE);
|
||||
} else
|
||||
iovp |= IOVP_SHIFT; /* set "size" field for PCOM */
|
||||
|
||||
/*
|
||||
** clear I/O PDIR entry "valid" bit.
|
||||
** We have to R/M/W the cacheline regardless how much of the
|
||||
** pdir entry that we clobber.
|
||||
** The rest of the entry would be useful for debugging if we
|
||||
** could dump core on HPMC.
|
||||
*/
|
||||
((u8 *) pdir_ptr)[7] = 0;
|
||||
if (ioc_needs_fdc)
|
||||
asm volatile("fdc %%r0(%0)" : : "r" (pdir_ptr));
|
||||
|
||||
WRITE_REG( SBA_IOVA(ioc, iovp, 0, 0), ioc->ioc_hpa+IOC_PCOM);
|
||||
}
|
||||
|
@ -819,18 +833,29 @@ sba_mark_invalid(struct ioc *ioc, dma_addr_t iova, size_t byte_cnt)
|
|||
static int sba_dma_supported( struct device *dev, u64 mask)
|
||||
{
|
||||
struct ioc *ioc;
|
||||
|
||||
if (dev == NULL) {
|
||||
printk(KERN_ERR MODULE_NAME ": EISA/ISA/et al not supported\n");
|
||||
BUG();
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Documentation/DMA-mapping.txt tells drivers to try 64-bit first,
|
||||
* then fall back to 32-bit if that fails.
|
||||
* We are just "encouraging" 32-bit DMA masks here since we can
|
||||
* never allow IOMMU bypass unless we add special support for ZX1.
|
||||
*/
|
||||
if (mask > ~0U)
|
||||
return 0;
|
||||
|
||||
ioc = GET_IOC(dev);
|
||||
|
||||
/* check if mask is > than the largest IO Virt Address */
|
||||
|
||||
return((int) (mask >= (ioc->ibase +
|
||||
(ioc->pdir_size / sizeof(u64) * IOVP_SIZE) )));
|
||||
/*
|
||||
* check if mask is >= than the current max IO Virt Address
|
||||
* The max IO Virt address will *always* < 30 bits.
|
||||
*/
|
||||
return((int)(mask >= (ioc->ibase - 1 +
|
||||
(ioc->pdir_size / sizeof(u64) * IOVP_SIZE) )));
|
||||
}
|
||||
|
||||
|
||||
|
@ -898,11 +923,17 @@ sba_map_single(struct device *dev, void *addr, size_t size,
|
|||
size -= IOVP_SIZE;
|
||||
pdir_start++;
|
||||
}
|
||||
/* form complete address */
|
||||
|
||||
/* force FDC ops in io_pdir_entry() to be visible to IOMMU */
|
||||
if (ioc_needs_fdc)
|
||||
asm volatile("sync" : : );
|
||||
|
||||
#ifdef ASSERT_PDIR_SANITY
|
||||
sba_check_pdir(ioc,"Check after sba_map_single()");
|
||||
#endif
|
||||
spin_unlock_irqrestore(&ioc->res_lock, flags);
|
||||
|
||||
/* form complete address */
|
||||
return SBA_IOVA(ioc, iovp, offset, DEFAULT_DMA_HINT_REG);
|
||||
}
|
||||
|
||||
|
@ -958,12 +989,19 @@ sba_unmap_single(struct device *dev, dma_addr_t iova, size_t size,
|
|||
d--;
|
||||
}
|
||||
ioc->saved_cnt = 0;
|
||||
|
||||
READ_REG(ioc->ioc_hpa+IOC_PCOM); /* flush purges */
|
||||
}
|
||||
#else /* DELAYED_RESOURCE_CNT == 0 */
|
||||
sba_free_range(ioc, iova, size);
|
||||
|
||||
/* If fdc's were issued, force fdc's to be visible now */
|
||||
if (ioc_needs_fdc)
|
||||
asm volatile("sync" : : );
|
||||
|
||||
READ_REG(ioc->ioc_hpa+IOC_PCOM); /* flush purges */
|
||||
#endif /* DELAYED_RESOURCE_CNT == 0 */
|
||||
|
||||
spin_unlock_irqrestore(&ioc->res_lock, flags);
|
||||
|
||||
/* XXX REVISIT for 2.5 Linux - need syncdma for zero-copy support.
|
||||
|
@ -1106,6 +1144,10 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents,
|
|||
*/
|
||||
filled = iommu_fill_pdir(ioc, sglist, nents, 0, sba_io_pdir_entry);
|
||||
|
||||
/* force FDC ops in io_pdir_entry() to be visible to IOMMU */
|
||||
if (ioc_needs_fdc)
|
||||
asm volatile("sync" : : );
|
||||
|
||||
#ifdef ASSERT_PDIR_SANITY
|
||||
if (sba_check_pdir(ioc,"Check after sba_map_sg()"))
|
||||
{
|
||||
|
@ -1234,8 +1276,10 @@ sba_alloc_pdir(unsigned int pdir_size)
|
|||
unsigned long pdir_order = get_order(pdir_size);
|
||||
|
||||
pdir_base = __get_free_pages(GFP_KERNEL, pdir_order);
|
||||
if (NULL == (void *) pdir_base)
|
||||
panic("sba_ioc_init() could not allocate I/O Page Table\n");
|
||||
if (NULL == (void *) pdir_base) {
|
||||
panic("%s() could not allocate I/O Page Table\n",
|
||||
__FUNCTION__);
|
||||
}
|
||||
|
||||
/* If this is not PA8700 (PCX-W2)
|
||||
** OR newer than ver 2.2
|
||||
|
@ -1322,19 +1366,29 @@ sba_alloc_pdir(unsigned int pdir_size)
|
|||
return (void *) pdir_base;
|
||||
}
|
||||
|
||||
/* setup Mercury or Elroy IBASE/IMASK registers. */
|
||||
static void setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
||||
static struct device *next_device(struct klist_iter *i)
|
||||
{
|
||||
/* lba_set_iregs() is in drivers/parisc/lba_pci.c */
|
||||
struct klist_node * n = klist_next(i);
|
||||
return n ? container_of(n, struct device, knode_parent) : NULL;
|
||||
}
|
||||
|
||||
/* setup Mercury or Elroy IBASE/IMASK registers. */
|
||||
static void
|
||||
setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
||||
{
|
||||
/* lba_set_iregs() is in drivers/parisc/lba_pci.c */
|
||||
extern void lba_set_iregs(struct parisc_device *, u32, u32);
|
||||
struct device *dev;
|
||||
struct klist_iter i;
|
||||
|
||||
list_for_each_entry(dev, &sba->dev.children, node) {
|
||||
klist_iter_init(&sba->dev.klist_children, &i);
|
||||
while ((dev = next_device(&i))) {
|
||||
struct parisc_device *lba = to_parisc_device(dev);
|
||||
int rope_num = (lba->hpa >> 13) & 0xf;
|
||||
int rope_num = (lba->hpa.start >> 13) & 0xf;
|
||||
if (rope_num >> 3 == ioc_num)
|
||||
lba_set_iregs(lba, ioc->ibase, ioc->imask);
|
||||
}
|
||||
klist_iter_exit(&i);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1343,7 +1397,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
u32 iova_space_mask;
|
||||
u32 iova_space_size;
|
||||
int iov_order, tcnfg;
|
||||
#if SBA_AGP_SUPPORT
|
||||
#ifdef SBA_AGP_SUPPORT
|
||||
int agp_found = 0;
|
||||
#endif
|
||||
/*
|
||||
|
@ -1380,7 +1434,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
DBG_INIT("%s() pdir %p size %x\n",
|
||||
__FUNCTION__, ioc->pdir_base, ioc->pdir_size);
|
||||
|
||||
#if SBA_HINT_SUPPORT
|
||||
#ifdef SBA_HINT_SUPPORT
|
||||
ioc->hint_shift_pdir = iov_order + PAGE_SHIFT;
|
||||
ioc->hint_mask_pdir = ~(0x3 << (iov_order + PAGE_SHIFT));
|
||||
|
||||
|
@ -1404,7 +1458,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
|
||||
WRITE_REG(ioc->imask, ioc->ioc_hpa + IOC_IMASK);
|
||||
|
||||
#ifdef __LP64__
|
||||
#ifdef CONFIG_64BIT
|
||||
/*
|
||||
** Setting the upper bits makes checking for bypass addresses
|
||||
** a little faster later on.
|
||||
|
@ -1437,7 +1491,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
*/
|
||||
WRITE_REG(ioc->ibase | 31, ioc->ioc_hpa + IOC_PCOM);
|
||||
|
||||
#if SBA_AGP_SUPPORT
|
||||
#ifdef SBA_AGP_SUPPORT
|
||||
/*
|
||||
** If an AGP device is present, only use half of the IOV space
|
||||
** for PCI DMA. Unfortunately we can't know ahead of time
|
||||
|
@ -1489,11 +1543,9 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
if (iova_space_size < (1 << (20 - PAGE_SHIFT))) {
|
||||
iova_space_size = 1 << (20 - PAGE_SHIFT);
|
||||
}
|
||||
#ifdef __LP64__
|
||||
else if (iova_space_size > (1 << (30 - PAGE_SHIFT))) {
|
||||
iova_space_size = 1 << (30 - PAGE_SHIFT);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
** iova space must be log2() in size.
|
||||
|
@ -1519,7 +1571,7 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
DBG_INIT("%s() pdir %p size %x\n",
|
||||
__FUNCTION__, ioc->pdir_base, pdir_size);
|
||||
|
||||
#if SBA_HINT_SUPPORT
|
||||
#ifdef SBA_HINT_SUPPORT
|
||||
/* FIXME : DMA HINTs not used */
|
||||
ioc->hint_shift_pdir = iov_order + PAGE_SHIFT;
|
||||
ioc->hint_mask_pdir = ~(0x3 << (iov_order + PAGE_SHIFT));
|
||||
|
@ -1590,7 +1642,7 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
|
|||
|
||||
static void __iomem *ioc_remap(struct sba_device *sba_dev, int offset)
|
||||
{
|
||||
return ioremap(sba_dev->dev->hpa + offset, SBA_FUNC_SIZE);
|
||||
return ioremap(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE);
|
||||
}
|
||||
|
||||
static void sba_hw_init(struct sba_device *sba_dev)
|
||||
|
@ -1968,7 +2020,7 @@ sba_driver_callback(struct parisc_device *dev)
|
|||
u32 func_class;
|
||||
int i;
|
||||
char *version;
|
||||
void __iomem *sba_addr = ioremap(dev->hpa, SBA_FUNC_SIZE);
|
||||
void __iomem *sba_addr = ioremap(dev->hpa.start, SBA_FUNC_SIZE);
|
||||
|
||||
sba_dump_ranges(sba_addr);
|
||||
|
||||
|
@ -2010,7 +2062,7 @@ sba_driver_callback(struct parisc_device *dev)
|
|||
}
|
||||
|
||||
printk(KERN_INFO "%s found %s at 0x%lx\n",
|
||||
MODULE_NAME, version, dev->hpa);
|
||||
MODULE_NAME, version, dev->hpa.start);
|
||||
|
||||
sba_dev = kmalloc(sizeof(struct sba_device), GFP_KERNEL);
|
||||
if (!sba_dev) {
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
* (C) Copyright 2000 Alex deVries <alex@onefishtwo.ca>
|
||||
* (C) Copyright 2001 John Marvin <jsm fc hp com>
|
||||
* (C) Copyright 2003 Grant Grundler <grundler parisc-linux org>
|
||||
* (C) Copyright 2005 Kyle McMartin <kyle@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
|
||||
|
@ -405,6 +406,7 @@ static void __devinit superio_serial_init(void)
|
|||
|
||||
serial[0].iobase = sio_dev.sp1_base;
|
||||
serial[0].irq = SP1_IRQ;
|
||||
spin_lock_init(&serial[0].lock);
|
||||
|
||||
retval = early_serial_setup(&serial[0]);
|
||||
if (retval < 0) {
|
||||
|
@ -414,6 +416,7 @@ static void __devinit superio_serial_init(void)
|
|||
|
||||
serial[1].iobase = sio_dev.sp2_base;
|
||||
serial[1].irq = SP2_IRQ;
|
||||
spin_lock_init(&serial[1].lock);
|
||||
retval = early_serial_setup(&serial[1]);
|
||||
|
||||
if (retval < 0)
|
||||
|
|
|
@ -81,7 +81,7 @@ wax_init_chip(struct parisc_device *dev)
|
|||
return -ENOMEM;
|
||||
|
||||
wax->name = "wax";
|
||||
wax->hpa = dev->hpa;
|
||||
wax->hpa = dev->hpa.start;
|
||||
|
||||
wax->version = 0; /* gsc_readb(wax->hpa+WAX_VER); */
|
||||
printk(KERN_INFO "%s at 0x%lx found.\n", wax->name, wax->hpa);
|
||||
|
|
|
@ -359,11 +359,12 @@ static int __devinit parport_init_chip(struct parisc_device *dev)
|
|||
unsigned long port;
|
||||
|
||||
if (!dev->irq) {
|
||||
printk("IRQ not found for parallel device at 0x%lx\n", dev->hpa);
|
||||
printk(KERN_WARNING "IRQ not found for parallel device at 0x%lx\n",
|
||||
dev->hpa.start);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
port = dev->hpa + PARPORT_GSC_OFFSET;
|
||||
port = dev->hpa.start + PARPORT_GSC_OFFSET;
|
||||
|
||||
/* some older machines with ASP-chip don't support
|
||||
* the enhanced parport modes.
|
||||
|
|
|
@ -98,7 +98,7 @@ MODULE_DEVICE_TABLE(parisc, lasi700_ids);
|
|||
static int __init
|
||||
lasi700_probe(struct parisc_device *dev)
|
||||
{
|
||||
unsigned long base = dev->hpa + LASI_SCSI_CORE_OFFSET;
|
||||
unsigned long base = dev->hpa.start + LASI_SCSI_CORE_OFFSET;
|
||||
struct NCR_700_Host_Parameters *hostdata;
|
||||
struct Scsi_Host *host;
|
||||
|
||||
|
@ -125,8 +125,6 @@ lasi700_probe(struct parisc_device *dev)
|
|||
hostdata->dmode_extra = DMODE_FC2;
|
||||
}
|
||||
|
||||
NCR_700_set_mem_mapped(hostdata);
|
||||
|
||||
host = NCR_700_detect(&lasi700_template, hostdata, &dev->dev);
|
||||
if (!host)
|
||||
goto out_kfree;
|
||||
|
@ -168,7 +166,7 @@ lasi700_driver_remove(struct parisc_device *dev)
|
|||
}
|
||||
|
||||
static struct parisc_driver lasi700_driver = {
|
||||
.name = "Lasi SCSI",
|
||||
.name = "lasi_scsi",
|
||||
.id_table = lasi700_ids,
|
||||
.probe = lasi700_probe,
|
||||
.remove = __devexit_p(lasi700_driver_remove),
|
||||
|
|
|
@ -88,7 +88,7 @@ zalon_probe(struct parisc_device *dev)
|
|||
struct gsc_irq gsc_irq;
|
||||
u32 zalon_vers;
|
||||
int error = -ENODEV;
|
||||
void __iomem *zalon = ioremap(dev->hpa, 4096);
|
||||
void __iomem *zalon = ioremap(dev->hpa.start, 4096);
|
||||
void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET;
|
||||
static int unit = 0;
|
||||
struct Scsi_Host *host;
|
||||
|
@ -127,7 +127,7 @@ zalon_probe(struct parisc_device *dev)
|
|||
device.chip = zalon720_chip;
|
||||
device.host_id = 7;
|
||||
device.dev = &dev->dev;
|
||||
device.slot.base = dev->hpa + GSC_SCSI_ZALON_OFFSET;
|
||||
device.slot.base = dev->hpa.start + GSC_SCSI_ZALON_OFFSET;
|
||||
device.slot.base_v = io_port;
|
||||
device.slot.irq = dev->irq;
|
||||
device.differential = 2;
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
static int __init
|
||||
serial_init_chip(struct parisc_device *dev)
|
||||
{
|
||||
static int serial_line_nr;
|
||||
struct uart_port port;
|
||||
unsigned long address;
|
||||
int err;
|
||||
|
@ -42,12 +41,13 @@ serial_init_chip(struct parisc_device *dev)
|
|||
*/
|
||||
if (parisc_parent(dev)->id.hw_type != HPHW_IOA) {
|
||||
printk(KERN_INFO "Serial: device 0x%lx not configured.\n"
|
||||
"Enable support for Wax, Lasi, Asp or Dino.\n", dev->hpa);
|
||||
"Enable support for Wax, Lasi, Asp or Dino.\n",
|
||||
dev->hpa.start);
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
address = dev->hpa;
|
||||
address = dev->hpa.start;
|
||||
if (dev->id.sversion != 0x8d) {
|
||||
address += 0x800;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <linux/delay.h> /* for udelay */
|
||||
#include <linux/device.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/parisc-device.h>
|
||||
|
||||
#ifdef CONFIG_MAGIC_SYSRQ
|
||||
|
@ -444,7 +445,7 @@ static int __init mux_probe(struct parisc_device *dev)
|
|||
unsigned long bytecnt;
|
||||
struct uart_port *port;
|
||||
|
||||
status = pdc_iodc_read(&bytecnt, dev->hpa, 0, iodc_data, 32);
|
||||
status = pdc_iodc_read(&bytecnt, dev->hpa.start, 0, iodc_data, 32);
|
||||
if(status != PDC_OK) {
|
||||
printk(KERN_ERR "Serial mux: Unable to read IODC.\n");
|
||||
return 1;
|
||||
|
@ -469,16 +470,18 @@ static int __init mux_probe(struct parisc_device *dev)
|
|||
for(i = 0; i < ports; ++i, ++port_cnt) {
|
||||
port = &mux_ports[port_cnt];
|
||||
port->iobase = 0;
|
||||
port->mapbase = dev->hpa + MUX_OFFSET + (i * MUX_LINE_OFFSET);
|
||||
port->mapbase = dev->hpa.start + MUX_OFFSET +
|
||||
(i * MUX_LINE_OFFSET);
|
||||
port->membase = ioremap(port->mapbase, MUX_LINE_OFFSET);
|
||||
port->iotype = SERIAL_IO_MEM;
|
||||
port->type = PORT_MUX;
|
||||
port->irq = SERIAL_IRQ_NONE;
|
||||
port->irq = NO_IRQ;
|
||||
port->uartclk = 0;
|
||||
port->fifosize = MUX_FIFO_SIZE;
|
||||
port->ops = &mux_pops;
|
||||
port->flags = UPF_BOOT_AUTOCONF;
|
||||
port->line = port_cnt;
|
||||
spin_lock_init(&port->lock);
|
||||
status = uart_add_one_port(&mux_driver, port);
|
||||
BUG_ON(status);
|
||||
}
|
||||
|
@ -497,7 +500,7 @@ static struct parisc_device_id mux_tbl[] = {
|
|||
MODULE_DEVICE_TABLE(parisc, mux_tbl);
|
||||
|
||||
static struct parisc_driver serial_mux_driver = {
|
||||
.name = "Serial MUX",
|
||||
.name = "serial_mux",
|
||||
.id_table = mux_tbl,
|
||||
.probe = mux_probe,
|
||||
};
|
||||
|
|
|
@ -110,7 +110,7 @@ config STI_CONSOLE
|
|||
|
||||
config FONTS
|
||||
bool "Select compiled-in fonts"
|
||||
depends on FRAMEBUFFER_CONSOLE
|
||||
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
|
||||
help
|
||||
Say Y here if you would like to use fonts other than the default
|
||||
your frame buffer console usually use.
|
||||
|
@ -123,7 +123,7 @@ config FONTS
|
|||
|
||||
config FONT_8x8
|
||||
bool "VGA 8x8 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE
|
||||
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS
|
||||
help
|
||||
This is the "high resolution" font for the VGA frame buffer (the one
|
||||
|
@ -137,7 +137,7 @@ config FONT_8x8
|
|||
|
||||
config FONT_8x16
|
||||
bool "VGA 8x16 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || USB_SISUSBVGA_CON
|
||||
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || STI_CONSOLE || USB_SISUSBVGA_CON
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS
|
||||
help
|
||||
This is the "high resolution" font for the VGA frame buffer (the one
|
||||
|
@ -147,7 +147,7 @@ config FONT_8x16
|
|||
|
||||
config FONT_6x11
|
||||
bool "Mac console 6x11 font (not supported by all drivers)" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE
|
||||
depends on FRAMEBUFFER_CONSOLE || STI_CONSOLE
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS && MAC
|
||||
help
|
||||
Small console font with Macintosh-style high-half glyphs. Some Mac
|
||||
|
|
|
@ -511,12 +511,12 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
|
|||
struct sti_cooked_font *cooked_font;
|
||||
|
||||
if (!fbfont_name || !strlen(fbfont_name))
|
||||
return NULL;
|
||||
return NULL;
|
||||
fbfont = find_font(fbfont_name);
|
||||
if (!fbfont)
|
||||
fbfont = get_default_font(1024,768);
|
||||
fbfont = get_default_font(1024,768);
|
||||
if (!fbfont)
|
||||
return NULL;
|
||||
return NULL;
|
||||
|
||||
DPRINTK((KERN_DEBUG "selected %dx%d fb-font %s\n",
|
||||
fbfont->width, fbfont->height, fbfont->name));
|
||||
|
@ -527,7 +527,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
|
|||
|
||||
nf = kmalloc(size, GFP_KERNEL);
|
||||
if (!nf)
|
||||
return NULL;
|
||||
return NULL;
|
||||
memset(nf, 0, size);
|
||||
|
||||
nf->first_char = 0;
|
||||
|
@ -546,8 +546,8 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
|
|||
|
||||
cooked_font = kmalloc(sizeof(*cooked_font), GFP_KERNEL);
|
||||
if (!cooked_font) {
|
||||
kfree(nf);
|
||||
return NULL;
|
||||
kfree(nf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cooked_font->raw = nf;
|
||||
|
@ -595,7 +595,7 @@ sti_select_font(struct sti_cooked_rom *rom,
|
|||
static void __init
|
||||
sti_dump_rom(struct sti_rom *rom)
|
||||
{
|
||||
printk(KERN_INFO " id %04x-%04x, conforms to spec rev. %d.%02x\n",
|
||||
printk(KERN_INFO " id %04x-%04x, conforms to spec rev. %d.%02x\n",
|
||||
rom->graphics_id[0],
|
||||
rom->graphics_id[1],
|
||||
rom->revno[0] >> 4,
|
||||
|
@ -651,15 +651,16 @@ sti_search_font(struct sti_cooked_rom *rom, int height, int width)
|
|||
struct sti_cooked_font *font;
|
||||
int i = 0;
|
||||
|
||||
for(font = rom->font_start; font; font = font->next_font, i++) {
|
||||
if((font->raw->width == width) && (font->raw->height == height))
|
||||
for (font = rom->font_start; font; font = font->next_font, i++) {
|
||||
if ((font->raw->width == width) &&
|
||||
(font->raw->height == height))
|
||||
return i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define BMODE_RELOCATE(offset) offset = (offset) / 4;
|
||||
#define BMODE_LAST_ADDR_OFFS 0x50
|
||||
#define BMODE_RELOCATE(offset) offset = (offset) / 4;
|
||||
#define BMODE_LAST_ADDR_OFFS 0x50
|
||||
|
||||
static void * __init
|
||||
sti_bmode_font_raw(struct sti_cooked_font *f)
|
||||
|
@ -700,35 +701,35 @@ sti_get_bmode_rom (unsigned long address)
|
|||
{
|
||||
struct sti_rom *raw;
|
||||
u32 size;
|
||||
struct sti_rom_font *raw_font, *font_start;
|
||||
|
||||
struct sti_rom_font *raw_font, *font_start;
|
||||
|
||||
sti_bmode_rom_copy(address + BMODE_LAST_ADDR_OFFS, sizeof(size), &size);
|
||||
|
||||
size = (size+3) / 4;
|
||||
|
||||
size = (size+3) / 4;
|
||||
raw = kmalloc(size, GFP_KERNEL);
|
||||
if (raw) {
|
||||
sti_bmode_rom_copy(address, size, raw);
|
||||
memmove (&raw->res004, &raw->type[0], 0x3c);
|
||||
raw->type[3] = raw->res004;
|
||||
sti_bmode_rom_copy(address, size, raw);
|
||||
memmove (&raw->res004, &raw->type[0], 0x3c);
|
||||
raw->type[3] = raw->res004;
|
||||
|
||||
BMODE_RELOCATE (raw->region_list);
|
||||
BMODE_RELOCATE (raw->font_start);
|
||||
BMODE_RELOCATE (raw->region_list);
|
||||
BMODE_RELOCATE (raw->font_start);
|
||||
|
||||
BMODE_RELOCATE (raw->init_graph);
|
||||
BMODE_RELOCATE (raw->state_mgmt);
|
||||
BMODE_RELOCATE (raw->font_unpmv);
|
||||
BMODE_RELOCATE (raw->block_move);
|
||||
BMODE_RELOCATE (raw->inq_conf);
|
||||
BMODE_RELOCATE (raw->init_graph);
|
||||
BMODE_RELOCATE (raw->state_mgmt);
|
||||
BMODE_RELOCATE (raw->font_unpmv);
|
||||
BMODE_RELOCATE (raw->block_move);
|
||||
BMODE_RELOCATE (raw->inq_conf);
|
||||
|
||||
raw_font = ((void *)raw) + raw->font_start;
|
||||
font_start = raw_font;
|
||||
raw_font = ((void *)raw) + raw->font_start;
|
||||
font_start = raw_font;
|
||||
|
||||
while (raw_font->next_font) {
|
||||
BMODE_RELOCATE (raw_font->next_font);
|
||||
raw_font = ((void *)font_start) + raw_font->next_font;
|
||||
}
|
||||
while (raw_font->next_font) {
|
||||
BMODE_RELOCATE (raw_font->next_font);
|
||||
raw_font = ((void *)font_start) + raw_font->next_font;
|
||||
}
|
||||
}
|
||||
return raw;
|
||||
return raw;
|
||||
}
|
||||
|
||||
struct sti_rom * __init
|
||||
|
@ -736,15 +737,15 @@ sti_get_wmode_rom (unsigned long address)
|
|||
{
|
||||
struct sti_rom *raw;
|
||||
unsigned long size;
|
||||
|
||||
|
||||
/* read the ROM size directly from the struct in ROM */
|
||||
size = gsc_readl(address + offsetof(struct sti_rom,last_addr));
|
||||
|
||||
raw = kmalloc(size, GFP_KERNEL);
|
||||
if(raw)
|
||||
sti_rom_copy(address, size, raw);
|
||||
if (raw)
|
||||
sti_rom_copy(address, size, raw);
|
||||
|
||||
return raw;
|
||||
return raw;
|
||||
}
|
||||
|
||||
int __init
|
||||
|
@ -757,14 +758,14 @@ sti_read_rom(int wordmode, struct sti_struct *sti, unsigned long address)
|
|||
if (!cooked)
|
||||
goto out_err;
|
||||
|
||||
if (wordmode)
|
||||
raw = sti_get_wmode_rom (address);
|
||||
else
|
||||
raw = sti_get_bmode_rom (address);
|
||||
if (wordmode)
|
||||
raw = sti_get_wmode_rom (address);
|
||||
else
|
||||
raw = sti_get_bmode_rom (address);
|
||||
|
||||
if (!raw)
|
||||
goto out_err;
|
||||
|
||||
if (!raw)
|
||||
goto out_err;
|
||||
|
||||
if (!sti_cook_fonts(cooked, raw)) {
|
||||
printk(KERN_ERR "No font found for STI at %08lx\n", address);
|
||||
goto out_err;
|
||||
|
@ -787,7 +788,7 @@ sti_read_rom(int wordmode, struct sti_struct *sti, unsigned long address)
|
|||
sti->font_width = sti->font->raw->width;
|
||||
sti->font_height = sti->font->raw->height;
|
||||
if (!wordmode)
|
||||
sti->font->raw = sti_bmode_font_raw(sti->font);
|
||||
sti->font->raw = sti_bmode_font_raw(sti->font);
|
||||
|
||||
sti->sti_mem_request = raw->sti_mem_req;
|
||||
sti->graphics_id[0] = raw->graphics_id[0];
|
||||
|
@ -811,16 +812,16 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd
|
|||
u32 sig;
|
||||
|
||||
if (num_sti_roms >= MAX_STI_ROMS) {
|
||||
printk(KERN_WARNING "maximum number of STI ROMS reached !\n");
|
||||
return NULL;
|
||||
printk(KERN_WARNING "maximum number of STI ROMS reached !\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sti = kmalloc(sizeof(*sti), GFP_KERNEL);
|
||||
if (!sti) {
|
||||
printk(KERN_ERR "Not enough memory !\n");
|
||||
return NULL;
|
||||
printk(KERN_ERR "Not enough memory !\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
memset(sti, 0, sizeof(*sti));
|
||||
spin_lock_init(&sti->lock);
|
||||
|
||||
|
@ -932,28 +933,21 @@ static void __init sticore_check_for_default_sti(struct sti_struct *sti, char *p
|
|||
*/
|
||||
static int __init sticore_pa_init(struct parisc_device *dev)
|
||||
{
|
||||
unsigned long rom = 0;
|
||||
char pa_path[21];
|
||||
struct sti_struct *sti = NULL;
|
||||
|
||||
if(dev->num_addrs) {
|
||||
rom = dev->addr[0];
|
||||
}
|
||||
if (!rom) {
|
||||
rom = dev->hpa;
|
||||
DPRINTK((KERN_DEBUG "Trying STI ROM at %08lx, hpa at %08lx\n", rom, dev->hpa));
|
||||
sti = sti_try_rom_generic(rom, dev->hpa, NULL);
|
||||
rom = PAGE0->proc_sti;
|
||||
}
|
||||
if (!sti) {
|
||||
DPRINTK((KERN_DEBUG "Trying STI ROM at %08lx, hpa at %08lx\n", rom, dev->hpa));
|
||||
sti = sti_try_rom_generic(rom, dev->hpa, NULL);
|
||||
}
|
||||
int hpa = dev->hpa.start;
|
||||
|
||||
if (dev->num_addrs && dev->addr[0])
|
||||
sti = sti_try_rom_generic(dev->addr[0], hpa, NULL);
|
||||
if (!sti)
|
||||
sti = sti_try_rom_generic(hpa, hpa, NULL);
|
||||
if (!sti)
|
||||
sti = sti_try_rom_generic(PAGE0->proc_sti, hpa, NULL);
|
||||
if (!sti)
|
||||
return 1;
|
||||
|
||||
|
||||
print_pa_hwpath(dev, pa_path);
|
||||
sticore_check_for_default_sti (sti, pa_path);
|
||||
sticore_check_for_default_sti(sti, pa_path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,9 @@
|
|||
#ifndef _PARISC_ASSEMBLY_H
|
||||
#define _PARISC_ASSEMBLY_H
|
||||
|
||||
#ifdef __LP64__
|
||||
#define CALLEE_FLOAT_FRAME_SIZE 80
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define LDREG ldd
|
||||
#define STREG std
|
||||
#define LDREGX ldd,s
|
||||
|
@ -30,8 +32,8 @@
|
|||
#define SHRREG shrd
|
||||
#define RP_OFFSET 16
|
||||
#define FRAME_SIZE 128
|
||||
#define CALLEE_SAVE_FRAME_SIZE 144
|
||||
#else
|
||||
#define CALLEE_REG_FRAME_SIZE 144
|
||||
#else /* CONFIG_64BIT */
|
||||
#define LDREG ldw
|
||||
#define STREG stw
|
||||
#define LDREGX ldwx,s
|
||||
|
@ -40,9 +42,11 @@
|
|||
#define SHRREG shr
|
||||
#define RP_OFFSET 20
|
||||
#define FRAME_SIZE 64
|
||||
#define CALLEE_SAVE_FRAME_SIZE 128
|
||||
#define CALLEE_REG_FRAME_SIZE 128
|
||||
#endif
|
||||
|
||||
#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE)
|
||||
|
||||
#ifdef CONFIG_PA20
|
||||
#define BL b,l
|
||||
# ifdef CONFIG_64BIT
|
||||
|
@ -300,9 +304,35 @@
|
|||
fldd,mb -8(\regs), %fr0
|
||||
.endm
|
||||
|
||||
.macro callee_save_float
|
||||
fstd,ma %fr12, 8(%r30)
|
||||
fstd,ma %fr13, 8(%r30)
|
||||
fstd,ma %fr14, 8(%r30)
|
||||
fstd,ma %fr15, 8(%r30)
|
||||
fstd,ma %fr16, 8(%r30)
|
||||
fstd,ma %fr17, 8(%r30)
|
||||
fstd,ma %fr18, 8(%r30)
|
||||
fstd,ma %fr19, 8(%r30)
|
||||
fstd,ma %fr20, 8(%r30)
|
||||
fstd,ma %fr21, 8(%r30)
|
||||
.endm
|
||||
|
||||
.macro callee_rest_float
|
||||
fldd,mb -8(%r30), %fr21
|
||||
fldd,mb -8(%r30), %fr20
|
||||
fldd,mb -8(%r30), %fr19
|
||||
fldd,mb -8(%r30), %fr18
|
||||
fldd,mb -8(%r30), %fr17
|
||||
fldd,mb -8(%r30), %fr16
|
||||
fldd,mb -8(%r30), %fr15
|
||||
fldd,mb -8(%r30), %fr14
|
||||
fldd,mb -8(%r30), %fr13
|
||||
fldd,mb -8(%r30), %fr12
|
||||
.endm
|
||||
|
||||
#ifdef __LP64__
|
||||
.macro callee_save
|
||||
std,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30)
|
||||
std,ma %r3, CALLEE_REG_FRAME_SIZE(%r30)
|
||||
mfctl %cr27, %r3
|
||||
std %r4, -136(%r30)
|
||||
std %r5, -128(%r30)
|
||||
|
@ -340,13 +370,13 @@
|
|||
ldd -128(%r30), %r5
|
||||
ldd -136(%r30), %r4
|
||||
mtctl %r3, %cr27
|
||||
ldd,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3
|
||||
ldd,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3
|
||||
.endm
|
||||
|
||||
#else /* ! __LP64__ */
|
||||
|
||||
.macro callee_save
|
||||
stw,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30)
|
||||
stw,ma %r3, CALLEE_REG_FRAME_SIZE(%r30)
|
||||
mfctl %cr27, %r3
|
||||
stw %r4, -124(%r30)
|
||||
stw %r5, -120(%r30)
|
||||
|
@ -384,7 +414,7 @@
|
|||
ldw -120(%r30), %r5
|
||||
ldw -124(%r30), %r4
|
||||
mtctl %r3, %cr27
|
||||
ldw,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3
|
||||
ldw,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3
|
||||
.endm
|
||||
#endif /* ! __LP64__ */
|
||||
|
||||
|
@ -450,5 +480,30 @@
|
|||
REST_CR (%cr22, PT_PSW (\regs))
|
||||
.endm
|
||||
|
||||
|
||||
/* First step to create a "relied upon translation"
|
||||
* See PA 2.0 Arch. page F-4 and F-5.
|
||||
*
|
||||
* The ssm was originally necessary due to a "PCxT bug".
|
||||
* But someone decided it needed to be added to the architecture
|
||||
* and this "feature" went into rev3 of PA-RISC 1.1 Arch Manual.
|
||||
* It's been carried forward into PA 2.0 Arch as well. :^(
|
||||
*
|
||||
* "ssm 0,%r0" is a NOP with side effects (prefetch barrier).
|
||||
* rsm/ssm prevents the ifetch unit from speculatively fetching
|
||||
* instructions past this line in the code stream.
|
||||
* PA 2.0 processor will single step all insn in the same QUAD (4 insn).
|
||||
*/
|
||||
.macro pcxt_ssm_bug
|
||||
rsm PSW_SM_I,%r0
|
||||
nop /* 1 */
|
||||
nop /* 2 */
|
||||
nop /* 3 */
|
||||
nop /* 4 */
|
||||
nop /* 5 */
|
||||
nop /* 6 */
|
||||
nop /* 7 */
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define _PARISC_BITOPS_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/spinlock.h>
|
||||
#include <asm/types.h> /* for BITS_PER_LONG/SHIFT_PER_LONG */
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
|
@ -12,193 +12,157 @@
|
|||
* to include/asm-i386/bitops.h or kerneldoc
|
||||
*/
|
||||
|
||||
#ifdef __LP64__
|
||||
# define SHIFT_PER_LONG 6
|
||||
#ifndef BITS_PER_LONG
|
||||
# define BITS_PER_LONG 64
|
||||
#endif
|
||||
#else
|
||||
# define SHIFT_PER_LONG 5
|
||||
#ifndef BITS_PER_LONG
|
||||
# define BITS_PER_LONG 32
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define CHOP_SHIFTCOUNT(x) ((x) & (BITS_PER_LONG - 1))
|
||||
#define CHOP_SHIFTCOUNT(x) (((unsigned long) (x)) & (BITS_PER_LONG - 1))
|
||||
|
||||
|
||||
#define smp_mb__before_clear_bit() smp_mb()
|
||||
#define smp_mb__after_clear_bit() smp_mb()
|
||||
|
||||
static __inline__ void set_bit(int nr, volatile unsigned long * address)
|
||||
/* See http://marc.theaimsgroup.com/?t=108826637900003 for discussion
|
||||
* on use of volatile and __*_bit() (set/clear/change):
|
||||
* *_bit() want use of volatile.
|
||||
* __*_bit() are "relaxed" and don't use spinlock or volatile.
|
||||
*/
|
||||
|
||||
static __inline__ void set_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
*addr |= mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
}
|
||||
|
||||
static __inline__ void __set_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ void __set_bit(unsigned long nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long *m = (unsigned long *) addr + (nr >> SHIFT_PER_LONG);
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
*addr |= mask;
|
||||
*m |= 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
}
|
||||
|
||||
static __inline__ void clear_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ void clear_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long mask = ~(1UL << CHOP_SHIFTCOUNT(nr));
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
*addr &= ~mask;
|
||||
*addr &= mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
}
|
||||
|
||||
static __inline__ void __clear_bit(unsigned long nr, volatile unsigned long * address)
|
||||
static __inline__ void __clear_bit(unsigned long nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long *m = (unsigned long *) addr + (nr >> SHIFT_PER_LONG);
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
*addr &= ~mask;
|
||||
*m &= ~(1UL << CHOP_SHIFTCOUNT(nr));
|
||||
}
|
||||
|
||||
static __inline__ void change_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ void change_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
*addr ^= mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
}
|
||||
|
||||
static __inline__ void __change_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ void __change_bit(unsigned long nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
unsigned long *m = (unsigned long *) addr + (nr >> SHIFT_PER_LONG);
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
*addr ^= mask;
|
||||
*m ^= 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
}
|
||||
|
||||
static __inline__ int test_and_set_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long oldbit;
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr |= mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit | mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * address)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long oldbit;
|
||||
unsigned long *addr = (unsigned long *)address + (nr >> SHIFT_PER_LONG);
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr |= mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit | mask;
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long oldbit;
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr &= ~mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit & ~mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long * address)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long *addr = (unsigned long *)address + (nr >> SHIFT_PER_LONG);
|
||||
unsigned long oldbit;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr &= ~mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit & ~mask;
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int test_and_change_bit(int nr, volatile unsigned long * address)
|
||||
static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long oldbit;
|
||||
unsigned long flags;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
_atomic_spin_lock_irqsave(addr, flags);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr ^= mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit ^ mask;
|
||||
_atomic_spin_unlock_irqrestore(addr, flags);
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int __test_and_change_bit(int nr, volatile unsigned long * address)
|
||||
{
|
||||
unsigned long mask;
|
||||
unsigned long *addr = (unsigned long *) address;
|
||||
int oldbit;
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long *addr = (unsigned long *)address + (nr >> SHIFT_PER_LONG);
|
||||
unsigned long oldbit;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
oldbit = (*addr & mask) ? 1 : 0;
|
||||
*addr ^= mask;
|
||||
oldbit = *addr;
|
||||
*addr = oldbit ^ mask;
|
||||
|
||||
return oldbit;
|
||||
return (oldbit & mask) ? 1 : 0;
|
||||
}
|
||||
|
||||
static __inline__ int test_bit(int nr, const volatile unsigned long *address)
|
||||
{
|
||||
unsigned long mask;
|
||||
const unsigned long *addr = (const unsigned long *)address;
|
||||
|
||||
addr += (nr >> SHIFT_PER_LONG);
|
||||
mask = 1L << CHOP_SHIFTCOUNT(nr);
|
||||
unsigned long mask = 1UL << CHOP_SHIFTCOUNT(nr);
|
||||
const unsigned long *addr = (const unsigned long *)address + (nr >> SHIFT_PER_LONG);
|
||||
|
||||
return !!(*addr & mask);
|
||||
}
|
||||
|
@ -229,7 +193,7 @@ static __inline__ unsigned long __ffs(unsigned long x)
|
|||
unsigned long ret;
|
||||
|
||||
__asm__(
|
||||
#if BITS_PER_LONG > 32
|
||||
#ifdef __LP64__
|
||||
" ldi 63,%1\n"
|
||||
" extrd,u,*<> %0,63,32,%%r0\n"
|
||||
" extrd,u,*TR %0,31,32,%0\n" /* move top 32-bits down */
|
||||
|
@ -304,14 +268,7 @@ static __inline__ int fls(int x)
|
|||
* hweightN: returns the hamming weight (i.e. the number
|
||||
* of bits set) of a N-bit word
|
||||
*/
|
||||
#define hweight64(x) \
|
||||
({ \
|
||||
unsigned long __x = (x); \
|
||||
unsigned int __w; \
|
||||
__w = generic_hweight32((unsigned int) __x); \
|
||||
__w += generic_hweight32((unsigned int) (__x>>32)); \
|
||||
__w; \
|
||||
})
|
||||
#define hweight64(x) generic_hweight64(x)
|
||||
#define hweight32(x) generic_hweight32(x)
|
||||
#define hweight16(x) generic_hweight16(x)
|
||||
#define hweight8(x) generic_hweight8(x)
|
||||
|
@ -324,7 +281,13 @@ static __inline__ int fls(int x)
|
|||
*/
|
||||
static inline int sched_find_first_bit(const unsigned long *b)
|
||||
{
|
||||
#ifndef __LP64__
|
||||
#ifdef __LP64__
|
||||
if (unlikely(b[0]))
|
||||
return __ffs(b[0]);
|
||||
if (unlikely(b[1]))
|
||||
return __ffs(b[1]) + 64;
|
||||
return __ffs(b[2]) + 128;
|
||||
#else
|
||||
if (unlikely(b[0]))
|
||||
return __ffs(b[0]);
|
||||
if (unlikely(b[1]))
|
||||
|
@ -334,14 +297,6 @@ static inline int sched_find_first_bit(const unsigned long *b)
|
|||
if (b[3])
|
||||
return __ffs(b[3]) + 96;
|
||||
return __ffs(b[4]) + 128;
|
||||
#else
|
||||
if (unlikely(b[0]))
|
||||
return __ffs(b[0]);
|
||||
if (unlikely(((unsigned int)b[1])))
|
||||
return __ffs(b[1]) + 64;
|
||||
if (b[1] >> 32)
|
||||
return __ffs(b[1] >> 32) + 96;
|
||||
return __ffs(b[2]) + 128;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -391,7 +346,7 @@ found_middle:
|
|||
|
||||
static __inline__ unsigned long find_next_bit(const unsigned long *addr, unsigned long size, unsigned long offset)
|
||||
{
|
||||
const unsigned long *p = addr + (offset >> 6);
|
||||
const unsigned long *p = addr + (offset >> SHIFT_PER_LONG);
|
||||
unsigned long result = offset & ~(BITS_PER_LONG-1);
|
||||
unsigned long tmp;
|
||||
|
||||
|
@ -445,71 +400,90 @@ found_middle:
|
|||
* test_and_{set,clear}_bit guarantee atomicity without
|
||||
* disabling interrupts.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
#define ext2_set_bit(nr, addr) __test_and_set_bit((nr) ^ 0x38, (unsigned long *)addr)
|
||||
#define ext2_set_bit_atomic(l,nr,addr) test_and_set_bit((nr) ^ 0x38, (unsigned long *)addr)
|
||||
#define ext2_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 0x38, (unsigned long *)addr)
|
||||
#define ext2_clear_bit_atomic(l,nr,addr) test_and_clear_bit((nr) ^ 0x38, (unsigned long *)addr)
|
||||
#else
|
||||
#define ext2_set_bit(nr, addr) __test_and_set_bit((nr) ^ 0x18, (unsigned long *)addr)
|
||||
#define ext2_set_bit_atomic(l,nr,addr) test_and_set_bit((nr) ^ 0x18, (unsigned long *)addr)
|
||||
#define ext2_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 0x18, (unsigned long *)addr)
|
||||
#define ext2_clear_bit_atomic(l,nr,addr) test_and_clear_bit((nr) ^ 0x18, (unsigned long *)addr)
|
||||
#endif
|
||||
|
||||
/* '3' is bits per byte */
|
||||
#define LE_BYTE_ADDR ((sizeof(unsigned long) - 1) << 3)
|
||||
|
||||
#define ext2_test_bit(nr, addr) \
|
||||
test_bit((nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
|
||||
#define ext2_set_bit(nr, addr) \
|
||||
__test_and_set_bit((nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
|
||||
#define ext2_clear_bit(nr, addr) \
|
||||
__test_and_clear_bit((nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
|
||||
|
||||
#define ext2_set_bit_atomic(l,nr,addr) \
|
||||
test_and_set_bit((nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
|
||||
#define ext2_clear_bit_atomic(l,nr,addr) \
|
||||
test_and_clear_bit( (nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
static __inline__ int ext2_test_bit(int nr, __const__ void * addr)
|
||||
{
|
||||
__const__ unsigned char *ADDR = (__const__ unsigned char *) addr;
|
||||
|
||||
return (ADDR[nr >> 3] >> (nr & 7)) & 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* This implementation of ext2_find_{first,next}_zero_bit was stolen from
|
||||
* Linus' asm-alpha/bitops.h and modified for a big-endian machine.
|
||||
*/
|
||||
|
||||
#define ext2_find_first_zero_bit(addr, size) \
|
||||
ext2_find_next_zero_bit((addr), (size), 0)
|
||||
ext2_find_next_zero_bit((addr), (size), 0)
|
||||
|
||||
extern __inline__ unsigned long ext2_find_next_zero_bit(void *addr,
|
||||
unsigned long size, unsigned long offset)
|
||||
/* include/linux/byteorder does not support "unsigned long" type */
|
||||
static inline unsigned long ext2_swabp(unsigned long * x)
|
||||
{
|
||||
unsigned int *p = ((unsigned int *) addr) + (offset >> 5);
|
||||
unsigned int result = offset & ~31UL;
|
||||
unsigned int tmp;
|
||||
#ifdef __LP64__
|
||||
return (unsigned long) __swab64p((u64 *) x);
|
||||
#else
|
||||
return (unsigned long) __swab32p((u32 *) x);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* include/linux/byteorder doesn't support "unsigned long" type */
|
||||
static inline unsigned long ext2_swab(unsigned long y)
|
||||
{
|
||||
#ifdef __LP64__
|
||||
return (unsigned long) __swab64((u64) y);
|
||||
#else
|
||||
return (unsigned long) __swab32((u32) y);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
|
||||
{
|
||||
unsigned long *p = (unsigned long *) addr + (offset >> SHIFT_PER_LONG);
|
||||
unsigned long result = offset & ~(BITS_PER_LONG - 1);
|
||||
unsigned long tmp;
|
||||
|
||||
if (offset >= size)
|
||||
return size;
|
||||
size -= result;
|
||||
offset &= 31UL;
|
||||
offset &= (BITS_PER_LONG - 1UL);
|
||||
if (offset) {
|
||||
tmp = cpu_to_le32p(p++);
|
||||
tmp |= ~0UL >> (32-offset);
|
||||
if (size < 32)
|
||||
tmp = ext2_swabp(p++);
|
||||
tmp |= (~0UL >> (BITS_PER_LONG - offset));
|
||||
if (size < BITS_PER_LONG)
|
||||
goto found_first;
|
||||
if (tmp != ~0U)
|
||||
if (~tmp)
|
||||
goto found_middle;
|
||||
size -= 32;
|
||||
result += 32;
|
||||
size -= BITS_PER_LONG;
|
||||
result += BITS_PER_LONG;
|
||||
}
|
||||
while (size >= 32) {
|
||||
if ((tmp = cpu_to_le32p(p++)) != ~0U)
|
||||
goto found_middle;
|
||||
result += 32;
|
||||
size -= 32;
|
||||
|
||||
while (size & ~(BITS_PER_LONG - 1)) {
|
||||
if (~(tmp = *(p++)))
|
||||
goto found_middle_swap;
|
||||
result += BITS_PER_LONG;
|
||||
size -= BITS_PER_LONG;
|
||||
}
|
||||
if (!size)
|
||||
return result;
|
||||
tmp = cpu_to_le32p(p);
|
||||
tmp = ext2_swabp(p);
|
||||
found_first:
|
||||
tmp |= ~0U << size;
|
||||
tmp |= ~0UL << size;
|
||||
if (tmp == ~0UL) /* Are any bits zero? */
|
||||
return result + size; /* Nope. Skip ffz */
|
||||
found_middle:
|
||||
return result + ffz(tmp);
|
||||
|
||||
found_middle_swap:
|
||||
return result + ffz(ext2_swab(tmp));
|
||||
}
|
||||
|
||||
|
||||
/* Bitmap functions for the minix filesystem. */
|
||||
#define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr)
|
||||
#define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr))
|
||||
|
|
|
@ -114,6 +114,7 @@
|
|||
|
||||
#define ENOTSUP 252 /* Function not implemented (POSIX.4 / HPUX) */
|
||||
#define ECANCELLED 253 /* aio request was canceled before complete (POSIX.4 / HPUX) */
|
||||
#define ECANCELED ECANCELLED /* SuSv3 and Solaris wants one 'L' */
|
||||
|
||||
/* for robust mutexes */
|
||||
#define EOWNERDEAD 254 /* Owner died */
|
||||
|
|
|
@ -69,6 +69,8 @@
|
|||
#define CRT_ID_TVRX S9000_ID_98765 /* TVRX (gto/falcon) */
|
||||
#define CRT_ID_ARTIST S9000_ID_ARTIST /* Artist */
|
||||
#define CRT_ID_SUMMIT 0x2FC1066B /* Summit FX2, FX4, FX6 ... */
|
||||
#define CRT_ID_LEGO 0x35ACDA30 /* Lego FX5, FX10 ... */
|
||||
#define CRT_ID_PINNACLE 0x35ACDA16 /* Pinnacle FXe */
|
||||
|
||||
/* structure for ioctl(GCDESCRIBE) */
|
||||
|
||||
|
|
|
@ -23,9 +23,6 @@
|
|||
|
||||
#define LED_CMD_REG_NONE 0 /* NULL == no addr for the cmd register */
|
||||
|
||||
/* led tasklet struct */
|
||||
extern struct tasklet_struct led_tasklet;
|
||||
|
||||
/* register_led_driver() */
|
||||
int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long data_reg);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include <linux/device.h>
|
||||
|
||||
struct parisc_device {
|
||||
unsigned long hpa; /* Hard Physical Address */
|
||||
struct resource hpa; /* Hard Physical Address */
|
||||
struct parisc_device_id id;
|
||||
struct parisc_driver *driver; /* Driver for this device */
|
||||
char name[80]; /* The hardware description */
|
||||
|
@ -39,6 +39,11 @@ struct parisc_driver {
|
|||
#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv)
|
||||
#define parisc_parent(d) to_parisc_device(d->dev.parent)
|
||||
|
||||
static inline char *parisc_pathname(struct parisc_device *d)
|
||||
{
|
||||
return d->dev.bus_id;
|
||||
}
|
||||
|
||||
static inline void
|
||||
parisc_set_drvdata(struct parisc_device *d, void *p)
|
||||
{
|
||||
|
|
|
@ -69,7 +69,7 @@ struct pci_hba_data {
|
|||
#define PCI_PORT_HBA(a) ((a) >> HBA_PORT_SPACE_BITS)
|
||||
#define PCI_PORT_ADDR(a) ((a) & (HBA_PORT_SPACE_SIZE - 1))
|
||||
|
||||
#if CONFIG_64BIT
|
||||
#ifdef CONFIG_64BIT
|
||||
#define PCI_F_EXTEND 0xffffffff00000000UL
|
||||
#define PCI_IS_LMMIO(hba,a) pci_is_lmmio(hba,a)
|
||||
|
||||
|
|
|
@ -501,6 +501,8 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
|
|||
#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
|
||||
remap_pfn_range(vma, vaddr, pfn, size, prot)
|
||||
|
||||
#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) | _PAGE_NO_CACHE)
|
||||
|
||||
#define MK_IOSPACE_PFN(space, pfn) (pfn)
|
||||
#define GET_IOSPACE(pfn) 0
|
||||
#define GET_PFN(pfn) (pfn)
|
||||
|
|
|
@ -122,8 +122,27 @@ struct thread_struct {
|
|||
};
|
||||
|
||||
/* Thread struct flags. */
|
||||
#define PARISC_UAC_NOPRINT (1UL << 0) /* see prctl and unaligned.c */
|
||||
#define PARISC_UAC_SIGBUS (1UL << 1)
|
||||
#define PARISC_KERNEL_DEATH (1UL << 31) /* see die_if_kernel()... */
|
||||
|
||||
#define PARISC_UAC_SHIFT 0
|
||||
#define PARISC_UAC_MASK (PARISC_UAC_NOPRINT|PARISC_UAC_SIGBUS)
|
||||
|
||||
#define SET_UNALIGN_CTL(task,value) \
|
||||
({ \
|
||||
(task)->thread.flags = (((task)->thread.flags & ~PARISC_UAC_MASK) \
|
||||
| (((value) << PARISC_UAC_SHIFT) & \
|
||||
PARISC_UAC_MASK)); \
|
||||
0; \
|
||||
})
|
||||
|
||||
#define GET_UNALIGN_CTL(task,addr) \
|
||||
({ \
|
||||
put_user(((task)->thread.flags & PARISC_UAC_MASK) \
|
||||
>> PARISC_UAC_SHIFT, (int __user *) (addr)); \
|
||||
})
|
||||
|
||||
#define INIT_THREAD { \
|
||||
regs: { gr: { 0, }, \
|
||||
fr: { 0, }, \
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
#ifndef _PARISC_PSW_H
|
||||
|
||||
#include <linux/config.h>
|
||||
|
||||
#define PSW_I 0x00000001
|
||||
#define PSW_D 0x00000002
|
||||
#define PSW_P 0x00000004
|
||||
|
@ -9,6 +12,16 @@
|
|||
#define PSW_G 0x00000040 /* PA1.x only */
|
||||
#define PSW_O 0x00000080 /* PA2.0 only */
|
||||
|
||||
/* ssm/rsm instructions number PSW_W and PSW_E differently */
|
||||
#define PSW_SM_I PSW_I /* Enable External Interrupts */
|
||||
#define PSW_SM_D PSW_D
|
||||
#define PSW_SM_P PSW_P
|
||||
#define PSW_SM_Q PSW_Q /* Enable Interrupt State Collection */
|
||||
#define PSW_SM_R PSW_R /* Enable Recover Counter Trap */
|
||||
#define PSW_SM_W 0x200 /* PA2.0 only : Enable Wide Mode */
|
||||
|
||||
#define PSW_SM_QUIET PSW_SM_R+PSW_SM_Q+PSW_SM_P+PSW_SM_D+PSW_SM_I
|
||||
|
||||
#define PSW_CB 0x0000ff00
|
||||
|
||||
#define PSW_M 0x00010000
|
||||
|
@ -30,33 +43,21 @@
|
|||
#define PSW_Z 0x40000000 /* PA1.x only */
|
||||
#define PSW_Y 0x80000000 /* PA1.x only */
|
||||
|
||||
#ifdef __LP64__
|
||||
#define PSW_HI_CB 0x000000ff /* PA2.0 only */
|
||||
#ifdef CONFIG_64BIT
|
||||
# define PSW_HI_CB 0x000000ff /* PA2.0 only */
|
||||
#endif
|
||||
|
||||
/* PSW bits to be used with ssm/rsm */
|
||||
#define PSW_SM_I 0x1
|
||||
#define PSW_SM_D 0x2
|
||||
#define PSW_SM_P 0x4
|
||||
#define PSW_SM_Q 0x8
|
||||
#define PSW_SM_R 0x10
|
||||
#define PSW_SM_F 0x20
|
||||
#define PSW_SM_G 0x40
|
||||
#define PSW_SM_O 0x80
|
||||
#define PSW_SM_E 0x100
|
||||
#define PSW_SM_W 0x200
|
||||
|
||||
#ifdef __LP64__
|
||||
# define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I)
|
||||
# define KERNEL_PSW (PSW_W | PSW_C | PSW_Q | PSW_P | PSW_D)
|
||||
# define REAL_MODE_PSW (PSW_W | PSW_Q)
|
||||
# define USER_PSW_MASK (PSW_W | PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB)
|
||||
# define USER_PSW_HI_MASK (PSW_HI_CB)
|
||||
#else
|
||||
# define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I)
|
||||
# define KERNEL_PSW (PSW_C | PSW_Q | PSW_P | PSW_D)
|
||||
# define REAL_MODE_PSW (PSW_Q)
|
||||
# define USER_PSW_MASK (PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB)
|
||||
#ifdef CONFIG_64BIT
|
||||
# define USER_PSW_HI_MASK PSW_HI_CB
|
||||
# define WIDE_PSW PSW_W
|
||||
#else
|
||||
# define WIDE_PSW 0
|
||||
#endif
|
||||
|
||||
/* Used when setting up for rfi */
|
||||
#define KERNEL_PSW (WIDE_PSW | PSW_C | PSW_Q | PSW_P | PSW_D)
|
||||
#define REAL_MODE_PSW (WIDE_PSW | PSW_Q)
|
||||
#define USER_PSW_MASK (WIDE_PSW | PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB)
|
||||
#define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -49,7 +49,7 @@ struct pt_regs {
|
|||
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0)
|
||||
#define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
|
||||
#define instruction_pointer(regs) ((regs)->iaoq[0] & ~3)
|
||||
#define profile_pc(regs) instruction_pointer(regs)
|
||||
unsigned long profile_pc(struct pt_regs *);
|
||||
extern void show_regs(struct pt_regs *);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -5,11 +5,6 @@
|
|||
#include <asm/processor.h>
|
||||
#include <asm/spinlock_types.h>
|
||||
|
||||
/* Note that PA-RISC has to use `1' to mean unlocked and `0' to mean locked
|
||||
* since it only has load-and-zero. Moreover, at least on some PA processors,
|
||||
* the semaphore address has to be 16-byte aligned.
|
||||
*/
|
||||
|
||||
static inline int __raw_spin_is_locked(raw_spinlock_t *x)
|
||||
{
|
||||
volatile unsigned int *a = __ldcw_align(x);
|
||||
|
|
|
@ -6,11 +6,15 @@
|
|||
#endif
|
||||
|
||||
typedef struct {
|
||||
#ifdef CONFIG_PA20
|
||||
volatile unsigned int slock;
|
||||
# define __RAW_SPIN_LOCK_UNLOCKED { 1 }
|
||||
#else
|
||||
volatile unsigned int lock[4];
|
||||
# define __RAW_SPIN_LOCK_UNLOCKED { { 1, 1, 1, 1 } }
|
||||
#endif
|
||||
} raw_spinlock_t;
|
||||
|
||||
#define __RAW_SPIN_LOCK_UNLOCKED { { 1, 1, 1, 1 } }
|
||||
|
||||
typedef struct {
|
||||
raw_spinlock_t lock;
|
||||
volatile int counter;
|
||||
|
|
|
@ -138,13 +138,7 @@ static inline void set_eiem(unsigned long val)
|
|||
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
|
||||
|
||||
|
||||
/* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */
|
||||
#define __ldcw(a) ({ \
|
||||
unsigned __ret; \
|
||||
__asm__ __volatile__("ldcw 0(%1),%0" : "=r" (__ret) : "r" (a)); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#ifndef CONFIG_PA20
|
||||
/* Because kmalloc only guarantees 8-byte alignment for kmalloc'd data,
|
||||
and GCC only guarantees 8-byte alignment for stack locals, we can't
|
||||
be assured of 16-byte alignment for atomic lock data even if we
|
||||
|
@ -152,37 +146,41 @@ static inline void set_eiem(unsigned long val)
|
|||
we use a struct containing an array of four ints for the atomic lock
|
||||
type and dynamically select the 16-byte aligned int from the array
|
||||
for the semaphore. */
|
||||
|
||||
#define __PA_LDCW_ALIGNMENT 16
|
||||
#define __ldcw_align(a) ({ \
|
||||
unsigned long __ret = (unsigned long) &(a)->lock[0]; \
|
||||
__ret = (__ret + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1); \
|
||||
(volatile unsigned int *) __ret; \
|
||||
})
|
||||
#define LDCW "ldcw"
|
||||
|
||||
#else /*CONFIG_PA20*/
|
||||
/* From: "Jim Hull" <jim.hull of hp.com>
|
||||
I've attached a summary of the change, but basically, for PA 2.0, as
|
||||
long as the ",CO" (coherent operation) completer is specified, then the
|
||||
16-byte alignment requirement for ldcw and ldcd is relaxed, and instead
|
||||
they only require "natural" alignment (4-byte for ldcw, 8-byte for
|
||||
ldcd). */
|
||||
|
||||
#define __PA_LDCW_ALIGNMENT 4
|
||||
#define __ldcw_align(a) ((volatile unsigned int *)a)
|
||||
#define LDCW "ldcw,co"
|
||||
|
||||
#endif /*!CONFIG_PA20*/
|
||||
|
||||
/* LDCW, the only atomic read-write operation PA-RISC has. *sigh*. */
|
||||
#define __ldcw(a) ({ \
|
||||
unsigned __ret; \
|
||||
__asm__ __volatile__(LDCW " 0(%1),%0" : "=r" (__ret) : "r" (a)); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
# define __lock_aligned __attribute__((__section__(".data.lock_aligned")))
|
||||
#endif
|
||||
|
||||
#define KERNEL_START (0x10100000 - 0x1000)
|
||||
|
||||
/* This is for the serialisation of PxTLB broadcasts. At least on the
|
||||
* N class systems, only one PxTLB inter processor broadcast can be
|
||||
* active at any one time on the Merced bus. This tlb purge
|
||||
* synchronisation is fairly lightweight and harmless so we activate
|
||||
* it on all SMP systems not just the N class. */
|
||||
#ifdef CONFIG_SMP
|
||||
extern spinlock_t pa_tlb_lock;
|
||||
|
||||
#define purge_tlb_start(x) spin_lock(&pa_tlb_lock)
|
||||
#define purge_tlb_end(x) spin_unlock(&pa_tlb_lock)
|
||||
|
||||
#else
|
||||
|
||||
#define purge_tlb_start(x) do { } while(0)
|
||||
#define purge_tlb_end(x) do { } while (0)
|
||||
|
||||
#endif
|
||||
|
||||
#define arch_align_stack(x) (x)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -7,6 +7,26 @@
|
|||
#include <linux/mm.h>
|
||||
#include <asm/mmu_context.h>
|
||||
|
||||
|
||||
/* This is for the serialisation of PxTLB broadcasts. At least on the
|
||||
* N class systems, only one PxTLB inter processor broadcast can be
|
||||
* active at any one time on the Merced bus. This tlb purge
|
||||
* synchronisation is fairly lightweight and harmless so we activate
|
||||
* it on all SMP systems not just the N class. */
|
||||
#ifdef CONFIG_SMP
|
||||
extern spinlock_t pa_tlb_lock;
|
||||
|
||||
#define purge_tlb_start(x) spin_lock(&pa_tlb_lock)
|
||||
#define purge_tlb_end(x) spin_unlock(&pa_tlb_lock)
|
||||
|
||||
#else
|
||||
|
||||
#define purge_tlb_start(x) do { } while(0)
|
||||
#define purge_tlb_end(x) do { } while (0)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
extern void flush_tlb_all(void);
|
||||
|
||||
/*
|
||||
|
@ -64,29 +84,26 @@ static inline void flush_tlb_range(struct vm_area_struct *vma,
|
|||
{
|
||||
unsigned long npages;
|
||||
|
||||
|
||||
npages = ((end - (start & PAGE_MASK)) + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
|
||||
if (npages >= 512) /* XXX arbitrary, should be tuned */
|
||||
if (npages >= 512) /* 2MB of space: arbitrary, should be tuned */
|
||||
flush_tlb_all();
|
||||
else {
|
||||
|
||||
mtsp(vma->vm_mm->context,1);
|
||||
purge_tlb_start();
|
||||
if (split_tlb) {
|
||||
purge_tlb_start();
|
||||
while (npages--) {
|
||||
pdtlb(start);
|
||||
pitlb(start);
|
||||
start += PAGE_SIZE;
|
||||
}
|
||||
purge_tlb_end();
|
||||
} else {
|
||||
purge_tlb_start();
|
||||
while (npages--) {
|
||||
pdtlb(start);
|
||||
start += PAGE_SIZE;
|
||||
}
|
||||
purge_tlb_end();
|
||||
}
|
||||
purge_tlb_end();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,8 +33,10 @@ typedef unsigned long long __u64;
|
|||
|
||||
#ifdef __LP64__
|
||||
#define BITS_PER_LONG 64
|
||||
#define SHIFT_PER_LONG 6
|
||||
#else
|
||||
#define BITS_PER_LONG 32
|
||||
#define SHIFT_PER_LONG 5
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
|
|
@ -687,8 +687,8 @@
|
|||
#define __NR_shmget (__NR_Linux + 194)
|
||||
#define __NR_shmctl (__NR_Linux + 195)
|
||||
|
||||
#define __NR_getpmsg (__NR_Linux + 196) /* some people actually want streams */
|
||||
#define __NR_putpmsg (__NR_Linux + 197) /* some people actually want streams */
|
||||
#define __NR_getpmsg (__NR_Linux + 196) /* Somebody *wants* streams? */
|
||||
#define __NR_putpmsg (__NR_Linux + 197)
|
||||
|
||||
#define __NR_lstat64 (__NR_Linux + 198)
|
||||
#define __NR_truncate64 (__NR_Linux + 199)
|
||||
|
@ -755,8 +755,14 @@
|
|||
#define __NR_mbind (__NR_Linux + 260)
|
||||
#define __NR_get_mempolicy (__NR_Linux + 261)
|
||||
#define __NR_set_mempolicy (__NR_Linux + 262)
|
||||
#define __NR_vserver (__NR_Linux + 263)
|
||||
#define __NR_add_key (__NR_Linux + 264)
|
||||
#define __NR_request_key (__NR_Linux + 265)
|
||||
#define __NR_keyctl (__NR_Linux + 266)
|
||||
#define __NR_ioprio_set (__NR_Linux + 267)
|
||||
#define __NR_ioprio_get (__NR_Linux + 268)
|
||||
|
||||
#define __NR_Linux_syscalls 263
|
||||
#define __NR_Linux_syscalls 269
|
||||
|
||||
#define HPUX_GATEWAY_ADDR 0xC0000004
|
||||
#define LINUX_GATEWAY_ADDR 0x100
|
||||
|
@ -807,10 +813,10 @@
|
|||
#define K_INLINE_SYSCALL(name, nr, args...) ({ \
|
||||
long __sys_res; \
|
||||
{ \
|
||||
register unsigned long __res asm("r28"); \
|
||||
register unsigned long __res __asm__("r28"); \
|
||||
K_LOAD_ARGS_##nr(args) \
|
||||
/* FIXME: HACK stw/ldw r19 around syscall */ \
|
||||
asm volatile( \
|
||||
__asm__ volatile( \
|
||||
K_STW_ASM_PIC \
|
||||
" ble 0x100(%%sr2, %%r0)\n" \
|
||||
" ldi %1, %%r20\n" \
|
||||
|
|
|
@ -0,0 +1,483 @@
|
|||
#ifndef _HIL_H_
|
||||
#define _HIL_H_
|
||||
|
||||
/*
|
||||
* Hewlett Packard Human Interface Loop (HP-HIL) Protocol -- header.
|
||||
*
|
||||
* Copyright (c) 2001 Brian S. Julin
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL").
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
*
|
||||
* References:
|
||||
* HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A
|
||||
*
|
||||
* A note of thanks to HP for providing and shipping reference materials
|
||||
* free of charge to help in the development of HIL support for Linux.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
/* Physical constants relevant to raw loop/device timing.
|
||||
*/
|
||||
|
||||
#define HIL_CLOCK 8MHZ
|
||||
#define HIL_EK1_CLOCK 30HZ
|
||||
#define HIL_EK2_CLOCK 60HZ
|
||||
|
||||
#define HIL_TIMEOUT_DEV 5 /* ms */
|
||||
#define HIL_TIMEOUT_DEVS 10 /* ms */
|
||||
#define HIL_TIMEOUT_NORESP 10 /* ms */
|
||||
#define HIL_TIMEOUT_DEVS_DATA 16 /* ms */
|
||||
#define HIL_TIMEOUT_SELFTEST 200 /* ms */
|
||||
|
||||
|
||||
/* Actual wire line coding. These will only be useful if someone is
|
||||
* implementing a software MLC to run HIL devices on a non-parisc machine.
|
||||
*/
|
||||
|
||||
#define HIL_WIRE_PACKET_LEN 15
|
||||
enum hil_wire_bitpos {
|
||||
HIL_WIRE_START = 0,
|
||||
HIL_WIRE_ADDR2,
|
||||
HIL_WIRE_ADDR1,
|
||||
HIL_WIRE_ADDR0,
|
||||
HIL_WIRE_COMMAND,
|
||||
HIL_WIRE_DATA7,
|
||||
HIL_WIRE_DATA6,
|
||||
HIL_WIRE_DATA5,
|
||||
HIL_WIRE_DATA4,
|
||||
HIL_WIRE_DATA3,
|
||||
HIL_WIRE_DATA2,
|
||||
HIL_WIRE_DATA1,
|
||||
HIL_WIRE_DATA0,
|
||||
HIL_WIRE_PARITY,
|
||||
HIL_WIRE_STOP
|
||||
};
|
||||
|
||||
/* HP documentation uses these bit positions to refer to commands;
|
||||
* we will call these "packets".
|
||||
*/
|
||||
enum hil_pkt_bitpos {
|
||||
HIL_PKT_CMD = 0x00000800,
|
||||
HIL_PKT_ADDR2 = 0x00000400,
|
||||
HIL_PKT_ADDR1 = 0x00000200,
|
||||
HIL_PKT_ADDR0 = 0x00000100,
|
||||
HIL_PKT_ADDR_MASK = 0x00000700,
|
||||
HIL_PKT_ADDR_SHIFT = 8,
|
||||
HIL_PKT_DATA7 = 0x00000080,
|
||||
HIL_PKT_DATA6 = 0x00000040,
|
||||
HIL_PKT_DATA5 = 0x00000020,
|
||||
HIL_PKT_DATA4 = 0x00000010,
|
||||
HIL_PKT_DATA3 = 0x00000008,
|
||||
HIL_PKT_DATA2 = 0x00000004,
|
||||
HIL_PKT_DATA1 = 0x00000002,
|
||||
HIL_PKT_DATA0 = 0x00000001,
|
||||
HIL_PKT_DATA_MASK = 0x000000FF,
|
||||
HIL_PKT_DATA_SHIFT = 0
|
||||
};
|
||||
|
||||
/* The HIL MLC also has several error/status/control bits. We extend the
|
||||
* "packet" to include these when direct access to the MLC is available,
|
||||
* or emulate them in cases where they are not available.
|
||||
*
|
||||
* This way the device driver knows that the underlying MLC driver
|
||||
* has had to deal with loop errors.
|
||||
*/
|
||||
enum hil_error_bitpos {
|
||||
HIL_ERR_OB = 0x00000800, /* MLC is busy sending an auto-poll,
|
||||
or we have filled up the output
|
||||
buffer and must wait. */
|
||||
HIL_ERR_INT = 0x00010000, /* A normal interrupt has occurred. */
|
||||
HIL_ERR_NMI = 0x00020000, /* An NMI has occurred. */
|
||||
HIL_ERR_LERR = 0x00040000, /* A poll didn't come back. */
|
||||
HIL_ERR_PERR = 0x01000000, /* There was a Parity Error. */
|
||||
HIL_ERR_FERR = 0x02000000, /* There was a Framing Error. */
|
||||
HIL_ERR_FOF = 0x04000000 /* Input FIFO Overflowed. */
|
||||
};
|
||||
|
||||
enum hil_control_bitpos {
|
||||
HIL_CTRL_TEST = 0x00010000,
|
||||
HIL_CTRL_IPF = 0x00040000,
|
||||
HIL_CTRL_APE = 0x02000000
|
||||
};
|
||||
|
||||
/* Bits 30,31 are unused, we use them to control write behavior. */
|
||||
#define HIL_DO_ALTER_CTRL 0x40000000 /* Write MSW of packet to control
|
||||
before writing LSW to loop */
|
||||
#define HIL_CTRL_ONLY 0xc0000000 /* *Only* alter the control registers */
|
||||
|
||||
/* This gives us a 32-bit "packet"
|
||||
*/
|
||||
typedef u32 hil_packet;
|
||||
|
||||
|
||||
/* HIL Loop commands
|
||||
*/
|
||||
enum hil_command {
|
||||
HIL_CMD_IFC = 0x00, /* Interface Clear */
|
||||
HIL_CMD_EPT = 0x01, /* Enter Pass-Thru Mode */
|
||||
HIL_CMD_ELB = 0x02, /* Enter Loop-Back Mode */
|
||||
HIL_CMD_IDD = 0x03, /* Identify and Describe */
|
||||
HIL_CMD_DSR = 0x04, /* Device Soft Reset */
|
||||
HIL_CMD_PST = 0x05, /* Perform Self Test */
|
||||
HIL_CMD_RRG = 0x06, /* Read Register */
|
||||
HIL_CMD_WRG = 0x07, /* Write Register */
|
||||
HIL_CMD_ACF = 0x08, /* Auto Configure */
|
||||
HIL_CMDID_ACF = 0x07, /* Auto Configure bits with incremented ID */
|
||||
HIL_CMD_POL = 0x10, /* Poll */
|
||||
HIL_CMDCT_POL = 0x0f, /* Poll command bits with item count */
|
||||
HIL_CMD_RPL = 0x20, /* RePoll */
|
||||
HIL_CMDCT_RPL = 0x0f, /* RePoll command bits with item count */
|
||||
HIL_CMD_RNM = 0x30, /* Report Name */
|
||||
HIL_CMD_RST = 0x31, /* Report Status */
|
||||
HIL_CMD_EXD = 0x32, /* Extended Describe */
|
||||
HIL_CMD_RSC = 0x33, /* Report Security Code */
|
||||
|
||||
/* 0x34 to 0x3c reserved for future use */
|
||||
|
||||
HIL_CMD_DKA = 0x3d, /* Disable Keyswitch Autorepeat */
|
||||
HIL_CMD_EK1 = 0x3e, /* Enable Keyswitch Autorepeat 1 */
|
||||
HIL_CMD_EK2 = 0x3f, /* Enable Keyswitch Autorepeat 2 */
|
||||
HIL_CMD_PR1 = 0x40, /* Prompt1 */
|
||||
HIL_CMD_PR2 = 0x41, /* Prompt2 */
|
||||
HIL_CMD_PR3 = 0x42, /* Prompt3 */
|
||||
HIL_CMD_PR4 = 0x43, /* Prompt4 */
|
||||
HIL_CMD_PR5 = 0x44, /* Prompt5 */
|
||||
HIL_CMD_PR6 = 0x45, /* Prompt6 */
|
||||
HIL_CMD_PR7 = 0x46, /* Prompt7 */
|
||||
HIL_CMD_PRM = 0x47, /* Prompt (General Purpose) */
|
||||
HIL_CMD_AK1 = 0x48, /* Acknowlege1 */
|
||||
HIL_CMD_AK2 = 0x49, /* Acknowlege2 */
|
||||
HIL_CMD_AK3 = 0x4a, /* Acknowlege3 */
|
||||
HIL_CMD_AK4 = 0x4b, /* Acknowlege4 */
|
||||
HIL_CMD_AK5 = 0x4c, /* Acknowlege5 */
|
||||
HIL_CMD_AK6 = 0x4d, /* Acknowlege6 */
|
||||
HIL_CMD_AK7 = 0x4e, /* Acknowlege7 */
|
||||
HIL_CMD_ACK = 0x4f, /* Acknowlege (General Purpose) */
|
||||
|
||||
/* 0x50 to 0x78 reserved for future use */
|
||||
/* 0x80 to 0xEF device-specific commands */
|
||||
/* 0xf0 to 0xf9 reserved for future use */
|
||||
|
||||
HIL_CMD_RIO = 0xfa, /* Register I/O Error */
|
||||
HIL_CMD_SHR = 0xfb, /* System Hard Reset */
|
||||
HIL_CMD_TER = 0xfc, /* Transmission Error */
|
||||
HIL_CMD_CAE = 0xfd, /* Configuration Address Error */
|
||||
HIL_CMD_DHR = 0xfe, /* Device Hard Reset */
|
||||
|
||||
/* 0xff is prohibited from use. */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Response "records" to HIL commands
|
||||
*/
|
||||
|
||||
/* Device ID byte
|
||||
*/
|
||||
#define HIL_IDD_DID_TYPE_MASK 0xe0 /* Primary type bits */
|
||||
#define HIL_IDD_DID_TYPE_KB_INTEGRAL 0xa0 /* Integral keyboard */
|
||||
#define HIL_IDD_DID_TYPE_KB_ITF 0xc0 /* ITD keyboard */
|
||||
#define HIL_IDD_DID_TYPE_KB_RSVD 0xe0 /* Reserved keyboard type */
|
||||
#define HIL_IDD_DID_TYPE_KB_LANG_MASK 0x1f /* Keyboard locale bits */
|
||||
#define HIL_IDD_DID_KBLANG_USE_ESD 0x00 /* Use ESD Locale instead */
|
||||
#define HIL_IDD_DID_TYPE_ABS 0x80 /* Absolute Positioners */
|
||||
#define HIL_IDD_DID_ABS_RSVD1_MASK 0xf8 /* Reserved */
|
||||
#define HIL_IDD_DID_ABS_RSVD1 0x98
|
||||
#define HIL_IDD_DID_ABS_TABLET_MASK 0xf8 /* Tablets and digitizers */
|
||||
#define HIL_IDD_DID_ABS_TABLET 0x90
|
||||
#define HIL_IDD_DID_ABS_TSCREEN_MASK 0xfc /* Touch screens */
|
||||
#define HIL_IDD_DID_ABS_TSCREEN 0x8c
|
||||
#define HIL_IDD_DID_ABS_RSVD2_MASK 0xfc /* Reserved */
|
||||
#define HIL_IDD_DID_ABS_RSVD2 0x88
|
||||
#define HIL_IDD_DID_ABS_RSVD3_MASK 0xfc /* Reserved */
|
||||
#define HIL_IDD_DID_ABS_RSVD3 0x80
|
||||
#define HIL_IDD_DID_TYPE_REL 0x60 /* Relative Positioners */
|
||||
#define HIL_IDD_DID_REL_RSVD1_MASK 0xf0 /* Reserved */
|
||||
#define HIL_IDD_DID_REL_RSVD1 0x70
|
||||
#define HIL_IDD_DID_REL_RSVD2_MASK 0xfc /* Reserved */
|
||||
#define HIL_IDD_DID_REL_RSVD2 0x6c
|
||||
#define HIL_IDD_DID_REL_MOUSE_MASK 0xfc /* Mouse */
|
||||
#define HIL_IDD_DID_REL_MOUSE 0x68
|
||||
#define HIL_IDD_DID_REL_QUAD_MASK 0xf8 /* Other Quadrature Devices */
|
||||
#define HIL_IDD_DID_REL_QUAD 0x60
|
||||
#define HIL_IDD_DID_TYPE_CHAR 0x40 /* Character Entry */
|
||||
#define HIL_IDD_DID_CHAR_BARCODE_MASK 0xfc /* Barcode Reader */
|
||||
#define HIL_IDD_DID_CHAR_BARCODE 0x5c
|
||||
#define HIL_IDD_DID_CHAR_RSVD1_MASK 0xfc /* Reserved */
|
||||
#define HIL_IDD_DID_CHAR_RSVD1 0x58
|
||||
#define HIL_IDD_DID_CHAR_RSVD2_MASK 0xf8 /* Reserved */
|
||||
#define HIL_IDD_DID_CHAR_RSVD2 0x50
|
||||
#define HIL_IDD_DID_CHAR_RSVD3_MASK 0xf0 /* Reserved */
|
||||
#define HIL_IDD_DID_CHAR_RSVD3 0x40
|
||||
#define HIL_IDD_DID_TYPE_OTHER 0x20 /* Miscellaneous */
|
||||
#define HIL_IDD_DID_OTHER_RSVD1_MASK 0xf0 /* Reserved */
|
||||
#define HIL_IDD_DID_OTHER_RSVD1 0x30
|
||||
#define HIL_IDD_DID_OTHER_BARCODE_MASK 0xfc /* Tone Generator */
|
||||
#define HIL_IDD_DID_OTHER_BARCODE 0x2c
|
||||
#define HIL_IDD_DID_OTHER_RSVD2_MASK 0xfc /* Reserved */
|
||||
#define HIL_IDD_DID_OTHER_RSVD2 0x28
|
||||
#define HIL_IDD_DID_OTHER_RSVD3_MASK 0xf8 /* Reserved */
|
||||
#define HIL_IDD_DID_OTHER_RSVD3 0x20
|
||||
#define HIL_IDD_DID_TYPE_KEYPAD 0x00 /* Vectra Keyboard */
|
||||
|
||||
/* IDD record header
|
||||
*/
|
||||
#define HIL_IDD_HEADER_AXSET_MASK 0x03 /* Number of axis in a set */
|
||||
#define HIL_IDD_HEADER_RSC 0x04 /* Supports RSC command */
|
||||
#define HIL_IDD_HEADER_EXD 0x08 /* Supports EXD command */
|
||||
#define HIL_IDD_HEADER_IOD 0x10 /* IOD byte to follow */
|
||||
#define HIL_IDD_HEADER_16BIT 0x20 /* 16 (vs. 8) bit resolution */
|
||||
#define HIL_IDD_HEADER_ABS 0x40 /* Reports Absolute Position */
|
||||
#define HIL_IDD_HEADER_2X_AXIS 0x80 /* Two sets of 1-3 axis */
|
||||
|
||||
/* I/O Descriptor
|
||||
*/
|
||||
#define HIL_IDD_IOD_NBUTTON_MASK 0x07 /* Number of buttons */
|
||||
#define HIL_IDD_IOD_PROXIMITY 0x08 /* Proximity in/out events */
|
||||
#define HIL_IDD_IOD_PROMPT_MASK 0x70 /* Number of prompts/acks */
|
||||
#define HIL_IDD_IOD_PROMPT_SHIFT 4
|
||||
#define HIL_IDD_IOD_PROMPT 0x80 /* Generic prompt/ack */
|
||||
|
||||
#define HIL_IDD_NUM_AXES_PER_SET(header_packet) \
|
||||
((header_packet) & HIL_IDD_HEADER_AXSET_MASK)
|
||||
|
||||
#define HIL_IDD_NUM_AXSETS(header_packet) \
|
||||
(2 - !((header_packet) & HIL_IDD_HEADER_2X_AXIS))
|
||||
|
||||
#define HIL_IDD_LEN(header_packet) \
|
||||
((4 - !(header_packet & HIL_IDD_HEADER_IOD) - \
|
||||
2 * !(HIL_IDD_NUM_AXES_PER_SET(header_packet))) + \
|
||||
2 * HIL_IDD_NUM_AXES_PER_SET(header_packet) * \
|
||||
!!((header_packet) & HIL_IDD_HEADER_ABS))
|
||||
|
||||
/* The following HIL_IDD_* macros assume you have an array of
|
||||
* packets and/or unpacked 8-bit data in the order that they
|
||||
* were received.
|
||||
*/
|
||||
|
||||
#define HIL_IDD_AXIS_COUNTS_PER_M(header_ptr) \
|
||||
(!(HIL_IDD_NUM_AXSETS(*(header_ptr))) ? -1 : \
|
||||
(((*(header_ptr + 1) & HIL_PKT_DATA_MASK) + \
|
||||
((*(header_ptr + 2) & HIL_PKT_DATA_MASK)) << 8) \
|
||||
* ((*(header_ptr) & HIL_IDD_HEADER_16BIT) ? 100 : 1)))
|
||||
|
||||
#define HIL_IDD_AXIS_MAX(header_ptr, __axnum) \
|
||||
((!(*(header_ptr) & HIL_IDD_HEADER_ABS) || \
|
||||
(HIL_IDD_NUM_AXES_PER_SET(*(header_ptr)) <= __axnum)) ? 0 : \
|
||||
((HIL_PKT_DATA_MASK & *((header_ptr) + 3 + 2 * __axnum)) + \
|
||||
((HIL_PKT_DATA_MASK & *((header_ptr) + 4 + 2 * __axnum)) << 8)))
|
||||
|
||||
#define HIL_IDD_IOD(header_ptr) \
|
||||
(*(header_ptr + HIL_IDD_LEN((*header_ptr)) - 1))
|
||||
|
||||
#define HIL_IDD_HAS_GEN_PROMPT(header_ptr) \
|
||||
((*header_ptr & HIL_IDD_HEADER_IOD) && \
|
||||
(HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROMPT))
|
||||
|
||||
#define HIL_IDD_HAS_GEN_PROXIMITY(header_ptr) \
|
||||
((*header_ptr & HIL_IDD_HEADER_IOD) && \
|
||||
(HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROXIMITY))
|
||||
|
||||
#define HIL_IDD_NUM_BUTTONS(header_ptr) \
|
||||
((*header_ptr & HIL_IDD_HEADER_IOD) ? \
|
||||
(HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NBUTTON_MASK) : 0)
|
||||
|
||||
#define HIL_IDD_NUM_PROMPTS(header_ptr) \
|
||||
((*header_ptr & HIL_IDD_HEADER_IOD) ? \
|
||||
((HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NPROMPT_MASK) \
|
||||
>> HIL_IDD_IOD_PROMPT_SHIFT) : 0)
|
||||
|
||||
/* The response to HIL EXD commands -- the "extended describe record" */
|
||||
#define HIL_EXD_HEADER_WRG 0x03 /* Supports type2 WRG */
|
||||
#define HIL_EXD_HEADER_WRG_TYPE1 0x01 /* Supports type1 WRG */
|
||||
#define HIL_EXD_HEADER_WRG_TYPE2 0x02 /* Supports type2 WRG */
|
||||
#define HIL_EXD_HEADER_RRG 0x04 /* Supports RRG command */
|
||||
#define HIL_EXD_HEADER_RNM 0x10 /* Supports RNM command */
|
||||
#define HIL_EXD_HEADER_RST 0x20 /* Supports RST command */
|
||||
#define HIL_EXD_HEADER_LOCALE 0x40 /* Contains locale code */
|
||||
|
||||
#define HIL_EXD_NUM_RRG(header_ptr) \
|
||||
((*header_ptr & HIL_EXD_HEADER_RRG) ? \
|
||||
(*(header_ptr + 1) & HIL_PKT_DATA_MASK) : 0)
|
||||
|
||||
#define HIL_EXD_NUM_WWG(header_ptr) \
|
||||
((*header_ptr & HIL_EXD_HEADER_WRG) ? \
|
||||
(*(header_ptr + 2 - !(*header_ptr & HIL_EXD_HEADER_RRG)) & \
|
||||
HIL_PKT_DATA_MASK) : 0)
|
||||
|
||||
#define HIL_EXD_LEN(header_ptr) \
|
||||
(!!(*header_ptr & HIL_EXD_HEADER_RRG) + \
|
||||
!!(*header_ptr & HIL_EXD_HEADER_WRG) + \
|
||||
!!(*header_ptr & HIL_EXD_HEADER_LOCALE) + \
|
||||
2 * !!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) + 1)
|
||||
|
||||
#define HIL_EXD_LOCALE(header_ptr) \
|
||||
(!(*header_ptr & HIL_EXD_HEADER_LOCALE) ? -1 : \
|
||||
(*(header_ptr + HIL_EXD_LEN(header_ptr) - 1) & HIL_PKT_DATA_MASK))
|
||||
|
||||
#define HIL_EXD_WRG_TYPE2_LEN(header_ptr) \
|
||||
(!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) ? -1 : \
|
||||
(*(header_ptr + HIL_EXD_LEN(header_ptr) - 2 - \
|
||||
!!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) + \
|
||||
((*(header_ptr + HIL_EXD_LEN(header_ptr) - 1 - \
|
||||
!!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) << 8))
|
||||
|
||||
/* Device locale codes. */
|
||||
|
||||
/* Last defined locale code. Everything above this is "Reserved",
|
||||
and note that this same table applies to the Device ID Byte where
|
||||
keyboards may have a nationality code which is only 5 bits. */
|
||||
#define HIL_LOCALE_MAX 0x1f
|
||||
|
||||
/* Map to hopefully useful strings. I was trying to make these look
|
||||
like locale.aliases strings do; maybe that isn't the right table to
|
||||
emulate. In either case, I didn't have much to work on. */
|
||||
#define HIL_LOCALE_MAP \
|
||||
"", /* 0x00 Reserved */ \
|
||||
"", /* 0x01 Reserved */ \
|
||||
"", /* 0x02 Reserved */ \
|
||||
"swiss.french", /* 0x03 Swiss/French */ \
|
||||
"portuguese", /* 0x04 Portuguese */ \
|
||||
"arabic", /* 0x05 Arabic */ \
|
||||
"hebrew", /* 0x06 Hebrew */ \
|
||||
"english.canadian", /* 0x07 Canadian English */ \
|
||||
"turkish", /* 0x08 Turkish */ \
|
||||
"greek", /* 0x09 Greek */ \
|
||||
"thai", /* 0x0a Thai (Thailand) */ \
|
||||
"italian", /* 0x0b Italian */ \
|
||||
"korean", /* 0x0c Hangul (Korea) */ \
|
||||
"dutch", /* 0x0d Dutch */ \
|
||||
"swedish", /* 0x0e Swedish */ \
|
||||
"german", /* 0x0f German */ \
|
||||
"chinese", /* 0x10 Chinese-PRC */ \
|
||||
"chinese", /* 0x11 Chinese-ROC */ \
|
||||
"swiss.french", /* 0x12 Swiss/French II */ \
|
||||
"spanish", /* 0x13 Spanish */ \
|
||||
"swiss.german", /* 0x14 Swiss/German II */ \
|
||||
"flemish", /* 0x15 Belgian (Flemish) */ \
|
||||
"finnish", /* 0x16 Finnish */ \
|
||||
"english.uk", /* 0x17 United Kingdom */ \
|
||||
"french.canadian", /* 0x18 French/Canadian */ \
|
||||
"swiss.german", /* 0x19 Swiss/German */ \
|
||||
"norwegian", /* 0x1a Norwegian */ \
|
||||
"french", /* 0x1b French */ \
|
||||
"danish", /* 0x1c Danish */ \
|
||||
"japanese", /* 0x1d Katakana */ \
|
||||
"spanish", /* 0x1e Latin American/Spanish*/\
|
||||
"english.us" /* 0x1f United States */ \
|
||||
|
||||
|
||||
/* HIL keycodes */
|
||||
#define HIL_KEYCODES_SET1_TBLSIZE 128
|
||||
#define HIL_KEYCODES_SET1 \
|
||||
KEY_5, KEY_RESERVED, KEY_RIGHTALT, KEY_LEFTALT, \
|
||||
KEY_RIGHTSHIFT, KEY_LEFTSHIFT, KEY_LEFTCTRL, KEY_SYSRQ, \
|
||||
KEY_KP4, KEY_KP8, KEY_KP5, KEY_KP9, \
|
||||
KEY_KP6, KEY_KP7, KEY_KPCOMMA, KEY_KPENTER, \
|
||||
KEY_KP1, KEY_KPSLASH, KEY_KP2, KEY_KPPLUS, \
|
||||
KEY_KP3, KEY_KPASTERISK, KEY_KP0, KEY_KPMINUS, \
|
||||
KEY_B, KEY_V, KEY_C, KEY_X, \
|
||||
KEY_Z, KEY_RESERVED, KEY_RESERVED, KEY_ESC, \
|
||||
KEY_6, KEY_F10, KEY_3, KEY_F11, \
|
||||
KEY_KPDOT, KEY_F9, KEY_TAB /*KP*/, KEY_F12, \
|
||||
KEY_H, KEY_G, KEY_F, KEY_D, \
|
||||
KEY_S, KEY_A, KEY_RESERVED, KEY_CAPSLOCK, \
|
||||
KEY_U, KEY_Y, KEY_T, KEY_R, \
|
||||
KEY_E, KEY_W, KEY_Q, KEY_TAB, \
|
||||
KEY_7, KEY_6, KEY_5, KEY_4, \
|
||||
KEY_3, KEY_2, KEY_1, KEY_GRAVE, \
|
||||
KEY_F13, KEY_F14, KEY_F15, KEY_F16, \
|
||||
KEY_F17, KEY_F18, KEY_F19, KEY_F20, \
|
||||
KEY_MENU, KEY_F4, KEY_F3, KEY_F2, \
|
||||
KEY_F1, KEY_VOLUMEUP, KEY_STOP, KEY_SENDFILE, \
|
||||
KEY_SYSRQ, KEY_F5, KEY_F6, KEY_F7, \
|
||||
KEY_F8, KEY_VOLUMEDOWN, KEY_DEL_EOL, KEY_DEL_EOS, \
|
||||
KEY_8, KEY_9, KEY_0, KEY_MINUS, \
|
||||
KEY_EQUAL, KEY_BACKSPACE, KEY_INS_LINE, KEY_DEL_LINE, \
|
||||
KEY_I, KEY_O, KEY_P, KEY_LEFTBRACE, \
|
||||
KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_INSERT, KEY_DELETE, \
|
||||
KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \
|
||||
KEY_APOSTROPHE, KEY_ENTER, KEY_HOME, KEY_PAGEUP, \
|
||||
KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH, \
|
||||
KEY_BACKSLASH, KEY_SELECT, KEY_102ND, KEY_PAGEDOWN, \
|
||||
KEY_N, KEY_SPACE, KEY_NEXT, KEY_RESERVED, \
|
||||
KEY_LEFT, KEY_DOWN, KEY_UP, KEY_RIGHT
|
||||
|
||||
|
||||
#define HIL_KEYCODES_SET3_TBLSIZE 128
|
||||
#define HIL_KEYCODES_SET3 \
|
||||
KEY_RESERVED, KEY_ESC, KEY_1, KEY_2, \
|
||||
KEY_3, KEY_4, KEY_5, KEY_6, \
|
||||
KEY_7, KEY_8, KEY_9, KEY_0, \
|
||||
KEY_MINUS, KEY_EQUAL, KEY_BACKSPACE, KEY_TAB, \
|
||||
KEY_Q, KEY_W, KEY_E, KEY_R, \
|
||||
KEY_T, KEY_Y, KEY_U, KEY_I, \
|
||||
KEY_O, KEY_P, KEY_LEFTBRACE, KEY_RIGHTBRACE, \
|
||||
KEY_ENTER, KEY_LEFTCTRL, KEY_A, KEY_S, \
|
||||
KEY_D, KEY_F, KEY_G, KEY_H, \
|
||||
KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \
|
||||
KEY_APOSTROPHE,KEY_GRAVE, KEY_LEFTSHIFT, KEY_BACKSLASH, \
|
||||
KEY_Z, KEY_X, KEY_C, KEY_V, \
|
||||
KEY_B, KEY_N, KEY_M, KEY_COMMA, \
|
||||
KEY_DOT, KEY_SLASH, KEY_RIGHTSHIFT, KEY_KPASTERISK, \
|
||||
KEY_LEFTALT, KEY_SPACE, KEY_CAPSLOCK, KEY_F1, \
|
||||
KEY_F2, KEY_F3, KEY_F4, KEY_F5, \
|
||||
KEY_F6, KEY_F7, KEY_F8, KEY_F9, \
|
||||
KEY_F10, KEY_NUMLOCK, KEY_SCROLLLOCK, KEY_KP7, \
|
||||
KEY_KP8, KEY_KP9, KEY_KPMINUS, KEY_KP4, \
|
||||
KEY_KP5, KEY_KP6, KEY_KPPLUS, KEY_KP1, \
|
||||
KEY_KP2, KEY_KP3, KEY_KP0, KEY_KPDOT, \
|
||||
KEY_SYSRQ, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
|
||||
KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
|
||||
KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
|
||||
KEY_UP, KEY_LEFT, KEY_DOWN, KEY_RIGHT, \
|
||||
KEY_HOME, KEY_PAGEUP, KEY_END, KEY_PAGEDOWN, \
|
||||
KEY_INSERT, KEY_DELETE, KEY_102ND, KEY_RESERVED, \
|
||||
KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
|
||||
KEY_F1, KEY_F2, KEY_F3, KEY_F4, \
|
||||
KEY_F5, KEY_F6, KEY_F7, KEY_F8, \
|
||||
KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
|
||||
KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED
|
||||
|
||||
|
||||
/* Response to POL command, the "poll record header" */
|
||||
|
||||
#define HIL_POL_NUM_AXES_MASK 0x03 /* Number of axis reported */
|
||||
#define HIL_POL_CTS 0x04 /* Device ready to receive data */
|
||||
#define HIL_POL_STATUS_PENDING 0x08 /* Device has status to report */
|
||||
#define HIL_POL_CHARTYPE_MASK 0x70 /* Type of character data to follow */
|
||||
#define HIL_POL_CHARTYPE_NONE 0x00 /* No character data to follow */
|
||||
#define HIL_POL_CHARTYPE_RSVD1 0x10 /* Reserved Set 1 */
|
||||
#define HIL_POL_CHARTYPE_ASCII 0x20 /* U.S. ASCII */
|
||||
#define HIL_POL_CHARTYPE_BINARY 0x30 /* Binary data */
|
||||
#define HIL_POL_CHARTYPE_SET1 0x40 /* Keycode Set 1 */
|
||||
#define HIL_POL_CHARTYPE_RSVD2 0x50 /* Reserved Set 2 */
|
||||
#define HIL_POL_CHARTYPE_SET2 0x60 /* Keycode Set 2 */
|
||||
#define HIL_POL_CHARTYPE_SET3 0x70 /* Keycode Set 3 */
|
||||
#define HIL_POL_AXIS_ALT 0x80 /* Data is from axis set 2 */
|
||||
|
||||
|
||||
#endif /* _HIL_H_ */
|
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
* HP Human Interface Loop Master Link Controller driver.
|
||||
*
|
||||
* Copyright (c) 2001 Brian S. Julin
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL").
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
*
|
||||
* References:
|
||||
* HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/hil.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <linux/serio.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
typedef struct hil_mlc hil_mlc;
|
||||
|
||||
/* The HIL has a complicated state engine.
|
||||
* We define the structure of nodes in the state engine here.
|
||||
*/
|
||||
enum hilse_act {
|
||||
/* HILSE_OUT prepares to receive input if the next node
|
||||
* is an IN or EXPECT, and then sends the given packet.
|
||||
*/
|
||||
HILSE_OUT = 0,
|
||||
|
||||
/* HILSE_CTS checks if the loop is busy. */
|
||||
HILSE_CTS,
|
||||
|
||||
/* HILSE_OUT_LAST sends the given command packet to
|
||||
* the last configured/running device on the loop.
|
||||
*/
|
||||
HILSE_OUT_LAST,
|
||||
|
||||
/* HILSE_OUT_DISC sends the given command packet to
|
||||
* the next device past the last configured/running one.
|
||||
*/
|
||||
HILSE_OUT_DISC,
|
||||
|
||||
/* HILSE_FUNC runs a callback function with given arguments.
|
||||
* a positive return value causes the "ugly" branch to be taken.
|
||||
*/
|
||||
HILSE_FUNC,
|
||||
|
||||
/* HILSE_IN simply expects any non-errored packet to arrive
|
||||
* within arg usecs.
|
||||
*/
|
||||
HILSE_IN = 0x100,
|
||||
|
||||
/* HILSE_EXPECT expects a particular packet to arrive
|
||||
* within arg usecs, any other packet is considered an error.
|
||||
*/
|
||||
HILSE_EXPECT,
|
||||
|
||||
/* HILSE_EXPECT_LAST as above but dev field should be last
|
||||
* discovered/operational device.
|
||||
*/
|
||||
HILSE_EXPECT_LAST,
|
||||
|
||||
/* HILSE_EXPECT_LAST as above but dev field should be first
|
||||
* undiscovered/inoperational device.
|
||||
*/
|
||||
HILSE_EXPECT_DISC
|
||||
};
|
||||
|
||||
typedef int (hilse_func) (hil_mlc *mlc, int arg);
|
||||
struct hilse_node {
|
||||
enum hilse_act act; /* How to process this node */
|
||||
union {
|
||||
hilse_func *func; /* Function to call if HILSE_FUNC */
|
||||
hil_packet packet; /* Packet to send or to compare */
|
||||
} object;
|
||||
int arg; /* Timeout in usec or parm for func */
|
||||
int good; /* Node to jump to on success */
|
||||
int bad; /* Node to jump to on error */
|
||||
int ugly; /* Node to jump to on timeout */
|
||||
};
|
||||
|
||||
/* Methods for back-end drivers, e.g. hp_sdc_mlc */
|
||||
typedef int (hil_mlc_cts) (hil_mlc *mlc);
|
||||
typedef void (hil_mlc_out) (hil_mlc *mlc);
|
||||
typedef int (hil_mlc_in) (hil_mlc *mlc, suseconds_t timeout);
|
||||
|
||||
struct hil_mlc_devinfo {
|
||||
uint8_t idd[16]; /* Device ID Byte and Describe Record */
|
||||
uint8_t rsc[16]; /* Security Code Header and Record */
|
||||
uint8_t exd[16]; /* Extended Describe Record */
|
||||
uint8_t rnm[16]; /* Device name as returned by RNM command */
|
||||
};
|
||||
|
||||
struct hil_mlc_serio_map {
|
||||
hil_mlc *mlc;
|
||||
int di_revmap;
|
||||
int didx;
|
||||
};
|
||||
|
||||
/* How many (possibly old/detached) devices the we try to keep track of */
|
||||
#define HIL_MLC_DEVMEM 16
|
||||
|
||||
struct hil_mlc {
|
||||
struct list_head list; /* hil_mlc is organized as linked list */
|
||||
|
||||
rwlock_t lock;
|
||||
|
||||
void *priv; /* Data specific to a particular type of MLC */
|
||||
|
||||
int seidx; /* Current node in state engine */
|
||||
int istarted, ostarted;
|
||||
|
||||
hil_mlc_cts *cts;
|
||||
struct semaphore csem; /* Raised when loop idle */
|
||||
|
||||
hil_mlc_out *out;
|
||||
struct semaphore osem; /* Raised when outpacket dispatched */
|
||||
hil_packet opacket;
|
||||
|
||||
hil_mlc_in *in;
|
||||
struct semaphore isem; /* Raised when a packet arrives */
|
||||
hil_packet ipacket[16];
|
||||
hil_packet imatch;
|
||||
int icount;
|
||||
struct timeval instart;
|
||||
suseconds_t intimeout;
|
||||
|
||||
int ddi; /* Last operational device id */
|
||||
int lcv; /* LCV to throttle loops */
|
||||
struct timeval lcv_tv; /* Time loop was started */
|
||||
|
||||
int di_map[7]; /* Maps below items to live devs */
|
||||
struct hil_mlc_devinfo di[HIL_MLC_DEVMEM];
|
||||
struct serio *serio[HIL_MLC_DEVMEM];
|
||||
struct hil_mlc_serio_map serio_map[HIL_MLC_DEVMEM];
|
||||
hil_packet serio_opacket[HIL_MLC_DEVMEM];
|
||||
int serio_oidx[HIL_MLC_DEVMEM];
|
||||
struct hil_mlc_devinfo di_scratch; /* Temporary area */
|
||||
|
||||
int opercnt;
|
||||
|
||||
struct tasklet_struct *tasklet;
|
||||
};
|
||||
|
||||
int hil_mlc_register(hil_mlc *mlc);
|
||||
int hil_mlc_unregister(hil_mlc *mlc);
|
|
@ -0,0 +1,300 @@
|
|||
/*
|
||||
* HP i8042 System Device Controller -- header
|
||||
*
|
||||
* Copyright (c) 2001 Brian S. Julin
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification.
|
||||
* 2. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL").
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
*
|
||||
* References:
|
||||
*
|
||||
* HP-HIL Technical Reference Manual. Hewlett Packard Product No. 45918A
|
||||
*
|
||||
* System Device Controller Microprocessor Firmware Theory of Operation
|
||||
* for Part Number 1820-4784 Revision B. Dwg No. A-1820-4784-2
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_HP_SDC_H
|
||||
#define _LINUX_HP_SDC_H
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/timer.h>
|
||||
#if defined(__hppa__)
|
||||
#include <asm/hardware.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* No 4X status reads take longer than this (in usec).
|
||||
*/
|
||||
#define HP_SDC_MAX_REG_DELAY 20000
|
||||
|
||||
typedef void (hp_sdc_irqhook) (int irq, void *dev_id,
|
||||
uint8_t status, uint8_t data);
|
||||
|
||||
int hp_sdc_request_timer_irq(hp_sdc_irqhook *callback);
|
||||
int hp_sdc_request_hil_irq(hp_sdc_irqhook *callback);
|
||||
int hp_sdc_request_cooked_irq(hp_sdc_irqhook *callback);
|
||||
int hp_sdc_release_timer_irq(hp_sdc_irqhook *callback);
|
||||
int hp_sdc_release_hil_irq(hp_sdc_irqhook *callback);
|
||||
int hp_sdc_release_cooked_irq(hp_sdc_irqhook *callback);
|
||||
|
||||
typedef struct {
|
||||
int actidx; /* Start of act. Acts are atomic WRT I/O to SDC */
|
||||
int idx; /* Index within the act */
|
||||
int endidx; /* transaction is over and done if idx == endidx */
|
||||
uint8_t *seq; /* commands/data for the transaction */
|
||||
union {
|
||||
hp_sdc_irqhook *irqhook; /* Callback, isr or tasklet context */
|
||||
struct semaphore *semaphore; /* Semaphore to sleep on. */
|
||||
} act;
|
||||
} hp_sdc_transaction;
|
||||
int hp_sdc_enqueue_transaction(hp_sdc_transaction *this);
|
||||
int hp_sdc_dequeue_transaction(hp_sdc_transaction *this);
|
||||
|
||||
/* The HP_SDC_ACT* values are peculiar to this driver.
|
||||
* Nuance: never HP_SDC_ACT_DATAIN | HP_SDC_ACT_DEALLOC, use another
|
||||
* act to perform the dealloc.
|
||||
*/
|
||||
#define HP_SDC_ACT_PRECMD 0x01 /* Send a command first */
|
||||
#define HP_SDC_ACT_DATAREG 0x02 /* Set data registers */
|
||||
#define HP_SDC_ACT_DATAOUT 0x04 /* Send data bytes */
|
||||
#define HP_SDC_ACT_POSTCMD 0x08 /* Send command after */
|
||||
#define HP_SDC_ACT_DATAIN 0x10 /* Collect data after */
|
||||
#define HP_SDC_ACT_DURING 0x1f
|
||||
#define HP_SDC_ACT_SEMAPHORE 0x20 /* Raise semaphore after */
|
||||
#define HP_SDC_ACT_CALLBACK 0x40 /* Pass data to IRQ handler */
|
||||
#define HP_SDC_ACT_DEALLOC 0x80 /* Destroy transaction after */
|
||||
#define HP_SDC_ACT_AFTER 0xe0
|
||||
#define HP_SDC_ACT_DEAD 0x60 /* Act timed out. */
|
||||
|
||||
/* Rest of the flags are straightforward representation of the SDC interface */
|
||||
#define HP_SDC_STATUS_IBF 0x02 /* Input buffer full */
|
||||
|
||||
#define HP_SDC_STATUS_IRQMASK 0xf0 /* Bits containing "level 1" irq */
|
||||
#define HP_SDC_STATUS_PERIODIC 0x10 /* Periodic 10ms timer */
|
||||
#define HP_SDC_STATUS_USERTIMER 0x20 /* "Special purpose" timer */
|
||||
#define HP_SDC_STATUS_TIMER 0x30 /* Both PERIODIC and USERTIMER */
|
||||
#define HP_SDC_STATUS_REG 0x40 /* Data from an i8042 register */
|
||||
#define HP_SDC_STATUS_HILCMD 0x50 /* Command from HIL MLC */
|
||||
#define HP_SDC_STATUS_HILDATA 0x60 /* Data from HIL MLC */
|
||||
#define HP_SDC_STATUS_PUP 0x70 /* Sucessful power-up self test */
|
||||
#define HP_SDC_STATUS_KCOOKED 0x80 /* Key from cooked kbd */
|
||||
#define HP_SDC_STATUS_KRPG 0xc0 /* Key from Repeat Gen */
|
||||
#define HP_SDC_STATUS_KMOD_SUP 0x10 /* Shift key is up */
|
||||
#define HP_SDC_STATUS_KMOD_CUP 0x20 /* Control key is up */
|
||||
|
||||
#define HP_SDC_NMISTATUS_FHS 0x40 /* NMI is a fast handshake irq */
|
||||
|
||||
/* Internal i8042 registers (there are more, but they are not too useful). */
|
||||
|
||||
#define HP_SDC_USE 0x02 /* Resource usage (including OB bit) */
|
||||
#define HP_SDC_IM 0x04 /* Interrupt mask */
|
||||
#define HP_SDC_CFG 0x11 /* Configuration register */
|
||||
#define HP_SDC_KBLANGUAGE 0x12 /* Keyboard language */
|
||||
|
||||
#define HP_SDC_D0 0x70 /* General purpose data buffer 0 */
|
||||
#define HP_SDC_D1 0x71 /* General purpose data buffer 1 */
|
||||
#define HP_SDC_D2 0x72 /* General purpose data buffer 2 */
|
||||
#define HP_SDC_D3 0x73 /* General purpose data buffer 3 */
|
||||
#define HP_SDC_VT1 0x74 /* Timer for voice 1 */
|
||||
#define HP_SDC_VT2 0x75 /* Timer for voice 2 */
|
||||
#define HP_SDC_VT3 0x76 /* Timer for voice 3 */
|
||||
#define HP_SDC_VT4 0x77 /* Timer for voice 4 */
|
||||
#define HP_SDC_KBN 0x78 /* Which HIL devs are Nimitz */
|
||||
#define HP_SDC_KBC 0x79 /* Which HIL devs are cooked kbds */
|
||||
#define HP_SDC_LPS 0x7a /* i8042's view of HIL status */
|
||||
#define HP_SDC_LPC 0x7b /* i8042's view of HIL "control" */
|
||||
#define HP_SDC_RSV 0x7c /* Reserved "for testing" */
|
||||
#define HP_SDC_LPR 0x7d /* i8042 count of HIL reconfigs */
|
||||
#define HP_SDC_XTD 0x7e /* "Extended Configuration" register */
|
||||
#define HP_SDC_STR 0x7f /* i8042 self-test result */
|
||||
|
||||
/* Bitfields for above registers */
|
||||
#define HP_SDC_USE_LOOP 0x04 /* Command is currently on the loop. */
|
||||
|
||||
#define HP_SDC_IM_MASK 0x1f /* these bits not part of cmd/status */
|
||||
#define HP_SDC_IM_FH 0x10 /* Mask the fast handshake irq */
|
||||
#define HP_SDC_IM_PT 0x08 /* Mask the periodic timer irq */
|
||||
#define HP_SDC_IM_TIMERS 0x04 /* Mask the MT/DT/CT irq */
|
||||
#define HP_SDC_IM_RESET 0x02 /* Mask the reset key irq */
|
||||
#define HP_SDC_IM_HIL 0x01 /* Mask the HIL MLC irq */
|
||||
|
||||
#define HP_SDC_CFG_ROLLOVER 0x08 /* WTF is "N-key rollover"? */
|
||||
#define HP_SDC_CFG_KBD 0x10 /* There is a keyboard */
|
||||
#define HP_SDC_CFG_NEW 0x20 /* Supports/uses HIL MLC */
|
||||
#define HP_SDC_CFG_KBD_OLD 0x03 /* keyboard code for non-HIL */
|
||||
#define HP_SDC_CFG_KBD_NEW 0x07 /* keyboard code from HIL autoconfig */
|
||||
#define HP_SDC_CFG_REV 0x40 /* Code revision bit */
|
||||
#define HP_SDC_CFG_IDPROM 0x80 /* IDPROM present in kbd (not HIL) */
|
||||
|
||||
#define HP_SDC_LPS_NDEV 0x07 /* # devices autoconfigured on HIL */
|
||||
#define HP_SDC_LPS_ACSUCC 0x08 /* loop autoconfigured successfully */
|
||||
#define HP_SDC_LPS_ACFAIL 0x80 /* last loop autoconfigure failed */
|
||||
|
||||
#define HP_SDC_LPC_APE_IPF 0x01 /* HIL MLC APE/IPF (autopoll) set */
|
||||
#define HP_SDC_LPC_ARCONERR 0x02 /* i8042 autoreconfigs loop on err */
|
||||
#define HP_SDC_LPC_ARCQUIET 0x03 /* i8042 doesn't report autoreconfigs*/
|
||||
#define HP_SDC_LPC_COOK 0x10 /* i8042 cooks devices in _KBN */
|
||||
#define HP_SDC_LPC_RC 0x80 /* causes autoreconfig */
|
||||
|
||||
#define HP_SDC_XTD_REV 0x07 /* contains revision code */
|
||||
#define HP_SDC_XTD_REV_STRINGS(val, str) \
|
||||
switch (val) { \
|
||||
case 0x1: str = "1820-3712"; break; \
|
||||
case 0x2: str = "1820-4379"; break; \
|
||||
case 0x3: str = "1820-4784"; break; \
|
||||
default: str = "unknown"; \
|
||||
};
|
||||
#define HP_SDC_XTD_BEEPER 0x08 /* TI SN76494 beeper available */
|
||||
#define HP_SDC_XTD_BBRTC 0x20 /* OKI MSM-58321 BBRTC present */
|
||||
|
||||
#define HP_SDC_CMD_LOAD_RT 0x31 /* Load real time (from 8042) */
|
||||
#define HP_SDC_CMD_LOAD_FHS 0x36 /* Load the fast handshake timer */
|
||||
#define HP_SDC_CMD_LOAD_MT 0x38 /* Load the match timer */
|
||||
#define HP_SDC_CMD_LOAD_DT 0x3B /* Load the delay timer */
|
||||
#define HP_SDC_CMD_LOAD_CT 0x3E /* Load the cycle timer */
|
||||
|
||||
#define HP_SDC_CMD_SET_IM 0x40 /* 010xxxxx == set irq mask */
|
||||
|
||||
/* The documents provided do not explicitly state that all registers betweem
|
||||
* 0x01 and 0x1f inclusive can be read by sending their register index as a
|
||||
* command, but this is implied and appears to be the case.
|
||||
*/
|
||||
#define HP_SDC_CMD_READ_RAM 0x00 /* Load from i8042 RAM (autoinc) */
|
||||
#define HP_SDC_CMD_READ_USE 0x02 /* Undocumented! Load from usage reg */
|
||||
#define HP_SDC_CMD_READ_IM 0x04 /* Load current interrupt mask */
|
||||
#define HP_SDC_CMD_READ_KCC 0x11 /* Load primary kbd config code */
|
||||
#define HP_SDC_CMD_READ_KLC 0x12 /* Load primary kbd language code */
|
||||
#define HP_SDC_CMD_READ_T1 0x13 /* Load timer output buffer byte 1 */
|
||||
#define HP_SDC_CMD_READ_T2 0x14 /* Load timer output buffer byte 1 */
|
||||
#define HP_SDC_CMD_READ_T3 0x15 /* Load timer output buffer byte 1 */
|
||||
#define HP_SDC_CMD_READ_T4 0x16 /* Load timer output buffer byte 1 */
|
||||
#define HP_SDC_CMD_READ_T5 0x17 /* Load timer output buffer byte 1 */
|
||||
#define HP_SDC_CMD_READ_D0 0xf0 /* Load from i8042 RAM location 0x70 */
|
||||
#define HP_SDC_CMD_READ_D1 0xf1 /* Load from i8042 RAM location 0x71 */
|
||||
#define HP_SDC_CMD_READ_D2 0xf2 /* Load from i8042 RAM location 0x72 */
|
||||
#define HP_SDC_CMD_READ_D3 0xf3 /* Load from i8042 RAM location 0x73 */
|
||||
#define HP_SDC_CMD_READ_VT1 0xf4 /* Load from i8042 RAM location 0x74 */
|
||||
#define HP_SDC_CMD_READ_VT2 0xf5 /* Load from i8042 RAM location 0x75 */
|
||||
#define HP_SDC_CMD_READ_VT3 0xf6 /* Load from i8042 RAM location 0x76 */
|
||||
#define HP_SDC_CMD_READ_VT4 0xf7 /* Load from i8042 RAM location 0x77 */
|
||||
#define HP_SDC_CMD_READ_KBN 0xf8 /* Load from i8042 RAM location 0x78 */
|
||||
#define HP_SDC_CMD_READ_KBC 0xf9 /* Load from i8042 RAM location 0x79 */
|
||||
#define HP_SDC_CMD_READ_LPS 0xfa /* Load from i8042 RAM location 0x7a */
|
||||
#define HP_SDC_CMD_READ_LPC 0xfb /* Load from i8042 RAM location 0x7b */
|
||||
#define HP_SDC_CMD_READ_RSV 0xfc /* Load from i8042 RAM location 0x7c */
|
||||
#define HP_SDC_CMD_READ_LPR 0xfd /* Load from i8042 RAM location 0x7d */
|
||||
#define HP_SDC_CMD_READ_XTD 0xfe /* Load from i8042 RAM location 0x7e */
|
||||
#define HP_SDC_CMD_READ_STR 0xff /* Load from i8042 RAM location 0x7f */
|
||||
|
||||
#define HP_SDC_CMD_SET_ARD 0xA0 /* Set emulated autorepeat delay */
|
||||
#define HP_SDC_CMD_SET_ARR 0xA2 /* Set emulated autorepeat rate */
|
||||
#define HP_SDC_CMD_SET_BELL 0xA3 /* Set voice 3 params for "beep" cmd */
|
||||
#define HP_SDC_CMD_SET_RPGR 0xA6 /* Set "RPG" irq rate (doesn't work) */
|
||||
#define HP_SDC_CMD_SET_RTMS 0xAD /* Set the RTC time (milliseconds) */
|
||||
#define HP_SDC_CMD_SET_RTD 0xAF /* Set the RTC time (days) */
|
||||
#define HP_SDC_CMD_SET_FHS 0xB2 /* Set fast handshake timer */
|
||||
#define HP_SDC_CMD_SET_MT 0xB4 /* Set match timer */
|
||||
#define HP_SDC_CMD_SET_DT 0xB7 /* Set delay timer */
|
||||
#define HP_SDC_CMD_SET_CT 0xBA /* Set cycle timer */
|
||||
#define HP_SDC_CMD_SET_RAMP 0xC1 /* Reset READ_RAM autoinc counter */
|
||||
#define HP_SDC_CMD_SET_D0 0xe0 /* Load to i8042 RAM location 0x70 */
|
||||
#define HP_SDC_CMD_SET_D1 0xe1 /* Load to i8042 RAM location 0x71 */
|
||||
#define HP_SDC_CMD_SET_D2 0xe2 /* Load to i8042 RAM location 0x72 */
|
||||
#define HP_SDC_CMD_SET_D3 0xe3 /* Load to i8042 RAM location 0x73 */
|
||||
#define HP_SDC_CMD_SET_VT1 0xe4 /* Load to i8042 RAM location 0x74 */
|
||||
#define HP_SDC_CMD_SET_VT2 0xe5 /* Load to i8042 RAM location 0x75 */
|
||||
#define HP_SDC_CMD_SET_VT3 0xe6 /* Load to i8042 RAM location 0x76 */
|
||||
#define HP_SDC_CMD_SET_VT4 0xe7 /* Load to i8042 RAM location 0x77 */
|
||||
#define HP_SDC_CMD_SET_KBN 0xe8 /* Load to i8042 RAM location 0x78 */
|
||||
#define HP_SDC_CMD_SET_KBC 0xe9 /* Load to i8042 RAM location 0x79 */
|
||||
#define HP_SDC_CMD_SET_LPS 0xea /* Load to i8042 RAM location 0x7a */
|
||||
#define HP_SDC_CMD_SET_LPC 0xeb /* Load to i8042 RAM location 0x7b */
|
||||
#define HP_SDC_CMD_SET_RSV 0xec /* Load to i8042 RAM location 0x7c */
|
||||
#define HP_SDC_CMD_SET_LPR 0xed /* Load to i8042 RAM location 0x7d */
|
||||
#define HP_SDC_CMD_SET_XTD 0xee /* Load to i8042 RAM location 0x7e */
|
||||
#define HP_SDC_CMD_SET_STR 0xef /* Load to i8042 RAM location 0x7f */
|
||||
|
||||
#define HP_SDC_CMD_DO_RTCW 0xc2 /* i8042 RAM 0x70 --> RTC */
|
||||
#define HP_SDC_CMD_DO_RTCR 0xc3 /* RTC[0x70 0:3] --> irq/status/data */
|
||||
#define HP_SDC_CMD_DO_BEEP 0xc4 /* i8042 RAM 0x70-74 --> beeper,VT3 */
|
||||
#define HP_SDC_CMD_DO_HIL 0xc5 /* i8042 RAM 0x70-73 -->
|
||||
HIL MLC R0,R1 i8042 HIL watchdog */
|
||||
|
||||
/* Values used to (de)mangle input/output to/from the HIL MLC */
|
||||
#define HP_SDC_DATA 0x40 /* Data from an 8042 register */
|
||||
#define HP_SDC_HIL_CMD 0x50 /* Data from HIL MLC R1/8042 */
|
||||
#define HP_SDC_HIL_R1MASK 0x0f /* Contents of HIL MLC R1 0:3 */
|
||||
#define HP_SDC_HIL_AUTO 0x10 /* Set if POL results from i8042 */
|
||||
#define HP_SDC_HIL_ISERR 0x80 /* Has meaning as in next 4 values */
|
||||
#define HP_SDC_HIL_RC_DONE 0x80 /* i8042 auto-configured loop */
|
||||
#define HP_SDC_HIL_ERR 0x81 /* HIL MLC R2 had a bit set */
|
||||
#define HP_SDC_HIL_TO 0x82 /* i8042 HIL watchdog expired */
|
||||
#define HP_SDC_HIL_RC 0x84 /* i8042 is auto-configuring loop */
|
||||
#define HP_SDC_HIL_DAT 0x60 /* Data from HIL MLC R0 */
|
||||
|
||||
|
||||
typedef struct {
|
||||
rwlock_t ibf_lock;
|
||||
rwlock_t lock; /* user/tasklet lock */
|
||||
rwlock_t rtq_lock; /* isr/tasklet lock */
|
||||
rwlock_t hook_lock; /* isr/user lock for handler add/del */
|
||||
|
||||
unsigned int irq, nmi; /* Our IRQ lines */
|
||||
unsigned long base_io, status_io, data_io; /* Our IO ports */
|
||||
|
||||
uint8_t im; /* Interrupt mask */
|
||||
int set_im; /* Interrupt mask needs to be set. */
|
||||
|
||||
int ibf; /* Last known status of IBF flag */
|
||||
uint8_t wi; /* current i8042 write index */
|
||||
uint8_t r7[4]; /* current i8042[0x70 - 0x74] values */
|
||||
uint8_t r11, r7e; /* Values from version/revision regs */
|
||||
|
||||
hp_sdc_irqhook *timer, *reg, *hil, *pup, *cooked;
|
||||
|
||||
#define HP_SDC_QUEUE_LEN 16
|
||||
hp_sdc_transaction *tq[HP_SDC_QUEUE_LEN]; /* All pending read/writes */
|
||||
|
||||
int rcurr, rqty; /* Current read transact in process */
|
||||
struct timeval rtv; /* Time when current read started */
|
||||
int wcurr; /* Current write transact in process */
|
||||
|
||||
int dev_err; /* carries status from registration */
|
||||
#if defined(__hppa__)
|
||||
struct parisc_device *dev;
|
||||
#elif defined(__mc68000__)
|
||||
void *dev;
|
||||
#else
|
||||
#error No support for device registration on this arch yet.
|
||||
#endif
|
||||
|
||||
struct timer_list kicker; /* Keeps below task alive */
|
||||
struct tasklet_struct task;
|
||||
|
||||
} hp_i8042_sdc;
|
||||
|
||||
#endif /* _LINUX_HP_SDC_H */
|
|
@ -644,6 +644,7 @@ struct input_absinfo {
|
|||
#define BUS_ADB 0x17
|
||||
#define BUS_I2C 0x18
|
||||
#define BUS_HOST 0x19
|
||||
#define BUS_GSC 0x1A
|
||||
|
||||
/*
|
||||
* Values describing the status of an effect
|
||||
|
|
|
@ -197,7 +197,7 @@ snd_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
|
|||
spin_unlock(&h->lock);
|
||||
|
||||
if (dstatus & HARMONY_DSTATUS_PN) {
|
||||
if (h->psubs) {
|
||||
if (h->psubs && h->st.playing) {
|
||||
spin_lock(&h->lock);
|
||||
h->pbuf.buf += h->pbuf.count; /* PAGE_SIZE */
|
||||
h->pbuf.buf %= h->pbuf.size; /* MAX_BUFS*PAGE_SIZE */
|
||||
|
@ -216,7 +216,7 @@ snd_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
|
|||
}
|
||||
|
||||
if (dstatus & HARMONY_DSTATUS_RN) {
|
||||
if (h->csubs) {
|
||||
if (h->csubs && h->st.capturing) {
|
||||
spin_lock(&h->lock);
|
||||
h->cbuf.buf += h->cbuf.count;
|
||||
h->cbuf.buf %= h->cbuf.size;
|
||||
|
@ -316,6 +316,7 @@ snd_harmony_playback_trigger(snd_pcm_substream_t *ss, int cmd)
|
|||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
h->st.playing = 0;
|
||||
harmony_mute(h);
|
||||
harmony_write(h, HARMONY_PNXTADD, h->sdma.addr);
|
||||
harmony_disable_interrupts(h);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
|
@ -351,8 +352,9 @@ snd_harmony_capture_trigger(snd_pcm_substream_t *ss, int cmd)
|
|||
break;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
h->st.capturing = 0;
|
||||
harmony_mute(h);
|
||||
harmony_disable_interrupts(h);
|
||||
harmony_mute(h);
|
||||
harmony_write(h, HARMONY_RNXTADD, h->gdma.addr);
|
||||
harmony_disable_interrupts(h);
|
||||
break;
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
|
@ -408,7 +410,8 @@ snd_harmony_playback_prepare(snd_pcm_substream_t *ss)
|
|||
|
||||
h->pbuf.size = snd_pcm_lib_buffer_bytes(ss);
|
||||
h->pbuf.count = snd_pcm_lib_period_bytes(ss);
|
||||
h->pbuf.buf = 0;
|
||||
if (h->pbuf.buf >= h->pbuf.size)
|
||||
h->pbuf.buf = 0;
|
||||
h->st.playing = 0;
|
||||
|
||||
h->st.rate = snd_harmony_rate_bits(rt->rate);
|
||||
|
@ -437,7 +440,8 @@ snd_harmony_capture_prepare(snd_pcm_substream_t *ss)
|
|||
|
||||
h->cbuf.size = snd_pcm_lib_buffer_bytes(ss);
|
||||
h->cbuf.count = snd_pcm_lib_period_bytes(ss);
|
||||
h->cbuf.buf = 0;
|
||||
if (h->cbuf.buf >= h->cbuf.size)
|
||||
h->cbuf.buf = 0;
|
||||
h->st.capturing = 0;
|
||||
|
||||
h->st.rate = snd_harmony_rate_bits(rt->rate);
|
||||
|
@ -712,13 +716,14 @@ snd_harmony_volume_get(snd_kcontrol_t *kc,
|
|||
|
||||
left = (h->st.gain >> shift_left) & mask;
|
||||
right = (h->st.gain >> shift_right) & mask;
|
||||
|
||||
if (invert) {
|
||||
left = mask - left;
|
||||
right = mask - right;
|
||||
}
|
||||
|
||||
ucontrol->value.integer.value[0] = left;
|
||||
ucontrol->value.integer.value[1] = right;
|
||||
if (shift_left != shift_right)
|
||||
ucontrol->value.integer.value[1] = right;
|
||||
|
||||
spin_unlock_irqrestore(&h->mixer_lock, flags);
|
||||
|
||||
|
@ -738,22 +743,82 @@ snd_harmony_volume_put(snd_kcontrol_t *kc,
|
|||
int old_gain = h->st.gain;
|
||||
unsigned long flags;
|
||||
|
||||
left = ucontrol->value.integer.value[0] & mask;
|
||||
right = ucontrol->value.integer.value[1] & mask;
|
||||
if (invert) {
|
||||
left = mask - left;
|
||||
right = mask - right;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&h->mixer_lock, flags);
|
||||
|
||||
h->st.gain &= ~( (mask << shift_right) | (mask << shift_left) );
|
||||
h->st.gain |= ( (left << shift_left) | (right << shift_right) );
|
||||
left = ucontrol->value.integer.value[0] & mask;
|
||||
if (invert)
|
||||
left = mask - left;
|
||||
h->st.gain &= ~( (mask << shift_left ) );
|
||||
h->st.gain |= (left << shift_left);
|
||||
|
||||
if (shift_left != shift_right) {
|
||||
right = ucontrol->value.integer.value[1] & mask;
|
||||
if (invert)
|
||||
right = mask - right;
|
||||
h->st.gain &= ~( (mask << shift_right) );
|
||||
h->st.gain |= (right << shift_right);
|
||||
}
|
||||
|
||||
snd_harmony_set_new_gain(h);
|
||||
|
||||
spin_unlock_irqrestore(&h->mixer_lock, flags);
|
||||
|
||||
return (old_gain - h->st.gain);
|
||||
return h->st.gain != old_gain;
|
||||
}
|
||||
|
||||
static int
|
||||
snd_harmony_captureroute_info(snd_kcontrol_t *kc,
|
||||
snd_ctl_elem_info_t *uinfo)
|
||||
{
|
||||
static char *texts[2] = { "Line", "Mic" };
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
|
||||
uinfo->count = 1;
|
||||
uinfo->value.enumerated.items = 2;
|
||||
if (uinfo->value.enumerated.item > 1)
|
||||
uinfo->value.enumerated.item = 1;
|
||||
strcpy(uinfo->value.enumerated.name,
|
||||
texts[uinfo->value.enumerated.item]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
snd_harmony_captureroute_get(snd_kcontrol_t *kc,
|
||||
snd_ctl_elem_value_t *ucontrol)
|
||||
{
|
||||
harmony_t *h = snd_kcontrol_chip(kc);
|
||||
int value;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&h->mixer_lock, flags);
|
||||
|
||||
value = (h->st.gain >> HARMONY_GAIN_IS_SHIFT) & 1;
|
||||
ucontrol->value.enumerated.item[0] = value;
|
||||
|
||||
spin_unlock_irqrestore(&h->mixer_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
snd_harmony_captureroute_put(snd_kcontrol_t *kc,
|
||||
snd_ctl_elem_value_t *ucontrol)
|
||||
{
|
||||
harmony_t *h = snd_kcontrol_chip(kc);
|
||||
int value;
|
||||
int old_gain = h->st.gain;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&h->mixer_lock, flags);
|
||||
|
||||
value = ucontrol->value.enumerated.item[0] & 1;
|
||||
h->st.gain &= ~HARMONY_GAIN_IS_MASK;
|
||||
h->st.gain |= value << HARMONY_GAIN_IS_SHIFT;
|
||||
|
||||
snd_harmony_set_new_gain(h);
|
||||
|
||||
spin_unlock_irqrestore(&h->mixer_lock, flags);
|
||||
|
||||
return h->st.gain != old_gain;
|
||||
}
|
||||
|
||||
#define HARMONY_CONTROLS (sizeof(snd_harmony_controls)/ \
|
||||
|
@ -767,10 +832,25 @@ snd_harmony_volume_put(snd_kcontrol_t *kc,
|
|||
((mask) << 16) | ((invert) << 24)) }
|
||||
|
||||
static snd_kcontrol_new_t snd_harmony_controls[] = {
|
||||
HARMONY_VOLUME("Playback Volume", HARMONY_GAIN_LO_SHIFT,
|
||||
HARMONY_VOLUME("Master Playback Volume", HARMONY_GAIN_LO_SHIFT,
|
||||
HARMONY_GAIN_RO_SHIFT, HARMONY_GAIN_OUT, 1),
|
||||
HARMONY_VOLUME("Capture Volume", HARMONY_GAIN_LI_SHIFT,
|
||||
HARMONY_GAIN_RI_SHIFT, HARMONY_GAIN_IN, 0),
|
||||
HARMONY_VOLUME("Monitor Volume", HARMONY_GAIN_MA_SHIFT,
|
||||
HARMONY_GAIN_MA_SHIFT, HARMONY_GAIN_MA, 1),
|
||||
{
|
||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
.name = "Input Route",
|
||||
.info = snd_harmony_captureroute_info,
|
||||
.get = snd_harmony_captureroute_get,
|
||||
.put = snd_harmony_captureroute_put
|
||||
},
|
||||
HARMONY_VOLUME("Internal Speaker Switch", HARMONY_GAIN_SE_SHIFT,
|
||||
HARMONY_GAIN_SE_SHIFT, 1, 0),
|
||||
HARMONY_VOLUME("Line-Out Switch", HARMONY_GAIN_LE_SHIFT,
|
||||
HARMONY_GAIN_LE_SHIFT, 1, 0),
|
||||
HARMONY_VOLUME("Headphones Switch", HARMONY_GAIN_HE_SHIFT,
|
||||
HARMONY_GAIN_HE_SHIFT, 1, 0),
|
||||
};
|
||||
|
||||
static void __init
|
||||
|
@ -852,14 +932,14 @@ snd_harmony_create(snd_card_t *card,
|
|||
memset(&h->pbuf, 0, sizeof(h->pbuf));
|
||||
memset(&h->cbuf, 0, sizeof(h->cbuf));
|
||||
|
||||
h->hpa = padev->hpa;
|
||||
h->hpa = padev->hpa.start;
|
||||
h->card = card;
|
||||
h->dev = padev;
|
||||
h->irq = padev->irq;
|
||||
h->iobase = ioremap_nocache(padev->hpa, HARMONY_SIZE);
|
||||
h->iobase = ioremap_nocache(padev->hpa.start, HARMONY_SIZE);
|
||||
if (h->iobase == NULL) {
|
||||
printk(KERN_ERR PFX "unable to remap hpa 0x%lx\n",
|
||||
padev->hpa);
|
||||
padev->hpa.start);
|
||||
err = -EBUSY;
|
||||
goto free_and_ret;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ typedef struct snd_card_harmony {
|
|||
#define HARMONY_SIZE 64
|
||||
|
||||
#define BUF_SIZE PAGE_SIZE
|
||||
#define MAX_BUFS 10
|
||||
#define MAX_BUFS 16
|
||||
#define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE)
|
||||
|
||||
#define PLAYBACK_BUFS MAX_BUFS
|
||||
|
@ -101,28 +101,31 @@ typedef struct snd_card_harmony {
|
|||
#define HARMONY_SS_MONO 0x00000000
|
||||
#define HARMONY_SS_STEREO 0x00000001
|
||||
|
||||
#define HARMONY_GAIN_SILENCE 0x00F00FFF
|
||||
#define HARMONY_GAIN_DEFAULT 0x0FF00000
|
||||
#define HARMONY_GAIN_SILENCE 0x01F00FFF
|
||||
#define HARMONY_GAIN_DEFAULT 0x01F00FFF
|
||||
|
||||
#define HARMONY_GAIN_HE_SHIFT 27
|
||||
#define HARMONY_GAIN_HE_SHIFT 27 /* headphones enabled */
|
||||
#define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT)
|
||||
#define HARMONY_GAIN_LE_SHIFT 26
|
||||
#define HARMONY_GAIN_LE_SHIFT 26 /* line-out enabled */
|
||||
#define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT)
|
||||
#define HARMONY_GAIN_SE_SHIFT 25
|
||||
#define HARMONY_GAIN_SE_SHIFT 25 /* internal-speaker enabled */
|
||||
#define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT)
|
||||
#define HARMONY_GAIN_IS_SHIFT 24
|
||||
#define HARMONY_GAIN_IS_SHIFT 24 /* input select - 0 for line, 1 for mic */
|
||||
#define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT)
|
||||
|
||||
/* monitor attenuation */
|
||||
#define HARMONY_GAIN_MA 0x0f
|
||||
#define HARMONY_GAIN_MA_SHIFT 20
|
||||
#define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT)
|
||||
|
||||
/* input gain */
|
||||
#define HARMONY_GAIN_IN 0x0f
|
||||
#define HARMONY_GAIN_LI_SHIFT 16
|
||||
#define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT)
|
||||
#define HARMONY_GAIN_RI_SHIFT 12
|
||||
#define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT)
|
||||
|
||||
/* output gain (master volume) */
|
||||
#define HARMONY_GAIN_OUT 0x3f
|
||||
#define HARMONY_GAIN_LO_SHIFT 6
|
||||
#define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT)
|
||||
|
|
Loading…
Reference in New Issue