Commit 54779e07 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Linus Torvalds

[PATCH] parisc updates for 2.5.56

Updates for 2.5.56:
 - Integrate Stephen Rothwell's compat code
 - OProfile support for Randolph Chung
 - Makefile updates from Sam Ravnborg
 - Regenerated defconfig as requested by Rusty
 - Generic device model updates (James Bottomley)
 - And lots of general updating bugfixing, etc.
parent 6977f04f
...@@ -107,6 +107,11 @@ config PARISC64 ...@@ -107,6 +107,11 @@ config PARISC64
enable this option otherwise. The 64bit kernel is significantly bigger enable this option otherwise. The 64bit kernel is significantly bigger
and slower than the 32bit one. and slower than the 32bit one.
config COMPAT
bool
depends on PARISC64
default y
config PDC_NARROW config PDC_NARROW
bool "32-bit firmware" bool "32-bit firmware"
depends on PARISC64 depends on PARISC64
...@@ -337,6 +342,8 @@ source "drivers/usb/Kconfig" ...@@ -337,6 +342,8 @@ source "drivers/usb/Kconfig"
source "net/bluetooth/Kconfig" source "net/bluetooth/Kconfig"
source "arch/parisc/oprofile/Kconfig"
menu "Kernel hacking" menu "Kernel hacking"
config DEBUG_KERNEL config DEBUG_KERNEL
......
...@@ -18,69 +18,51 @@ ...@@ -18,69 +18,51 @@
# #
ifdef CONFIG_PARISC64 ifdef CONFIG_PARISC64
CROSS_COMPILE := hppa64-linux- CROSS_COMPILE := hppa64-linux-
UTS_MACHINE := parisc64 UTS_MACHINE := parisc64
LDFLAGS_BLOB := --format binary --oformat elf64-hppa-linux LDFLAGS_BLOB := --format binary --oformat elf64-hppa-linux
else else
MACHINE := $(subst 64,,$(shell uname -m)) MACHINE := $(subst 64,,$(shell uname -m))
ifneq (${MACHINE},parisc) ifneq ($(MACHINE),parisc)
# cross compilation CROSS_COMPILE := hppa-linux-
CROSS_COMPILE := hppa-linux-
endif endif
LDFLAGS_BLOB := --format binary --oformat elf32-hppa-linux LDFLAGS_BLOB := --format binary --oformat elf32-hppa-linux
endif endif
FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
CFLAGS_PIPE := -pipe cflags-y := -D__linux__ -pipe -fno-strength-reduce
CFLAGS_NSR := -fno-strength-reduce
CFLAGS := $(CFLAGS) -D__linux__ $(CFLAGS_PIPE) $(CFLAGS_NSR)
# These should be on for older toolchains or SOM toolchains that don't # These should be on for older toolchains or SOM toolchains that don't
# enable them by default. # enable them by default.
CFLAGS += -mno-space-regs -mfast-indirect-calls cflags-y += -mno-space-regs -mfast-indirect-calls
# No fixed-point multiply # No fixed-point multiply
CFLAGS += -mdisable-fpregs cflags-y += -mdisable-fpregs
# Without this, "ld -r" results in .text sections that are too big # Without this, "ld -r" results in .text sections that are too big
# (> 0x40000) for branches to reach stubs. # (> 0x40000) for branches to reach stubs.
CFLAGS += -ffunction-sections cflags-y += -ffunction-sections
# select which processor to optimise for # select which processor to optimise for
ifdef CONFIG_PA7100 cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
CFLAGS += -march=1.1 -mschedule=7100 cflags-$(CONFIG_PA7200) += -march=1.1 -mschedule=7200
endif cflags-$(CONFIG_PA7100LC) += -march=1.1 -mschedule=7100LC
cflags-$(CONFIG_PA8X00) += -march=2.0 -mschedule=8000
ifdef CONFIG_PA7200
CFLAGS += -march=1.1 -mschedule=7200
endif
ifdef CONFIG_PA7100LC head-y := arch/parisc/kernel/head.o
CFLAGS += -march=1.1 -mschedule=7100LC head-$(CONFIG_PARISC64) := arch/parisc/kernel/head64.o
endif
ifdef CONFIG_PA8X00 CFLAGS += $(cflags-y)
CFLAGS += -march=2.0 -mschedule=8000 HEAD := $(head-y)
endif
HEAD := arch/parisc/kernel/head.o core-y += $(addprefix arch/parisc/, kernel/pdc_cons.o kernel/process.o \
ifdef CONFIG_PARISC64 mm/ kernel/ hpux/ math-emu/ kernel/init_task.o )
HEAD := arch/parisc/kernel/head64.o libs-y += arch/parisc/lib/ `$(CC) -print-libgcc-file-name`
endif
core-y += arch/parisc/kernel/pdc_cons.o \ drivers-$(CONFIG_OPROFILE) += arch/parisc/oprofile/
arch/parisc/kernel/process.o \
arch/parisc/mm/ \
arch/parisc/kernel/ \
arch/parisc/hpux/ \
arch/parisc/math-emu/ \
arch/parisc/kernel/init_task.o
libs-y += arch/parisc/lib/ \
`$(CC) -print-libgcc-file-name`
palo: vmlinux palo: vmlinux
@if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \ @if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \
...@@ -101,33 +83,26 @@ oldpalo: vmlinux ...@@ -101,33 +83,26 @@ oldpalo: vmlinux
export TOPDIR=`pwd`; \ export TOPDIR=`pwd`; \
unset STRIP LDFLAGS CPP CPPFLAGS AFLAGS CFLAGS CC LD; cd ../palo && make lifimage unset STRIP LDFLAGS CPP CPPFLAGS AFLAGS CFLAGS CC LD; cd ../palo && make lifimage
Image: palo # Shorthands for known targets not supported by parisc, use palo as default
Image zImage bzImage: palo
Image-clean:
ramdisk.o:
zImage: palo
bzImage: palo
compressed: zImage prepare: include/asm-parisc/offsets.h
install: arch/parisc/kernel/asm-offsets.s: include/asm include/linux/version.h \
archmrproper:
archclean:
prepare: include/asm-$(ARCH)/offsets.h
arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \
include/config/MARKER include/config/MARKER
include/asm-$(ARCH)/offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s include/asm-parisc/offsets.h: arch/parisc/kernel/asm-offsets.s
@$(generate-asm-offsets.h) < $< > $@
include/asm-$(ARCH)/offsets.h: include/asm-$(ARCH)/offsets.h.tmp
@echo -n ' Generating $@' @echo -n ' Generating $@'
@$(generate-asm-offsets.h) < $< > $@.tmp
@$(update-if-changed) @$(update-if-changed)
archclean:
archmrproper:
CLEAN_FILES += palo.conf lifimage include/asm-parisc/offsets.h \
include/asm-parisc/offsets.h.tmp
define archhelp
@echo '* vmlinux - Uncompressed kernel image (./vmlinux)'
@echo ' palo - Bootable image (./lifimage)'
endef
...@@ -2,11 +2,10 @@ ...@@ -2,11 +2,10 @@
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# #
CONFIG_PARISC=y CONFIG_PARISC=y
# CONFIG_UID16 is not set CONFIG_MMU=y
CONFIG_SWAP=y
CONFIG_STACK_GROWSUP=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
CONFIG_GENERIC_ISA_DMA=y
# CONFIG_PM is not set
# #
# Code maturity level options # Code maturity level options
...@@ -16,46 +15,44 @@ CONFIG_EXPERIMENTAL=y ...@@ -16,46 +15,44 @@ CONFIG_EXPERIMENTAL=y
# #
# General setup # General setup
# #
CONFIG_NET=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
# CONFIG_LOG_BUF_SHIFT_17 is not set
# CONFIG_LOG_BUF_SHIFT_16 is not set
CONFIG_LOG_BUF_SHIFT_15=y
# CONFIG_LOG_BUF_SHIFT_14 is not set
# CONFIG_LOG_BUF_SHIFT_13 is not set
# CONFIG_LOG_BUF_SHIFT_12 is not set
CONFIG_LOG_BUF_SHIFT=15
# #
# Loadable module support # Loadable module support
# #
CONFIG_MODULES=y # CONFIG_MODULES is not set
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y
# #
# Processor type and features # Processor type and features
# #
CONFIG_PA7100=y
# CONFIG_PA7200 is not set
# CONFIG_PA7100LC is not set
# CONFIG_PA8X00 is not set
CONFIG_PA11=y
# CONFIG_SMP is not set
# CONFIG_PREEMPT is not set
CONFIG_CHASSIS_LCD_LED=y
# #
# Bus options (PCI, PCMCIA, EISA, MCA, ISA) # Bus options (PCI, PCMCIA, EISA, GSC, ISA)
# #
CONFIG_IOMMU_CCIO=y
CONFIG_GSC=y CONFIG_GSC=y
CONFIG_HPPB=y
CONFIG_IOMMU_CCIO=y
CONFIG_GSC_LASI=y CONFIG_GSC_LASI=y
CONFIG_GSC_WAX=y CONFIG_GSC_WAX=y
CONFIG_EISA=y CONFIG_EISA=y
CONFIG_ISA=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
CONFIG_GSC_DINO=y CONFIG_GSC_DINO=y
CONFIG_PCI_LBA=y CONFIG_PCI_LBA=y
CONFIG_IOSAPIC=y CONFIG_IOSAPIC=y
CONFIG_IOMMU_SBA=y CONFIG_IOMMU_SBA=y
CONFIG_SUPERIO=y CONFIG_SUPERIO=y
CONFIG_PCI_NAMES=y # CONFIG_CHASSIS_LCD_LED is not set
# #
# Executable file formats # Executable file formats
...@@ -74,11 +71,7 @@ CONFIG_PARPORT_PC_CML1=y ...@@ -74,11 +71,7 @@ CONFIG_PARPORT_PC_CML1=y
# CONFIG_PARPORT_SERIAL is not set # CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_PC_FIFO is not set # CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set # CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_AMIGA is not set
# CONFIG_PARPORT_MFC3 is not set
# CONFIG_PARPORT_ATARI is not set
CONFIG_PARPORT_GSC=y CONFIG_PARPORT_GSC=y
# CONFIG_PARPORT_SUNBPP is not set
# CONFIG_PARPORT_OTHER is not set # CONFIG_PARPORT_OTHER is not set
# CONFIG_PARPORT_1284 is not set # CONFIG_PARPORT_1284 is not set
...@@ -86,11 +79,9 @@ CONFIG_PARPORT_GSC=y ...@@ -86,11 +79,9 @@ CONFIG_PARPORT_GSC=y
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set # CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_CISS_SCSI_TAPE is not set
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_UMEM is not set
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
...@@ -99,24 +90,10 @@ CONFIG_BLK_DEV_RAM=y ...@@ -99,24 +90,10 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID5=y
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_LVM is not set
# #
# ATA/IDE/MFM/RLL support # ATA/IDE/MFM/RLL support
# #
# CONFIG_IDE is not set # CONFIG_IDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
# #
# SCSI support # SCSI support
...@@ -127,12 +104,10 @@ CONFIG_SCSI=y ...@@ -127,12 +104,10 @@ CONFIG_SCSI=y
# SCSI support type (disk, tape, CD-ROM) # SCSI support type (disk, tape, CD-ROM)
# #
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y CONFIG_CHR_DEV_ST=y
# CONFIG_CHR_DEV_OSST is not set # CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=y CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set # CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_SR_EXTRA_DEVS=2
CONFIG_CHR_DEV_SG=y CONFIG_CHR_DEV_SG=y
# #
...@@ -147,13 +122,12 @@ CONFIG_CHR_DEV_SG=y ...@@ -147,13 +122,12 @@ CONFIG_CHR_DEV_SG=y
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_ACARD 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_AHA1740 is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set # CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_IN2000 is not set
...@@ -162,52 +136,58 @@ CONFIG_CHR_DEV_SG=y ...@@ -162,52 +136,58 @@ CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_CPQFCTS is not set # CONFIG_SCSI_CPQFCTS is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set # CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set # CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set # CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
# CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set # CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set # CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_NCR53C406A is not set
CONFIG_SCSI_LASI700=y CONFIG_SCSI_LASI700=y
CONFIG_53C700_MEM_MAPPED=y CONFIG_53C700_MEM_MAPPED=y
CONFIG_53C700_LE_ON_BE=y CONFIG_53C700_LE_ON_BE=y
CONFIG_53C700_USE_CONSISTENT=y
# CONFIG_SCSI_NCR53C7xx is not set # CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_ASK_ZALON is not set
# CONFIG_ASK_NCR53C8XX is not set
# CONFIG_ASK_SYM53C8XX is not set
CONFIG_SCSI_ZALON=y CONFIG_SCSI_ZALON=y
CONFIG_ASK_ZALON=y # CONFIG_SCSI_NCR53C8XX is not set
CONFIG_SCSI_SYM53C8XX=y CONFIG_SCSI_SYM53C8XX=y
CONFIG_ASK_SYM53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20 CONFIG_SCSI_NCR53C8XX_SYNC=20
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set # CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set # CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set
# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set # CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_PCI2220I 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_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set # CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set # CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID5=y
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_DM is not set
#
# Networking support
#
CONFIG_NET=y
# #
# Networking options # Networking options
# #
...@@ -217,6 +197,7 @@ CONFIG_NETLINK_DEV=y ...@@ -217,6 +197,7 @@ CONFIG_NETLINK_DEV=y
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
CONFIG_FILTER=y CONFIG_FILTER=y
CONFIG_UNIX=y CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_MULTICAST=y CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set # CONFIG_IP_ADVANCED_ROUTER is not set
...@@ -230,13 +211,18 @@ CONFIG_IP_PNP_BOOTP=y ...@@ -230,13 +211,18 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_ARPD is not set # CONFIG_ARPD is not set
# CONFIG_INET_ECN is not set # CONFIG_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set # CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_XFRM_USER is not set
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
CONFIG_IPV6_SCTP__=y
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set # CONFIG_VLAN_8021Q is not set
# CONFIG_LLC is not set # CONFIG_LLC is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DEV_APPLETALK is not set
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
# CONFIG_X25 is not set # CONFIG_X25 is not set
...@@ -253,8 +239,9 @@ CONFIG_IP_PNP_BOOTP=y ...@@ -253,8 +239,9 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_NET_SCHED is not set # CONFIG_NET_SCHED is not set
# #
# Network device support # Network testing
# #
# CONFIG_NET_PKTGEN is not set
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
# #
...@@ -272,25 +259,30 @@ CONFIG_NETDEVICES=y ...@@ -272,25 +259,30 @@ CONFIG_NETDEVICES=y
# #
CONFIG_NET_ETHERNET=y CONFIG_NET_ETHERNET=y
CONFIG_LASI_82596=y CONFIG_LASI_82596=y
# CONFIG_SUNLANCE is not set
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM 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_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_AT1700 is not set #
# Tulip family network device support
#
CONFIG_NET_TULIP=y
# CONFIG_DE2104X is not set
CONFIG_TULIP=y
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_DEPCA is not set # CONFIG_DEPCA is not set
# CONFIG_HP100 is not set # CONFIG_HP100 is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_PCI=y CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set # CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set # CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set # CONFIG_B44 is not set
# CONFIG_CS89x0 is not set
# CONFIG_DGRS is not set # CONFIG_DGRS is not set
# CONFIG_EEPRO100 is not set # CONFIG_EEPRO100 is not set
# CONFIG_E100 is not set # CONFIG_E100 is not set
...@@ -302,28 +294,22 @@ CONFIG_NET_PCI=y ...@@ -302,28 +294,22 @@ CONFIG_NET_PCI=y
# CONFIG_ES3210 is not set # CONFIG_ES3210 is not set
# CONFIG_8139CP is not set # CONFIG_8139CP is not set
# CONFIG_8139TOO is not set # CONFIG_8139TOO is not set
# CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set
# CONFIG_8139_NEW_RX_RESET is not set
# CONFIG_SIS900 is not set # CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set # CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set # CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set # CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set # CONFIG_VIA_RHINE is not set
# CONFIG_VIA_RHINE_MMIO is not set
# CONFIG_NET_POCKET is not set
# #
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set CONFIG_DL2K=y
# CONFIG_E1000 is not set # CONFIG_E1000 is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set # CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set # CONFIG_TIGON3 is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
...@@ -335,12 +321,20 @@ CONFIG_NET_PCI=y ...@@ -335,12 +321,20 @@ CONFIG_NET_PCI=y
# #
# Wireless LAN (non-hamradio) # Wireless LAN (non-hamradio)
# #
# CONFIG_NET_RADIO is not set CONFIG_NET_RADIO=y
# CONFIG_STRIP is not set
# CONFIG_AIRONET4500 is not set
#
# Wireless ISA/PCI cards support
#
CONFIG_AIRO=y
# CONFIG_HERMES is not set
CONFIG_NET_WIRELESS=y
# #
# Token Ring devices # Token Ring devices (depends on LLC=y)
# #
# CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set # CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
...@@ -350,18 +344,6 @@ CONFIG_NET_PCI=y ...@@ -350,18 +344,6 @@ CONFIG_NET_PCI=y
# #
# CONFIG_WAN is not set # CONFIG_WAN is not set
#
# Tulip family network device support
#
CONFIG_NET_TULIP=y
# CONFIG_DE2104X is not set
CONFIG_TULIP=y
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# #
# IrDA (infrared) support # IrDA (infrared) support
# #
...@@ -375,10 +357,7 @@ CONFIG_INPUT=y ...@@ -375,10 +357,7 @@ CONFIG_INPUT=y
# #
# Userland interfaces # Userland interfaces
# #
CONFIG_INPUT_MOUSEDEV=y # CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set # CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVDEV=y
...@@ -389,57 +368,28 @@ CONFIG_INPUT_EVDEV=y ...@@ -389,57 +368,28 @@ CONFIG_INPUT_EVDEV=y
# #
# CONFIG_GAMEPORT is not set # CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y CONFIG_SOUND_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_EMU10K1 is not set
# CONFIG_GAMEPORT_VORTEX is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461x is not set
CONFIG_SERIO=y CONFIG_SERIO=y
CONFIG_SERIO_I8042=y # CONFIG_SERIO_I8042 is not set
CONFIG_I8042_REG_BASE=60
CONFIG_I8042_KBD_IRQ=1
CONFIG_I8042_AUX_IRQ=12
# CONFIG_SERIO_SERPORT is not set # CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set # CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set # CONFIG_SERIO_PARKBD is not set
#
# HP HIL driver core support
#
CONFIG_HP_SDC=y CONFIG_HP_SDC=y
# CONFIG_HP_SDC_RTC is not set
CONFIG_HIL_MLC=y CONFIG_HIL_MLC=y
CONFIG_HP_SDC_MLC=y
# #
# Input Device Drivers # Input Device Drivers
# #
# CONFIG_INPUT_KEYBOARD is not set CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ATKBD is not set # CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_HIL_KBD is not set # CONFIG_KEYBOARD_HIL is not set
# CONFIG_INPUT_MOUSE is not set CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set # CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_INPORT is not set # CONFIG_MOUSE_HIL is not set
# CONFIG_MOUSE_LOGIBM is not set CONFIG_INPUT_JOYSTICK=y
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_HIL_PTR is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE is not set # CONFIG_JOYSTICK_IFORCE is not set
# CONFIG_JOYSTICK_WARRIOR is not set # CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set # CONFIG_JOYSTICK_MAGELLAN is not set
...@@ -451,11 +401,13 @@ CONFIG_HP_SDC_MLC=y ...@@ -451,11 +401,13 @@ CONFIG_HP_SDC_MLC=y
# CONFIG_JOYSTICK_GAMECON is not set # CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set # CONFIG_JOYSTICK_TURBOGRAFX is not set
# CONFIG_INPUT_JOYDUMP is not set # CONFIG_INPUT_JOYDUMP is not set
# CONFIG_INPUT_TOUCHSCREEN is not set CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_GUNZE is not set # CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_INPUT_MISC is not set CONFIG_INPUT_MISC=y
# CONFIG_INPUT_PCSPKR is not set # CONFIG_INPUT_PCSPKR is not set
# CONFIG_INPUT_UINPUT is not set # CONFIG_INPUT_UINPUT is not set
CONFIG_INPUT_GSC=y
# CONFIG_HP_SDC_RTC is not set
# #
# Character devices # Character devices
...@@ -468,12 +420,11 @@ CONFIG_HW_CONSOLE=y ...@@ -468,12 +420,11 @@ CONFIG_HW_CONSOLE=y
# #
# Serial drivers # Serial drivers
# #
# CONFIG_SERIAL_8250 is not set CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set CONFIG_SERIAL_8250_CONSOLE=y
# CONFIG_SERIAL_8250_CS is not set CONFIG_SERIAL_8250_EXTENDED=y
# CONFIG_SERIAL_8250_EXTENDED is not set CONFIG_SERIAL_8250_MANY_PORTS=y
# CONFIG_SERIAL_8250_MANY_PORTS is not set CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
# CONFIG_SERIAL_8250_DETECT_IRQ is not set # CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set # CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set # CONFIG_SERIAL_8250_RSA is not set
...@@ -481,18 +432,30 @@ CONFIG_HW_CONSOLE=y ...@@ -481,18 +432,30 @@ CONFIG_HW_CONSOLE=y
# #
# Non-8250 serial port support # Non-8250 serial port support
# #
# CONFIG_PDC_CONSOLE is not set CONFIG_SERIAL_MUX=y
CONFIG_SERIAL_MUX_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256 CONFIG_UNIX98_PTY_COUNT=256
CONFIG_PRINTER=y CONFIG_PRINTER=y
# CONFIG_LP_CONSOLE is not set # CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set # CONFIG_PPDEV is not set
# CONFIG_TIPAR is not set
# #
# I2C support # I2C support
# #
# CONFIG_I2C is not set # CONFIG_I2C is not set
#
# I2C Hardware Sensors Mainboard support
#
#
# I2C Hardware Sensors Chip support
#
# #
# Mice # Mice
# #
...@@ -506,7 +469,7 @@ CONFIG_PRINTER=y ...@@ -506,7 +469,7 @@ CONFIG_PRINTER=y
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
# CONFIG_RTC is not set # CONFIG_RTC is not set
CONFIG_GEN_RTC=y CONFIG_GEN_RTC=y
CONFIG_GEN_RTC_X=y # CONFIG_GEN_RTC_X is not set
# CONFIG_DTLK is not set # CONFIG_DTLK is not set
# CONFIG_R3964 is not set # CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set # CONFIG_APPLICOM is not set
...@@ -528,28 +491,20 @@ CONFIG_GEN_RTC_X=y ...@@ -528,28 +491,20 @@ CONFIG_GEN_RTC_X=y
# File systems # File systems
# #
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
# CONFIG_QFMT_V1 is not set
# CONFIG_QFMT_V2 is not set
# CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_FS_XATTR is not set
CONFIG_JBD=y CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set # CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set # CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set # CONFIG_TMPFS is not set
CONFIG_RAMFS=y CONFIG_RAMFS=y
...@@ -557,28 +512,21 @@ CONFIG_ISO9660_FS=y ...@@ -557,28 +512,21 @@ CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y CONFIG_JOLIET=y
# CONFIG_ZISOFS is not set # CONFIG_ZISOFS is not set
# CONFIG_JFS_FS is not set # CONFIG_JFS_FS is not set
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set # CONFIG_NTFS_FS is not set
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_FS is not set
# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set # CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set # CONFIG_XFS_FS is not set
# #
# Network File Systems # Network File Systems
...@@ -587,32 +535,26 @@ CONFIG_EXT2_FS=y ...@@ -587,32 +535,26 @@ CONFIG_EXT2_FS=y
# CONFIG_INTERMEZZO_FS is not set # CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_NFS_V4 is not set
CONFIG_ROOT_NFS=y CONFIG_ROOT_NFS=y
CONFIG_NFSD=y CONFIG_NFSD=y
CONFIG_NFSD_V3=y CONFIG_NFSD_V3=y
# CONFIG_NFSD_TCP is not set # CONFIG_NFSD_V4 is not set
CONFIG_NFSD_TCP=y
CONFIG_SUNRPC=y CONFIG_SUNRPC=y
CONFIG_LOCKD=y CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y CONFIG_EXPORTFS=y
# CONFIG_CIFS is not set
# CONFIG_SMB_FS is not set # CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_AFS_FS is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set
# CONFIG_NCPFS_STRONG is not set
# CONFIG_NCPFS_NFS_NS is not set
# CONFIG_NCPFS_OS2_NS is not set
# CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_ZISOFS_FS is not set
# #
# Partition Types # Partition Types
# #
# CONFIG_PARTITION_ADVANCED is not set # CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y CONFIG_MSDOS_PARTITION=y
# CONFIG_SMB_NLS is not set
CONFIG_NLS=y CONFIG_NLS=y
# #
...@@ -658,23 +600,19 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -658,23 +600,19 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_UTF8 is not set # CONFIG_NLS_UTF8 is not set
# #
# Console drivers # Graphics support
#
#
# Frame-buffer support
# #
CONFIG_FB=y CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLGEN is not set # CONFIG_FB_CLGEN is not set
# CONFIG_FB_PM2 is not set # CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set # CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_STI is not set # CONFIG_FB_STI is not set
# CONFIG_FB_RIVA is not set # CONFIG_FB_RIVA is not set
# CONFIG_FB_MATROX is not set # CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_RADEON is not set # CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_SIS is not set # CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set # CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_3DFX is not set # CONFIG_FB_3DFX is not set
...@@ -682,22 +620,25 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -682,22 +620,25 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_TRIDENT is not set # CONFIG_FB_TRIDENT is not set
# CONFIG_FB_PM3 is not set # CONFIG_FB_PM3 is not set
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set #
# CONFIG_FBCON_FONTS is not set # Console display driver support
CONFIG_FONT_8x8=y #
CONFIG_FONT_8x16=y # CONFIG_VGA_CONSOLE is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_STI_CONSOLE=y CONFIG_STI_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=160
CONFIG_DUMMY_CONSOLE_ROWS=64
CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE=y
CONFIG_FBCON=y CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FBCON_FONT=y CONFIG_PCI_CONSOLE=y
# CONFIG_FBCON_ADVANCED is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y CONFIG_FONT_8x16=y
CONFIG_FONT_6x11=y
CONFIG_FONT_SUN12x22=y
# #
# Sound Drivers # Sound
# #
CONFIG_SOUND=y CONFIG_SOUND=y
...@@ -714,21 +655,124 @@ CONFIG_SOUND=y ...@@ -714,21 +655,124 @@ CONFIG_SOUND=y
# #
# USB support # USB support
# #
# CONFIG_USB is not set CONFIG_USB=y
CONFIG_USB_DEBUG=y
#
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
#
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
# CONFIG_USB_UHCI_HCD is not set
#
# USB Device Class drivers
#
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_STORAGE is not set
#
# USB Human Interface Devices (HID)
#
# CONFIG_USB_HID is not set
#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_XPAD is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set
#
# Video4Linux support is needed for USB Multimedia device support
#
#
# USB Network adaptors
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
#
# USB port drivers
#
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
#
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_BRLVGER is not set
# CONFIG_USB_LCD is not set
#
# Bluetooth support
#
# CONFIG_BT is not set
#
# Profiling support
#
CONFIG_PROFILING=y
CONFIG_OPROFILE=y
# #
# Kernel hacking # Kernel hacking
# #
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SLAB is not set
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
# CONFIG_KALLSYMS is not set
# #
# Security options # Security options
# #
CONFIG_SECURITY_CAPABILITIES=y # CONFIG_SECURITY is not set
#
# Cryptographic options
#
# CONFIG_CRYPTO is not set
# #
# Library routines # Library routines
# #
# CONFIG_CRC32 is not set # CONFIG_CRC32 is not set
# CONFIG_ZLIB_INFLATE is not set
# CONFIG_ZLIB_DEFLATE is not set
...@@ -131,9 +131,9 @@ static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf) ...@@ -131,9 +131,9 @@ static int cp_hpux_stat(struct kstat *stat, struct hpux_stat64 *statbuf)
tmp.st_gid = stat->gid; tmp.st_gid = stat->gid;
tmp.st_rdev = stat->rdev; tmp.st_rdev = stat->rdev;
tmp.st_size = stat->size; tmp.st_size = stat->size;
tmp.st_atime = stat->atime; tmp.st_atime = stat->atime.tv_sec;
tmp.st_mtime = stat->mtime; tmp.st_mtime = stat->mtime.tv_sec;
tmp.st_ctime = stat->ctime; tmp.st_ctime = stat->ctime.tv_sec;
tmp.st_blocks = stat->blocks; tmp.st_blocks = stat->blocks;
tmp.st_blksize = stat->blksize; tmp.st_blksize = stat->blksize;
return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
......
...@@ -2,16 +2,14 @@ ...@@ -2,16 +2,14 @@
# Makefile for arch/parisc/kernel # Makefile for arch/parisc/kernel
# #
ifdef CONFIG_PARISC64 head-y := head.o
EXTRA_TARGETS := init_task.o pdc_cons.o process.o head64.o unaligned.o perf.o perf_asm.o head-$(CONFIG_PARISC64) := head64.o
else EXTRA_TARGETS := init_task.o pdc_cons.o process.o unaligned.o $(head-y)
EXTRA_TARGETS := init_task.o pdc_cons.o process.o head.o unaligned.o
endif
AFLAGS_entry.o := -traditional AFLAGS_entry.o := -traditional
AFLAGS_pacache.o := -traditional AFLAGS_pacache.o := -traditional
export-objs := parisc_ksyms.o export-objs := parisc_ksyms.o
obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \ obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \
pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \ pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \
...@@ -19,10 +17,11 @@ obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \ ...@@ -19,10 +17,11 @@ obj-y := cache.o pacache.o setup.o traps.o time.o irq.o \
signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \ signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \
processor.o pdc_chassis.o processor.o pdc_chassis.o
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_PA11) += pci-dma.o obj-$(CONFIG_PROFILING) += profile.o
obj-$(CONFIG_PCI) += pci.o obj-$(CONFIG_PA11) += pci-dma.o
obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o \ obj-$(CONFIG_PCI) += pci.o
ioctl32.o signal32.o obj-$(CONFIG_MODULES) += module.o
obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o ioctl32.o signal32.o
# only supported for PCX-W/U in 64-bit mode at the moment # only supported for PCX-W/U in 64-bit mode at the moment
obj-$(CONFIG_PARISC64) += perf.o perf_asm.o obj-$(CONFIG_PARISC64) += perf.o perf_asm.o
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
int main(void) int main(void)
{ {
DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info));
DEFINE(TASK_STATE, offsetof(struct task_struct, state)); DEFINE(TASK_STATE, offsetof(struct task_struct, state));
DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending)); DEFINE(TASK_SIGPENDING, offsetof(struct task_struct, pending));
...@@ -213,6 +214,7 @@ int main(void) ...@@ -213,6 +214,7 @@ int main(void)
DEFINE(PT_SIZE, sizeof(struct pt_regs)); DEFINE(PT_SIZE, sizeof(struct pt_regs));
DEFINE(PT_SZ_ALGN, align(sizeof(struct pt_regs), 64)); DEFINE(PT_SZ_ALGN, align(sizeof(struct pt_regs), 64));
BLANK(); BLANK();
DEFINE(TI_TASK, offsetof(struct thread_info, task));
DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain));
DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
......
...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t; ...@@ -19,7 +19,7 @@ typedef unsigned int elf_greg_t;
#include <linux/module.h> #include <linux/module.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
#include "sys32.h" /* struct timeval32 */ #include <linux/compat.h>
#define elf_prstatus elf_prstatus32 #define elf_prstatus elf_prstatus32
struct elf_prstatus32 struct elf_prstatus32
...@@ -32,10 +32,10 @@ struct elf_prstatus32 ...@@ -32,10 +32,10 @@ struct elf_prstatus32
pid_t pr_ppid; pid_t pr_ppid;
pid_t pr_pgrp; pid_t pr_pgrp;
pid_t pr_sid; pid_t pr_sid;
struct timeval32 pr_utime; /* User time */ struct compat_timeval pr_utime; /* User time */
struct timeval32 pr_stime; /* System time */ struct compat_timeval pr_stime; /* System time */
struct timeval32 pr_cutime; /* Cumulative user time */ struct compat_timeval pr_cutime; /* Cumulative user time */
struct timeval32 pr_cstime; /* Cumulative system time */ struct compat_timeval pr_cstime; /* Cumulative system time */
elf_gregset_t pr_reg; /* GP registers */ elf_gregset_t pr_reg; /* GP registers */
int pr_fpvalid; /* True if math co-processor being used. */ int pr_fpvalid; /* True if math co-processor being used. */
}; };
...@@ -89,4 +89,12 @@ struct elf_prpsinfo32 ...@@ -89,4 +89,12 @@ struct elf_prpsinfo32
#define SET_PERSONALITY(ex, ibcs2) \ #define SET_PERSONALITY(ex, ibcs2) \
current->personality = PER_LINUX_32BIT current->personality = PER_LINUX_32BIT
#define jiffies_to_timeval jiffies_to_compat_timeval
static __inline__ void
jiffies_to_compat_timeval(unsigned long jiffies, struct compat_timeval *value)
{
value->tv_usec = (jiffies % HZ) * (1000000L / HZ);
value->tv_sec = jiffies / HZ;
}
#include "../../../fs/binfmt_elf.c" #include "../../../fs/binfmt_elf.c"
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
* Copyright (c) 1999 The Puffin Group * Copyright (c) 1999 The Puffin Group
* Copyright (c) 2001 Matthew Wilcox for Hewlett Packard * Copyright (c) 2001 Matthew Wilcox for Hewlett Packard
* Copyright (c) 2001 Helge Deller <deller@gmx.de> * Copyright (c) 2001 Helge Deller <deller@gmx.de>
* Copyright (c) 2001,2002 Ryan Bradetich
* *
* The file handles registering devices and drivers, then matching them. * The file handles registering devices and drivers, then matching them.
* It's the closest we get to a dating agency. * It's the closest we get to a dating agency.
...@@ -23,21 +24,13 @@ ...@@ -23,21 +24,13 @@
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/pdc.h> #include <asm/pdc.h>
#include <asm/parisc-device.h>
/* See comments in include/asm-parisc/pci.h */ /* See comments in include/asm-parisc/pci.h */
struct pci_dma_ops *hppa_dma_ops; struct hppa_dma_ops *hppa_dma_ops;
static struct parisc_driver *pa_drivers;
static struct parisc_device root; static struct parisc_device root;
/* This lock protects the pa_drivers list _only_ since all parisc_devices
* are registered before smp_init() is called. If you wish to add devices
* after that, this muct be serialised somehow. I recommend a semaphore
* rather than a spinlock since driver ->probe functions are allowed to
* sleep (for example when allocating memory).
*/
static spinlock_t pa_lock = SPIN_LOCK_UNLOCKED;
#define for_each_padev(dev) \ #define for_each_padev(dev) \
for (dev = root.child; dev != NULL; dev = next_dev(dev)) for (dev = root.child; dev != NULL; dev = next_dev(dev))
...@@ -102,43 +95,63 @@ static void claim_device(struct parisc_driver *driver, struct parisc_device *dev ...@@ -102,43 +95,63 @@ static void claim_device(struct parisc_driver *driver, struct parisc_device *dev
request_mem_region(dev->hpa, 0x1000, driver->name); request_mem_region(dev->hpa, 0x1000, driver->name);
} }
static int parisc_driver_probe(struct device *dev)
{
int rc;
struct parisc_device *pa_dev = to_parisc_device(dev);
struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
rc = pa_drv->probe(pa_dev);
if(!rc)
claim_device(pa_drv, pa_dev);
return rc;
}
static int parisc_driver_remove(struct device *dev)
{
struct parisc_device *pa_dev = to_parisc_device(dev);
release_mem_region(pa_dev->hpa, 0x1000);
return 0;
}
/** /**
* register_parisc_driver - Register this driver if it can handle a device * register_parisc_driver - Register this driver if it can handle a device
* @driver: the PA-RISC driver to try * @driver: the PA-RISC driver to try
*/ */
int register_parisc_driver(struct parisc_driver *driver) int register_parisc_driver(struct parisc_driver *driver)
{ {
struct parisc_device *device; /* FIXME: we need this because apparently the sti
* driver can be registered twice */
if (driver->next) { if(driver->drv.name) {
printk(KERN_WARNING printk(KERN_WARNING
"BUG: Skipping previously registered driver: %s\n", "BUG: skipping previously registered driver %s\n",
driver->name); driver->name);
return 1; return 1;
} }
for_each_padev(device) { if (!driver->probe) {
if (device->driver) printk(KERN_WARNING
continue; "BUG: driver %s has no probe routine\n",
if (!match_device(driver, device)) driver->name);
continue; return 1;
if (driver->probe(device) < 0)
continue;
claim_device(driver, device);
} }
/* Note that the list is in reverse order of registration. This driver->drv.bus = &parisc_bus_type;
* may be significant if we ever actually support hotplug and have
* multiple drivers capable of claiming the same chip.
*/
spin_lock(&pa_lock); /* We install our own probe and remove routines */
driver->next = pa_drivers; WARN_ON(driver->drv.probe != NULL);
pa_drivers = driver; WARN_ON(driver->drv.remove != NULL);
spin_unlock(&pa_lock);
return 0; driver->drv.probe = parisc_driver_probe;
driver->drv.remove = parisc_driver_remove;
driver->drv.name = driver->name;
return driver_register(&driver->drv);
} }
/** /**
...@@ -169,39 +182,7 @@ int count_parisc_driver(struct parisc_driver *driver) ...@@ -169,39 +182,7 @@ int count_parisc_driver(struct parisc_driver *driver)
*/ */
int unregister_parisc_driver(struct parisc_driver *driver) int unregister_parisc_driver(struct parisc_driver *driver)
{ {
struct parisc_device *dev; driver_unregister(&driver->drv);
spin_lock(&pa_lock);
if (pa_drivers == driver) {
/* was head of list - update head */
pa_drivers = driver->next;
} else {
struct parisc_driver *prev = pa_drivers;
while (prev && driver != prev->next) {
prev = prev->next;
}
if (!prev) {
printk(KERN_WARNING "unregister_parisc_driver: %s wasn't registered\n", driver->name);
} else {
/* Drop driver from list */
prev->next = driver->next;
driver->next = NULL;
}
}
spin_unlock(&pa_lock);
for_each_padev(dev) {
if (dev->driver != driver)
continue;
dev->driver = NULL;
release_mem_region(dev->hpa, 0x1000);
}
return 0; return 0;
} }
...@@ -300,7 +281,7 @@ void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path) ...@@ -300,7 +281,7 @@ void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path)
path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn) << 5); path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn) << 5);
} }
padev = HBA_DATA(bus->sysdata)->dev; padev = HBA_DATA(bus->dev->platform_data)->dev;
while (padev != &root) { while (padev != &root) {
path->bc[i--] = padev->hw_path; path->bc[i--] = padev->hw_path;
padev = padev->parent; padev = padev->parent;
...@@ -423,6 +404,16 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path) ...@@ -423,6 +404,16 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
return dev; return dev;
} }
static int parisc_generic_match(struct device *dev, struct device_driver *drv)
{
return match_device(to_parisc_driver(drv), to_parisc_device(dev));
}
struct bus_type parisc_bus_type = {
.name = "parisc",
.match = parisc_generic_match,
};
/** /**
* register_parisc_device - Locate a driver to manage this device. * register_parisc_device - Locate a driver to manage this device.
* @dev: The parisc device. * @dev: The parisc device.
...@@ -432,29 +423,13 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path) ...@@ -432,29 +423,13 @@ alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
*/ */
int register_parisc_device(struct parisc_device *dev) int register_parisc_device(struct parisc_device *dev)
{ {
struct parisc_driver *driver;
if (!dev) if (!dev)
return 0; return 0;
if (dev->driver) if (dev->driver)
return 1; return 1;
spin_lock(&pa_lock);
/* Locate a driver which agrees to manage this device. */
for (driver = pa_drivers; driver; driver = driver->next) {
if (!match_device(driver,dev))
continue;
if (driver->probe(dev) == 0)
break;
}
if (driver != NULL) { return 0;
claim_device(driver, dev);
}
spin_unlock(&pa_lock);
return driver != NULL;
} }
#define BC_PORT_MASK 0x8 #define BC_PORT_MASK 0x8
...@@ -467,27 +442,41 @@ int register_parisc_device(struct parisc_device *dev) ...@@ -467,27 +442,41 @@ int register_parisc_device(struct parisc_device *dev)
((gsc_readl(&((struct bc_module *)dev->hpa)->io_status) \ ((gsc_readl(&((struct bc_module *)dev->hpa)->io_status) \
& BC_PORT_MASK) == BC_LOWER_PORT) & BC_PORT_MASK) == BC_LOWER_PORT)
#define READ_IO_IO_LOW(dev) \ #define MAX_NATIVE_DEVICES 64
(dev->id.hw_type == HPHW_IOA ? \ #define NATIVE_DEVICE_OFFSET 0x1000
__raw_readl((unsigned long)&((struct bc_module *)dev->hpa)->io_io_low) << 16 : \
__raw_readl((unsigned long)&((struct bc_module *)dev->hpa)->io_io_low)) #define FLEX_MASK (unsigned long)0xfffffffffffc0000
#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)__raw_readl(dev->hpa + IO_IO_LOW)
#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)__raw_readl(dev->hpa + IO_IO_HIGH)
static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
struct parisc_device *parent);
static void walk_native_bus(unsigned long addr, struct parisc_device *parent);
void walk_lower_bus(struct parisc_device *dev) 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; return;
walk_native_bus((unsigned long)(signed int)READ_IO_IO_LOW(dev), dev); 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 {
io_io_low = (READ_IO_IO_LOW(dev) + ~FLEX_MASK) & FLEX_MASK;
io_io_high = (READ_IO_IO_HIGH(dev)+ ~FLEX_MASK) & FLEX_MASK;
}
#define MAX_NATIVE_DEVICES 64 walk_native_bus(io_io_low, io_io_high, dev);
#define NATIVE_DEVICE_OFFSET 0x1000 }
/** /**
* walk_native_bus -- Probe a bus for devices * walk_native_bus -- Probe a bus for devices
* @addr: Base address of this bus. * @io_io_low: Base address of this bus.
* @io_io_high: Last address of this bus.
* @parent: The parent bus device.
* *
* A native bus (eg Runway or GSC) may have up to 64 devices on it, * A native bus (eg Runway or GSC) may have up to 64 devices on it,
* spaced at intervals of 0x1000 bytes. PDC may not inform us of these * spaced at intervals of 0x1000 bytes. PDC may not inform us of these
...@@ -495,28 +484,32 @@ void walk_lower_bus(struct parisc_device *dev) ...@@ -495,28 +484,32 @@ void walk_lower_bus(struct parisc_device *dev)
* devices which are not physically connected (such as extra serial & * devices which are not physically connected (such as extra serial &
* keyboard ports). This problem is not yet solved. * keyboard ports). This problem is not yet solved.
*/ */
static void walk_native_bus(unsigned long addr, struct parisc_device *parent) static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
struct parisc_device *parent)
{ {
int i; int i, devices_found = 0;
unsigned long hpa = io_io_low;
struct hardware_path path; struct hardware_path path;
get_node_path(parent, &path); get_node_path(parent, &path);
for (i = 0; i < MAX_NATIVE_DEVICES; i++) { do {
unsigned long hpa = (addr + i * NATIVE_DEVICE_OFFSET); for(i = 0; i < MAX_NATIVE_DEVICES; i++, hpa += NATIVE_DEVICE_OFFSET) {
struct parisc_device *dev; struct parisc_device *dev;
/* Was the device already added by Firmware? */ /* Was the device already added by Firmware? */
dev = find_device_by_addr(hpa); dev = find_device_by_addr(hpa);
if (!dev) { if (!dev) {
path.mod = i; path.mod = i;
dev = alloc_pa_dev(hpa, &path); dev = alloc_pa_dev(hpa, &path);
if (!dev) if (!dev)
continue; continue;
register_parisc_device(dev); register_parisc_device(dev);
devices_found++;
}
walk_lower_bus(dev);
} }
walk_lower_bus(dev); } while(!devices_found && hpa < io_io_high);
}
} }
#define CENTRAL_BUS_ADDR (unsigned long) 0xfffffffffff80000 #define CENTRAL_BUS_ADDR (unsigned long) 0xfffffffffff80000
...@@ -529,7 +522,9 @@ static void walk_native_bus(unsigned long addr, struct parisc_device *parent) ...@@ -529,7 +522,9 @@ static void walk_native_bus(unsigned long addr, struct parisc_device *parent)
*/ */
void walk_central_bus(void) void walk_central_bus(void)
{ {
walk_native_bus(CENTRAL_BUS_ADDR, &root); walk_native_bus(CENTRAL_BUS_ADDR,
CENTRAL_BUS_ADDR + (MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET),
&root);
} }
void fixup_child_irqs(struct parisc_device *parent, int base, void fixup_child_irqs(struct parisc_device *parent, int base,
...@@ -578,6 +573,61 @@ void print_subdevices(struct parisc_device *parent) ...@@ -578,6 +573,61 @@ void print_subdevices(struct parisc_device *parent)
} }
} }
/*
* parisc_generic_device_register_recursive() - internal function to recursively
* register all parisc devices
*/
static void parisc_generic_device_register_recursive( struct parisc_device *dev )
{
char tmp1[32];
/* has this device been registered already ? */
if (dev->dev.dma_mask != NULL)
return;
/* register all parents recursively */
if (dev->parent && dev->parent!=&root)
parisc_generic_device_register_recursive(dev->parent);
/* set up the generic device tree for this */
snprintf(tmp1, sizeof(tmp1), "%d", dev->hw_path);
if (dev->parent && dev->parent != &root) {
struct parisc_device *ndev;
char tmp2[32];
dev->dev.parent = &dev->parent->dev;
for(ndev = dev->parent; ndev != &root;
ndev = ndev->parent) {
snprintf(tmp2, sizeof(tmp2), "%d:%s",
ndev->hw_path, tmp1);
strncpy(tmp1, tmp2, sizeof(tmp1));
}
}
dev->dev.bus = &parisc_bus_type;
snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), "parisc%s",
tmp1);
/* make the generic dma mask a pointer to the parisc one */
dev->dev.dma_mask = &dev->dma_mask;
pr_debug("device_register(%s)\n", dev->dev.bus_id);
device_register(&dev->dev);
}
/*
* parisc_generic_device_register() - register all parisc devices
*/
void parisc_generic_device_register(void)
{
struct parisc_device *dev;
bus_register(&parisc_bus_type);
for_each_padev(dev) {
parisc_generic_device_register_recursive( dev );
}
}
/** /**
* print_parisc_devices - Print out a list of devices found in this system * print_parisc_devices - Print out a list of devices found in this system
*/ */
......
...@@ -38,13 +38,11 @@ ...@@ -38,13 +38,11 @@
#include <asm/thread_info.h> #include <asm/thread_info.h>
#ifdef __LP64__ #ifdef __LP64__
#define FRAME_SIZE 128
#define CMPIB cmpib,* #define CMPIB cmpib,*
#define CMPB cmpb,* #define CMPB cmpb,*
.level 2.0w .level 2.0w
#else #else
#define FRAME_SIZE 64
#define CMPIB cmpib, #define CMPIB cmpib,
#define CMPB cmpb, #define CMPB cmpb,
...@@ -147,7 +145,7 @@ ...@@ -147,7 +145,7 @@
mfctl %cr30, %r1 mfctl %cr30, %r1
tophys %r1,%r9 tophys %r1,%r9
LDREG 0(%r9), %r1 /* thread_info -> task_struct */ LDREG TI_TASK(%r9), %r1 /* thread_info -> task_struct */
tophys %r1,%r9 tophys %r1,%r9
ldo TASK_REGS(%r9),%r9 ldo TASK_REGS(%r9),%r9
STREG %r30, PT_GR30(%r9) STREG %r30, PT_GR30(%r9)
...@@ -499,9 +497,7 @@ fault_vector_11: ...@@ -499,9 +497,7 @@ fault_vector_11:
#endif #endif
.import handle_interruption,code .import handle_interruption,code
.import handle_real_interruption,code
.import do_cpu_irq_mask,code .import do_cpu_irq_mask,code
.import parisc_stopkernel,code
/* /*
* r26 = function to be called * r26 = function to be called
...@@ -529,7 +525,7 @@ __kernel_thread: ...@@ -529,7 +525,7 @@ __kernel_thread:
STREG %r2, PT_GR27(%r1) /* Store childs %dp */ STREG %r2, PT_GR27(%r1) /* Store childs %dp */
ldd 16(%r26), %r26 ldd 16(%r26), %r26
STREG %r22, PT_GR22(%r1) /* Store childs %dp */ STREG %r22, PT_GR22(%r1) /* save r22 (arg5) */
copy %r0, %r22 /* user_tid */ copy %r0, %r22 /* user_tid */
#endif #endif
STREG %r26, PT_GR26(%r1) /* Store function & argument for child */ STREG %r26, PT_GR26(%r1) /* Store function & argument for child */
...@@ -568,7 +564,7 @@ ret_from_kernel_thread: ...@@ -568,7 +564,7 @@ ret_from_kernel_thread:
nop nop
#endif #endif
LDREG -THREAD_SZ_ALGN(%r30), %r1 LDREG TI_TASK-THREAD_SZ_ALGN(%r30), %r1
LDREG TASK_PT_GR25(%r1), %r26 LDREG TASK_PT_GR25(%r1), %r26
#ifdef __LP64__ #ifdef __LP64__
LDREG TASK_PT_GR27(%r1), %r27 LDREG TASK_PT_GR27(%r1), %r27
...@@ -629,11 +625,7 @@ _switch_to: ...@@ -629,11 +625,7 @@ _switch_to:
STREG %r30, TASK_PT_KSP(%r26) STREG %r30, TASK_PT_KSP(%r26)
LDREG TASK_PT_KSP(%r25), %r30 LDREG TASK_PT_KSP(%r25), %r30
#ifdef __LP64__ LDREG TASK_THREAD_INFO(%r25), %r25
LDREG 8(%r25), %r25
#else
LDREG 4(%r25), %r25
#endif
bv %r0(%r2) bv %r0(%r2)
mtctl %r25,%cr30 mtctl %r25,%cr30
...@@ -667,7 +659,7 @@ _switch_to_ret: ...@@ -667,7 +659,7 @@ _switch_to_ret:
.export syscall_exit_rfi .export syscall_exit_rfi
syscall_exit_rfi: syscall_exit_rfi:
mfctl %cr30,%r16 mfctl %cr30,%r16
LDREG 0(%r16), %r16 /* thread_info -> task_struct */ LDREG TI_TASK(%r16), %r16 /* thread_info -> task_struct */
ldo TASK_REGS(%r16),%r16 ldo TASK_REGS(%r16),%r16
/* Force iaoq to userspace, as the user has had access to our current /* Force iaoq to userspace, as the user has had access to our current
* context via sigcontext. Also Filter the PSW for the same reason. * context via sigcontext. Also Filter the PSW for the same reason.
...@@ -824,8 +816,6 @@ intr_do_signal: ...@@ -824,8 +816,6 @@ intr_do_signal:
ldo -16(%r30),%r29 /* Reference param save area */ ldo -16(%r30),%r29 /* Reference param save area */
#endif #endif
#warning TAUSQ FIXME - review 2.5 signal return path changes
bl do_signal,%r2 bl do_signal,%r2
copy %r0, %r26 /* sigset_t *oldset = NULL */ copy %r0, %r26 /* sigset_t *oldset = NULL */
...@@ -954,11 +944,11 @@ skip_save_ior: ...@@ -954,11 +944,11 @@ skip_save_ior:
ldo -16(%r30),%r29 /* Reference param save area */ ldo -16(%r30),%r29 /* Reference param save area */
#endif #endif
ldil L%intr_restore, %r2 ldil L%intr_check_sig, %r2
copy %r25, %r16 /* save pt_regs */ copy %r25, %r16 /* save pt_regs */
b handle_interruption b handle_interruption
ldo R%intr_restore(%r2), %r2 ldo R%intr_check_sig(%r2), %r2
/* /*
...@@ -1985,8 +1975,7 @@ dtlb_fault: ...@@ -1985,8 +1975,7 @@ dtlb_fault:
.export sys_fork_wrapper .export sys_fork_wrapper
.export child_return .export child_return
sys_fork_wrapper: sys_fork_wrapper:
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30), %r1
LDREG 0(%r1),%r1
ldo TASK_REGS(%r1),%r1 ldo TASK_REGS(%r1),%r1
reg_save %r1 reg_save %r1
mfctl %cr27, %r3 mfctl %cr27, %r3
...@@ -2011,9 +2000,8 @@ sys_fork_wrapper: ...@@ -2011,9 +2000,8 @@ sys_fork_wrapper:
LDREG -RP_OFFSET-FRAME_SIZE(%r30),%r2 LDREG -RP_OFFSET-FRAME_SIZE(%r30),%r2
wrapper_exit: wrapper_exit:
ldo -FRAME_SIZE(%r30),%r30 /* get the stackframe */ ldo -FRAME_SIZE(%r30),%r30 /* get the stackframe */
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1 ldo TASK_REGS(%r1),%r1 /* get pt regs */
ldo TASK_REGS(%r1),%r1
LDREG PT_CR27(%r1), %r3 LDREG PT_CR27(%r1), %r3
mtctl %r3, %cr27 mtctl %r3, %cr27
...@@ -2031,18 +2019,16 @@ child_return: ...@@ -2031,18 +2019,16 @@ child_return:
nop nop
#endif #endif
mfctl %cr30,%r2 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE-FRAME_SIZE(%r30), %r1
LDREG 0(%r2),%r2 LDREG TASK_PT_GR19(%r1),%r2
LDREG TASK_PT_GR19(%r2),%r2
b wrapper_exit b wrapper_exit
copy %r0,%r28 copy %r0,%r28
.export sys_clone_wrapper .export sys_clone_wrapper
sys_clone_wrapper: sys_clone_wrapper:
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1 ldo TASK_REGS(%r1),%r1 /* get pt regs */
ldo TASK_REGS(%r1),%r1
reg_save %r1 reg_save %r1
mfctl %cr27, %r3 mfctl %cr27, %r3
STREG %r3, PT_CR27(%r1) STREG %r3, PT_CR27(%r1)
...@@ -2063,9 +2049,8 @@ sys_clone_wrapper: ...@@ -2063,9 +2049,8 @@ sys_clone_wrapper:
.export sys_vfork_wrapper .export sys_vfork_wrapper
sys_vfork_wrapper: sys_vfork_wrapper:
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1 ldo TASK_REGS(%r1),%r1 /* get pt regs */
ldo TASK_REGS(%r1),%r1
reg_save %r1 reg_save %r1
mfctl %cr27, %r3 mfctl %cr27, %r3
STREG %r3, PT_CR27(%r1) STREG %r3, PT_CR27(%r1)
...@@ -2087,9 +2072,8 @@ sys_vfork_wrapper: ...@@ -2087,9 +2072,8 @@ sys_vfork_wrapper:
.macro execve_wrapper execve .macro execve_wrapper execve
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1 ldo TASK_REGS(%r1),%r1 /* get pt regs */
ldo TASK_REGS(%r1),%r1
/* /*
* Do we need to save/restore r3-r18 here? * Do we need to save/restore r3-r18 here?
...@@ -2137,9 +2121,8 @@ sys32_execve_wrapper: ...@@ -2137,9 +2121,8 @@ sys32_execve_wrapper:
.export sys_rt_sigreturn_wrapper .export sys_rt_sigreturn_wrapper
sys_rt_sigreturn_wrapper: sys_rt_sigreturn_wrapper:
mfctl %cr30,%r26 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r26
LDREG 0(%r26),%r26 ldo TASK_REGS(%r26),%r26 /* get pt regs */
ldo TASK_REGS(%r26),%r26
/* Don't save regs, we are going to restore them from sigcontext. */ /* Don't save regs, we are going to restore them from sigcontext. */
STREG %r2, -RP_OFFSET(%r30) STREG %r2, -RP_OFFSET(%r30)
#ifdef __LP64__ #ifdef __LP64__
...@@ -2155,9 +2138,8 @@ sys_rt_sigreturn_wrapper: ...@@ -2155,9 +2138,8 @@ sys_rt_sigreturn_wrapper:
LDREG -RP_OFFSET(%r30), %r2 LDREG -RP_OFFSET(%r30), %r2
/* FIXME: I think we need to restore a few more things here. */ /* FIXME: I think we need to restore a few more things here. */
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1 ldo TASK_REGS(%r1),%r1 /* get pt regs */
ldo TASK_REGS(%r1),%r1
reg_restore %r1 reg_restore %r1
/* If the signal was received while the process was blocked on a /* If the signal was received while the process was blocked on a
...@@ -2170,8 +2152,8 @@ sys_rt_sigreturn_wrapper: ...@@ -2170,8 +2152,8 @@ sys_rt_sigreturn_wrapper:
.export sys_sigaltstack_wrapper .export sys_sigaltstack_wrapper
sys_sigaltstack_wrapper: sys_sigaltstack_wrapper:
/* Get the user stack pointer */ /* Get the user stack pointer */
mfctl %cr30,%r24 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r24),%r24 ldo TASK_REGS(%r1),%r24 /* get pt regs */
LDREG TASK_PT_GR30(%r24),%r24 LDREG TASK_PT_GR30(%r24),%r24
STREG %r2, -RP_OFFSET(%r30) STREG %r2, -RP_OFFSET(%r30)
#ifdef __LP64__ #ifdef __LP64__
...@@ -2192,8 +2174,7 @@ sys_sigaltstack_wrapper: ...@@ -2192,8 +2174,7 @@ sys_sigaltstack_wrapper:
.export sys32_sigaltstack_wrapper .export sys32_sigaltstack_wrapper
sys32_sigaltstack_wrapper: sys32_sigaltstack_wrapper:
/* Get the user stack pointer */ /* Get the user stack pointer */
mfctl %cr30,%r24 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r24
LDREG 0(%r24),%r24
LDREG TASK_PT_GR30(%r24),%r24 LDREG TASK_PT_GR30(%r24),%r24
STREG %r2, -RP_OFFSET(%r30) STREG %r2, -RP_OFFSET(%r30)
ldo FRAME_SIZE(%r30), %r30 ldo FRAME_SIZE(%r30), %r30
...@@ -2208,9 +2189,8 @@ sys32_sigaltstack_wrapper: ...@@ -2208,9 +2189,8 @@ sys32_sigaltstack_wrapper:
.export sys_rt_sigsuspend_wrapper .export sys_rt_sigsuspend_wrapper
sys_rt_sigsuspend_wrapper: sys_rt_sigsuspend_wrapper:
mfctl %cr30,%r24 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30), %r1
LDREG 0(%r24),%r24 ldo TASK_REGS(%r1),%r24
ldo TASK_REGS(%r24),%r24
reg_save %r24 reg_save %r24
STREG %r2, -RP_OFFSET(%r30) STREG %r2, -RP_OFFSET(%r30)
...@@ -2226,8 +2206,7 @@ sys_rt_sigsuspend_wrapper: ...@@ -2226,8 +2206,7 @@ sys_rt_sigsuspend_wrapper:
ldo -FRAME_SIZE(%r30), %r30 ldo -FRAME_SIZE(%r30), %r30
LDREG -RP_OFFSET(%r30), %r2 LDREG -RP_OFFSET(%r30), %r2
mfctl %cr30,%r1 /* get pt regs */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30), %r1
LDREG 0(%r1),%r1
ldo TASK_REGS(%r1),%r1 ldo TASK_REGS(%r1),%r1
reg_restore %r1 reg_restore %r1
...@@ -2247,7 +2226,7 @@ syscall_exit: ...@@ -2247,7 +2226,7 @@ syscall_exit:
/* save return value now */ /* save return value now */
mfctl %cr30, %r1 mfctl %cr30, %r1
LDREG 0(%r1),%r1 LDREG TI_TASK(%r1),%r1
STREG %r28,TASK_PT_GR28(%r1) STREG %r28,TASK_PT_GR28(%r1)
/* Save other hpux returns if personality is PER_HPUX */ /* Save other hpux returns if personality is PER_HPUX */
...@@ -2297,25 +2276,17 @@ syscall_check_resched: ...@@ -2297,25 +2276,17 @@ syscall_check_resched:
/* check for reschedule */ /* check for reschedule */
LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 /* long */ LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 /* long */
bb,<,n %r19, 31-TIF_NEED_RESCHED, syscall_do_resched /* forward */ bb,<,n %r19, 31-TIF_NEED_RESCHED, syscall_do_resched /* forward */
syscall_check_sig: syscall_check_sig:
/* These should be the same effect, but which is faster? */ LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 /* get ti flags */
#if 1 bb,<,n %r19, 31-TIF_SIGPENDING, syscall_do_signal /* forward */
mfctl %cr30,%r1
#else
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get thread info ptr */
#endif
/* check for pending signals */
LDREG TI_FLAGS(%r1),%r19
bb,<,n %r19, 31-TIF_SIGPENDING, syscall_do_signal /* forward */
syscall_restore: syscall_restore:
mfctl %cr30,%r1 LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 /* get ti flags */
LDREG TI_FLAGS(%r1), %r19 /* Are we being ptraced? */
bb,< %r19, 31-TIF_SYSCALL_TRACE,syscall_restore_rfi bb,< %r19, 31-TIF_SYSCALL_TRACE,syscall_restore_rfi
LDREG 0(%r1),%r1 /* delay slot! */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* delay slot! */
ldo TASK_PT_FR31(%r1),%r19 /* reload fpregs */ ldo TASK_PT_FR31(%r1),%r19 /* reload fpregs */
rest_fp %r19 rest_fp %r19
...@@ -2444,7 +2415,7 @@ syscall_do_signal: ...@@ -2444,7 +2415,7 @@ syscall_do_signal:
FIXME: After this point the process structure should be FIXME: After this point the process structure should be
consistent with all the relevant state of the process consistent with all the relevant state of the process
before the syscall. We need to verify this. */ before the syscall. We need to verify this. */
LDREG 0(%r1),%r1 LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
ldo TASK_REGS(%r1), %r25 /* struct pt_regs *regs */ ldo TASK_REGS(%r1), %r25 /* struct pt_regs *regs */
reg_save %r25 reg_save %r25
...@@ -2453,12 +2424,10 @@ syscall_do_signal: ...@@ -2453,12 +2424,10 @@ syscall_do_signal:
#ifdef __LP64__ #ifdef __LP64__
ldo -16(%r30),%r29 /* Reference param save area */ ldo -16(%r30),%r29 /* Reference param save area */
#endif #endif
#warning TAUSQ FIXME, this is wrong
bl do_signal,%r2 bl do_signal,%r2
copy %r0, %r26 /* sigset_t *oldset = NULL */ copy %r0, %r26 /* sigset_t *oldset = NULL */
mfctl %cr30,%r1 /* reload task ptr */ LDREG TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
LDREG 0(%r1),%r1
ldo TASK_REGS(%r1), %r20 /* reload pt_regs */ ldo TASK_REGS(%r1), %r20 /* reload pt_regs */
reg_restore %r20 reg_restore %r20
......
...@@ -48,7 +48,6 @@ boot_args: ...@@ -48,7 +48,6 @@ boot_args:
.import $global$ /* forward declaration */ .import $global$ /* forward declaration */
.import fault_vector_11,code /* IVA parisc 1.1 32 bit */ .import fault_vector_11,code /* IVA parisc 1.1 32 bit */
.import fault_vector_20,code /* IVA parisc 2.0 32 bit */ .import fault_vector_20,code /* IVA parisc 2.0 32 bit */
.import start_parisc,code /* then enable VM and go here */
.export stext .export stext
.export _stext,data /* Kernel want it this way! */ .export _stext,data /* Kernel want it this way! */
...@@ -74,7 +73,7 @@ stext: ...@@ -74,7 +73,7 @@ stext:
ldo R%PA(_end)(%r4),%r4 ldo R%PA(_end)(%r4),%r4
$bss_loop: $bss_loop:
cmpb,<<,n %r3,%r4,$bss_loop cmpb,<<,n %r3,%r4,$bss_loop
stb,ma %r0,1(%r3) stw,ma %r0,4(%r3)
/* Save away the arguments the boot loader passed in (32 bit args) */ /* Save away the arguments the boot loader passed in (32 bit args) */
...@@ -277,8 +276,8 @@ smp_slave_stext: ...@@ -277,8 +276,8 @@ smp_slave_stext:
ldo R%PA(smp_init_current_idle_task)(%sp),%sp ldo R%PA(smp_init_current_idle_task)(%sp),%sp
ldw 0(%sp),%sp /* load task address */ ldw 0(%sp),%sp /* load task address */
mtctl %sp,%cr30 /* store in cr30 */ mtctl %sp,%cr30 /* store in cr30 */
addil L%TASK_SZ_ALGN,%sp /* stack is above task */ addil L%THREAD_SZ_ALGN,%sp /* stack is above task */
ldo R%TASK_SZ_ALGN(%r1),%sp ldo R%THREAD_SZ_ALGN(%r1),%sp
/* point CPU to kernel page tables */ /* point CPU to kernel page tables */
ldil L%PA(swapper_pg_dir),%r4 ldil L%PA(swapper_pg_dir),%r4
......
...@@ -176,7 +176,9 @@ common_stext: ...@@ -176,7 +176,9 @@ common_stext:
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
/* Save the rfi target address */ /* Save the rfi target address */
std %r11, TASK_PT_GR11-TASK_SZ_ALGN(%sp) ldo -THREAD_SZ_ALGN(%sp), %r1
ldd TI_TASK(%r1), %r1
std %r11, TASK_PT_GR11(%r1)
#ifndef CONFIG_PDC_NARROW #ifndef CONFIG_PDC_NARROW
/* Switch to wide mode; Superdome doesn't support narrow PDC /* Switch to wide mode; Superdome doesn't support narrow PDC
...@@ -206,7 +208,9 @@ common_stext: ...@@ -206,7 +208,9 @@ common_stext:
stext_pdc_ret: stext_pdc_ret:
/* restore rfi target address*/ /* restore rfi target address*/
ldd TASK_PT_GR11-TASK_SZ_ALGN(%sp), %r11 ldo -THREAD_SZ_ALGN(%sp), %r1
ldd TI_TASK(%r1), %r1
ldd TASK_PT_GR11(%r1), %r11
/* PARANOID: clear user scratch/user space SR's */ /* PARANOID: clear user scratch/user space SR's */
mtsp %r0,%sr0 mtsp %r0,%sr0
...@@ -310,7 +314,7 @@ smp_slave_stext: ...@@ -310,7 +314,7 @@ smp_slave_stext:
load32 PA(smp_init_current_idle_task),%sp load32 PA(smp_init_current_idle_task),%sp
ldd 0(%sp),%sp /* load task address */ ldd 0(%sp),%sp /* load task address */
mtctl %sp,%cr30 /* store in cr30 */ mtctl %sp,%cr30 /* store in cr30 */
ldo TASK_SZ_ALGN(%sp),%sp ldo THREAD_SZ_ALGN(%sp),%sp
tophys_r1 %sp tophys_r1 %sp
/* point CPU to kernel page tables */ /* point CPU to kernel page tables */
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <asm/pdc.h> #include <asm/pdc.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/parisc-device.h>
/* /*
** Debug options ** Debug options
...@@ -529,7 +530,8 @@ static void __init system_map_inventory(void) ...@@ -529,7 +530,8 @@ static void __init system_map_inventory(void)
* first stop the usb controller, otherwise the machine * first stop the usb controller, otherwise the machine
* might crash during iommu setup * might crash during iommu setup
*/ */
pdc_suspend_usb(); #warning We still probably need to worry about USB here, but how?
/* pdc_suspend_usb(); */
for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) { for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) {
struct parisc_device *dev; struct parisc_device *dev;
...@@ -587,6 +589,8 @@ void __init do_memory_inventory(void) ...@@ -587,6 +589,8 @@ void __init do_memory_inventory(void)
void __init do_device_inventory(void) void __init do_device_inventory(void)
{ {
extern void parisc_generic_device_register(void);
printk(KERN_INFO "Searching for devices...\n"); printk(KERN_INFO "Searching for devices...\n");
switch (pdc_type) { switch (pdc_type) {
...@@ -606,7 +610,7 @@ void __init do_device_inventory(void) ...@@ -606,7 +610,7 @@ void __init do_device_inventory(void)
default: default:
panic("Unknown PDC type!\n"); panic("Unknown PDC type!\n");
} }
parisc_generic_device_register();
printk(KERN_INFO "Found devices:\n"); printk(KERN_INFO "Found devices:\n");
print_parisc_devices(); print_parisc_devices();
} }
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h> #include <linux/types.h>
#include "sys32.h" #include "sys32.h"
#include <linux/compat.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp.h> #include <linux/smp.h>
...@@ -164,7 +165,7 @@ static int do_ext2_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -164,7 +165,7 @@ static int do_ext2_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
static int do_siocgstamp(unsigned int fd, unsigned int cmd, unsigned long arg) static int do_siocgstamp(unsigned int fd, unsigned int cmd, unsigned long arg)
{ {
struct timeval32 *up = (struct timeval32 *)arg; struct compat_timeval *up = (struct compat_timeval *)arg;
struct timeval ktv; struct timeval ktv;
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
int err; int err;
...@@ -206,13 +207,13 @@ struct ifreq32 { ...@@ -206,13 +207,13 @@ struct ifreq32 {
struct ifmap32 ifru_map; struct ifmap32 ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */ char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ]; char ifru_newname[IFNAMSIZ];
__kernel_caddr_t32 ifru_data; compat_caddr_t ifru_data;
} ifr_ifru; } ifr_ifru;
}; };
struct ifconf32 { struct ifconf32 {
int ifc_len; /* size of buffer */ int ifc_len; /* size of buffer */
__kernel_caddr_t32 ifcbuf; compat_caddr_t ifcbuf;
}; };
static int dev_ifname32(unsigned int fd, unsigned int cmd, unsigned long arg) static int dev_ifname32(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -575,29 +576,29 @@ static inline int fbiogscursor(unsigned int fd, unsigned int cmd, unsigned long ...@@ -575,29 +576,29 @@ static inline int fbiogscursor(unsigned int fd, unsigned int cmd, unsigned long
#endif /* 0 */ #endif /* 0 */
struct fb_fix_screeninfo32 { struct fb_fix_screeninfo32 {
char id[16]; char id[16];
__kernel_caddr_t32 smem_start; compat_caddr_t smem_start;
__u32 smem_len; __u32 smem_len;
__u32 type; __u32 type;
__u32 type_aux; __u32 type_aux;
__u32 visual; __u32 visual;
__u16 xpanstep; __u16 xpanstep;
__u16 ypanstep; __u16 ypanstep;
__u16 ywrapstep; __u16 ywrapstep;
__u32 line_length; __u32 line_length;
__kernel_caddr_t32 mmio_start; compat_caddr_t mmio_start;
__u32 mmio_len; __u32 mmio_len;
__u32 accel; __u32 accel;
__u16 reserved[3]; __u16 reserved[3];
}; };
struct fb_cmap32 { struct fb_cmap32 {
__u32 start; __u32 start;
__u32 len; __u32 len;
__kernel_caddr_t32 red; compat_caddr_t red;
__kernel_caddr_t32 green; compat_caddr_t green;
__kernel_caddr_t32 blue; compat_caddr_t blue;
__kernel_caddr_t32 transp; compat_caddr_t transp;
}; };
static int fb_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) static int fb_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -752,7 +753,7 @@ struct floppy_struct32 { ...@@ -752,7 +753,7 @@ struct floppy_struct32 {
unsigned char rate; unsigned char rate;
unsigned char spec1; unsigned char spec1;
unsigned char fmt_gap; unsigned char fmt_gap;
const __kernel_caddr_t32 name; const compat_caddr_t name;
}; };
struct floppy_drive_params32 { struct floppy_drive_params32 {
...@@ -791,7 +792,7 @@ struct floppy_drive_struct32 { ...@@ -791,7 +792,7 @@ struct floppy_drive_struct32 {
int fd_ref; int fd_ref;
int fd_device; int fd_device;
int last_checked; int last_checked;
__kernel_caddr_t32 dmabuf; compat_caddr_t dmabuf;
int bufblocks; int bufblocks;
}; };
...@@ -1053,15 +1054,15 @@ out: if (karg) kfree(karg); ...@@ -1053,15 +1054,15 @@ out: if (karg) kfree(karg);
} }
struct ppp_option_data32 { struct ppp_option_data32 {
__kernel_caddr_t32 ptr; compat_caddr_t ptr;
__u32 length; __u32 length;
int transmit; int transmit;
}; };
#define PPPIOCSCOMPRESS32 _IOW('t', 77, struct ppp_option_data32) #define PPPIOCSCOMPRESS32 _IOW('t', 77, struct ppp_option_data32)
struct ppp_idle32 { struct ppp_idle32 {
__kernel_time_t32 xmit_idle; compat_time_t xmit_idle;
__kernel_time_t32 recv_idle; compat_time_t recv_idle;
}; };
#define PPPIOCGIDLE32 _IOR('t', 63, struct ppp_idle32) #define PPPIOCGIDLE32 _IOR('t', 63, struct ppp_idle32)
...@@ -1135,8 +1136,8 @@ struct mtget32 { ...@@ -1135,8 +1136,8 @@ struct mtget32 {
__u32 mt_dsreg; __u32 mt_dsreg;
__u32 mt_gstat; __u32 mt_gstat;
__u32 mt_erreg; __u32 mt_erreg;
__kernel_daddr_t32 mt_fileno; compat_daddr_t mt_fileno;
__kernel_daddr_t32 mt_blkno; compat_daddr_t mt_blkno;
}; };
#define MTIOCGET32 _IOR('m', 2, struct mtget32) #define MTIOCGET32 _IOR('m', 2, struct mtget32)
...@@ -1254,25 +1255,25 @@ static int mt_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -1254,25 +1255,25 @@ static int mt_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
} }
struct cdrom_read32 { struct cdrom_read32 {
int cdread_lba; int cdread_lba;
__kernel_caddr_t32 cdread_bufaddr; compat_caddr_t cdread_bufaddr;
int cdread_buflen; int cdread_buflen;
}; };
struct cdrom_read_audio32 { struct cdrom_read_audio32 {
union cdrom_addr addr; union cdrom_addr addr;
u_char addr_format; u_char addr_format;
int nframes; int nframes;
__kernel_caddr_t32 buf; compat_caddr_t buf;
}; };
struct cdrom_generic_command32 { struct cdrom_generic_command32 {
unsigned char cmd[CDROM_PACKET_SIZE]; unsigned char cmd[CDROM_PACKET_SIZE];
__kernel_caddr_t32 buffer; compat_caddr_t buffer;
unsigned int buflen; unsigned int buflen;
int stat; int stat;
__kernel_caddr_t32 sense; compat_caddr_t sense;
__kernel_caddr_t32 reserved[3]; compat_caddr_t reserved[3];
}; };
static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -1281,7 +1282,7 @@ static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long ar ...@@ -1281,7 +1282,7 @@ static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long ar
struct cdrom_read cdread; struct cdrom_read cdread;
struct cdrom_read_audio cdreadaudio; struct cdrom_read_audio cdreadaudio;
struct cdrom_generic_command cgc; struct cdrom_generic_command cgc;
__kernel_caddr_t32 addr; compat_caddr_t addr;
char *data = 0; char *data = 0;
void *karg; void *karg;
int err = 0; int err = 0;
...@@ -1364,18 +1365,18 @@ out: if (data) ...@@ -1364,18 +1365,18 @@ out: if (data)
} }
struct loop_info32 { struct loop_info32 {
int lo_number; /* ioctl r/o */ int lo_number; /* ioctl r/o */
__kernel_dev_t32 lo_device; /* ioctl r/o */ compat_dev_t lo_device; /* ioctl r/o */
unsigned int lo_inode; /* ioctl r/o */ unsigned int lo_inode; /* ioctl r/o */
__kernel_dev_t32 lo_rdevice; /* ioctl r/o */ compat_dev_t lo_rdevice; /* ioctl r/o */
int lo_offset; int lo_offset;
int lo_encrypt_type; int lo_encrypt_type;
int lo_encrypt_key_size; /* ioctl w/o */ int lo_encrypt_key_size; /* ioctl w/o */
int lo_flags; /* ioctl r/o */ int lo_flags; /* ioctl r/o */
char lo_name[LO_NAME_SIZE]; char lo_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
unsigned int lo_init[2]; unsigned int lo_init[2];
char reserved[4]; char reserved[4];
}; };
static int loop_status(unsigned int fd, unsigned int cmd, unsigned long arg) static int loop_status(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -1576,21 +1577,21 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a ...@@ -1576,21 +1577,21 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a
set_fs(old_fs); set_fs(old_fs);
if (err >= 0) if (err >= 0)
err = put_user(kuid, (__kernel_uid_t32 *)arg); err = put_user(kuid, (compat_uid_t *)arg);
return err; return err;
} }
#endif #endif
struct atmif_sioc32 { struct atmif_sioc32 {
int number; int number;
int length; int length;
__kernel_caddr_t32 arg; compat_caddr_t arg;
}; };
struct atm_iobuf32 { struct atm_iobuf32 {
int length; int length;
__kernel_caddr_t32 buffer; compat_caddr_t buffer;
}; };
#define ATM_GETLINKRATE32 _IOW('a', ATMIOC_ITF+1, struct atmif_sioc32) #define ATM_GETLINKRATE32 _IOW('a', ATMIOC_ITF+1, struct atmif_sioc32)
...@@ -1651,7 +1652,7 @@ static int do_atm_iobuf(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -1651,7 +1652,7 @@ static int do_atm_iobuf(unsigned int fd, unsigned int cmd, unsigned long arg)
iobuf.length = iobuf32.length; iobuf.length = iobuf32.length;
if (iobuf32.buffer == (__kernel_caddr_t32) NULL || iobuf32.length == 0) { if (iobuf32.buffer == (compat_caddr_t) NULL || iobuf32.length == 0) {
iobuf.buffer = (void*)(unsigned long)iobuf32.buffer; iobuf.buffer = (void*)(unsigned long)iobuf32.buffer;
} else { } else {
iobuf.buffer = kmalloc(iobuf.length, GFP_KERNEL); iobuf.buffer = kmalloc(iobuf.length, GFP_KERNEL);
...@@ -1705,7 +1706,7 @@ static int do_atmif_sioc(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -1705,7 +1706,7 @@ static int do_atmif_sioc(unsigned int fd, unsigned int cmd, unsigned long arg)
sioc.number = sioc32.number; sioc.number = sioc32.number;
sioc.length = sioc32.length; sioc.length = sioc32.length;
if (sioc32.arg == (__kernel_caddr_t32) NULL || sioc32.length == 0) { if (sioc32.arg == (compat_caddr_t) NULL || sioc32.length == 0) {
sioc.arg = (void*)(unsigned long)sioc32.arg; sioc.arg = (void*)(unsigned long)sioc32.arg;
} else { } else {
sioc.arg = kmalloc(sioc.length, GFP_KERNEL); sioc.arg = kmalloc(sioc.length, GFP_KERNEL);
...@@ -1863,8 +1864,8 @@ typedef struct { ...@@ -1863,8 +1864,8 @@ typedef struct {
} lv_status_byindex_req32_t; } lv_status_byindex_req32_t;
typedef struct { typedef struct {
__kernel_dev_t32 dev; compat_dev_t dev;
u32 lv; u32 lv;
} lv_status_bydev_req32_t; } lv_status_bydev_req32_t;
typedef struct { typedef struct {
...@@ -2950,11 +2951,6 @@ COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO) ...@@ -2950,11 +2951,6 @@ COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO)
COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO) COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO)
COMPATIBLE_IOCTL(FBIOPAN_DISPLAY) COMPATIBLE_IOCTL(FBIOPAN_DISPLAY)
COMPATIBLE_IOCTL(FBIOGET_FCURSORINFO)
COMPATIBLE_IOCTL(FBIOGET_VCURSORINFO)
COMPATIBLE_IOCTL(FBIOPUT_VCURSORINFO)
COMPATIBLE_IOCTL(FBIOGET_CURSORSTATE)
COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE)
COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP) COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP)
COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP) COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP)
/* Little f */ /* Little f */
...@@ -3627,7 +3623,7 @@ HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl) ...@@ -3627,7 +3623,7 @@ HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl)
HANDLE_IOCTL(EXT2_IOC32_SETVERSION, do_ext2_ioctl) HANDLE_IOCTL(EXT2_IOC32_SETVERSION, do_ext2_ioctl)
#if 0 #if 0
/* One SMB ioctl needs translations. */ /* One SMB ioctl needs translations. */
#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, __kernel_uid_t32) #define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t)
HANDLE_IOCTL(SMB_IOC_GETMOUNTUID_32, do_smb_getmountuid) HANDLE_IOCTL(SMB_IOC_GETMOUNTUID_32, do_smb_getmountuid)
#endif #endif
HANDLE_IOCTL(ATM_GETLINKRATE32, do_atm_ioctl) HANDLE_IOCTL(ATM_GETLINKRATE32, do_atm_ioctl)
......
/* Kernel module help for parisc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/moduleloader.h>
#include <linux/elf.h>
#include <linux/vmalloc.h>
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/kernel.h>
#if 0
#define DEBUGP printk
#else
#define DEBUGP(fmt...)
#endif
enum parisc_fsel {
e_fsel,
e_lsel,
e_rsel,
e_lrsel,
e_rrsel
};
void *module_alloc(unsigned long size)
{
if (size == 0)
return NULL;
return vmalloc(size);
}
/* Free memory returned from module_alloc */
void module_free(struct module *mod, void *module_region)
{
vfree(module_region);
/* FIXME: If module_region == mod->init_region, trim exception
table entries. */
}
/* We don't need anything special. */
long module_core_size(const Elf_Ehdr *hdr,
const Elf_Shdr *sechdrs,
const char *secstrings,
struct module *module)
{
return module->core_size;
}
long module_init_size(const Elf_Ehdr *hdr,
const Elf_Shdr *sechdrs,
const char *secstrings,
struct module *module)
{
return module->init_size;
}
int module_frob_arch_sections(Elf_Ehdr *hdr,
Elf_Shdr *sechdrs,
char *secstrings,
struct module *mod)
{
/* parisc should not need this ... */
printk(KERN_ERR "module %s: %s not yet implemented.\n",
mod->name, __FUNCTION__);
return 0;
}
int apply_relocate(Elf_Shdr *sechdrs,
const char *strtab,
unsigned int symindex,
unsigned int relsec,
struct module *me)
{
/* parisc should not need this ... */
printk(KERN_ERR "module %s: RELOCATION unsupported\n",
me->name);
return -ENOEXEC;
}
#ifndef __LP64__
int apply_relocate_add(Elf_Shdr *sechdrs,
const char *strtab,
unsigned int symindex,
unsigned int relsec,
struct module *me)
{
int i;
Elf32_Rela *rel = (void *)sechdrs[relsec].sh_addr;
Elf32_Sym *sym;
Elf32_Word *loc;
Elf32_Addr value;
DEBUGP("Applying relocate section %u to %u\n", relsec,
sechdrs[relsec].sh_info);
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
/* This is where to make the change */
loc = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
+ rel[i].r_offset;
/* This is the symbol it is referring to */
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
+ ELF32_R_SYM(rel[i].r_info);
if (!sym->st_value) {
printk(KERN_WARNING "%s: Unknown symbol %s\n",
me->name, strtab + sym->st_name);
return -ENOENT;
}
value = sym->st_value + rel[i].r_addend;
DEBUGP("Symbol %s loc 0x%lx value 0x%lx: ",
strtab + sym->st_name,
(uint32_t)loc, value);
switch (ELF32_R_TYPE(rel[i].r_info)) {
case R_PARISC_PLABEL32:
/* 32-bit function address */
DEBUGP("R_PARISC_PLABEL32\n");
break;
case R_PARISC_DIR32:
/* direct 32-bit ref */
DEBUGP("R_PARISC_DIR32\n");
break;
case R_PARISC_DIR21L:
/* left 21 bits of effective address */
DEBUGP("R_PARISC_DIR21L\n");
break;
case R_PARISC_DIR14R:
/* right 14 bits of effective address */
DEBUGP("R_PARISC_DIR14R\n");
break;
case R_PARISC_SEGREL32:
/* 32-bit segment relative address */
DEBUGP("R_PARISC_SEGREL32\n");
break;
case R_PARISC_DPREL21L:
/* left 21 bit of relative address */
DEBUGP("R_PARISC_DPREL21L\n");
break;
case R_PARISC_DPREL14R:
/* right 14 bit of relative address */
DEBUGP("R_PARISC_DPREL14R\n");
break;
case R_PARISC_PCREL17F:
/* 17-bit PC relative address */
DEBUGP("R_PARISC_PCREL17F\n");
break;
case R_PARISC_PCREL22F:
/* 22-bit PC relative address */
DEBUGP("R_PARISC_PCREL22F\n");
break;
default:
printk(KERN_ERR "module %s: Unknown relocation: %Lu\n",
me->name, ELF32_R_TYPE(rel[i].r_info));
return -ENOEXEC;
}
}
return -ENOEXEC;
}
#else
int apply_relocate_add(Elf_Shdr *sechdrs,
const char *strtab,
unsigned int symindex,
unsigned int relsec,
struct module *me)
{
int i;
Elf64_Rela *rel = (void *)sechdrs[relsec].sh_addr;
Elf64_Sym *sym;
Elf64_Word *loc;
Elf64_Addr value;
DEBUGP("Applying relocate section %u to %u\n", relsec,
sechdrs[relsec].sh_info);
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
/* This is where to make the change */
loc = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
+ rel[i].r_offset;
/* This is the symbol it is referring to */
sym = (Elf64_Sym *)sechdrs[symindex].sh_addr
+ ELF64_R_SYM(rel[i].r_info);
if (!sym->st_value) {
printk(KERN_WARNING "%s: Unknown symbol %s\n",
me->name, strtab + sym->st_name);
return -ENOENT;
}
value = sym->st_value + rel[i].r_addend;
DEBUGP("Symbol %s loc 0x%Lx value 0x%Lx: ",
strtab + sym->st_name,
(uint64_t)loc, value);
switch (ELF64_R_TYPE(rel[i].r_info)) {
case R_PARISC_LTOFF14R:
/* LT-relative; right 14 bits */
DEBUGP("R_PARISC_LTOFF14R\n");
break;
case R_PARISC_LTOFF21L:
/* LT-relative; left 21 bits */
DEBUGP("R_PARISC_LTOFF21L\n");
break;
case R_PARISC_PCREL22F:
/* PC-relative; 22 bits */
DEBUGP("R_PARISC_PCREL22F\n");
break;
case R_PARISC_DIR64:
/* 64-bit effective address */
DEBUGP("R_PARISC_DIR64\n");
*loc = value;
break;
case R_PARISC_SEGREL32:
/* 32-bit segment relative address */
DEBUGP("R_PARISC_SEGREL32\n");
break;
case R_PARISC_FPTR64:
/* 64-bit function address */
DEBUGP("R_PARISC_FPTR64\n");
break;
default:
printk(KERN_ERR "module %s: Unknown relocation: %Lu\n",
me->name, ELF64_R_TYPE(rel[i].r_info));
return -ENOEXEC;
}
}
return -ENOEXEC;
}
#endif
int module_finalize(const Elf_Ehdr *hdr,
const Elf_Shdr *sechdrs,
struct module *me)
{
return 0;
}
...@@ -86,9 +86,9 @@ EXPORT_SYMBOL(pdc_iodc_read); ...@@ -86,9 +86,9 @@ EXPORT_SYMBOL(pdc_iodc_read);
#include <asm/io.h> #include <asm/io.h>
EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(iounmap); EXPORT_SYMBOL(iounmap);
EXPORT_SYMBOL(memcpy_toio); EXPORT_SYMBOL(__memcpy_toio);
EXPORT_SYMBOL(memcpy_fromio); EXPORT_SYMBOL(__memcpy_fromio);
EXPORT_SYMBOL(memset_io); EXPORT_SYMBOL(__memset_io);
#if defined(CONFIG_PCI) || defined(CONFIG_ISA) #if defined(CONFIG_PCI) || defined(CONFIG_ISA)
EXPORT_SYMBOL(inb); EXPORT_SYMBOL(inb);
...@@ -141,7 +141,6 @@ extern void $$divU(void); ...@@ -141,7 +141,6 @@ extern void $$divU(void);
extern void $$remI(void); extern void $$remI(void);
extern void $$remU(void); extern void $$remU(void);
extern void $$mulI(void); extern void $$mulI(void);
extern void $$mulU(void);
extern void $$divU_3(void); extern void $$divU_3(void);
extern void $$divU_5(void); extern void $$divU_5(void);
extern void $$divU_6(void); extern void $$divU_6(void);
...@@ -166,9 +165,6 @@ EXPORT_SYMBOL_NOVERS($$divU); ...@@ -166,9 +165,6 @@ EXPORT_SYMBOL_NOVERS($$divU);
EXPORT_SYMBOL_NOVERS($$remI); EXPORT_SYMBOL_NOVERS($$remI);
EXPORT_SYMBOL_NOVERS($$remU); EXPORT_SYMBOL_NOVERS($$remU);
EXPORT_SYMBOL_NOVERS($$mulI); EXPORT_SYMBOL_NOVERS($$mulI);
#ifndef __LP64__
EXPORT_SYMBOL_NOVERS($$mulU);
#endif
EXPORT_SYMBOL_NOVERS($$divU_3); EXPORT_SYMBOL_NOVERS($$divU_3);
EXPORT_SYMBOL_NOVERS($$divU_5); EXPORT_SYMBOL_NOVERS($$divU_5);
EXPORT_SYMBOL_NOVERS($$divU_6); EXPORT_SYMBOL_NOVERS($$divU_6);
...@@ -215,3 +211,10 @@ extern void $$dyncall(void); ...@@ -215,3 +211,10 @@ extern void $$dyncall(void);
EXPORT_SYMBOL_NOVERS($$dyncall); EXPORT_SYMBOL_NOVERS($$dyncall);
#endif #endif
#ifdef CONFIG_PROFILING
EXPORT_SYMBOL_GPL(register_profile_notifier);
EXPORT_SYMBOL_GPL(unregister_profile_notifier);
#endif
#include <asm/pgtable.h>
EXPORT_SYMBOL_NOVERS(vmalloc_start);
...@@ -71,7 +71,7 @@ void dump_resmap(void) ...@@ -71,7 +71,7 @@ void dump_resmap(void)
static inline void dump_resmap(void) {;} static inline void dump_resmap(void) {;}
#endif #endif
static int pa11_dma_supported( struct pci_dev *dev, u64 mask) static int pa11_dma_supported( struct device *dev, u64 mask)
{ {
return 1; return 1;
} }
...@@ -349,7 +349,7 @@ pcxl_dma_init(void) ...@@ -349,7 +349,7 @@ pcxl_dma_init(void)
__initcall(pcxl_dma_init); __initcall(pcxl_dma_init);
static void * pa11_dma_alloc_consistent (struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle) static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_addr_t *dma_handle)
{ {
unsigned long vaddr; unsigned long vaddr;
unsigned long paddr; unsigned long paddr;
...@@ -369,13 +369,13 @@ static void * pa11_dma_alloc_consistent (struct pci_dev *hwdev, size_t size, dma ...@@ -369,13 +369,13 @@ static void * pa11_dma_alloc_consistent (struct pci_dev *hwdev, size_t size, dma
** ISA cards will certainly only support 24-bit DMA addressing. ** ISA cards will certainly only support 24-bit DMA addressing.
** Not clear if we can, want, or need to support ISA. ** Not clear if we can, want, or need to support ISA.
*/ */
if (!hwdev || hwdev->dma_mask != 0xffffffff) if (!dev || *dev->dma_mask != 0xffffffff)
gfp |= GFP_DMA; gfp |= GFP_DMA;
#endif #endif
return (void *)vaddr; return (void *)vaddr;
} }
static void pa11_dma_free_consistent (struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle) static void pa11_dma_free_consistent (struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle)
{ {
int order; int order;
...@@ -386,9 +386,9 @@ static void pa11_dma_free_consistent (struct pci_dev *hwdev, size_t size, void * ...@@ -386,9 +386,9 @@ static void pa11_dma_free_consistent (struct pci_dev *hwdev, size_t size, void *
free_pages((unsigned long)__va(dma_handle), order); free_pages((unsigned long)__va(dma_handle), order);
} }
static dma_addr_t pa11_dma_map_single(struct pci_dev *dev, void *addr, size_t size, int direction) static dma_addr_t pa11_dma_map_single(struct device *dev, void *addr, size_t size, enum dma_data_direction direction)
{ {
if (direction == PCI_DMA_NONE) { if (direction == DMA_NONE) {
printk(KERN_ERR "pa11_dma_map_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0)); printk(KERN_ERR "pa11_dma_map_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
BUG(); BUG();
} }
...@@ -397,14 +397,14 @@ static dma_addr_t pa11_dma_map_single(struct pci_dev *dev, void *addr, size_t si ...@@ -397,14 +397,14 @@ static dma_addr_t pa11_dma_map_single(struct pci_dev *dev, void *addr, size_t si
return virt_to_phys(addr); return virt_to_phys(addr);
} }
static void pa11_dma_unmap_single(struct pci_dev *dev, dma_addr_t dma_handle, size_t size, int direction) static void pa11_dma_unmap_single(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
{ {
if (direction == PCI_DMA_NONE) { if (direction == DMA_NONE) {
printk(KERN_ERR "pa11_dma_unmap_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0)); printk(KERN_ERR "pa11_dma_unmap_single(PCI_DMA_NONE) called by %p\n", __builtin_return_address(0));
BUG(); BUG();
} }
if (direction == PCI_DMA_TODEVICE) if (direction == DMA_TO_DEVICE)
return; return;
/* /*
...@@ -417,11 +417,11 @@ static void pa11_dma_unmap_single(struct pci_dev *dev, dma_addr_t dma_handle, si ...@@ -417,11 +417,11 @@ static void pa11_dma_unmap_single(struct pci_dev *dev, dma_addr_t dma_handle, si
return; return;
} }
static int pa11_dma_map_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, int direction) static int pa11_dma_map_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction)
{ {
int i; int i;
if (direction == PCI_DMA_NONE) if (direction == DMA_NONE)
BUG(); BUG();
for (i = 0; i < nents; i++, sglist++ ) { for (i = 0; i < nents; i++, sglist++ ) {
...@@ -433,14 +433,14 @@ static int pa11_dma_map_sg(struct pci_dev *dev, struct scatterlist *sglist, int ...@@ -433,14 +433,14 @@ static int pa11_dma_map_sg(struct pci_dev *dev, struct scatterlist *sglist, int
return nents; return nents;
} }
static void pa11_dma_unmap_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, int direction) static void pa11_dma_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction)
{ {
int i; int i;
if (direction == PCI_DMA_NONE) if (direction == DMA_NONE)
BUG(); BUG();
if (direction == PCI_DMA_TODEVICE) if (direction == DMA_TO_DEVICE)
return; return;
/* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */ /* once we do combining we'll need to use phys_to_virt(sg_dma_address(sglist)) */
...@@ -450,15 +450,15 @@ static void pa11_dma_unmap_sg(struct pci_dev *dev, struct scatterlist *sglist, i ...@@ -450,15 +450,15 @@ static void pa11_dma_unmap_sg(struct pci_dev *dev, struct scatterlist *sglist, i
return; return;
} }
static void pa11_dma_sync_single(struct pci_dev *dev, dma_addr_t dma_handle, size_t size, int direction) static void pa11_dma_sync_single(struct device *dev, dma_addr_t dma_handle, unsigned long offset, size_t size, enum dma_data_direction direction)
{ {
if (direction == PCI_DMA_NONE) if (direction == DMA_NONE)
BUG(); BUG();
flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle), size); flush_kernel_dcache_range((unsigned long) phys_to_virt(dma_handle) + offset, size);
} }
static void pa11_dma_sync_sg(struct pci_dev *dev, struct scatterlist *sglist, int nents, int direction) static void pa11_dma_sync_sg(struct device *dev, struct scatterlist *sglist, int nents, enum dma_data_direction direction)
{ {
int i; int i;
...@@ -468,40 +468,56 @@ static void pa11_dma_sync_sg(struct pci_dev *dev, struct scatterlist *sglist, in ...@@ -468,40 +468,56 @@ static void pa11_dma_sync_sg(struct pci_dev *dev, struct scatterlist *sglist, in
flush_kernel_dcache_range(sg_virt_addr(sglist), sglist->length); flush_kernel_dcache_range(sg_virt_addr(sglist), sglist->length);
} }
struct pci_dma_ops pcxl_dma_ops = { struct hppa_dma_ops pcxl_dma_ops = {
pa11_dma_supported, /* dma_support */ .dma_supported = pa11_dma_supported,
pa11_dma_alloc_consistent, .alloc_consistent = pa11_dma_alloc_consistent,
pa11_dma_free_consistent, .alloc_noncoherent = pa11_dma_alloc_consistent,
pa11_dma_map_single, /* map_single */ .free_consistent = pa11_dma_free_consistent,
pa11_dma_unmap_single, /* unmap_single */ .map_single = pa11_dma_map_single,
pa11_dma_map_sg, /* map_sg */ .unmap_single = pa11_dma_unmap_single,
pa11_dma_unmap_sg, /* unmap_sg */ .map_sg = pa11_dma_map_sg,
pa11_dma_sync_single, /* dma_sync_single */ .unmap_sg = pa11_dma_unmap_sg,
pa11_dma_sync_sg /* dma_sync_sg */ .dma_sync_single = pa11_dma_sync_single,
.dma_sync_sg = pa11_dma_sync_sg,
}; };
static void *fail_alloc_consistent(struct pci_dev *hwdev, size_t size, static void *fail_alloc_consistent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle)
{ {
return NULL; return NULL;
} }
static void fail_free_consistent(struct pci_dev *dev, size_t size, static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t iova) dma_addr_t *dma_handle)
{
void *addr = NULL;
/* rely on kmalloc to be cacheline aligned */
addr = kmalloc(size, GFP_KERNEL);
if(addr)
*dma_handle = (dma_addr_t)virt_to_phys(addr);
return addr;
}
static void pa11_dma_free_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t iova)
{ {
kfree(vaddr);
return; return;
} }
struct pci_dma_ops pcx_dma_ops = { struct hppa_dma_ops pcx_dma_ops = {
pa11_dma_supported, /* dma_support */ .dma_supported = pa11_dma_supported,
fail_alloc_consistent, .alloc_consistent = fail_alloc_consistent,
fail_free_consistent, .alloc_noncoherent = pa11_dma_alloc_noncoherent,
pa11_dma_map_single, /* map_single */ .free_consistent = pa11_dma_free_noncoherent,
pa11_dma_unmap_single, /* unmap_single */ .map_single = pa11_dma_map_single,
pa11_dma_map_sg, /* map_sg */ .unmap_single = pa11_dma_unmap_single,
pa11_dma_unmap_sg, /* unmap_sg */ .map_sg = pa11_dma_map_sg,
pa11_dma_sync_single, /* dma_sync_single */ .unmap_sg = pa11_dma_unmap_sg,
pa11_dma_sync_sg /* dma_sync_sg */ .dma_sync_single = pa11_dma_sync_single,
.dma_sync_sg = pa11_dma_sync_sg,
}; };
......
...@@ -238,7 +238,7 @@ pcibios_update_resource( ...@@ -238,7 +238,7 @@ pcibios_update_resource(
if (res->flags & IORESOURCE_IO) { if (res->flags & IORESOURCE_IO) {
barval = PCI_PORT_ADDR(res->start); barval = PCI_PORT_ADDR(res->start);
} else if (res->flags & IORESOURCE_MEM) { } else if (res->flags & IORESOURCE_MEM) {
barval = PCI_BUS_ADDR(HBA_DATA(dev->bus->sysdata), res->start); barval = PCI_BUS_ADDR(HBA_DATA(dev->bus->dev->platform_data), res->start);
} else { } else {
panic("pcibios_update_resource() WTF? flags not IO or MEM"); panic("pcibios_update_resource() WTF? flags not IO or MEM");
} }
...@@ -350,7 +350,7 @@ void __devinit pcibios_fixup_pbus_ranges( ...@@ -350,7 +350,7 @@ void __devinit pcibios_fixup_pbus_ranges(
struct pbus_set_ranges_data *ranges struct pbus_set_ranges_data *ranges
) )
{ {
struct pci_hba_data *hba = HBA_DATA(bus->sysdata); struct pci_hba_data *hba = HBA_DATA(bus->dev->platform_data);
/* /*
** I/O space may see busnumbers here. Something ** I/O space may see busnumbers here. Something
...@@ -487,24 +487,6 @@ pcibios_setup_host_bridge(struct pci_bus *bus) ...@@ -487,24 +487,6 @@ pcibios_setup_host_bridge(struct pci_bus *bus)
} }
/*
** Mostly copied from drivers/pci/setup-bus.c:pci_assign_unassigned_resources()
*/
void __devinit
pcibios_assign_unassigned_resources(struct pci_bus *bus)
{
/* from drivers/pci/setup-bus.c */
extern void pbus_assign_resources(struct pci_bus *bus, struct pbus_set_ranges_data *ranges);
struct pbus_set_ranges_data ranges;
ranges.io_end = ranges.io_start
= bus->resource[0]->start + PCIBIOS_MIN_IO;
ranges.mem_end = ranges.mem_start
= bus->resource[1]->start + PCIBIOS_MIN_MEM;
pbus_assign_resources(bus, &ranges);
}
/* /*
** PARISC specific (unfortunately) ** PARISC specific (unfortunately)
*/ */
......
...@@ -56,7 +56,7 @@ static int pdc_console_setup(struct console *co, char *options) ...@@ -56,7 +56,7 @@ static int pdc_console_setup(struct console *co, char *options)
#define PDC_CONSOLE_DEVICE pdc_console_device #define PDC_CONSOLE_DEVICE pdc_console_device
static kdev_t pdc_console_device (struct console *c) static kdev_t pdc_console_device (struct console *c)
{ {
return mk_kdev(PDCCONS_MAJOR, 0); return mk_kdev(MUX_MAJOR, 0);
} }
#else #else
#define PDC_CONSOLE_DEVICE NULL #define PDC_CONSOLE_DEVICE NULL
......
...@@ -43,7 +43,6 @@ ...@@ -43,7 +43,6 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
...@@ -51,6 +50,7 @@ ...@@ -51,6 +50,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/perf.h> #include <asm/perf.h>
#include <asm/parisc-device.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/runway.h> #include <asm/runway.h>
#include <asm/io.h> /* for __raw_read() */ #include <asm/io.h> /* for __raw_read() */
...@@ -269,8 +269,6 @@ static int perf_open(struct inode *inode, struct file *file) ...@@ -269,8 +269,6 @@ static int perf_open(struct inode *inode, struct file *file)
perf_enabled = 1; perf_enabled = 1;
spin_unlock(&perf_lock); spin_unlock(&perf_lock);
MOD_INC_USE_COUNT;
return 0; return 0;
} }
...@@ -283,8 +281,6 @@ static int perf_release(struct inode *inode, struct file *file) ...@@ -283,8 +281,6 @@ static int perf_release(struct inode *inode, struct file *file)
perf_enabled = 0; perf_enabled = 0;
spin_unlock(&perf_lock); spin_unlock(&perf_lock);
MOD_DEC_USE_COUNT;
return 0; return 0;
} }
...@@ -500,7 +496,7 @@ static struct miscdevice perf_dev = { ...@@ -500,7 +496,7 @@ static struct miscdevice perf_dev = {
*/ */
static int __init perf_init(void) static int __init perf_init(void)
{ {
int retval; int ret;
/* Determine correct processor interface to use */ /* Determine correct processor interface to use */
bitmask_array = perf_bitmasks; bitmask_array = perf_bitmasks;
...@@ -520,11 +516,11 @@ static int __init perf_init(void) ...@@ -520,11 +516,11 @@ static int __init perf_init(void)
return -ENODEV; return -ENODEV;
} }
retval = misc_register(&perf_dev); ret = misc_register(&perf_dev);
if (retval < 0) { if (ret) {
printk(KERN_ERR "Performance monitoring counters: " printk(KERN_ERR "Performance monitoring counters: "
"cannot register misc device.\n"); "cannot register misc device.\n");
return retval; return ret;
} }
/* Patch the images to match the system */ /* Patch the images to match the system */
......
...@@ -217,7 +217,7 @@ sys_clone(unsigned long clone_flags, unsigned long usp, ...@@ -217,7 +217,7 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
{ {
struct task_struct *p; struct task_struct *p;
int *user_tid = (int *)regs->gr[26]; int *user_tid = (int *)regs->gr[26];
p = do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0, user_tid); p = do_fork(clone_flags & ~CLONE_IDLETASK, usp, regs, 0, user_tid, NULL);
return IS_ERR(p) ? PTR_ERR(p) : p->pid; return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
...@@ -225,7 +225,7 @@ int ...@@ -225,7 +225,7 @@ int
sys_vfork(struct pt_regs *regs) sys_vfork(struct pt_regs *regs)
{ {
struct task_struct *p; struct task_struct *p;
p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gr[30], regs, 0, NULL); p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gr[30], regs, 0, NULL, NULL);
return IS_ERR(p) ? PTR_ERR(p) : p->pid; return IS_ERR(p) ? PTR_ERR(p) : p->pid;
} }
...@@ -295,6 +295,11 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp, ...@@ -295,6 +295,11 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
return 0; return 0;
} }
unsigned long thread_saved_pc(struct task_struct *t)
{
return t->thread.regs.kpc;
}
/* /*
* sys_execve() executes a new program. * sys_execve() executes a new program.
*/ */
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/pdc.h> #include <asm/pdc.h>
#include <asm/irq.h> /* for struct irq_region */ #include <asm/irq.h> /* for struct irq_region */
#include <asm/parisc-device.h>
struct system_cpuinfo_parisc boot_cpu_data; struct system_cpuinfo_parisc boot_cpu_data;
struct cpuinfo_parisc cpu_data[NR_CPUS]; struct cpuinfo_parisc cpu_data[NR_CPUS];
......
/* arch/parisc/kernel/profile.c
*
* Almost entirely copied from ppc64 which is:
* (C) 2002 John Levon <levon@movementarian.org>
*/
#include <linux/profile.h>
#include <linux/spinlock.h>
#include <linux/notifier.h>
#include <asm/irq.h>
static struct notifier_block *profile_listeners;
static rwlock_t profile_lock = RW_LOCK_UNLOCKED;
int register_profile_notifier(struct notifier_block *nb)
{
int err;
write_lock_irq(&profile_lock);
err = notifier_chain_register(&profile_listeners, nb);
write_unlock_irq(&profile_lock);
return err;
}
int unregister_profile_notifier(struct notifier_block *nb)
{
int err;
write_lock_irq(&profile_lock);
err = notifier_chain_unregister(&profile_listeners, nb);
write_unlock_irq(&profile_lock);
return err;
}
void parisc_profile_hook(struct pt_regs *regs)
{
read_lock(&profile_lock);
notifier_call_chain(&profile_listeners, 0, regs);
read_unlock(&profile_lock);
}
...@@ -103,7 +103,7 @@ long sys_ptrace(long request, pid_t pid, long addr, long data) ...@@ -103,7 +103,7 @@ long sys_ptrace(long request, pid_t pid, long addr, long data)
if (current->ptrace & PT_PTRACED) if (current->ptrace & PT_PTRACED)
goto out; goto out;
ret = security_ops->ptrace(current->parent, current); ret = security_ptrace(current->parent, current);
if (ret) if (ret)
goto out; goto out;
......
...@@ -136,15 +136,15 @@ void __init setup_arch(char **cmdline_p) ...@@ -136,15 +136,15 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_CHASSIS_LCD_LED #ifdef CONFIG_CHASSIS_LCD_LED
/* initialize the LCD/LED after boot_cpu_data is available ! */ /* initialize the LCD/LED after boot_cpu_data is available ! */
led_init(); /* LCD/LED initialization */ led_init(); /* LCD/LED initialization */
#endif #endif
#ifdef CONFIG_PA11 #ifdef CONFIG_PA11
dma_ops_init(); dma_ops_init();
#endif #endif
#ifdef CONFIG_DUMMY_CONSOLE #if defined(CONFIG_VT) && defined(CONFIG_DUMMY_CONSOLE)
conswitchp = &dummy_con; /* we use take_over_console() later ! */ conswitchp = &dummy_con; /* we use take_over_console() later ! */
#endif #endif
} }
...@@ -185,7 +185,7 @@ struct seq_operations cpuinfo_op = { ...@@ -185,7 +185,7 @@ struct seq_operations cpuinfo_op = {
.show = show_cpuinfo .show = show_cpuinfo
}; };
static void parisc_proc_mkdir(void) static void __init parisc_proc_mkdir(void)
{ {
/* /*
** Can't call proc_mkdir() until after proc_root_init() has been ** Can't call proc_mkdir() until after proc_root_init() has been
...@@ -236,7 +236,7 @@ static struct resource global_broadcast = { ...@@ -236,7 +236,7 @@ static struct resource global_broadcast = {
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}; };
int __init parisc_init_resources(void) static int __init parisc_init_resources(void)
{ {
int result; int result;
...@@ -270,6 +270,7 @@ int __init parisc_init_resources(void) ...@@ -270,6 +270,7 @@ int __init parisc_init_resources(void)
extern void gsc_init(void); extern void gsc_init(void);
extern void processor_init(void); extern void processor_init(void);
extern void ccio_init(void); extern void ccio_init(void);
extern void hppb_init(void);
extern void dino_init(void); extern void dino_init(void);
extern void iosapic_init(void); extern void iosapic_init(void);
extern void lba_init(void); extern void lba_init(void);
...@@ -321,6 +322,11 @@ static int __init parisc_init(void) ...@@ -321,6 +322,11 @@ static int __init parisc_init(void)
#ifdef CONFIG_EISA #ifdef CONFIG_EISA
eisa_init(); eisa_init();
#endif #endif
#if defined(CONFIG_HPPB)
hppb_init();
#endif
#if defined(CONFIG_GSC_DINO) #if defined(CONFIG_GSC_DINO)
dino_init(); dino_init();
#endif #endif
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/rt_sigframe.h> #include <asm/rt_sigframe.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/cacheflush.h>
#define DEBUG_SIG 0 #define DEBUG_SIG 0
...@@ -40,6 +41,10 @@ ...@@ -40,6 +41,10 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* Use this to get at 32-bit user passed pointers.
* See sys_sparc32.c for description about these. */
#define A(__x) ((unsigned long)(__x))
int do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall); int do_signal(sigset_t *oldset, struct pt_regs *regs, int in_syscall);
int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from) int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
...@@ -308,28 +313,26 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -308,28 +313,26 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
(unsigned long) &frame->tramp[4]); (unsigned long) &frame->tramp[4]);
#else #else
/* It should *always* be cache line-aligned, but the compiler /* It should *always* be cache line-aligned, but the compiler
sometimes screws up. */ sometimes screws up. */
asm volatile("fdc 0(%%sr3,%0)\n\t" asm volatile("fdc 0(%%sr3,%0)\n\t"
"fdc %1(%%sr3,%0)\n\t" "fdc %1(%%sr3,%0)\n\t"
"sync\n\t" "sync\n\t"
"fic 0(%%sr3,%0)\n\t" "fic 0(%%sr3,%0)\n\t"
"fic %1(%%sr3,%0)\n\t" "fic %1(%%sr3,%0)\n\t"
"sync\n\t" "sync\n\t"
: : "r" (frame->tramp), "r" (L1_CACHE_BYTES)); : : "r" (frame->tramp), "r" (L1_CACHE_BYTES));
#endif #endif
rp = (unsigned long) frame->tramp; rp = (unsigned long) frame->tramp;
if (err) if (err)
goto give_sigsegv; goto give_sigsegv;
#ifdef __LP64__
/* Much more has to happen with signals than this -- but it'll at least */ /* Much more has to happen with signals than this -- but it'll at least */
/* provide a pointer to some places which definitely need a look. */ /* provide a pointer to some places which definitely need a look. */
#define HACK unsigned int #define HACK u32
#else
#define HACK unsigned long haddr = (HACK)A(ka->sa.sa_handler);
#endif
haddr = (HACK) ka->sa.sa_handler;
/* ARGH! Fucking brain damage. You don't want to know. */ /* ARGH! Fucking brain damage. You don't want to know. */
if (haddr & 2) { if (haddr & 2) {
HACK *plabel; HACK *plabel;
...@@ -355,13 +358,13 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -355,13 +358,13 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
regs->gr[2] = rp; /* userland return pointer */ regs->gr[2] = rp; /* userland return pointer */
regs->gr[26] = sig; /* signal number */ regs->gr[26] = sig; /* signal number */
regs->gr[25] = (HACK) &frame->info; /* siginfo pointer */ regs->gr[25] = (HACK)A(&frame->info); /* siginfo pointer */
regs->gr[24] = (HACK) &frame->uc; /* ucontext pointer */ regs->gr[24] = (HACK)A(&frame->uc); /* ucontext pointer */
DBG(("making sigreturn frame: %#lx + %#x = %#lx\n", DBG(("making sigreturn frame: %#lx + %#x = %#lx\n",
regs->gr[30], PARISC_RT_SIGFRAME_SIZE, regs->gr[30], PARISC_RT_SIGFRAME_SIZE,
regs->gr[30] + PARISC_RT_SIGFRAME_SIZE)); regs->gr[30] + PARISC_RT_SIGFRAME_SIZE));
/* Raise the user stack pointer to make a proper call frame. */ /* Raise the user stack pointer to make a proper call frame. */
regs->gr[30] = ((HACK) frame + PARISC_RT_SIGFRAME_SIZE); regs->gr[30] = ((HACK)A(frame) + PARISC_RT_SIGFRAME_SIZE);
DBG(("SIG deliver (%s:%d): frame=0x%p sp=%#lx iaoq=%#lx/%#lx rp=%#lx\n", DBG(("SIG deliver (%s:%d): frame=0x%p sp=%#lx iaoq=%#lx/%#lx rp=%#lx\n",
current->comm, current->pid, frame, regs->gr[30], current->comm, current->pid, frame, regs->gr[30],
......
/* mostly borrowed from kernel/signal.c */ /* mostly borrowed from kernel/signal.c */
#include <linux/config.h> #include <linux/config.h>
#include <linux/compat.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/unistd.h> #include <linux/unistd.h>
...@@ -175,7 +176,7 @@ sys32_rt_sigaction(int sig, const struct sigaction32 *act, struct sigaction32 *o ...@@ -175,7 +176,7 @@ sys32_rt_sigaction(int sig, const struct sigaction32 *act, struct sigaction32 *o
typedef struct { typedef struct {
unsigned int ss_sp; unsigned int ss_sp;
int ss_flags; int ss_flags;
__kernel_size_t32 ss_size; compat_size_t ss_size;
} stack_t32; } stack_t32;
int int
......
...@@ -516,7 +516,7 @@ static struct task_struct *fork_by_hand(void) ...@@ -516,7 +516,7 @@ static struct task_struct *fork_by_hand(void)
* don't care about the regs settings since * don't care about the regs settings since
* we'll never reschedule the forked task. * we'll never reschedule the forked task.
*/ */
return do_fork(CLONE_VM|CLONE_IDLETASK, 0, &regs, 0, NULL); return do_fork(CLONE_VM|CLONE_IDLETASK, 0, &regs, 0, NULL, NULL);
} }
......
...@@ -12,11 +12,6 @@ ...@@ -12,11 +12,6 @@
set_fs (old_fs); \ set_fs (old_fs); \
} }
struct timeval32 {
int tv_sec;
int tv_usec;
};
typedef __u32 __sighandler_t32; typedef __u32 __sighandler_t32;
#include <linux/signal.h> #include <linux/signal.h>
......
...@@ -308,3 +308,32 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on) ...@@ -308,3 +308,32 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
{ {
return -ENOSYS; return -ENOSYS;
} }
/*
* Set a given TLS descriptor:
*/
asmlinkage int sys_set_thread_area(struct user_desc *u_info)
{
return -ENOSYS;
}
/*
* Get the current Thread-Local Storage area:
*/
asmlinkage int sys_get_thread_area(struct user_desc *u_info)
{
return -ENOSYS;
}
asmlinkage unsigned long sys_alloc_hugepages(int key, unsigned long addr, unsigned long len, int prot, int flag)
{
return -ENOMEM;
}
asmlinkage int sys_free_hugepages(unsigned long addr)
{
return -EINVAL;
}
...@@ -10,13 +10,13 @@ ...@@ -10,13 +10,13 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/compat.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/utime.h>
#include <linux/resource.h> #include <linux/resource.h>
#include <linux/times.h> #include <linux/times.h>
#include <linux/utsname.h> #include <linux/utsname.h>
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <linux/smb_mount.h> #include <linux/smb_mount.h>
#include <linux/ncp_fs.h> #include <linux/ncp_fs.h>
#include <linux/quota.h> #include <linux/quota.h>
#include <linux/module.h>
#include <linux/sunrpc/svc.h> #include <linux/sunrpc/svc.h>
#include <linux/nfsd/nfsd.h> #include <linux/nfsd/nfsd.h>
#include <linux/nfsd/cache.h> #include <linux/nfsd/cache.h>
...@@ -383,105 +382,6 @@ asmlinkage long sys32_fstatfs(unsigned int fd, struct statfs32 * buf) ...@@ -383,105 +382,6 @@ asmlinkage long sys32_fstatfs(unsigned int fd, struct statfs32 * buf)
return error; return error;
} }
/* These may not work without my local types changes, but I wanted the
* code available in case it's useful to others. -PB
*/
/* from utime.h */
struct utimbuf32 {
__kernel_time_t32 actime;
__kernel_time_t32 modtime;
};
asmlinkage long sys32_utime(char *filename, struct utimbuf32 *times)
{
struct utimbuf32 times32;
struct utimbuf times64;
extern long sys_utime(char *filename, struct utimbuf *times);
char *fname;
long ret;
if (!times)
return sys_utime(filename, NULL);
/* get the 32-bit struct from user space */
if (copy_from_user(&times32, times, sizeof times32))
return -EFAULT;
/* convert it into the 64-bit one */
times64.actime = times32.actime;
times64.modtime = times32.modtime;
/* grab the file name */
fname = getname(filename);
KERNEL_SYSCALL(ret, sys_utime, fname, &times64);
/* free the file name */
putname(fname);
return ret;
}
struct tms32 {
__kernel_clock_t32 tms_utime;
__kernel_clock_t32 tms_stime;
__kernel_clock_t32 tms_cutime;
__kernel_clock_t32 tms_cstime;
};
asmlinkage long sys32_times(struct tms32 *tbuf)
{
struct tms t;
long ret;
extern asmlinkage long sys_times(struct tms * tbuf);
int err;
KERNEL_SYSCALL(ret, sys_times, tbuf ? &t : NULL);
if (tbuf) {
err = put_user (t.tms_utime, &tbuf->tms_utime);
err |= __put_user (t.tms_stime, &tbuf->tms_stime);
err |= __put_user (t.tms_cutime, &tbuf->tms_cutime);
err |= __put_user (t.tms_cstime, &tbuf->tms_cstime);
if (err)
ret = -EFAULT;
}
return ret;
}
struct flock32 {
short l_type;
short l_whence;
__kernel_off_t32 l_start;
__kernel_off_t32 l_len;
__kernel_pid_t32 l_pid;
};
static inline int get_flock(struct flock *kfl, struct flock32 *ufl)
{
int err;
err = get_user(kfl->l_type, &ufl->l_type);
err |= __get_user(kfl->l_whence, &ufl->l_whence);
err |= __get_user(kfl->l_start, &ufl->l_start);
err |= __get_user(kfl->l_len, &ufl->l_len);
err |= __get_user(kfl->l_pid, &ufl->l_pid);
return err;
}
static inline int put_flock(struct flock *kfl, struct flock32 *ufl)
{
int err;
err = __put_user(kfl->l_type, &ufl->l_type);
err |= __put_user(kfl->l_whence, &ufl->l_whence);
err |= __put_user(kfl->l_start, &ufl->l_start);
err |= __put_user(kfl->l_len, &ufl->l_len);
err |= __put_user(kfl->l_pid, &ufl->l_pid);
return err;
}
extern asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg); extern asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg)
...@@ -494,7 +394,7 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg ...@@ -494,7 +394,7 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg
struct flock f; struct flock f;
long ret; long ret;
if(get_flock(&f, (struct flock32 *)arg)) if (get_compat_flock(&f, (struct compat_flock *)arg))
return -EFAULT; return -EFAULT;
KERNEL_SYSCALL(ret, sys_fcntl, fd, cmd, (unsigned long)&f); KERNEL_SYSCALL(ret, sys_fcntl, fd, cmd, (unsigned long)&f);
if (ret) return ret; if (ret) return ret;
...@@ -502,7 +402,7 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg ...@@ -502,7 +402,7 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg
f.l_len >= 0x7fffffffUL || f.l_len >= 0x7fffffffUL ||
f.l_start + f.l_len >= 0x7fffffffUL) f.l_start + f.l_len >= 0x7fffffffUL)
return -EOVERFLOW; return -EOVERFLOW;
if(put_flock(&f, (struct flock32 *)arg)) if (put_compat_flock(&f, (struct compat_flock *)arg))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
...@@ -585,71 +485,33 @@ asmlinkage long sys32_sysctl(struct __sysctl_args *args) ...@@ -585,71 +485,33 @@ asmlinkage long sys32_sysctl(struct __sysctl_args *args)
} }
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
struct timespec32 {
s32 tv_sec;
s32 tv_nsec;
};
static int
put_timespec32(struct timespec32 *u, struct timespec *t)
{
struct timespec32 t32;
t32.tv_sec = t->tv_sec;
t32.tv_nsec = t->tv_nsec;
return copy_to_user(u, &t32, sizeof t32);
}
asmlinkage int sys32_nanosleep(struct timespec32 *rqtp, struct timespec32 *rmtp)
{
struct timespec t;
struct timespec32 t32;
int ret;
extern asmlinkage int sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp);
if (copy_from_user(&t32, rqtp, sizeof t32))
return -EFAULT;
t.tv_sec = t32.tv_sec;
t.tv_nsec = t32.tv_nsec;
DBG(("sys32_nanosleep({%d, %d})\n", t32.tv_sec, t32.tv_nsec));
KERNEL_SYSCALL(ret, sys_nanosleep, &t, rmtp ? &t : NULL);
if (rmtp && ret == -EINTR) {
if (put_timespec32(rmtp, &t))
return -EFAULT;
}
return ret;
}
asmlinkage long sys32_sched_rr_get_interval(pid_t pid, asmlinkage long sys32_sched_rr_get_interval(pid_t pid,
struct timespec32 *interval) struct compat_timespec *interval)
{ {
struct timespec t; struct timespec t;
int ret; int ret;
extern asmlinkage long sys_sched_rr_get_interval(pid_t pid, struct timespec *interval); extern asmlinkage long sys_sched_rr_get_interval(pid_t pid, struct timespec *interval);
KERNEL_SYSCALL(ret, sys_sched_rr_get_interval, pid, &t); KERNEL_SYSCALL(ret, sys_sched_rr_get_interval, pid, &t);
if (put_timespec32(interval, &t)) if (put_compat_timespec(&t, interval))
return -EFAULT; return -EFAULT;
return ret; return ret;
} }
typedef __kernel_time_t32 time_t32;
static int static int
put_timeval32(struct timeval32 *u, struct timeval *t) put_compat_timeval(struct compat_timeval *u, struct timeval *t)
{ {
struct timeval32 t32; struct compat_timeval t32;
t32.tv_sec = t->tv_sec; t32.tv_sec = t->tv_sec;
t32.tv_usec = t->tv_usec; t32.tv_usec = t->tv_usec;
return copy_to_user(u, &t32, sizeof t32); return copy_to_user(u, &t32, sizeof t32);
} }
static int static int
get_timeval32(struct timeval32 *u, struct timeval *t) get_compat_timeval(struct compat_timeval *u, struct timeval *t)
{ {
int err; int err;
struct timeval32 t32; struct compat_timeval t32;
if ((err = copy_from_user(&t32, u, sizeof t32)) == 0) if ((err = copy_from_user(&t32, u, sizeof t32)) == 0)
{ {
...@@ -659,10 +521,10 @@ get_timeval32(struct timeval32 *u, struct timeval *t) ...@@ -659,10 +521,10 @@ get_timeval32(struct timeval32 *u, struct timeval *t)
return err; return err;
} }
asmlinkage long sys32_time(time_t32 *tloc) asmlinkage long sys32_time(compat_time_t *tloc)
{ {
time_t now = get_seconds(); time_t now = get_seconds();
time_t32 now32 = now; compat_time_t now32 = now;
if (tloc) if (tloc)
if (put_user(now32, tloc)) if (put_user(now32, tloc))
...@@ -672,14 +534,14 @@ asmlinkage long sys32_time(time_t32 *tloc) ...@@ -672,14 +534,14 @@ asmlinkage long sys32_time(time_t32 *tloc)
} }
asmlinkage int asmlinkage int
sys32_gettimeofday(struct timeval32 *tv, struct timezone *tz) sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz)
{ {
extern void do_gettimeofday(struct timeval *tv); extern void do_gettimeofday(struct timeval *tv);
if (tv) { if (tv) {
struct timeval ktv; struct timeval ktv;
do_gettimeofday(&ktv); do_gettimeofday(&ktv);
if (put_timeval32(tv, &ktv)) if (put_compat_timeval(tv, &ktv))
return -EFAULT; return -EFAULT;
} }
if (tz) { if (tz) {
...@@ -691,14 +553,14 @@ sys32_gettimeofday(struct timeval32 *tv, struct timezone *tz) ...@@ -691,14 +553,14 @@ sys32_gettimeofday(struct timeval32 *tv, struct timezone *tz)
} }
asmlinkage int asmlinkage int
sys32_settimeofday(struct timeval32 *tv, struct timezone *tz) sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz)
{ {
struct timeval ktv; struct timeval ktv;
struct timezone ktz; struct timezone ktz;
extern int do_sys_settimeofday(struct timeval *tv, struct timezone *tz); extern int do_sys_settimeofday(struct timeval *tv, struct timezone *tz);
if (tv) { if (tv) {
if (get_timeval32(tv, &ktv)) if (get_compat_timeval(tv, &ktv))
return -EFAULT; return -EFAULT;
} }
if (tz) { if (tz) {
...@@ -709,67 +571,9 @@ sys32_settimeofday(struct timeval32 *tv, struct timezone *tz) ...@@ -709,67 +571,9 @@ sys32_settimeofday(struct timeval32 *tv, struct timezone *tz)
return do_sys_settimeofday(tv ? &ktv : NULL, tz ? &ktz : NULL); return do_sys_settimeofday(tv ? &ktv : NULL, tz ? &ktz : NULL);
} }
struct itimerval32 {
struct timeval32 it_interval; /* timer interval */
struct timeval32 it_value; /* current value */
};
asmlinkage long sys32_getitimer(int which, struct itimerval32 *ov32)
{
int error = -EFAULT;
struct itimerval get_buffer;
extern int do_getitimer(int which, struct itimerval *value);
if (ov32) {
error = do_getitimer(which, &get_buffer);
if (!error) {
struct itimerval32 gb32;
gb32.it_interval.tv_sec = get_buffer.it_interval.tv_sec;
gb32.it_interval.tv_usec = get_buffer.it_interval.tv_usec;
gb32.it_value.tv_sec = get_buffer.it_value.tv_sec;
gb32.it_value.tv_usec = get_buffer.it_value.tv_usec;
if (copy_to_user(ov32, &gb32, sizeof(gb32)))
error = -EFAULT;
}
}
return error;
}
asmlinkage long sys32_setitimer(int which, struct itimerval32 *v32,
struct itimerval32 *ov32)
{
struct itimerval set_buffer, get_buffer;
struct itimerval32 sb32, gb32;
extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ov32);
int error;
if (v32) {
if(copy_from_user(&sb32, v32, sizeof(sb32)))
return -EFAULT;
set_buffer.it_interval.tv_sec = sb32.it_interval.tv_sec;
set_buffer.it_interval.tv_usec = sb32.it_interval.tv_usec;
set_buffer.it_value.tv_sec = sb32.it_value.tv_sec;
set_buffer.it_value.tv_usec = sb32.it_value.tv_usec;
} else
memset((char *) &set_buffer, 0, sizeof(set_buffer));
error = do_setitimer(which, &set_buffer, ov32 ? &get_buffer : 0);
if (error || !ov32)
return error;
gb32.it_interval.tv_sec = get_buffer.it_interval.tv_sec;
gb32.it_interval.tv_usec = get_buffer.it_interval.tv_usec;
gb32.it_value.tv_sec = get_buffer.it_value.tv_sec;
gb32.it_value.tv_usec = get_buffer.it_value.tv_usec;
if (copy_to_user(ov32, &gb32, sizeof(gb32)))
return -EFAULT;
return 0;
}
struct rusage32 { struct rusage32 {
struct timeval32 ru_utime; struct compat_timeval ru_utime;
struct timeval32 ru_stime; struct compat_timeval ru_stime;
int ru_maxrss; int ru_maxrss;
int ru_ixrss; int ru_ixrss;
int ru_idrss; int ru_idrss;
...@@ -824,7 +628,7 @@ sys32_getrusage(int who, struct rusage32 *ru) ...@@ -824,7 +628,7 @@ sys32_getrusage(int who, struct rusage32 *ru)
} }
asmlinkage int asmlinkage int
sys32_wait4(__kernel_pid_t32 pid, unsigned int * stat_addr, int options, sys32_wait4(compat_pid_t pid, unsigned int * stat_addr, int options,
struct rusage32 * ru) struct rusage32 * ru)
{ {
if (!ru) if (!ru)
...@@ -842,41 +646,13 @@ sys32_wait4(__kernel_pid_t32 pid, unsigned int * stat_addr, int options, ...@@ -842,41 +646,13 @@ sys32_wait4(__kernel_pid_t32 pid, unsigned int * stat_addr, int options,
} }
} }
struct stat32 { int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
__kernel_dev_t32 st_dev; /* dev_t is 32 bits on parisc */
__kernel_ino_t32 st_ino; /* 32 bits */
__kernel_mode_t32 st_mode; /* 16 bits */
__kernel_nlink_t32 st_nlink; /* 16 bits */
unsigned short st_reserved1; /* old st_uid */
unsigned short st_reserved2; /* old st_gid */
__kernel_dev_t32 st_rdev;
__kernel_off_t32 st_size;
__kernel_time_t32 st_atime;
unsigned int st_spare1;
__kernel_time_t32 st_mtime;
unsigned int st_spare2;
__kernel_time_t32 st_ctime;
unsigned int st_spare3;
int st_blksize;
int st_blocks;
unsigned int __unused1; /* ACL stuff */
__kernel_dev_t32 __unused2; /* network */
__kernel_ino_t32 __unused3; /* network */
unsigned int __unused4; /* cnodes */
unsigned short __unused5; /* netsite */
short st_fstype;
__kernel_dev_t32 st_realdev;
unsigned short st_basemode;
unsigned short st_spareshort;
__kernel_uid_t32 st_uid;
__kernel_gid_t32 st_gid;
unsigned int st_spare4[3];
};
static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
{ {
int err; int err;
if (stat->size > MAX_NON_LFS)
return -EOVERFLOW;
err = put_user(stat->dev, &statbuf->st_dev); err = put_user(stat->dev, &statbuf->st_dev);
err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->ino, &statbuf->st_ino);
err |= put_user(stat->mode, &statbuf->st_mode); err |= put_user(stat->mode, &statbuf->st_mode);
...@@ -884,15 +660,13 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf) ...@@ -884,15 +660,13 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
err |= put_user(0, &statbuf->st_reserved1); err |= put_user(0, &statbuf->st_reserved1);
err |= put_user(0, &statbuf->st_reserved2); err |= put_user(0, &statbuf->st_reserved2);
err |= put_user(stat->rdev, &statbuf->st_rdev); err |= put_user(stat->rdev, &statbuf->st_rdev);
if (stat->size > MAX_NON_LFS)
return -EOVERFLOW;
err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->size, &statbuf->st_size);
err |= put_user(stat->atime, &statbuf->st_atime); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime);
err |= put_user(0, &statbuf->st_spare1); err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec);
err |= put_user(stat->mtime, &statbuf->st_mtime); err |= put_user(stat->mtime.tv_sec, &statbuf->st_mtime);
err |= put_user(0, &statbuf->st_spare2); err |= put_user(stat->mtime.tv_nsec, &statbuf->st_mtime_nsec);
err |= put_user(stat->ctime, &statbuf->st_ctime); err |= put_user(stat->ctime.tv_sec, &statbuf->st_ctime);
err |= put_user(0, &statbuf->st_spare3); err |= put_user(stat->ctime.tv_nsec, &statbuf->st_ctime_nsec);
err |= put_user(stat->blksize, &statbuf->st_blksize); err |= put_user(stat->blksize, &statbuf->st_blksize);
err |= put_user(stat->blocks, &statbuf->st_blocks); err |= put_user(stat->blocks, &statbuf->st_blocks);
err |= put_user(0, &statbuf->__unused1); err |= put_user(0, &statbuf->__unused1);
...@@ -913,44 +687,11 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf) ...@@ -913,44 +687,11 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf)
return err; return err;
} }
asmlinkage long sys32_newstat(char * filename, struct stat32 *statbuf)
{
struct kstat stat;
int error = vfs_stat(filename, &stat);
if (!error)
error = cp_new_stat32(&stat, statbuf);
return error;
}
asmlinkage long sys32_newlstat(char * filename, struct stat32 *statbuf)
{
struct kstat stat;
int error = vfs_lstat(filename, &stat);
if (!error)
error = cp_new_stat32(&stat, statbuf);
return error;
}
asmlinkage long sys32_newfstat(unsigned int fd, struct stat32 *statbuf)
{
struct kstat stat;
int error = vfs_fstat(fd, &stat);
if (!error)
error = cp_new_stat32(&stat, statbuf);
return error;
}
struct linux32_dirent { struct linux32_dirent {
u32 d_ino; u32 d_ino;
__kernel_off_t32 d_off; compat_off_t d_off;
u16 d_reclen; u16 d_reclen;
char d_name[1]; char d_name[1];
}; };
struct old_linux32_dirent { struct old_linux32_dirent {
...@@ -1243,380 +984,6 @@ asmlinkage int sys32_mount(char *dev_name, char *dir_name, char *type, unsigned ...@@ -1243,380 +984,6 @@ asmlinkage int sys32_mount(char *dev_name, char *dir_name, char *type, unsigned
} }
#ifdef CONFIG_MODULES
struct module_info32 {
u32 addr;
u32 size;
u32 flags;
s32 usecount;
};
/* Query various bits about modules. */
static inline long
get_mod_name(const char *user_name, char **buf)
{
unsigned long page;
long retval;
if ((unsigned long)user_name >= TASK_SIZE
&& !segment_eq(get_fs (), KERNEL_DS))
return -EFAULT;
page = __get_free_page(GFP_KERNEL);
if (!page)
return -ENOMEM;
retval = strncpy_from_user((char *)page, user_name, PAGE_SIZE);
if (retval > 0) {
if (retval < PAGE_SIZE) {
*buf = (char *)page;
return retval;
}
retval = -ENAMETOOLONG;
} else if (!retval)
retval = -EINVAL;
free_page(page);
return retval;
}
static inline void
put_mod_name(char *buf)
{
free_page((unsigned long)buf);
}
static __inline__ struct module *find_module(const char *name)
{
struct module *mod;
for (mod = module_list; mod ; mod = mod->next) {
if (mod->flags & MOD_DELETED)
continue;
if (!strcmp(mod->name, name))
break;
}
return mod;
}
static int
qm_modules(char *buf, size_t bufsize, __kernel_size_t32 *ret)
{
struct module *mod;
size_t nmod, space, len;
nmod = space = 0;
for (mod = module_list; mod->next != NULL; mod = mod->next, ++nmod) {
len = strlen(mod->name)+1;
if (len > bufsize)
goto calc_space_needed;
if (copy_to_user(buf, mod->name, len))
return -EFAULT;
buf += len;
bufsize -= len;
space += len;
}
if (put_user(nmod, ret))
return -EFAULT;
else
return 0;
calc_space_needed:
space += len;
while ((mod = mod->next)->next != NULL)
space += strlen(mod->name)+1;
if (put_user(space, ret))
return -EFAULT;
else
return -ENOSPC;
}
static int
qm_deps(struct module *mod, char *buf, size_t bufsize, __kernel_size_t32 *ret)
{
size_t i, space, len;
if (mod->next == NULL)
return -EINVAL;
if (!MOD_CAN_QUERY(mod))
return put_user(0, ret);
space = 0;
for (i = 0; i < mod->ndeps; ++i) {
const char *dep_name = mod->deps[i].dep->name;
len = strlen(dep_name)+1;
if (len > bufsize)
goto calc_space_needed;
if (copy_to_user(buf, dep_name, len))
return -EFAULT;
buf += len;
bufsize -= len;
space += len;
}
return put_user(i, ret);
calc_space_needed:
space += len;
while (++i < mod->ndeps)
space += strlen(mod->deps[i].dep->name)+1;
if (put_user(space, ret))
return -EFAULT;
else
return -ENOSPC;
}
static int
qm_refs(struct module *mod, char *buf, size_t bufsize, __kernel_size_t32 *ret)
{
size_t nrefs, space, len;
struct module_ref *ref;
if (mod->next == NULL)
return -EINVAL;
if (!MOD_CAN_QUERY(mod))
if (put_user(0, ret))
return -EFAULT;
else
return 0;
space = 0;
for (nrefs = 0, ref = mod->refs; ref ; ++nrefs, ref = ref->next_ref) {
const char *ref_name = ref->ref->name;
len = strlen(ref_name)+1;
if (len > bufsize)
goto calc_space_needed;
if (copy_to_user(buf, ref_name, len))
return -EFAULT;
buf += len;
bufsize -= len;
space += len;
}
if (put_user(nrefs, ret))
return -EFAULT;
else
return 0;
calc_space_needed:
space += len;
while ((ref = ref->next_ref) != NULL)
space += strlen(ref->ref->name)+1;
if (put_user(space, ret))
return -EFAULT;
else
return -ENOSPC;
}
static inline int
qm_symbols(struct module *mod, char *buf, size_t bufsize, __kernel_size_t32 *ret)
{
size_t i, space, len;
struct module_symbol *s;
char *strings;
unsigned *vals;
if (!MOD_CAN_QUERY(mod))
if (put_user(0, ret))
return -EFAULT;
else
return 0;
space = mod->nsyms * 2*sizeof(u32);
i = len = 0;
s = mod->syms;
if (space > bufsize)
goto calc_space_needed;
if (!access_ok(VERIFY_WRITE, buf, space))
return -EFAULT;
bufsize -= space;
vals = (unsigned *)buf;
strings = buf+space;
for (; i < mod->nsyms ; ++i, ++s, vals += 2) {
len = strlen(s->name)+1;
if (len > bufsize)
goto calc_space_needed;
if (copy_to_user(strings, s->name, len)
|| __put_user(s->value, vals+0)
|| __put_user(space, vals+1))
return -EFAULT;
strings += len;
bufsize -= len;
space += len;
}
if (put_user(i, ret))
return -EFAULT;
else
return 0;
calc_space_needed:
for (; i < mod->nsyms; ++i, ++s)
space += strlen(s->name)+1;
if (put_user(space, ret))
return -EFAULT;
else
return -ENOSPC;
}
static inline int
qm_info(struct module *mod, char *buf, size_t bufsize, __kernel_size_t32 *ret)
{
int error = 0;
if (mod->next == NULL)
return -EINVAL;
if (sizeof(struct module_info32) <= bufsize) {
struct module_info32 info;
info.addr = (unsigned long)mod;
info.size = mod->size;
info.flags = mod->flags;
info.usecount =
((mod_member_present(mod, can_unload)
&& mod->can_unload)
? -1 : atomic_read(&mod->uc.usecount));
if (copy_to_user(buf, &info, sizeof(struct module_info32)))
return -EFAULT;
} else
error = -ENOSPC;
if (put_user(sizeof(struct module_info32), ret))
return -EFAULT;
return error;
}
asmlinkage int sys32_query_module(char *name_user, int which, char *buf, __kernel_size_t32 bufsize, __kernel_size_t32 *ret)
{
struct module *mod;
int err;
lock_kernel();
if (name_user == 0) {
/* This finds "kernel_module" which is not exported. */
for(mod = module_list; mod->next != NULL; mod = mod->next)
;
} else {
long namelen;
char *name;
if ((namelen = get_mod_name(name_user, &name)) < 0) {
err = namelen;
goto out;
}
err = -ENOENT;
if (namelen == 0) {
/* This finds "kernel_module" which is not exported. */
for(mod = module_list; mod->next != NULL; mod = mod->next)
;
} else if ((mod = find_module(name)) == NULL) {
put_mod_name(name);
goto out;
}
put_mod_name(name);
}
switch (which)
{
case 0:
err = 0;
break;
case QM_MODULES:
err = qm_modules(buf, bufsize, ret);
break;
case QM_DEPS:
err = qm_deps(mod, buf, bufsize, ret);
break;
case QM_REFS:
err = qm_refs(mod, buf, bufsize, ret);
break;
case QM_SYMBOLS:
err = qm_symbols(mod, buf, bufsize, ret);
break;
case QM_INFO:
err = qm_info(mod, buf, bufsize, ret);
break;
default:
err = -EINVAL;
break;
}
out:
unlock_kernel();
return err;
}
struct kernel_sym32 {
u32 value;
char name[60];
};
extern asmlinkage int sys_get_kernel_syms(struct kernel_sym *table);
asmlinkage int sys32_get_kernel_syms(struct kernel_sym32 *table)
{
int len, i;
struct kernel_sym *tbl;
mm_segment_t old_fs;
len = sys_get_kernel_syms(NULL);
if (!table) return len;
tbl = kmalloc (len * sizeof (struct kernel_sym), GFP_KERNEL);
if (!tbl) return -ENOMEM;
old_fs = get_fs();
set_fs (KERNEL_DS);
sys_get_kernel_syms(tbl);
set_fs (old_fs);
for (i = 0; i < len; i++, table++) {
if (put_user (tbl[i].value, &table->value) ||
copy_to_user (table->name, tbl[i].name, 60))
break;
}
kfree (tbl);
return i;
}
#else /* CONFIG_MODULES */
asmlinkage int
sys32_query_module(const char *name_user, int which, char *buf, size_t bufsize,
size_t *ret)
{
/* Let the program know about the new interface. Not that
it'll do them much good. */
if (which == 0)
return 0;
return -ENOSYS;
}
asmlinkage int
sys32_get_kernel_syms(struct kernel_sym *table)
{
return -ENOSYS;
}
#endif /* CONFIG_MODULES */
/* readv/writev stolen from mips64 */ /* readv/writev stolen from mips64 */
struct iovec32 { unsigned int iov_base; int iov_len; }; struct iovec32 { unsigned int iov_base; int iov_len; };
...@@ -1659,7 +1026,7 @@ do_readv_writev32(int type, struct file *file, const struct iovec32 *vector, ...@@ -1659,7 +1026,7 @@ do_readv_writev32(int type, struct file *file, const struct iovec32 *vector,
__get_user(buf, &vector->iov_base); __get_user(buf, &vector->iov_base);
tot_len += len; tot_len += len;
ivp->iov_base = (void *)A(buf); ivp->iov_base = (void *)A(buf);
ivp->iov_len = (__kernel_size_t) len; ivp->iov_len = (compat_size_t) len;
vector++; vector++;
ivp++; ivp++;
i--; i--;
...@@ -1774,19 +1141,19 @@ sys32_writev(int fd, struct iovec32 *vector, u32 count) ...@@ -1774,19 +1141,19 @@ sys32_writev(int fd, struct iovec32 *vector, u32 count)
extern struct socket *sockfd_lookup(int fd, int *err); extern struct socket *sockfd_lookup(int fd, int *err);
struct msghdr32 { struct msghdr32 {
u32 msg_name; u32 msg_name;
int msg_namelen; int msg_namelen;
u32 msg_iov; u32 msg_iov;
__kernel_size_t32 msg_iovlen; compat_size_t msg_iovlen;
u32 msg_control; u32 msg_control;
__kernel_size_t32 msg_controllen; compat_size_t msg_controllen;
unsigned msg_flags; unsigned msg_flags;
}; };
struct cmsghdr32 { struct cmsghdr32 {
__kernel_size_t32 cmsg_len; compat_size_t cmsg_len;
int cmsg_level; int cmsg_level;
int cmsg_type; int cmsg_type;
}; };
/* Bleech... */ /* Bleech... */
...@@ -1918,7 +1285,7 @@ static int cmsghdr_from_user32_to_kern(struct msghdr *kmsg, ...@@ -1918,7 +1285,7 @@ static int cmsghdr_from_user32_to_kern(struct msghdr *kmsg,
{ {
struct cmsghdr32 *ucmsg; struct cmsghdr32 *ucmsg;
struct cmsghdr *kcmsg, *kcmsg_base; struct cmsghdr *kcmsg, *kcmsg_base;
__kernel_size_t32 ucmlen; compat_size_t ucmlen;
__kernel_size_t kcmlen, tmp; __kernel_size_t kcmlen, tmp;
kcmlen = 0; kcmlen = 0;
...@@ -2284,7 +1651,7 @@ asmlinkage int sys32_recvmsg(int fd, struct msghdr32 *user_msg, unsigned int use ...@@ -2284,7 +1651,7 @@ asmlinkage int sys32_recvmsg(int fd, struct msghdr32 *user_msg, unsigned int use
err = move_addr_to_user(addr, kern_msg.msg_namelen, uaddr, uaddr_len); err = move_addr_to_user(addr, kern_msg.msg_namelen, uaddr, uaddr_len);
if(cmsg_ptr != 0 && err >= 0) { if(cmsg_ptr != 0 && err >= 0) {
unsigned long ucmsg_ptr = ((unsigned long)kern_msg.msg_control); unsigned long ucmsg_ptr = ((unsigned long)kern_msg.msg_control);
__kernel_size_t32 uclen = (__kernel_size_t32) (ucmsg_ptr - cmsg_ptr); compat_size_t uclen = (compat_size_t) (ucmsg_ptr - cmsg_ptr);
err |= __put_user(uclen, &user_msg->msg_controllen); err |= __put_user(uclen, &user_msg->msg_controllen);
} }
if(err >= 0) if(err >= 0)
...@@ -2591,7 +1958,7 @@ static inline void select_bits_free(void *bits, int size) ...@@ -2591,7 +1958,7 @@ static inline void select_bits_free(void *bits, int size)
#define DIVIDE_ROUND_UP(x,y) (((x)+(y)-1)/(y)) #define DIVIDE_ROUND_UP(x,y) (((x)+(y)-1)/(y))
asmlinkage long asmlinkage long
sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct timeval32 *tvp) sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct compat_timeval *tvp)
{ {
fd_set_bits fds; fd_set_bits fds;
char *bits; char *bits;
...@@ -2600,7 +1967,7 @@ sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct timeval32 *tvp) ...@@ -2600,7 +1967,7 @@ sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct timeval32 *tvp)
timeout = MAX_SCHEDULE_TIMEOUT; timeout = MAX_SCHEDULE_TIMEOUT;
if (tvp) { if (tvp) {
struct timeval32 tv32; struct compat_timeval tv32;
time_t sec, usec; time_t sec, usec;
if ((ret = copy_from_user(&tv32, tvp, sizeof tv32))) if ((ret = copy_from_user(&tv32, tvp, sizeof tv32)))
...@@ -2761,37 +2128,37 @@ asmlinkage long sys32_fcntl64(unsigned int fd, unsigned int cmd, unsigned long a ...@@ -2761,37 +2128,37 @@ asmlinkage long sys32_fcntl64(unsigned int fd, unsigned int cmd, unsigned long a
default: default:
break; break;
} }
return sys_fcntl(fd, cmd, arg); return sys32_fcntl(fd, cmd, arg);
} }
/* EXPORT/UNEXPORT */ /* EXPORT/UNEXPORT */
struct nfsctl_export32 { struct nfsctl_export32 {
char ex_client[NFSCLNT_IDMAX+1]; char ex_client[NFSCLNT_IDMAX+1];
char ex_path[NFS_MAXPATHLEN+1]; char ex_path[NFS_MAXPATHLEN+1];
__kernel_dev_t ex_dev; __kernel_dev_t ex_dev;
__kernel_ino_t32 ex_ino; compat_ino_t ex_ino;
int ex_flags; int ex_flags;
__kernel_uid_t ex_anon_uid; __kernel_uid_t ex_anon_uid;
__kernel_gid_t ex_anon_gid; __kernel_gid_t ex_anon_gid;
}; };
/* GETFH */ /* GETFH */
struct nfsctl_fhparm32 { struct nfsctl_fhparm32 {
struct sockaddr gf_addr; struct sockaddr gf_addr;
__kernel_dev_t gf_dev; __kernel_dev_t gf_dev;
__kernel_ino_t32 gf_ino; compat_ino_t gf_ino;
int gf_version; int gf_version;
}; };
/* UGIDUPDATE */ /* UGIDUPDATE */
struct nfsctl_uidmap32 { struct nfsctl_uidmap32 {
__kernel_caddr_t32 ug_ident; compat_caddr_t ug_ident;
__kernel_uid_t ug_uidbase; __kernel_uid_t ug_uidbase;
int ug_uidlen; int ug_uidlen;
__kernel_caddr_t32 ug_udimap; compat_caddr_t ug_udimap;
__kernel_gid_t ug_gidbase; __kernel_gid_t ug_gidbase;
int ug_gidlen; int ug_gidlen;
__kernel_caddr_t32 ug_gdimap; compat_caddr_t ug_gdimap;
}; };
struct nfsctl_arg32 { struct nfsctl_arg32 {
...@@ -2877,7 +2244,8 @@ asmlinkage int sys32_nfsservctl(int cmd, void *argp, void *resp) ...@@ -2877,7 +2244,8 @@ asmlinkage int sys32_nfsservctl(int cmd, void *argp, void *resp)
break; break;
default: default:
BUG(); /* new cmd values to be translated... */ /* lockd probes for some other values (0x10000);
* so don't BUG() */
ret = -EINVAL; ret = -EINVAL;
break; break;
} }
...@@ -2904,8 +2272,8 @@ struct dqblk32 { ...@@ -2904,8 +2272,8 @@ struct dqblk32 {
__u32 dqb_ihardlimit; __u32 dqb_ihardlimit;
__u32 dqb_isoftlimit; __u32 dqb_isoftlimit;
__u32 dqb_curinodes; __u32 dqb_curinodes;
__kernel_time_t32 dqb_btime; compat_time_t dqb_btime;
__kernel_time_t32 dqb_itime; compat_time_t dqb_itime;
}; };
...@@ -2954,6 +2322,31 @@ asmlinkage int sys32_quotactl(int cmd, const char *special, int id, unsigned lon ...@@ -2954,6 +2322,31 @@ asmlinkage int sys32_quotactl(int cmd, const char *special, int id, unsigned lon
return -EINVAL; return -EINVAL;
} }
extern asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t *offset, size_t count);
typedef long __kernel_loff_t32; /* move this to asm/posix_types.h? */
asmlinkage int sys32_sendfile64(int out_fd, int in_fd, __kernel_loff_t32 *offset, s32 count)
{
mm_segment_t old_fs = get_fs();
int ret;
loff_t lof;
if (offset && get_user(lof, offset))
return -EFAULT;
set_fs(KERNEL_DS);
ret = sys_sendfile64(out_fd, in_fd, offset ? &lof : NULL, count);
set_fs(old_fs);
if (offset && put_user(lof, offset))
return -EFAULT;
return ret;
}
struct timex32 { struct timex32 {
unsigned int modes; /* mode selector */ unsigned int modes; /* mode selector */
int offset; /* time offset (usec) */ int offset; /* time offset (usec) */
...@@ -2966,7 +2359,7 @@ struct timex32 { ...@@ -2966,7 +2359,7 @@ struct timex32 {
int tolerance; /* clock frequency tolerance (ppm) int tolerance; /* clock frequency tolerance (ppm)
* (read only) * (read only)
*/ */
struct timeval32 time; /* (read only) */ struct compat_timeval time; /* (read only) */
int tick; /* (modified) usecs between clock ticks */ int tick; /* (modified) usecs between clock ticks */
int ppsfreq; /* pps frequency (scaled ppm) (ro) */ int ppsfreq; /* pps frequency (scaled ppm) (ro) */
...@@ -3101,3 +2494,11 @@ asmlinkage long sys32_semctl_broken(int semid, int semnum, int cmd, union semun ...@@ -3101,3 +2494,11 @@ asmlinkage long sys32_semctl_broken(int semid, int semnum, int cmd, union semun
return sys_semctl (semid, semnum, cmd, arg); return sys_semctl (semid, semnum, cmd, arg);
} }
extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len);
long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf,
size_t len)
{
return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
buf, len);
}
...@@ -23,12 +23,6 @@ ...@@ -23,12 +23,6 @@
#endif #endif
.text .text
#ifdef __LP64__
#define FRAME_SIZE 128
#else
#define FRAME_SIZE 64
#endif
.import syscall_exit,code .import syscall_exit,code
.import syscall_exit_rfi,code .import syscall_exit_rfi,code
.export linux_gateway_page .export linux_gateway_page
...@@ -99,9 +93,9 @@ linux_gateway_entry: ...@@ -99,9 +93,9 @@ linux_gateway_entry:
*/ */
mtsp %r0,%sr7 /* get kernel space into sr7 */ mtsp %r0,%sr7 /* get kernel space into sr7 */
STREG %r1,0(%r30) /* Stick r1 (usp) here for now */ STREGM %r1,FRAME_SIZE(%r30) /* save r1 (usp) here for now */
mfctl %cr30,%r1 /* get task ptr in %r1 */ mfctl %cr30,%r1 /* get task ptr in %r1 */
LDREG 0(%r1),%r1 LDREG TI_TASK(%r1),%r1
/* Save some registers for sigcontext and potential task /* Save some registers for sigcontext and potential task
switch (see entry.S for the details of which ones are switch (see entry.S for the details of which ones are
...@@ -110,7 +104,7 @@ linux_gateway_entry: ...@@ -110,7 +104,7 @@ linux_gateway_entry:
PSW value is stored. This is needed for gdb and sys_ptrace. */ PSW value is stored. This is needed for gdb and sys_ptrace. */
STREG %r0, TASK_PT_PSW(%r1) STREG %r0, TASK_PT_PSW(%r1)
STREG %r2, TASK_PT_GR2(%r1) /* preserve rp */ STREG %r2, TASK_PT_GR2(%r1) /* preserve rp */
LDREG 0(%r30), %r2 /* get users sp back */ LDREGM -FRAME_SIZE(%r30), %r2 /* get users sp back */
STREG %r2, TASK_PT_GR30(%r1) /* ... and save it */ STREG %r2, TASK_PT_GR30(%r1) /* ... and save it */
STREG %r19, TASK_PT_GR19(%r1) STREG %r19, TASK_PT_GR19(%r1)
STREG %r20, TASK_PT_GR20(%r1) STREG %r20, TASK_PT_GR20(%r1)
...@@ -204,7 +198,7 @@ tracesys: ...@@ -204,7 +198,7 @@ tracesys:
* in the saved PSW. * in the saved PSW.
*/ */
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */ ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
LDREG 0(%r1), %r1 LDREG TI_TASK(%r1), %r1
ssm 0,%r2 ssm 0,%r2
STREG %r2,TASK_PT_PSW(%r1) /* Lower 8 bits only!! */ STREG %r2,TASK_PT_PSW(%r1) /* Lower 8 bits only!! */
mfsp %sr0,%r2 mfsp %sr0,%r2
...@@ -255,7 +249,7 @@ tracesys_next: ...@@ -255,7 +249,7 @@ tracesys_next:
ldo R%sys_call_table(%r1), %r19 ldo R%sys_call_table(%r1), %r19
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */ ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
LDREG 0(%r1), %r1 LDREG TI_TASK(%r1), %r1
LDREG TASK_PT_GR20(%r1), %r20 LDREG TASK_PT_GR20(%r1), %r20
LDREG TASK_PT_GR26(%r1), %r26 /* Restore the users args */ LDREG TASK_PT_GR26(%r1), %r26 /* Restore the users args */
LDREG TASK_PT_GR25(%r1), %r25 LDREG TASK_PT_GR25(%r1), %r25
...@@ -292,14 +286,14 @@ tracesys_next: ...@@ -292,14 +286,14 @@ tracesys_next:
tracesys_exit: tracesys_exit:
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */ ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
LDREG 0(%r1), %r1 LDREG TI_TASK(%r1), %r1
#ifdef __LP64__ #ifdef __LP64__
ldo -16(%r30),%r29 /* Reference param save area */ ldo -16(%r30),%r29 /* Reference param save area */
#endif #endif
bl syscall_trace, %r2 bl syscall_trace, %r2
STREG %r28,TASK_PT_GR28(%r1) /* save return value now */ STREG %r28,TASK_PT_GR28(%r1) /* save return value now */
ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */ ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
LDREG 0(%r1), %r1 LDREG TI_TASK(%r1), %r1
LDREG TASK_PT_GR28(%r1), %r28 /* Restore return val. */ LDREG TASK_PT_GR28(%r1), %r28 /* Restore return val. */
ldil L%syscall_exit,%r1 ldil L%syscall_exit,%r1
...@@ -332,11 +326,13 @@ tracesys_sigexit: ...@@ -332,11 +326,13 @@ tracesys_sigexit:
#define ENTRY_DIFF(_name_) .dword sys32_##_name_ #define ENTRY_DIFF(_name_) .dword sys32_##_name_
#define ENTRY_UHOH(_name_) .dword sys32_##unimplemented #define ENTRY_UHOH(_name_) .dword sys32_##unimplemented
#define ENTRY_OURS(_name_) .dword parisc_##_name_ #define ENTRY_OURS(_name_) .dword parisc_##_name_
#define ENTRY_COMP(_name_) .dword compat_sys_##_name_
#else #else
#define ENTRY_SAME(_name_) .word sys_##_name_ #define ENTRY_SAME(_name_) .word sys_##_name_
#define ENTRY_DIFF(_name_) .word sys_##_name_ #define ENTRY_DIFF(_name_) .word sys_##_name_
#define ENTRY_UHOH(_name_) .word sys_##_name_ #define ENTRY_UHOH(_name_) .word sys_##_name_
#define ENTRY_OURS(_name_) .word parisc_##_name_ #define ENTRY_OURS(_name_) .word parisc_##_name_
#define ENTRY_COMP(_name_) .word sys_##_name_
#endif #endif
.align 8 .align 8
...@@ -363,7 +359,7 @@ sys_call_table: ...@@ -363,7 +359,7 @@ sys_call_table:
ENTRY_SAME(lchown) ENTRY_SAME(lchown)
ENTRY_SAME(socket) ENTRY_SAME(socket)
/* struct stat is MAYBE identical wide and narrow ?? */ /* struct stat is MAYBE identical wide and narrow ?? */
ENTRY_DIFF(newstat) ENTRY_COMP(newstat)
ENTRY_DIFF(lseek) ENTRY_DIFF(lseek)
ENTRY_SAME(getpid) /* 20 */ ENTRY_SAME(getpid) /* 20 */
/* the 'void * data' parameter may need re-packing in wide */ /* the 'void * data' parameter may need re-packing in wide */
...@@ -378,10 +374,10 @@ sys_call_table: ...@@ -378,10 +374,10 @@ sys_call_table:
ENTRY_SAME(ptrace) ENTRY_SAME(ptrace)
ENTRY_SAME(alarm) ENTRY_SAME(alarm)
/* see stat comment */ /* see stat comment */
ENTRY_DIFF(newfstat) ENTRY_COMP(newfstat)
ENTRY_SAME(pause) ENTRY_SAME(pause)
/* struct utimbuf uses time_t which might vary */ /* struct utimbuf uses time_t which might vary */
ENTRY_DIFF(utime) /* 30 */ ENTRY_COMP(utime) /* 30 */
/* struct sockaddr... */ /* struct sockaddr... */
ENTRY_SAME(connect) ENTRY_SAME(connect)
ENTRY_SAME(listen) ENTRY_SAME(listen)
...@@ -396,7 +392,7 @@ sys_call_table: ...@@ -396,7 +392,7 @@ sys_call_table:
ENTRY_SAME(rmdir) /* 40 */ ENTRY_SAME(rmdir) /* 40 */
ENTRY_SAME(dup) ENTRY_SAME(dup)
ENTRY_SAME(pipe) ENTRY_SAME(pipe)
ENTRY_DIFF(times) ENTRY_COMP(times)
/* struct sockaddr... */ /* struct sockaddr... */
ENTRY_SAME(getsockname) ENTRY_SAME(getsockname)
/* it seems possible brk() could return a >4G pointer... */ /* it seems possible brk() could return a >4G pointer... */
...@@ -447,7 +443,7 @@ sys_call_table: ...@@ -447,7 +443,7 @@ sys_call_table:
ENTRY_SAME(sendto) ENTRY_SAME(sendto)
ENTRY_SAME(symlink) ENTRY_SAME(symlink)
/* see stat comment */ /* see stat comment */
ENTRY_DIFF(newlstat) ENTRY_COMP(newlstat)
ENTRY_SAME(readlink) /* 85 */ ENTRY_SAME(readlink) /* 85 */
/* suspect we'll need some work for narrow shlibs on wide kernel */ /* suspect we'll need some work for narrow shlibs on wide kernel */
/* NOTE this doesn't get used when I boot 32-bit userspace */ /* NOTE this doesn't get used when I boot 32-bit userspace */
...@@ -474,8 +470,8 @@ sys_call_table: ...@@ -474,8 +470,8 @@ sys_call_table:
ENTRY_SAME(syslog) ENTRY_SAME(syslog)
/* even though manpage says struct timeval contains longs, ours has /* even though manpage says struct timeval contains longs, ours has
* time_t and suseconds_t -- both of which are safe wide/narrow */ * time_t and suseconds_t -- both of which are safe wide/narrow */
ENTRY_DIFF(setitimer) ENTRY_COMP(setitimer)
ENTRY_DIFF(getitimer) /* 105 */ ENTRY_COMP(getitimer) /* 105 */
ENTRY_SAME(capget) ENTRY_SAME(capget)
ENTRY_SAME(capset) ENTRY_SAME(capset)
ENTRY_OURS(pread64) ENTRY_OURS(pread64)
...@@ -501,13 +497,10 @@ sys_call_table: ...@@ -501,13 +497,10 @@ sys_call_table:
ENTRY_SAME(mprotect) /* 125 */ ENTRY_SAME(mprotect) /* 125 */
/* old_sigset_t forced to 32 bits. Beware glibc sigset_t */ /* old_sigset_t forced to 32 bits. Beware glibc sigset_t */
ENTRY_DIFF(sigprocmask) ENTRY_DIFF(sigprocmask)
ENTRY_SAME(create_module) ENTRY_SAME(ni_syscall) /* create_module */
/* struct module contains longs, but insmod builds a 64 bit struct
* if running under a 64 bit kernel */
ENTRY_SAME(init_module) ENTRY_SAME(init_module)
ENTRY_SAME(delete_module) ENTRY_SAME(delete_module)
/* struct kernel_sym contains a long. Linus never heard of size_t? */ ENTRY_SAME(ni_syscall) /* 130: get_kernel_syms */
ENTRY_DIFF(get_kernel_syms) /* 130 */
/* time_t inside struct dqblk */ /* time_t inside struct dqblk */
ENTRY_DIFF(quotactl) /* -- FIXME, doesn't work */ ENTRY_DIFF(quotactl) /* -- FIXME, doesn't work */
ENTRY_SAME(getpgid) ENTRY_SAME(getpgid)
...@@ -551,13 +544,12 @@ sys_call_table: ...@@ -551,13 +544,12 @@ sys_call_table:
* carefully, like timeval for example (which is about the same). * carefully, like timeval for example (which is about the same).
* Unfortunately it contains a long :-( */ * Unfortunately it contains a long :-( */
ENTRY_DIFF(sched_rr_get_interval) ENTRY_DIFF(sched_rr_get_interval)
ENTRY_DIFF(nanosleep) ENTRY_COMP(nanosleep)
ENTRY_SAME(mremap) ENTRY_SAME(mremap)
ENTRY_SAME(setresuid) ENTRY_SAME(setresuid)
ENTRY_SAME(getresuid) /* 165 */ ENTRY_SAME(getresuid) /* 165 */
ENTRY_DIFF(sigaltstack_wrapper) ENTRY_DIFF(sigaltstack_wrapper)
/* struct passed back to user can contain long symbol values */ ENTRY_SAME(ni_syscall) /* query_module */
ENTRY_DIFF(query_module)
ENTRY_SAME(poll) ENTRY_SAME(poll)
/* structs contain pointers and an in_addr... */ /* structs contain pointers and an in_addr... */
ENTRY_DIFF(nfsservctl) ENTRY_DIFF(nfsservctl)
...@@ -609,11 +601,31 @@ sys_call_table: ...@@ -609,11 +601,31 @@ sys_call_table:
#else #else
ENTRY_SAME(ni_syscall) ENTRY_SAME(ni_syscall)
ENTRY_SAME(ni_syscall) ENTRY_SAME(ni_syscall)
ENTRY_SAME(ni_syscall) ENTRY_SAME(ni_syscall) /* 205 */
#endif #endif
ENTRY_SAME(gettid) ENTRY_SAME(gettid)
ENTRY_SAME(readahead) ENTRY_SAME(readahead)
ENTRY_SAME(ni_syscall) /* tkill */ ENTRY_SAME(ni_syscall) /* tkill */
ENTRY_SAME(sendfile64)
ENTRY_SAME(futex) /* 210 */
ENTRY_SAME(sched_setaffinity)
ENTRY_SAME(sched_getaffinity)
ENTRY_SAME(set_thread_area)
ENTRY_SAME(get_thread_area)
ENTRY_SAME(io_setup) /* 215 */
ENTRY_SAME(io_destroy)
ENTRY_SAME(io_getevents)
ENTRY_SAME(io_submit)
ENTRY_SAME(io_cancel)
ENTRY_SAME(alloc_hugepages) /* 220 */
ENTRY_SAME(free_hugepages)
ENTRY_SAME(exit_group)
ENTRY_DIFF(lookup_dcookie)
ENTRY_SAME(epoll_create)
ENTRY_SAME(epoll_ctl) /* 225 */
ENTRY_SAME(epoll_wait)
ENTRY_SAME(remap_file_pages)
.end .end
/* Make sure nothing else is placed on this page */ /* Make sure nothing else is placed on this page */
......
...@@ -46,13 +46,29 @@ extern void smp_do_timer(struct pt_regs *regs); ...@@ -46,13 +46,29 @@ extern void smp_do_timer(struct pt_regs *regs);
#endif #endif
static inline void static inline void
parisc_do_profile(unsigned long pc) parisc_do_profile(struct pt_regs *regs)
{ {
unsigned long pc = regs->iaoq[0];
extern unsigned long prof_cpu_mask;
extern char _stext; extern char _stext;
#ifdef CONFIG_PROFILING
extern void parisc_profile_hook(struct pt_regs *);
parisc_profile_hook(regs);
#endif
if (user_mode(regs))
return;
if (!prof_buffer) if (!prof_buffer)
return; return;
#if 0
if (!((1 << smp_processor_id()) & prof_cpu_mask))
return;
#endif
pc -= (unsigned long) &_stext; pc -= (unsigned long) &_stext;
pc >>= prof_shift; pc >>= prof_shift;
/* /*
...@@ -67,13 +83,15 @@ parisc_do_profile(unsigned long pc) ...@@ -67,13 +83,15 @@ parisc_do_profile(unsigned long pc)
void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{ {
long now = mfctl(16); long now;
long next_tick; long next_tick;
int nticks; int nticks;
int cpu = smp_processor_id(); int cpu = smp_processor_id();
/* initialize next_tick to time at last clocktick */ parisc_do_profile(regs);
now = mfctl(16);
/* initialize next_tick to time at last clocktick */
next_tick = cpu_data[cpu].it_value; next_tick = cpu_data[cpu].it_value;
/* since time passes between the interrupt and the mfctl() /* since time passes between the interrupt and the mfctl()
...@@ -98,13 +116,6 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -98,13 +116,6 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
#endif #endif
if (cpu == 0) { if (cpu == 0) {
write_lock(&xtime_lock); write_lock(&xtime_lock);
#ifndef CONFIG_SMP
extern int pc_in_user_space;
if (!user_mode(regs))
parisc_do_profile(regs->iaoq[0]);
else
parisc_do_profile((unsigned long)&pc_in_user_space);
#endif
do_timer(regs); do_timer(regs);
write_unlock(&xtime_lock); write_unlock(&xtime_lock);
} }
...@@ -240,3 +251,4 @@ void __init time_init(void) ...@@ -240,3 +251,4 @@ void __init time_init(void)
xtime.tv_nsec = 0; xtime.tv_nsec = 0;
} }
} }
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/kallsyms.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -42,7 +43,7 @@ ...@@ -42,7 +43,7 @@
#define PRINT_USER_FAULTS /* (turn this on if you want user faults to be */ #define PRINT_USER_FAULTS /* (turn this on if you want user faults to be */
/* dumped to the console via printk) */ /* dumped to the console via printk) */
static int printbinary(char *buf, unsigned long x, int nbits) int printbinary(char *buf, unsigned long x, int nbits)
{ {
unsigned long mask = 1UL << (nbits - 1); unsigned long mask = 1UL << (nbits - 1);
while (mask != 0) { while (mask != 0) {
...@@ -192,6 +193,19 @@ void show_trace_task(struct task_struct *tsk) ...@@ -192,6 +193,19 @@ void show_trace_task(struct task_struct *tsk)
void die_if_kernel(char *str, struct pt_regs *regs, long err) void die_if_kernel(char *str, struct pt_regs *regs, long err)
{ {
if (user_mode(regs)) {
if (err == 0)
return; /* STFU */
printk(KERN_CRIT "%s (pid %d): %s (code %ld) at " RFMT "\n",
current->comm, current->pid, str, err, regs->iaoq[0]);
#ifdef PRINT_USER_FAULTS
/* XXX for debugging only */
show_regs(regs);
#endif
return;
}
/* Amuse the user in a SPARC fashion */ /* Amuse the user in a SPARC fashion */
printk( printk(
" _______________________________ \n" " _______________________________ \n"
...@@ -202,19 +216,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err) ...@@ -202,19 +216,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
" (__)\\ )\\/\\\n" " (__)\\ )\\/\\\n"
" U ||----w |\n" " U ||----w |\n"
" || ||\n"); " || ||\n");
if (user_mode(regs)) {
#ifdef PRINT_USER_FAULTS
if (err == 0)
return; /* STFU */
/* XXX for debugging only */
printk(KERN_DEBUG "%s (pid %d): %s (code %ld)\n",
current->comm, current->pid, str, err);
show_regs(regs);
#endif
return;
}
/* unlock the pdc lock if necessary */ /* unlock the pdc lock if necessary */
pdc_emergency_unlock(); pdc_emergency_unlock();
......
/* $Id: unaligned.c,v 1.1 2002/07/20 16:27:06 rhirst Exp $ /*
*
* Unaligned memory access handler * Unaligned memory access handler
* *
* Copyright (C) 2001 Randolph Chung <tausq@debian.org> * Copyright (C) 2001 Randolph Chung <tausq@debian.org>
* Significantly tweaked by LaMont Jones <lamont@debian.org>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/module.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -66,28 +67,28 @@ ...@@ -66,28 +67,28 @@
#define OPCODE3_MASK OPCODE3(0x3f,1) #define OPCODE3_MASK OPCODE3(0x3f,1)
#define OPCODE4_MASK OPCODE4(0x3f) #define OPCODE4_MASK OPCODE4(0x3f)
/* skip LDB (index) */ /* skip LDB - never unaligned (index) */
#define OPCODE_LDH_I OPCODE1(0x03,0,0x1) #define OPCODE_LDH_I OPCODE1(0x03,0,0x1)
#define OPCODE_LDW_I OPCODE1(0x03,0,0x2) #define OPCODE_LDW_I OPCODE1(0x03,0,0x2)
#define OPCODE_LDD_I OPCODE1(0x03,0,0x3) #define OPCODE_LDD_I OPCODE1(0x03,0,0x3)
#define OPCODE_LDDA_I OPCODE1(0x03,0,0x4) #define OPCODE_LDDA_I OPCODE1(0x03,0,0x4)
/* skip LDCD (index) */ #define OPCODE_LDCD_I OPCODE1(0x03,0,0x5)
#define OPCODE_LDWA_I OPCODE1(0x03,0,0x6) #define OPCODE_LDWA_I OPCODE1(0x03,0,0x6)
/* skip LDCW (index) */ #define OPCODE_LDCW_I OPCODE1(0x03,0,0x7)
/* skip LDB (short) */ /* skip LDB - never unaligned (short) */
#define OPCODE_LDH_S OPCODE1(0x03,1,0x1) #define OPCODE_LDH_S OPCODE1(0x03,1,0x1)
#define OPCODE_LDW_S OPCODE1(0x03,1,0x2) #define OPCODE_LDW_S OPCODE1(0x03,1,0x2)
#define OPCODE_LDD_S OPCODE1(0x03,1,0x3) #define OPCODE_LDD_S OPCODE1(0x03,1,0x3)
#define OPCODE_LDDA_S OPCODE1(0x03,1,0x4) #define OPCODE_LDDA_S OPCODE1(0x03,1,0x4)
/* skip LDCD (short) */ #define OPCODE_LDCD_S OPCODE1(0x03,1,0x5)
#define OPCODE_LDWA_S OPCODE1(0x03,1,0x6) #define OPCODE_LDWA_S OPCODE1(0x03,1,0x6)
/* skip LDCW (short) */ #define OPCODE_LDCW_S OPCODE1(0x03,1,0x7)
/* skip STB */ /* skip STB - never unaligned */
#define OPCODE_STH OPCODE1(0x03,1,0x9) #define OPCODE_STH OPCODE1(0x03,1,0x9)
#define OPCODE_STW OPCODE1(0x03,1,0xa) #define OPCODE_STW OPCODE1(0x03,1,0xa)
#define OPCODE_STD OPCODE1(0x03,1,0xb) #define OPCODE_STD OPCODE1(0x03,1,0xb)
/* skip STBY */ /* skip STBY - never unaligned */
/* skip STDBY */ /* skip STDBY - never unaligned */
#define OPCODE_STWA OPCODE1(0x03,1,0xe) #define OPCODE_STWA OPCODE1(0x03,1,0xe)
#define OPCODE_STDA OPCODE1(0x03,1,0xf) #define OPCODE_STDA OPCODE1(0x03,1,0xf)
...@@ -103,129 +104,200 @@ ...@@ -103,129 +104,200 @@
#define OPCODE_LDH_L OPCODE4(0x11) #define OPCODE_LDH_L OPCODE4(0x11)
#define OPCODE_LDW_L OPCODE4(0x12) #define OPCODE_LDW_L OPCODE4(0x12)
#define OPCODE_LDW_L2 OPCODE4(0x13) #define OPCODE_LDWM OPCODE4(0x13)
#define OPCODE_STH_L OPCODE4(0x19) #define OPCODE_STH_L OPCODE4(0x19)
#define OPCODE_STW_L OPCODE4(0x1A) #define OPCODE_STW_L OPCODE4(0x1A)
#define OPCODE_STW_L2 OPCODE4(0x1B) #define OPCODE_STWM OPCODE4(0x1B)
#define MAJOR_OP(i) (((i)>>26)&0x3f)
#define R1(i) (((i)>>21)&0x1f)
#define R2(i) (((i)>>16)&0x1f)
#define R3(i) ((i)&0x1f)
#define IM(i,n) (((i)>>1&((1<<(n-1))-1))|((i)&1?((0-1L)<<(n-1)):0))
#define IM5_2(i) IM((i)>>16,5)
#define IM5_3(i) IM((i),5)
#define IM14(i) IM((i),14)
int unaligned_enabled = 1;
void die_if_kernel (char *str, struct pt_regs *regs, long err); void die_if_kernel (char *str, struct pt_regs *regs, long err);
static int emulate_load(struct pt_regs *regs, int len, int toreg) static int emulate_ldh(struct pt_regs *regs, int toreg)
{ {
unsigned long saddr = regs->ior; unsigned long saddr = regs->ior;
unsigned long val = 0; unsigned long val = 0;
int ret = 0;
if (regs->isr != regs->sr[7]) DPRINTF("load " RFMT ":" RFMT " to r%d for 2 bytes\n",
{ regs->isr, regs->ior, toreg);
printk(KERN_CRIT "isr verification failed (isr: " RFMT ", sr7: " RFMT "\n",
regs->isr, regs->sr[7]);
return 1;
}
DPRINTF("load " RFMT ":" RFMT " to r%d for %d bytes\n", __asm__ __volatile__ (
regs->isr, regs->ior, toreg, len); " mtsp %3, %%sr1\n"
" ldbs 0(%%sr1,%2), %%r20\n"
" ldbs 1(%%sr1,%2), %0\n"
"depw %%r20, 23, 24, %0\n"
: "=r" (val)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r20" );
DPRINTF("val = 0x" RFMT "\n", val);
if (toreg)
regs->gr[toreg] = val;
return 0;
}
static int emulate_ldw(struct pt_regs *regs, int toreg)
{
unsigned long saddr = regs->ior;
unsigned long val = 0;
DPRINTF("load " RFMT ":" RFMT " to r%d for 4 bytes\n",
regs->isr, regs->ior, toreg);
__asm__ __volatile__ ( __asm__ __volatile__ (
" mfsp %%sr1, %%r20\n" " zdep %2,28,2,%%r19\n" /* r19=(ofs&3)*8 */
" mtsp %6, %%sr1\n" " mtsp %3, %%sr1\n"
" copy %%r0, %0\n" " depw %%r0,31,2,%2\n"
"0: ldbs,ma 1(%%sr1,%4), %%r19\n" " ldw 0(%%sr1,%2),%0\n"
" addi -1, %5, %5\n" " ldw 4(%%sr1,%2),%%r20\n"
" cmpib,>= 0, %5, 2f\n" " subi 32,%%r19,%%r19\n"
" or %%r19, %0, %0\n" " mtctl %%r19,11\n"
" b 0b\n" " vshd %0,%%r20,%0\n"
: "=r" (val)
#ifdef __LP64__ : "0" (val), "r" (saddr), "r" (regs->isr)
"depd,z %0, 55, 56, %0\n" : "r19", "r20" );
#else
"depw,z %0, 23, 24, %0\n" DPRINTF("val = 0x" RFMT "\n", val);
#endif
if (toreg)
"1: ldi 10, %1\n" regs->gr[toreg] = val;
"2: mtsp %%r20, %%sr1\n"
" .section __ex_table,\"a\"\n" return 0;
}
#ifdef __LP64__ #ifdef __LP64__
".dword 0b, (1b-0b)\n" static int emulate_ldd(struct pt_regs *regs, int toreg)
#else {
".word 0b, (1b-0b)\n" unsigned long saddr = regs->ior;
#endif unsigned long val = 0;
".previous\n"
: "=r" (val), "=r" (ret) DPRINTF("load " RFMT ":" RFMT " to r%d for 8 bytes\n",
: "0" (val), "1" (ret), "r" (saddr), "r" (len), "r" (regs->isr) regs->isr, regs->ior, toreg);
__asm__ __volatile__ (
" depd,z %2,60,3,%%r19\n" /* r19=(ofs&7)*8 */
" mtsp %3, %%sr1\n"
" depd %%r0,63,3,%2\n"
" ldd 0(%%sr1,%2),%0\n"
" ldd 8(%%sr1,%2),%%r20\n"
" subi 64,%%r19,%%r19\n"
" mtsar %%r19\n"
" shrpd %0,%%r20,%%sar,%0\n"
: "=r" (val)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r19", "r20" ); : "r19", "r20" );
DPRINTF("val = 0x" RFMT "\n", val); DPRINTF("val = 0x" RFMT "\n", val);
regs->gr[toreg] = val; if (toreg)
regs->gr[toreg] = val;
return ret; return 0;
} }
#endif
static int emulate_store(struct pt_regs *regs, int len, int frreg) static int emulate_sth(struct pt_regs *regs, int frreg)
{ {
int ret = 0; unsigned long val = regs->gr[frreg];
#ifdef __LP64__ if (!frreg)
unsigned long val = regs->gr[frreg] << (64 - (len << 3)); val = 0;
#else
unsigned long val = regs->gr[frreg] << (32 - (len << 3));
#endif
if (regs->isr != regs->sr[7]) DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for 2 bytes\n", frreg,
{ regs->gr[frreg], regs->isr, regs->ior);
printk(KERN_CRIT "isr verification failed (isr: " RFMT ", sr7: " RFMT "\n",
regs->isr, regs->sr[7]); __asm__ __volatile__ (
return 1; " mtsp %2, %%sr1\n"
} " extrw,u %0, 23, 8, %%r19\n"
" stb %0, 1(%%sr1, %1)\n"
" stb %%r19, 0(%%sr1, %1)\n"
:
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19" );
return 0;
}
static int emulate_stw(struct pt_regs *regs, int frreg)
{
unsigned long val = regs->gr[frreg];
if (!frreg)
val = 0;
DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for %d bytes\n", frreg, DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for 4 bytes\n", frreg,
regs->gr[frreg], regs->isr, regs->ior, len); regs->gr[frreg], regs->isr, regs->ior);
__asm__ __volatile__ ( __asm__ __volatile__ (
" mfsp %%sr1, %%r20\n" /* save sr1 */ " mtsp %2, %%sr1\n"
" mtsp %5, %%sr1\n" " zdep %1, 28, 2, %%r19\n"
#ifdef __LP64__ " dep %%r0, 31, 2, %1\n"
"0: extrd,u %2, 7, 8, %%r19\n" " mtsar %%r19\n"
#else " depwi,z -2, %%sar, 32, %%r19\n"
"0: extrw,u %2, 7, 8, %%r19\n" " ldw 0(%%sr1,%1),%%r20\n"
#endif " ldw 4(%%sr1,%1),%%r21\n"
"1: stb,ma %%r19, 1(%%sr1, %3)\n" " vshd %%r0, %0, %%r22\n"
" addi -1, %4, %4\n" " vshd %0, %%r0, %%r1\n"
" cmpib,>= 0, %4, 3f\n" " and %%r20, %%r19, %%r20\n"
" andcm %%r21, %%r19, %%r21\n"
" or %%r22, %%r20, %%r20\n"
" or %%r1, %%r21, %%r21\n"
" stw %%r20,0(%%sr1,%1)\n"
" stw %%r21,4(%%sr1,%1)\n"
:
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r22", "r1" );
return 0;
}
#ifdef __LP64__ #ifdef __LP64__
"depd,z %2, 55, 56, %2\n" static int emulate_std(struct pt_regs *regs, int frreg)
#else {
"depw,z %2, 23, 24, %2\n" unsigned long val = regs->gr[frreg];
#endif if (!frreg)
val = 0;
" b 0b\n" DPRINTF("store r%d (0x" RFMT ") to " RFMT ":" RFMT " for 8 bytes\n", frreg,
" nop\n" regs->gr[frreg], regs->isr, regs->ior);
"2: ldi 11, %0\n"
"3: mtsp %%r20, %%sr1\n"
" .section __ex_table,\"a\"\n"
#ifdef __LP64__
".dword 1b, (2b-1b)\n"
#else
".word 1b, (2b-1b)\n"
#endif
".previous\n"
: "=r" (ret)
: "0" (ret), "r" (val), "r" (regs->ior), "r" (len), "r" (regs->isr)
: "r19", "r20" );
return ret; __asm__ __volatile__ (
" mtsp %2, %%sr1\n"
" depd,z %1, 60, 3, %%r19\n"
" depd %%r0, 63, 3, %1\n"
" mtsar %%r19\n"
" depdi,z -2, %%sar, 64, %%r19\n"
" ldd 0(%%sr1,%1),%%r20\n"
" ldd 8(%%sr1,%1),%%r21\n"
" shrpd %%r0, %0, %%sar, %%r22\n"
" shrpd %0, %%r0, %%sar, %%r1\n"
" and %%r20, %%r19, %%r20\n"
" andcm %%r21, %%r19, %%r21\n"
" or %%r22, %%r20, %%r20\n"
" or %%r1, %%r21, %%r21\n"
" std %%r20,0(%%sr1,%1)\n"
" std %%r21,8(%%sr1,%1)\n"
:
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r22", "r1" );
return 0;
} }
#endif
void handle_unaligned(struct pt_regs *regs) void handle_unaligned(struct pt_regs *regs)
{ {
unsigned long unaligned_count = 0; unsigned long unaligned_count = 0;
unsigned long last_time = 0; unsigned long last_time = 0;
unsigned long newbase = regs->gr[R1(regs->iir)];
int modify = 0;
int ret = -1; int ret = -1;
struct siginfo si; struct siginfo si;
...@@ -242,7 +314,7 @@ void handle_unaligned(struct pt_regs *regs) ...@@ -242,7 +314,7 @@ void handle_unaligned(struct pt_regs *regs)
* exception handler * exception handler
*/ */
fix = search_exception_table(regs->iaoq[0]); fix = search_exception_tables(regs->iaoq[0]);
if (fix) if (fix)
{ {
/* lower bits of fix->skip are flags /* lower bits of fix->skip are flags
...@@ -281,83 +353,172 @@ void handle_unaligned(struct pt_regs *regs) ...@@ -281,83 +353,172 @@ void handle_unaligned(struct pt_regs *regs)
} }
} }
if (!unaligned_enabled)
goto force_sigbus;
/* handle modification - OK, it's ugly, see the instruction manual */
switch (MAJOR_OP(regs->iir))
{
case 0x03:
case 0x09:
case 0x0b:
if (regs->iir&0x20)
{
modify = 1;
if (regs->iir&0x1000) /* short loads */
if (regs->iir&0x200)
newbase += IM5_3(regs->iir);
else
newbase += IM5_2(regs->iir);
else if (regs->iir&0x2000) /* scaled indexed */
{
int shift=0;
switch (regs->iir & OPCODE1_MASK)
{
case OPCODE_LDH_I:
shift= 1; break;
case OPCODE_LDW_I:
shift= 2; break;
case OPCODE_LDD_I:
case OPCODE_LDDA_I:
shift= 3; break;
}
newbase += regs->gr[R2(regs->iir)]<<shift;
} else /* simple indexed */
newbase += regs->gr[R2(regs->iir)];
}
break;
case 0x13:
case 0x1b:
modify = 1;
newbase += IM14(regs->iir);
break;
case 0x14:
case 0x1c:
if (regs->iir&8)
{
modify = 1;
newbase += IM14(regs->iir&~0xe);
}
break;
case 0x16:
case 0x1e:
modify = 1;
newbase += IM14(regs->iir&6);
break;
case 0x17:
case 0x1f:
if (regs->iir&4)
{
modify = 1;
newbase += IM14(regs->iir&~4);
}
break;
}
if (regs->isr != regs->sr[7])
{
printk(KERN_CRIT "isr verification failed (isr: " RFMT ", sr7: " RFMT "\n",
regs->isr, regs->sr[7]);
/* don't kill him though, since he has appropriate access to the page, or we
* would never have gotten here.
*/
}
/* TODO: make this cleaner... */ /* TODO: make this cleaner... */
switch (regs->iir & OPCODE1_MASK) switch (regs->iir & OPCODE1_MASK)
{ {
case OPCODE_LDH_I: case OPCODE_LDH_I:
case OPCODE_LDH_S: case OPCODE_LDH_S:
ret = emulate_load(regs, 2, regs->iir & 0x1f); ret = emulate_ldh(regs, R3(regs->iir));
break; break;
case OPCODE_LDW_I: case OPCODE_LDW_I:
case OPCODE_LDWA_I: case OPCODE_LDWA_I:
case OPCODE_LDW_S: case OPCODE_LDW_S:
case OPCODE_LDWA_S: case OPCODE_LDWA_S:
ret = emulate_load(regs, 4, regs->iir&0x1f); ret = emulate_ldw(regs, R3(regs->iir));
break;
case OPCODE_LDD_I:
case OPCODE_LDDA_I:
case OPCODE_LDD_S:
case OPCODE_LDDA_S:
ret = emulate_load(regs, 8, regs->iir&0x1f);
break; break;
case OPCODE_STH: case OPCODE_STH:
ret = emulate_store(regs, 2, (regs->iir>>16)&0x1f); ret = emulate_sth(regs, R2(regs->iir));
break; break;
case OPCODE_STW: case OPCODE_STW:
case OPCODE_STWA: case OPCODE_STWA:
ret = emulate_store(regs, 4, (regs->iir>>16)&0x1f); ret = emulate_stw(regs, R2(regs->iir));
break;
#ifdef __LP64__
case OPCODE_LDD_I:
case OPCODE_LDDA_I:
case OPCODE_LDD_S:
case OPCODE_LDDA_S:
ret = emulate_ldd(regs, R3(regs->iir));
break; break;
case OPCODE_STD: case OPCODE_STD:
case OPCODE_STDA: case OPCODE_STDA:
ret = emulate_store(regs, 8, (regs->iir>>16)&0x1f); ret = emulate_std(regs, R2(regs->iir));
break;
#endif
case OPCODE_LDCD_I:
case OPCODE_LDCW_I:
case OPCODE_LDCD_S:
case OPCODE_LDCW_S:
ret = -1; /* "undefined", but lets kill them. */
break; break;
} }
#ifdef __LP64__
switch (regs->iir & OPCODE2_MASK) switch (regs->iir & OPCODE2_MASK)
{ {
case OPCODE_LDD_L: case OPCODE_LDD_L:
case OPCODE_FLDD_L: case OPCODE_FLDD_L:
ret = emulate_load(regs, 8, (regs->iir>>16)&0x1f); ret = emulate_ldd(regs, R2(regs->iir));
break; break;
case OPCODE_STD_L: case OPCODE_STD_L:
case OPCODE_FSTD_L: case OPCODE_FSTD_L:
ret = emulate_store(regs, 8, (regs->iir>>16)&0x1f); ret = emulate_std(regs, R2(regs->iir));
break; break;
} }
#endif
switch (regs->iir & OPCODE3_MASK) switch (regs->iir & OPCODE3_MASK)
{ {
case OPCODE_LDW_M: case OPCODE_LDW_M:
case OPCODE_FLDW_L: case OPCODE_FLDW_L:
ret = emulate_load(regs, 4, (regs->iir>>16)&0x1f); ret = emulate_ldw(regs, R2(regs->iir));
break; break;
case OPCODE_FSTW_L: case OPCODE_FSTW_L:
case OPCODE_STW_M: case OPCODE_STW_M:
ret = emulate_store(regs, 4, (regs->iir>>16)&0x1f); ret = emulate_stw(regs, R2(regs->iir));
break; break;
} }
switch (regs->iir & OPCODE4_MASK) switch (regs->iir & OPCODE4_MASK)
{ {
case OPCODE_LDH_L: case OPCODE_LDH_L:
ret = emulate_load(regs, 2, (regs->iir>>16)&0x1f); ret = emulate_ldh(regs, R2(regs->iir));
break; break;
case OPCODE_LDW_L: case OPCODE_LDW_L:
case OPCODE_LDW_L2: case OPCODE_LDWM:
ret = emulate_load(regs, 4, (regs->iir>>16)&0x1f); ret = emulate_ldw(regs, R2(regs->iir));
break; break;
case OPCODE_STH_L: case OPCODE_STH_L:
ret = emulate_store(regs, 2, (regs->iir>>16)&0x1f); ret = emulate_sth(regs, R2(regs->iir));
break; break;
case OPCODE_STW_L: case OPCODE_STW_L:
case OPCODE_STW_L2: case OPCODE_STWM:
ret = emulate_store(regs, 4, (regs->iir>>16)&0x1f); ret = emulate_stw(regs, R2(regs->iir));
break; break;
} }
/* XXX LJ - need to handle float load/store */
if (modify)
regs->gr[R1(regs->iir)] = newbase;
if (ret < 0) if (ret < 0)
printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir);
...@@ -368,7 +529,7 @@ void handle_unaligned(struct pt_regs *regs) ...@@ -368,7 +529,7 @@ void handle_unaligned(struct pt_regs *regs)
{ {
printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret); printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret);
die_if_kernel("Unaligned data reference", regs, 28); die_if_kernel("Unaligned data reference", regs, 28);
force_sigbus:
/* couldn't handle it ... */ /* couldn't handle it ... */
si.si_signo = SIGBUS; si.si_signo = SIGBUS;
si.si_errno = 0; si.si_errno = 0;
...@@ -421,9 +582,9 @@ check_unaligned(struct pt_regs *regs) ...@@ -421,9 +582,9 @@ check_unaligned(struct pt_regs *regs)
align_mask = 1UL; align_mask = 1UL;
break; break;
case OPCODE_LDW_L: case OPCODE_LDW_L:
case OPCODE_LDW_L2: case OPCODE_LDWM:
case OPCODE_STW_L: case OPCODE_STW_L:
case OPCODE_STW_L2: case OPCODE_STWM:
align_mask = 3UL; align_mask = 3UL;
break; break;
} }
...@@ -432,3 +593,4 @@ check_unaligned(struct pt_regs *regs) ...@@ -432,3 +593,4 @@ check_unaligned(struct pt_regs *regs)
return (int)(regs->ior & align_mask); return (int)(regs->ior & align_mask);
} }
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
* Assumes the device can cope with 32-bit transfers. If it can't, * Assumes the device can cope with 32-bit transfers. If it can't,
* don't use this function. * don't use this function.
*/ */
void memcpy_toio(unsigned long dest, const void *src, int count) void __memcpy_toio(unsigned long dest, unsigned long src, int count)
{ {
if ((dest & 3) != ((unsigned long)src & 3)) if ((dest & 3) != (src & 3))
goto bytecopy; goto bytecopy;
while (dest & 3) { while (dest & 3) {
writeb(*(char *)src, dest++); writeb(*(char *)src, dest++);
...@@ -25,7 +25,7 @@ void memcpy_toio(unsigned long dest, const void *src, int count) ...@@ -25,7 +25,7 @@ void memcpy_toio(unsigned long dest, const void *src, int count)
} }
while (count > 3) { while (count > 3) {
__raw_writel(*(u32 *)src, dest); __raw_writel(*(u32 *)src, dest);
(unsigned long) src += 4; src += 4;
dest += 4; dest += 4;
count -= 4; count -= 4;
} }
...@@ -49,13 +49,13 @@ void memcpy_toio(unsigned long dest, const void *src, int count) ...@@ -49,13 +49,13 @@ void memcpy_toio(unsigned long dest, const void *src, int count)
** Minimize total number of transfers at cost of CPU cycles. ** Minimize total number of transfers at cost of CPU cycles.
** TODO: only look at src alignment and adjust the stores to dest. ** TODO: only look at src alignment and adjust the stores to dest.
*/ */
void memcpy_fromio(void *dest, unsigned long src, int count) void __memcpy_fromio(unsigned long dest, unsigned long src, int count)
{ {
/* first compare alignment of src/dst */ /* first compare alignment of src/dst */
if ( (((unsigned long)dest ^ src) & 1) || (count < 2) ) if ( ((dest ^ src) & 1) || (count < 2) )
goto bytecopy; goto bytecopy;
if ( (((unsigned long)dest ^ src) & 2) || (count < 4) ) if ( ((dest ^ src) & 2) || (count < 4) )
goto shortcopy; goto shortcopy;
/* Then check for misaligned start address */ /* Then check for misaligned start address */
...@@ -101,7 +101,7 @@ void memcpy_fromio(void *dest, unsigned long src, int count) ...@@ -101,7 +101,7 @@ void memcpy_fromio(void *dest, unsigned long src, int count)
* Assumes the device can cope with 32-bit transfers. If it can't, * Assumes the device can cope with 32-bit transfers. If it can't,
* don't use this function. * don't use this function.
*/ */
void memset_io(unsigned long dest, char fill, int count) void __memset_io(unsigned long dest, char fill, int count)
{ {
u32 fill32 = (fill << 24) | (fill << 16) | (fill << 8) | fill; u32 fill32 = (fill << 24) | (fill << 16) | (fill << 8) | fill;
while (dest & 3) { while (dest & 3) {
......
...@@ -86,8 +86,12 @@ handle_fpe(struct pt_regs *regs) ...@@ -86,8 +86,12 @@ handle_fpe(struct pt_regs *regs)
int signalcode; int signalcode;
/* need an intermediate copy of float regs because FPU emulation /* need an intermediate copy of float regs because FPU emulation
* code expects an artificial last entry which contains zero * code expects an artificial last entry which contains zero
*
* also, the passed in fr registers contain one word that defines
* the fpu type. the fpu type information is constructed
* inside the emulation code
*/ */
__u64 frcopy[33]; __u64 frcopy[36];
memcpy(frcopy, regs->fr, sizeof regs->fr); memcpy(frcopy, regs->fr, sizeof regs->fr);
frcopy[32] = 0; frcopy[32] = 0;
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#include "float.h" #include "float.h"
#include "types.h" #include "types.h"
#include <asm/processor.h>
/* #include <sys/debug.h> */ /* #include <sys/debug.h> */
/* #include <machine/sys/mdep_private.h> */ /* #include <machine/sys/mdep_private.h> */
...@@ -166,6 +167,20 @@ static void update_status_cbit(); ...@@ -166,6 +167,20 @@ static void update_status_cbit();
#define VASSERT(x) #define VASSERT(x)
static void parisc_linux_get_fpu_type(u_int fpregs[])
{
/* on pa-linux the fpu type is not filled in by the
* caller; it is constructed here
*/
if (boot_cpu_data.cpu_type == pcxs)
fpregs[FPU_TYPE_FLAG_POS] = TIMEX_EXTEN_FLAG;
else if (boot_cpu_data.cpu_type == pcxt ||
boot_cpu_data.cpu_type == pcxt_)
fpregs[FPU_TYPE_FLAG_POS] = ROLEX_EXTEN_FLAG;
else if (boot_cpu_data.cpu_type >= pcxu)
fpregs[FPU_TYPE_FLAG_POS] = PA2_0_FPU_FLAG;
}
/* /*
* this routine will decode the excepting floating point instruction and * this routine will decode the excepting floating point instruction and
* call the approiate emulation routine. * call the approiate emulation routine.
...@@ -184,6 +199,8 @@ fpudispatch(u_int ir, u_int excp_code, u_int holder, u_int fpregs[]) ...@@ -184,6 +199,8 @@ fpudispatch(u_int ir, u_int excp_code, u_int holder, u_int fpregs[])
/* All FP emulation code assumes that ints are 4-bytes in length */ /* All FP emulation code assumes that ints are 4-bytes in length */
VASSERT(sizeof(int) == 4); VASSERT(sizeof(int) == 4);
parisc_linux_get_fpu_type(fpregs);
fpu_type_flags=fpregs[FPU_TYPE_FLAG_POS]; /* get fpu type flags */ fpu_type_flags=fpregs[FPU_TYPE_FLAG_POS]; /* get fpu type flags */
class = get_class(ir); class = get_class(ir);
......
...@@ -5,20 +5,12 @@ ...@@ -5,20 +5,12 @@
* Copyright (C) 2000 John Marvin (jsm@fc.hp.com) * Copyright (C) 2000 John Marvin (jsm@fc.hp.com)
*/ */
#include <linux/config.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/ptrace.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
const struct exception_table_entry *
extern const struct exception_table_entry __start___ex_table[]; search_extable(const struct exception_table_entry *first,
extern const struct exception_table_entry __stop___ex_table[]; const struct exception_table_entry *last,
unsigned long addr)
static inline const struct exception_table_entry *
search_one_table (const struct exception_table_entry *first,
const struct exception_table_entry *last,
unsigned long addr)
{ {
/* Abort early if the search value is out of range. */ /* Abort early if the search value is out of range. */
...@@ -43,27 +35,3 @@ search_one_table (const struct exception_table_entry *first, ...@@ -43,27 +35,3 @@ search_one_table (const struct exception_table_entry *first,
return 0; return 0;
} }
const struct exception_table_entry *
search_exception_table (unsigned long addr)
{
#ifndef CONFIG_MODULES
/* There is only the kernel to search. */
return search_one_table(__start___ex_table,
__stop___ex_table - 1,
addr);
#else
/* The kernel is the last "module" -- no need to treat it special. */
struct module *mp;
for (mp = module_list; mp ; mp = mp->next) {
const struct exception_table_entry *ret;
if (!mp->ex_table_start)
continue;
ret = search_one_table(mp->ex_table_start, mp->ex_table_end - 1,
addr);
if (ret)
return ret;
}
return 0;
#endif
}
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/module.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/traps.h> #include <asm/traps.h>
...@@ -230,7 +231,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, ...@@ -230,7 +231,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
if (!user_mode(regs)) { if (!user_mode(regs)) {
fix = search_exception_table(regs->iaoq[0]); fix = search_exception_tables(regs->iaoq[0]);
if (fix) { if (fix) {
......
menu "Profiling support"
depends on EXPERIMENTAL
config PROFILING
bool "Profiling support (EXPERIMENTAL)"
help
Say Y here to enable the extended profiling support mechanisms used
by profilers such as OProfile.
config OPROFILE
tristate "OProfile system profiling (EXPERIMENTAL)"
depends on PROFILING
help
OProfile is a profiling system capable of profiling the
whole system, include the kernel, kernel modules, libraries,
and applications.
If unsure, say N.
endmenu
obj-$(CONFIG_OPROFILE) += oprofile.o
DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
oprof.o cpu_buffer.o buffer_sync.o \
event_buffer.o oprofile_files.o \
oprofilefs.o oprofile_stats.o )
oprofile-y := $(DRIVER_OBJS) init.o timer_int.o
/**
* @file init.c
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author John Levon <levon@movementarian.org>
*/
#include <linux/kernel.h>
#include <linux/oprofile.h>
#include <linux/init.h>
extern void timer_init(struct oprofile_operations ** ops, enum oprofile_cpu * cpu);
int __init oprofile_arch_init(struct oprofile_operations ** ops, enum oprofile_cpu * cpu)
{
timer_init(ops, cpu);
return 0;
}
/**
* @file timer_int.c
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author John Levon <levon@movementarian.org>
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/notifier.h>
#include <linux/smp.h>
#include <linux/irq.h>
#include <linux/oprofile.h>
#include <asm/ptrace.h>
static int timer_notify(struct notifier_block * self, unsigned long val, void * data)
{
struct pt_regs * regs = (struct pt_regs *)data;
int cpu = smp_processor_id();
oprofile_add_sample(regs->iaoq[0], 0, cpu);
return 0;
}
static struct notifier_block timer_notifier = {
.notifier_call = timer_notify,
};
static int timer_start(void)
{
return register_profile_notifier(&timer_notifier);
}
static void timer_stop(void)
{
unregister_profile_notifier(&timer_notifier);
}
static struct oprofile_operations timer_ops = {
.start = timer_start,
.stop = timer_stop
};
void __init timer_init(struct oprofile_operations ** ops, enum oprofile_cpu * cpu)
{
*ops = &timer_ops;
*cpu = OPROFILE_CPU_TIMER;
printk(KERN_INFO "oprofile: using timer interrupt.\n");
}
...@@ -72,6 +72,9 @@ SECTIONS ...@@ -72,6 +72,9 @@ SECTIONS
__setup_start = .; __setup_start = .;
.init.setup : { *(.init.setup) } .init.setup : { *(.init.setup) }
__setup_end = .; __setup_end = .;
__start___param =.;
__param : { *(__param) }
__stop___param = .;
__initcall_start = .; __initcall_start = .;
.initcall.init : { .initcall.init : {
*(.initcall1.init) *(.initcall1.init)
......
...@@ -102,13 +102,19 @@ ...@@ -102,13 +102,19 @@
.endm .endm
#ifdef __LP64__ #ifdef __LP64__
#define LDREG ldd #define LDREG ldd
#define STREG std #define STREG std
#define LDREGM ldd,mb
#define STREGM std,ma
#define RP_OFFSET 16 #define RP_OFFSET 16
#define FRAME_SIZE 128
#else #else
#define LDREG ldw #define LDREG ldw
#define STREG stw #define STREG stw
#define LDREGM ldwm
#define STREGM stwm
#define RP_OFFSET 20 #define RP_OFFSET 20
#define FRAME_SIZE 64
#endif #endif
.macro loadgp .macro loadgp
......
...@@ -18,8 +18,10 @@ ...@@ -18,8 +18,10 @@
*/ */
#ifdef CONFIG_PA20 #ifdef CONFIG_PA20
#define L1_CACHE_BYTES 64 #define L1_CACHE_BYTES 64
#define L1_CACHE_SHIFT 6
#else #else
#define L1_CACHE_BYTES 32 #define L1_CACHE_BYTES 32
#define L1_CACHE_SHIFT 5
#endif #endif
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
......
...@@ -32,7 +32,8 @@ extern unsigned int csum_partial_copy_from_user(const char *src, char *dst, int ...@@ -32,7 +32,8 @@ extern unsigned int csum_partial_copy_from_user(const char *src, char *dst, int
/* /*
* Optimized for IP headers, which always checksum on 4 octet boundaries. * Optimized for IP headers, which always checksum on 4 octet boundaries.
* *
* Written by Randolph Chung <tausq@debian.org> * Written by Randolph Chung <tausq@debian.org>, and then mucked with by
* LaMont Jones <lamont@debian.org>
*/ */
static inline unsigned short ip_fast_csum(unsigned char * iph, static inline unsigned short ip_fast_csum(unsigned char * iph,
unsigned int ihl) { unsigned int ihl) {
...@@ -41,27 +42,23 @@ static inline unsigned short ip_fast_csum(unsigned char * iph, ...@@ -41,27 +42,23 @@ static inline unsigned short ip_fast_csum(unsigned char * iph,
__asm__ __volatile__ ( __asm__ __volatile__ (
" ldws,ma 4(%1), %0\n" " ldws,ma 4(%1), %0\n"
" addi -4, %2, %2\n" " addib,<= -4, %2, 2f\n"
" comib,>= 0, %2, 2f\n"
"\n" "\n"
" ldws,ma 4(%1), %%r19\n" " ldws 4(%1), %%r20\n"
" add %0, %%r19, %0\n" " ldws 8(%1), %%r21\n"
" ldws,ma 4(%1), %%r19\n" " add %0, %%r20, %0\n"
" addc %0, %%r19, %0\n" " ldws,ma 12(%1), %%r19\n"
" ldws,ma 4(%1), %%r19\n" " addc %0, %%r21, %0\n"
" addc %0, %%r19, %0\n" " addc %0, %%r19, %0\n"
"1: ldws,ma 4(%1), %%r19\n" "1: ldws,ma 4(%1), %%r19\n"
" addib,<> -1, %2, 1b\n" " addib,< 0, %2, 1b\n"
" addc %0, %%r19, %0\n" " addc %0, %%r19, %0\n"
" addc %0, %%r0, %0\n"
"\n" "\n"
" zdepi -1, 31, 16, %%r19\n" " extru %0, 31, 16, %%r20\n"
" and %0, %%r19, %%r20\n"
" extru %0, 15, 16, %%r21\n" " extru %0, 15, 16, %%r21\n"
" add %%r20, %%r21, %0\n" " addc %%r20, %%r21, %0\n"
" and %0, %%r19, %%r20\n"
" extru %0, 15, 16, %%r21\n" " extru %0, 15, 16, %%r21\n"
" add %%r20, %%r21, %0\n" " add %0, %%r21, %0\n"
" subi -1, %0, %0\n" " subi -1, %0, %0\n"
"2:\n" "2:\n"
: "=r" (sum), "=r" (iph), "=r" (ihl) : "=r" (sum), "=r" (iph), "=r" (ihl)
......
#ifndef _ASM_PARISC_COMPAT_H
#define _ASM_PARISC_COMPAT_H
/*
* Architecture specific compatibility types
*/
#include <linux/types.h>
#define COMPAT_USER_HZ 100
typedef u32 compat_size_t;
typedef s32 compat_ssize_t;
typedef s32 compat_time_t;
typedef s32 compat_clock_t;
typedef s32 compat_pid_t;
typedef u32 compat_uid_t;
typedef u32 compat_gid_t;
typedef u16 compat_mode_t;
typedef u32 compat_ino_t;
typedef u32 compat_dev_t;
typedef s32 compat_off_t;
typedef u16 compat_nlink_t;
typedef u16 compat_ipc_pid_t;
typedef s32 compat_daddr_t;
typedef u32 compat_caddr_t;
struct compat_timespec {
compat_time_t tv_sec;
s32 tv_nsec;
};
struct compat_timeval {
compat_time_t tv_sec;
s32 tv_usec;
};
struct compat_stat {
compat_dev_t st_dev; /* dev_t is 32 bits on parisc */
compat_ino_t st_ino; /* 32 bits */
compat_mode_t st_mode; /* 16 bits */
compat_nlink_t st_nlink; /* 16 bits */
u16 st_reserved1; /* old st_uid */
u16 st_reserved2; /* old st_gid */
compat_dev_t st_rdev;
compat_off_t st_size;
compat_time_t st_atime;
u32 st_atime_nsec;
compat_time_t st_mtime;
u32 st_mtime_nsec;
compat_time_t st_ctime;
u32 st_ctime_nsec;
s32 st_blksize;
s32 st_blocks;
u32 __unused1; /* ACL stuff */
compat_dev_t __unused2; /* network */
compat_ino_t __unused3; /* network */
u32 __unused4; /* cnodes */
u16 __unused5; /* netsite */
short st_fstype;
compat_dev_t st_realdev;
u16 st_basemode;
u16 st_spareshort;
compat_uid_t st_uid;
compat_gid_t st_gid;
u32 st_spare4[3];
};
struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};
#endif /* _ASM_PARISC_COMPAT_H */
#ifndef _PARISC_CURRENT_H #ifndef _PARISC_CURRENT_H
#define _PARISC_CURRENT_H #define _PARISC_CURRENT_H
#include <asm/thread_info.h> #include <linux/thread_info.h>
struct task_struct; struct task_struct;
......
#ifndef _PARISC_DMA_MAPPING_H
#define _PARISC_DMA_MAPPING_H
#include <linux/mm.h>
#include <asm/cacheflush.h>
/*
** See Documentation/DMA-mapping.txt
*/
struct hppa_dma_ops {
int (*dma_supported)(struct device *dev, u64 mask);
void *(*alloc_consistent)(struct device *dev, size_t size, dma_addr_t *iova);
void *(*alloc_noncoherent)(struct device *dev, size_t size, dma_addr_t *iova);
void (*free_consistent)(struct device *dev, size_t size, void *vaddr, dma_addr_t iova);
dma_addr_t (*map_single)(struct device *dev, void *addr, size_t size, enum dma_data_direction direction);
void (*unmap_single)(struct device *dev, dma_addr_t iova, size_t size, enum dma_data_direction direction);
int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction);
void (*unmap_sg)(struct device *dev, struct scatterlist *sg, int nhwents, enum dma_data_direction direction);
void (*dma_sync_single)(struct device *dev, dma_addr_t iova, unsigned long offset, size_t size, enum dma_data_direction direction);
void (*dma_sync_sg)(struct device *dev, struct scatterlist *sg, int nelems, enum dma_data_direction direction);
};
/*
** We could live without the hppa_dma_ops indirection if we didn't want
** to support 4 different coherent dma models with one binary (they will
** someday be loadable modules):
** I/O MMU consistent method dma_sync behavior
** ============= ====================== =======================
** a) PA-7x00LC uncachable host memory flush/purge
** b) U2/Uturn cachable host memory NOP
** c) Ike/Astro cachable host memory NOP
** d) EPIC/SAGA memory on EPIC/SAGA flush/reset DMA channel
**
** PA-7[13]00LC processors have a GSC bus interface and no I/O MMU.
**
** Systems (eg PCX-T workstations) that don't fall into the above
** categories will need to modify the needed drivers to perform
** flush/purge and allocate "regular" cacheable pages for everything.
*/
#ifdef CONFIG_PA11
extern struct hppa_dma_ops pcxl_dma_ops;
extern struct hppa_dma_ops pcx_dma_ops;
#endif
extern struct hppa_dma_ops *hppa_dma_ops;
static inline void *
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle)
{
return hppa_dma_ops->alloc_consistent(dev, size, dma_handle);
}
static inline void *
dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle)
{
return hppa_dma_ops->alloc_noncoherent(dev, size, dma_handle);
}
static inline void
dma_free_coherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle)
{
hppa_dma_ops->free_consistent(dev, size, vaddr, dma_handle);
}
static inline void
dma_free_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle)
{
hppa_dma_ops->free_consistent(dev, size, vaddr, dma_handle);
}
static inline dma_addr_t
dma_map_single(struct device *dev, void *ptr, size_t size,
enum dma_data_direction direction)
{
return hppa_dma_ops->map_single(dev, ptr, size, direction);
}
static inline void
dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
enum dma_data_direction direction)
{
hppa_dma_ops->unmap_single(dev, dma_addr, size, direction);
}
static inline int
dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction direction)
{
return hppa_dma_ops->map_sg(dev, sg, nents, direction);
}
static inline void
dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
enum dma_data_direction direction)
{
hppa_dma_ops->unmap_sg(dev, sg, nhwentries, direction);
}
static inline dma_addr_t
dma_map_page(struct device *dev, struct page *page, unsigned long offset,
size_t size, enum dma_data_direction direction)
{
return dma_map_single(dev, (page_address(page) + (offset)), size, direction);
}
static inline void
dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
enum dma_data_direction direction)
{
dma_unmap_single(dev, dma_address, size, direction);
}
static inline void
dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size,
enum dma_data_direction direction)
{
if(hppa_dma_ops->dma_sync_single)
hppa_dma_ops->dma_sync_single(dev, dma_handle, 0, size, direction);
}
static inline void
dma_sync_single_range(struct device *dev, dma_addr_t dma_handle,
unsigned long offset, size_t size,
enum dma_data_direction direction)
{
if(hppa_dma_ops->dma_sync_single)
hppa_dma_ops->dma_sync_single(dev, dma_handle, offset, size, direction);
}
static inline void
dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems,
enum dma_data_direction direction)
{
if(hppa_dma_ops->dma_sync_sg)
hppa_dma_ops->dma_sync_sg(dev, sg, nelems, direction);
}
static inline int
dma_supported(struct device *dev, u64 mask)
{
return hppa_dma_ops->dma_supported(dev, mask);
}
static inline int
dma_set_mask(struct device *dev, u64 mask)
{
if(!dev->dma_mask || !dma_supported(dev, mask))
return -EIO;
*dev->dma_mask = mask;
return 0;
}
static inline int
dma_get_cache_alignment(void)
{
return dcache_stride;
}
static inline int
dma_is_consistent(dma_addr_t dma_addr)
{
return (hppa_dma_ops->dma_sync_single == NULL);
}
static inline void
dma_cache_sync(void *vaddr, size_t size,
enum dma_data_direction direction)
{
if(hppa_dma_ops->dma_sync_single)
flush_kernel_dcache_range((unsigned long)vaddr, size);
}
static inline void *
parisc_walk_tree(struct device *dev)
{
struct device *otherdev;
if(likely(dev->platform_data != NULL))
return dev->platform_data;
/* OK, just traverse the bus to find it */
for(otherdev = dev->parent; otherdev;
otherdev = otherdev->parent) {
if(otherdev->platform_data) {
dev->platform_data = otherdev->platform_data;
break;
}
}
BUG_ON(!dev->platform_data);
return dev->platform_data;
}
#define GET_IOC(dev) (HBA_DATA(parisc_walk_tree(dev))->iommu);
#ifdef CONFIG_IOMMU_CCIO
struct parisc_device;
struct ioc;
void * ccio_get_iommu(const struct parisc_device *dev);
struct pci_dev * ccio_get_fake(const struct parisc_device *dev);
int ccio_request_resource(const struct parisc_device *dev,
struct resource *res);
int ccio_allocate_resource(const struct parisc_device *dev,
struct resource *res, unsigned long size,
unsigned long min, unsigned long max, unsigned long align,
void (*alignf)(void *, struct resource *, unsigned long, unsigned long),
void *alignf_data);
#else /* !CONFIG_IOMMU_CCIO */
#define ccio_get_iommu(dev) NULL
#define ccio_get_fake(dev) NULL
#define ccio_request_resource(dev, res) request_resource(&iomem_resource, res)
#define ccio_allocate_resource(dev, res, size, min, max, align, alignf, data) \
allocate_resource(&iomem_resource, res, size, min, max, \
align, alignf, data)
#endif /* !CONFIG_IOMMU_CCIO */
#ifdef CONFIG_IOMMU_SBA
struct parisc_device;
void * sba_get_iommu(struct parisc_device *dev);
#endif
#endif
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
*/ */
#define MAX_DMA_ADDRESS (~0UL) #define MAX_DMA_ADDRESS (~0UL)
/* /*
** We don't have DMA channels... well V-class does but the ** We don't have DMA channels... well V-class does but the
** Dynamic DMA Mapping interface will support them... right? :^) ** Dynamic DMA Mapping interface will support them... right? :^)
...@@ -130,6 +129,9 @@ static __inline__ void disable_dma(unsigned int dmanr) ...@@ -130,6 +129,9 @@ static __inline__ void disable_dma(unsigned int dmanr)
#endif #endif
} }
/* reserve a DMA channel */
#define request_dma(dmanr, device_id) (0)
/* Clear the 'DMA Pointer Flip Flop'. /* Clear the 'DMA Pointer Flip Flop'.
* Write 0 for LSB/MSB, 1 for MSB/LSB access. * Write 0 for LSB/MSB, 1 for MSB/LSB access.
* Use this once to initialize the FF to a known state. * Use this once to initialize the FF to a known state.
......
...@@ -23,31 +23,7 @@ struct hp_hardware { ...@@ -23,31 +23,7 @@ struct hp_hardware {
const char name[80]; /* The hardware description */ const char name[80]; /* The hardware description */
}; };
struct parisc_device { struct parisc_device;
unsigned long hpa; /* Hard Physical Address */
struct parisc_device_id id;
struct parisc_device *parent;
struct parisc_device *sibling;
struct parisc_device *child;
struct parisc_driver *driver; /* Driver for this device */
void *sysdata; /* Driver instance private data */
char name[80]; /* The hardware description */
int irq;
char hw_path; /* The module number on this bus */
unsigned int num_addrs; /* some devices have additional address ranges. */
unsigned long *addr; /* which will be stored here */
#ifdef __LP64__
/* parms for pdc_pat_cell_module() call */
unsigned long pcell_loc; /* Physical Cell location */
unsigned long mod_index; /* PAT specific - Misc Module info */
/* generic info returned from pdc_pat_cell_module() */
unsigned long mod_info; /* PAT specific - Misc Module info */
unsigned long pmod_loc; /* physical Module location */
#endif
};
enum cpu_type { enum cpu_type {
pcx = 0, /* pa7000 pa 1.0 */ pcx = 0, /* pa7000 pa 1.0 */
...@@ -65,12 +41,7 @@ enum cpu_type { ...@@ -65,12 +41,7 @@ enum cpu_type {
extern char *cpu_name_version[][2]; /* mapping from enum cpu_type to strings */ extern char *cpu_name_version[][2]; /* mapping from enum cpu_type to strings */
struct parisc_driver { struct parisc_driver;
struct parisc_driver *next;
char *name;
const struct parisc_device_id *id_table;
int (*probe) (struct parisc_device *dev); /* New device discovered */
};
struct io_module { struct io_module {
volatile uint32_t nothing; /* reg 0 */ volatile uint32_t nothing; /* reg 0 */
......
...@@ -84,13 +84,6 @@ static __inline__ void ide_init_default_hwifs(void) ...@@ -84,13 +84,6 @@ static __inline__ void ide_init_default_hwifs(void)
#define ide_request_region(from,extent,name) request_region((from), (extent), (name)) #define ide_request_region(from,extent,name) request_region((from), (extent), (name))
#define ide_release_region(from,extent) release_region((from), (extent)) #define ide_release_region(from,extent) release_region((from), (extent))
/*
* The following are not needed for the non-m68k ports
*/
#define ide_ack_intr(hwif) (1)
#define ide_release_lock(lock) do {} while (0)
#define ide_get_lock(lock, hdlr, data) do {} while (0)
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* __ASM_PARISC_IDE_H */ #endif /* __ASM_PARISC_IDE_H */
...@@ -37,7 +37,7 @@ extern inline void * ioremap(unsigned long offset, unsigned long size) ...@@ -37,7 +37,7 @@ extern inline void * ioremap(unsigned long offset, unsigned long size)
* it's useful if some control registers are in such an area and write combining * it's useful if some control registers are in such an area and write combining
* or read caching is not desirable: * or read caching is not desirable:
*/ */
extern inline void * ioremap_nocache (unsigned long offset, unsigned long size) extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
{ {
return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */); return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */);
} }
...@@ -49,7 +49,8 @@ extern void iounmap(void *addr); ...@@ -49,7 +49,8 @@ extern void iounmap(void *addr);
* too lazy to ioremap first'. kind of like isa_, except that there's * too lazy to ioremap first'. kind of like isa_, except that there's
* no additional base address to add on. * no additional base address to add on.
*/ */
extern __inline__ unsigned char __raw_readb(unsigned long addr) #define __raw_readb(a) ___raw_readb((unsigned long)(a))
extern __inline__ unsigned char ___raw_readb(unsigned long addr)
{ {
long flags; long flags;
unsigned char ret; unsigned char ret;
...@@ -63,7 +64,8 @@ extern __inline__ unsigned char __raw_readb(unsigned long addr) ...@@ -63,7 +64,8 @@ extern __inline__ unsigned char __raw_readb(unsigned long addr)
return ret; return ret;
} }
extern __inline__ unsigned short __raw_readw(unsigned long addr) #define __raw_readw(a) ___raw_readw((unsigned long)(a))
extern __inline__ unsigned short ___raw_readw(unsigned long addr)
{ {
long flags; long flags;
unsigned short ret; unsigned short ret;
...@@ -77,7 +79,8 @@ extern __inline__ unsigned short __raw_readw(unsigned long addr) ...@@ -77,7 +79,8 @@ extern __inline__ unsigned short __raw_readw(unsigned long addr)
return ret; return ret;
} }
extern __inline__ unsigned int __raw_readl(unsigned long addr) #define __raw_readl(a) ___raw_readl((unsigned long)(a))
extern __inline__ unsigned int ___raw_readl(unsigned long addr)
{ {
u32 ret; u32 ret;
...@@ -88,7 +91,8 @@ extern __inline__ unsigned int __raw_readl(unsigned long addr) ...@@ -88,7 +91,8 @@ extern __inline__ unsigned int __raw_readl(unsigned long addr)
return ret; return ret;
} }
extern __inline__ unsigned long long __raw_readq(unsigned long addr) #define __raw_readq(a) ___raw_readq((unsigned long)(a))
extern __inline__ unsigned long long ___raw_readq(unsigned long addr)
{ {
unsigned long long ret; unsigned long long ret;
#ifdef __LP64__ #ifdef __LP64__
...@@ -103,7 +107,8 @@ extern __inline__ unsigned long long __raw_readq(unsigned long addr) ...@@ -103,7 +107,8 @@ extern __inline__ unsigned long long __raw_readq(unsigned long addr)
return ret; return ret;
} }
extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr) #define __raw_writeb(a,b) ___raw_writeb(a, (unsigned long)(b))
extern __inline__ void ___raw_writeb(unsigned char val, unsigned long addr)
{ {
long flags; long flags;
__asm__ __volatile__( __asm__ __volatile__(
...@@ -113,7 +118,8 @@ extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr) ...@@ -113,7 +118,8 @@ extern __inline__ void __raw_writeb(unsigned char val, unsigned long addr)
: "=&r" (flags) : "r" (val), "r" (addr) ); : "=&r" (flags) : "r" (val), "r" (addr) );
} }
extern __inline__ void __raw_writew(unsigned short val, unsigned long addr) #define __raw_writew(a,b) ___raw_writew(a, (unsigned long)(b))
extern __inline__ void ___raw_writew(unsigned short val, unsigned long addr)
{ {
long flags; long flags;
__asm__ __volatile__( __asm__ __volatile__(
...@@ -123,14 +129,16 @@ extern __inline__ void __raw_writew(unsigned short val, unsigned long addr) ...@@ -123,14 +129,16 @@ extern __inline__ void __raw_writew(unsigned short val, unsigned long addr)
: "=&r" (flags) : "r" (val), "r" (addr) ); : "=&r" (flags) : "r" (val), "r" (addr) );
} }
extern __inline__ void __raw_writel(unsigned int val, unsigned long addr) #define __raw_writel(a,b) ___raw_writel(a, (unsigned long)(b))
extern __inline__ void ___raw_writel(unsigned int val, unsigned long addr)
{ {
__asm__ __volatile__( __asm__ __volatile__(
" stwas %0,0(%1)\n" " stwas %0,0(%1)\n"
: : "r" (val), "r" (addr) ); : : "r" (val), "r" (addr) );
} }
extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr) #define __raw_writeq(a,b) ___raw_writeq(a, (unsigned long)(b))
extern __inline__ void ___raw_writeq(unsigned long long val, unsigned long addr)
{ {
#ifdef __LP64__ #ifdef __LP64__
__asm__ __volatile__( __asm__ __volatile__(
...@@ -153,19 +161,23 @@ extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr) ...@@ -153,19 +161,23 @@ extern __inline__ void __raw_writeq(unsigned long long val, unsigned long addr)
#define writel(b,addr) (*(volatile unsigned int *) (addr) = (b)) #define writel(b,addr) (*(volatile unsigned int *) (addr) = (b))
#define writeq(b,addr) (*(volatile u64 *) (addr) = (b)) #define writeq(b,addr) (*(volatile u64 *) (addr) = (b))
#else /* !USE_HPPA_IOREMAP */ #else /* !USE_HPPA_IOREMAP */
#define readb(addr) __raw_readb((unsigned long)(addr)) #define readb(addr) __raw_readb(addr)
#define readw(addr) le16_to_cpu(__raw_readw((unsigned long)(addr))) #define readw(addr) le16_to_cpu(__raw_readw(addr))
#define readl(addr) le32_to_cpu(__raw_readl((unsigned long)(addr))) #define readl(addr) le32_to_cpu(__raw_readl(addr))
#define readq(addr) le64_to_cpu(__raw_readq((unsigned long)(addr))) #define readq(addr) le64_to_cpu(__raw_readq(addr))
#define writeb(b,addr) __raw_writeb(b,(unsigned long)(addr)) #define writeb(b,addr) __raw_writeb(b,addr)
#define writew(b,addr) __raw_writew(cpu_to_le16(b),(unsigned long)(addr)) #define writew(b,addr) __raw_writew(cpu_to_le16(b),addr)
#define writel(b,addr) __raw_writel(cpu_to_le32(b),(unsigned long)(addr)) #define writel(b,addr) __raw_writel(cpu_to_le32(b),addr)
#define writeq(b,addr) __raw_writeq(cpu_to_le64(b),(unsigned long)(addr)) #define writeq(b,addr) __raw_writeq(cpu_to_le64(b),addr)
#endif /* !USE_HPPA_IOREMAP */ #endif /* !USE_HPPA_IOREMAP */
extern void memcpy_fromio(void *dest, unsigned long src, int count); extern void __memcpy_fromio(unsigned long dest, unsigned long src, int count);
extern void memcpy_toio(unsigned long dest, const void *src, int count); extern void __memcpy_toio(unsigned long dest, unsigned long src, int count);
extern void memset_io(unsigned long dest, char fill, int count); extern void __memset_io(unsigned long dest, char fill, int count);
#define memcpy_fromio(a,b,c) __memcpy_fromio((unsigned long)(a), (unsigned long)(b), (c))
#define memcpy_toio(a,b,c) __memcpy_toio((unsigned long)(a), (unsigned long)(b), (c))
#define memset_io(a,b,c) __memset_io((unsigned long)(a), (b), (c))
/* Support old drivers which don't ioremap. /* Support old drivers which don't ioremap.
* NB this interface is scheduled to disappear in 2.5 * NB this interface is scheduled to disappear in 2.5
...@@ -186,12 +198,12 @@ extern void memset_io(unsigned long dest, char fill, int count); ...@@ -186,12 +198,12 @@ extern void memset_io(unsigned long dest, char fill, int count);
* These functions support PA-RISC drivers which don't yet call ioremap(). * These functions support PA-RISC drivers which don't yet call ioremap().
* They will disappear once the last of these drivers is gone. * They will disappear once the last of these drivers is gone.
*/ */
#define gsc_readb(x) __raw_readb((unsigned long)x) #define gsc_readb(x) __raw_readb(x)
#define gsc_readw(x) __raw_readw((unsigned long)x) #define gsc_readw(x) __raw_readw(x)
#define gsc_readl(x) __raw_readl((unsigned long)x) #define gsc_readl(x) __raw_readl(x)
#define gsc_writeb(x, y) __raw_writeb(x, (unsigned long)y) #define gsc_writeb(x, y) __raw_writeb(x, y)
#define gsc_writew(x, y) __raw_writew(x, (unsigned long)y) #define gsc_writew(x, y) __raw_writew(x, y)
#define gsc_writel(x, y) __raw_writel(x, (unsigned long)y) #define gsc_writel(x, y) __raw_writel(x, y)
/* /*
...@@ -275,7 +287,7 @@ extern void outsl (unsigned long port, const void *src, unsigned long count); ...@@ -275,7 +287,7 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
#define IO_SPACE_LIMIT 0x00ffffff #define IO_SPACE_LIMIT 0x00ffffff
#define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while(0) #define dma_cache_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
#define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) #define dma_cache_wback(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
#define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0) #define dma_cache_wback_inv(_start,_size) do { flush_kernel_dcache_range(_start,_size); } while (0)
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/errno.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -94,4 +95,21 @@ extern unsigned long txn_alloc_addr(int); ...@@ -94,4 +95,21 @@ extern unsigned long txn_alloc_addr(int);
/* soft power switch support (power.c) */ /* soft power switch support (power.c) */
extern struct tasklet_struct power_tasklet; extern struct tasklet_struct power_tasklet;
struct notifier_block;
#ifdef CONFIG_PROFILING
int register_profile_notifier(struct notifier_block *nb);
int unregister_profile_notifier(struct notifier_block *nb);
#else
static inline int register_profile_notifier(struct notifier_block *nb)
{
return -ENOSYS;
}
static inline int unregister_profile_notifier(struct notifier_block *nb)
{
return -ENOSYS;
}
#endif
#endif /* _ASM_PARISC_IRQ_H */ #endif /* _ASM_PARISC_IRQ_H */
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <linux/config.h> #include <linux/config.h>
#ifdef __KERNEL__ #ifdef __KERNEL__
#ifdef CONFIG_VT
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kd.h> #include <linux/kd.h>
...@@ -56,18 +55,11 @@ extern struct kbd_ops { ...@@ -56,18 +55,11 @@ extern struct kbd_ops {
void (*init_hw)(void); void (*init_hw)(void);
/* Keyboard driver resource allocation */ /* Keyboard driver resource allocation */
void (*kbd_request_region)(void);
int (*kbd_request_irq)(void (*handler)(int, void *, struct pt_regs *)); int (*kbd_request_irq)(void (*handler)(int, void *, struct pt_regs *));
/* Methods to access the keyboard processor's I/O registers */
unsigned char (*kbd_read_input)(void);
void (*kbd_write_output)(unsigned char val);
void (*kbd_write_command)(unsigned char val);
unsigned char (*kbd_read_status)(void);
unsigned char sysrq_key; unsigned char sysrq_key;
unsigned char *sysrq_xlate; unsigned char *sysrq_xlate;
} *kbd_ops; } kbd_ops;
#define kbd_setkeycode (*kbd_ops->setkeycode) #define kbd_setkeycode (*kbd_ops->setkeycode)
#define kbd_getkeycode (*kbd_ops->getkeycode) #define kbd_getkeycode (*kbd_ops->getkeycode)
...@@ -80,20 +72,13 @@ extern struct kbd_ops { ...@@ -80,20 +72,13 @@ extern struct kbd_ops {
#define kbd_sysrq_xlate (kbd_ops->sysrq_xlate) #define kbd_sysrq_xlate (kbd_ops->sysrq_xlate)
/* Do the actual calls via kbd_ops vector */ /* Do the actual calls via kbd_ops vector */
#define kbd_request_region() kbd_ops->kbd_request_region()
#define kbd_request_irq(handler) kbd_ops->kbd_request_irq(handler) #define kbd_request_irq(handler) kbd_ops->kbd_request_irq(handler)
#define kbd_read_input() kbd_ops->kbd_read_input()
#define kbd_write_output(val) kbd_ops->kbd_write_output(val)
#define kbd_write_command(val) kbd_ops->kbd_write_command(val)
#define kbd_read_status() kbd_ops->kbd_read_status()
extern unsigned char hp_ps2kbd_sysrq_xlate[128]; /* from drivers/char/hp_keyb.c */ extern unsigned char hp_ps2kbd_sysrq_xlate[128]; /* from drivers/char/hp_keyb.c */
extern void unregister_kbd_ops(void); extern void unregister_kbd_ops(void);
extern void register_kbd_ops(struct kbd_ops *ops); extern void register_kbd_ops(struct kbd_ops *ops);
#endif /* CONFIG_VT */
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* __ASMPARISC_KEYBOARD_H */ #endif /* __ASMPARISC_KEYBOARD_H */
/* $Id: linux_logo.h,v 1.1.1.1 1999/03/15 19:41:01 pjlahaie Exp $ /* linux_logo.h created with fblogo, 2002/12/21 04:44:04
* include/asm-parisc/linux_logo.h: This is a linux logo * include/linux/linux_logo.h: This is a linux logo
* to be displayed on boot. * to be displayed on boot.
* *
* Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
* Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*
* You can put anything here, but:
* LINUX_LOGO_COLORS has to be less than 224
* Generated by fblogo version 0.5.0
*
*
* Remember to modify drivers/video/fbcon.c:
* Change "#define LOGO_H 80" to "#define LOGO_H 80"
* Change "#define LOGO_W 80" to "#define LOGO_W 80"
* *
* You can put anything here, but: * You can put anything here, but:
* LINUX_LOGO_COLORS has to be less than 224 * LINUX_LOGO_COLORS has to be less than 224
* image size has to be 80x80 * image size has to be 80x80
* values have to start from 0x20 * values have to start from 0x20
* (i.e. RGB(linux_logo_red[0], * (i.e. RGB(linux_logo_red[0],
* linux_logo_green[0], * linux_logo_green[0],
* linux_logo_blue[0]) is color 0x20) * linux_logo_blue[0]) is color 0x20)
* BW image has to be 80x80 as well, with MS bit * BW image has to be 80x80 as well, with MS bit
* on the left * on the left
* Serial_console ascii image can be any size, * Serial_console ascii image can be any size,
* but should contain %s to display the version * but should contain %s to display the version
*/ */
#include <linux/init.h>
#include <linux/version.h>
#define linux_logo_banner "Linux/PA-RISC version " UTS_RELEASE #ifndef __HAVE_ARCH_LINUX_LOGO
#define LINUX_LOGO_COLORS 223
#endif
#ifdef INCLUDE_LINUX_LOGO_DATA
#ifndef __HAVE_ARCH_LINUX_LOGO
unsigned char linux_logo_red[] __initdata = {
0x02, 0xFD, 0xF1, 0x02, 0xA2, 0x02, 0x76, 0xFE,
0xB8, 0x32, 0x52, 0xCA, 0x66, 0x8E, 0x46, 0xFD,
0x66, 0xB2, 0xB6, 0x3E, 0xA4, 0xFE, 0x21, 0xDB,
0xEE, 0x2A, 0xCC, 0x9A, 0x1A, 0xFE, 0xFE, 0xA6,
0xC2, 0xFE, 0x94, 0x12, 0xBA, 0xED, 0x8E, 0xFE,
0xAE, 0xBC, 0xC2, 0xCE, 0xE2, 0x4A, 0x0E, 0x6F,
0xBE, 0xA2, 0x02, 0x57, 0x78, 0xFE, 0xDA, 0xDA,
0xFE, 0xEE, 0x8A, 0xF5, 0xB3, 0x0A, 0xCA, 0x77,
0x52, 0xFE, 0x5A, 0x64, 0xFA, 0x96, 0xC2, 0x96,
0xC2, 0x92, 0x4E, 0x52, 0xBE, 0xFE, 0x66, 0x8C,
0xDA, 0xFE, 0xAA, 0x6E, 0xB6, 0x7A, 0xE2, 0x3F,
0xA3, 0x06, 0xE6, 0xD6, 0xE6, 0x56, 0xF2, 0xB6,
0x7E, 0xDD, 0xD6, 0xF9, 0x37, 0x26, 0xE7, 0xEC,
0xBE, 0xDE, 0xA3, 0xFE, 0x92, 0xDE, 0x36, 0xC2,
0x82, 0xEA, 0x26, 0xA7, 0x2D, 0xF2, 0xA6, 0x6A,
0xDA, 0x2E, 0xE2, 0xFE, 0x69, 0xFE, 0x46, 0x9E,
0x5E, 0xFE, 0x82, 0xFE, 0xFC, 0xAA, 0xB8, 0xFE,
0xCE, 0xC6, 0x1D, 0x76, 0xF8, 0x92, 0xE2, 0xD6,
0xFE, 0x9C, 0xCC, 0xB6, 0xE4, 0x0C, 0xE2, 0xC6,
0xD2, 0x16, 0xD3, 0x9C, 0x59, 0x3A, 0xFE, 0x70,
0xBB, 0xA6, 0xF6, 0xFA, 0x76, 0xB6, 0xAE, 0xB7,
0xEE, 0x3E, 0x82, 0xCA, 0xBA, 0x17, 0xAB, 0xAF,
0xCF, 0x86, 0x32, 0xB4, 0x2A, 0xFE, 0xEE, 0xE2,
0x5A, 0xFE, 0x02, 0xFE, 0xEA, 0xFE, 0x77, 0x64,
0xFE, 0xFD, 0xD5, 0xBF, 0x4E, 0xBB, 0xF8, 0x9B,
0x78, 0x6E, 0xFA, 0xC6, 0xFE, 0xB2, 0x12, 0xF2,
0xBE, 0x06, 0xAE, 0xC4, 0xEA, 0xAE, 0xFE, 0xD5,
0x42, 0xBC, 0x86, 0xFE, 0x7A, 0xF0, 0xF1
};
unsigned char linux_logo_green[] __initdata = {
0x02, 0xCF, 0xB7, 0x9A, 0x7A, 0x66, 0x4C, 0xCF,
0xBA, 0x9A, 0x3A, 0x98, 0xCE, 0x66, 0x2E, 0xE0,
0x9A, 0xB6, 0xB6, 0x27, 0x7C, 0xE2, 0x22, 0x9B,
0xE6, 0x1E, 0x9A, 0xCE, 0x1A, 0xE6, 0xEA, 0x6E,
0x86, 0xCE, 0x59, 0x12, 0x96, 0xEE, 0x5A, 0xD4,
0x7E, 0x9A, 0xBA, 0xCE, 0xBE, 0x4A, 0x0E, 0x43,
0xA7, 0x8A, 0x66, 0x3D, 0x4E, 0xEA, 0xDA, 0xAD,
0xE6, 0xCA, 0x62, 0xF6, 0xA4, 0x0A, 0x82, 0x77,
0x52, 0xE9, 0x34, 0x64, 0xC2, 0x7E, 0xB2, 0x96,
0xC2, 0x62, 0x3A, 0x33, 0x91, 0xEC, 0x9A, 0x8C,
0xB6, 0xE2, 0x70, 0x56, 0x76, 0x6A, 0xBE, 0x3E,
0xA2, 0x06, 0xE6, 0xD6, 0xEA, 0x56, 0xC6, 0x9E,
0x7E, 0x9A, 0xAA, 0xFA, 0x22, 0x26, 0xA6, 0xAE,
0xC6, 0xB6, 0x8F, 0xDE, 0x7A, 0xDE, 0x36, 0x83,
0x82, 0xBE, 0x16, 0x9B, 0x1A, 0xBE, 0xA6, 0x5C,
0x9F, 0x2E, 0xAE, 0xD8, 0x6B, 0xBA, 0x46, 0x9E,
0x5E, 0xC6, 0x72, 0xBE, 0xDA, 0x8E, 0xB0, 0xC2,
0x89, 0x92, 0x1E, 0x6A, 0xB7, 0x92, 0xA2, 0xA2,
0xFE, 0x65, 0xD0, 0xAA, 0xB0, 0x0E, 0xE2, 0xC6,
0xD2, 0x16, 0x91, 0x6E, 0x3B, 0x3A, 0xCA, 0x70,
0xBB, 0xAE, 0xBE, 0xD6, 0x5A, 0x8A, 0x86, 0xBA,
0xC6, 0x42, 0x58, 0xCA, 0x7C, 0x0E, 0xAA, 0x7F,
0x8F, 0x86, 0x32, 0x72, 0x2A, 0xC2, 0xA7, 0xA0,
0x5A, 0xC6, 0x02, 0xFE, 0xEA, 0xEA, 0x7A, 0x3F,
0xC6, 0xCA, 0xA3, 0xBF, 0x4E, 0x91, 0xB8, 0x99,
0x70, 0x5E, 0xBE, 0x7E, 0xFE, 0xB1, 0x06, 0xB1,
0xC2, 0x0A, 0xA2, 0x9D, 0xAA, 0x77, 0xC2, 0x96,
0x42, 0xBE, 0x52, 0xE8, 0x7E, 0xAE, 0xF2
};
unsigned char linux_logo_blue[] __initdata = {
0x02, 0x03, 0x07, 0x9A, 0x02, 0x66, 0x02, 0x0E,
0xC3, 0x9A, 0x02, 0x02, 0xCE, 0x02, 0x02, 0x1C,
0x9A, 0xBE, 0xB6, 0x02, 0x38, 0x2E, 0x23, 0x14,
0x36, 0x02, 0x32, 0xCE, 0x1C, 0x46, 0x42, 0x0A,
0x0A, 0x12, 0x03, 0x12, 0x4A, 0xEF, 0x05, 0x16,
0x26, 0x52, 0xAE, 0xCE, 0x02, 0x4A, 0x0F, 0x03,
0x6C, 0x56, 0x9A, 0x0D, 0x0C, 0xA2, 0xDB, 0x02,
0x9A, 0x02, 0x12, 0xF8, 0x85, 0x0B, 0x02, 0x76,
0x52, 0x07, 0x02, 0x66, 0x0D, 0x46, 0x92, 0x97,
0xC3, 0x16, 0x1A, 0x07, 0x02, 0x0E, 0xCE, 0x8D,
0x4E, 0x04, 0x04, 0x2A, 0x03, 0x52, 0x4E, 0x3F,
0xA1, 0x07, 0xE7, 0xD7, 0xEB, 0x56, 0x02, 0x72,
0x7F, 0x06, 0x1A, 0xFB, 0x03, 0x27, 0x07, 0x08,
0xD6, 0x42, 0x6D, 0x07, 0x4E, 0xDF, 0x37, 0x06,
0x84, 0x02, 0x02, 0x86, 0x02, 0x3A, 0xA7, 0x44,
0x03, 0x2F, 0x38, 0x0E, 0x70, 0x07, 0x47, 0x9E,
0x5F, 0x06, 0x56, 0x0B, 0x06, 0x32, 0x9E, 0x02,
0x03, 0x36, 0x1F, 0x56, 0x03, 0x92, 0x10, 0x03,
0xF2, 0x03, 0xDB, 0x92, 0x1C, 0x1A, 0xE2, 0xC8,
0xD2, 0x17, 0x03, 0x02, 0x03, 0x3B, 0x0D, 0x70,
0xBA, 0xBA, 0x0D, 0x03, 0x06, 0x16, 0x26, 0xBE,
0x0E, 0x50, 0x02, 0xCA, 0x04, 0x02, 0xA7, 0x03,
0x0C, 0x86, 0x33, 0x04, 0x2B, 0x09, 0x05, 0x06,
0x5A, 0x0D, 0x0A, 0xFA, 0xEB, 0x2A, 0x82, 0x04,
0x02, 0x02, 0x32, 0xBE, 0x4F, 0x35, 0x0C, 0x98,
0x6C, 0x46, 0x0B, 0x02, 0xFE, 0xB1, 0x02, 0x07,
0xD2, 0x18, 0x96, 0x48, 0x06, 0x04, 0x0E, 0x07,
0x43, 0xC6, 0x02, 0x3A, 0x8C, 0x16, 0xF4
};
unsigned char linux_logo[] __initdata = {
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x79,
0x79, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x79, 0xB9, 0x99, 0xBD, 0x9E, 0x60,
0x60, 0xF8, 0x8E, 0x85, 0xB9, 0x79, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x79, 0xAA, 0x9E, 0xDE, 0x96, 0xE3, 0xB7, 0x4B,
0x4B, 0x68, 0x32, 0x9F, 0x5F, 0x9E, 0xAA, 0x5D,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E,
0x8E, 0x80, 0xE3, 0xB6, 0xCB, 0x90, 0x80, 0x63,
0x63, 0xDE, 0x78, 0xCB, 0xB6, 0xE3, 0xD1, 0x4D,
0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4D,
0x9F, 0x8D, 0x32, 0x77, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x77, 0x96, 0x7A, 0xE3,
0x5F, 0x99, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xF8, 0x96,
0x8D, 0xBF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99, 0x68,
0x7B, 0x6F, 0x8E, 0x5D, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0x6F, 0xB6,
0xD8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0x36, 0xB9, 0x20, 0x79,
0x6F, 0x8D, 0x6F, 0xD4, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x4E, 0x7D, 0xCB, 0xAD,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3C, 0x63, 0xBF, 0xD4, 0x20,
0x20, 0x78, 0xB8, 0x9C, 0xB9, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x36, 0xAD, 0xB6, 0x36,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xAA, 0x5F, 0x90, 0x9E, 0x3C,
0x20, 0x5D, 0x4B, 0xED, 0x77, 0x79, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x79, 0x9E, 0xE3, 0x78, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xAA, 0xE4, 0x77, 0xAA, 0x43,
0x20, 0x20, 0x7D, 0x8D, 0x5F, 0xB9, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x4E, 0x63, 0x56, 0x9E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0x4E, 0x20, 0x20, 0x20,
0x20, 0x20, 0x79, 0xB7, 0xCE, 0x8E, 0x79, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xB9, 0x80, 0x7A, 0xB9, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xBF, 0x4B, 0x7D, 0x5D, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB8, 0x79, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x85, 0xB6, 0x5F, 0x43, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20,
0x20, 0x20, 0xB9, 0x3C, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0x79, 0x20,
0x20, 0x20, 0x20, 0x43, 0xB6, 0x6F, 0x3C, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20,
0x5D, 0xE4, 0x8E, 0x4E, 0x43, 0x20, 0x20, 0x20,
0x20, 0x8E, 0x90, 0xCE, 0x90, 0x4E, 0xAA, 0x20,
0x20, 0x20, 0x20, 0x20, 0xB7, 0xE7, 0x36, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x20,
0xD1, 0x8D, 0x7B, 0xD8, 0x20, 0x20, 0x20, 0x20,
0x9E, 0x32, 0x56, 0x45, 0xFE, 0x6F, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0xCB, 0x96, 0xD4, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x85,
0xDC, 0xEC, 0xEC, 0xEC, 0xAA, 0x20, 0x20, 0xDA,
0x56, 0xEC, 0xEC, 0xB8, 0xEC, 0x83, 0x8E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x6F, 0xED, 0x8E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0x67, 0xCB, 0x20, 0x9C,
0x45, 0xAA, 0x9C, 0xEC, 0xDE, 0x20, 0x20, 0xAA,
0xEC, 0x83, 0x79, 0xBD, 0xBF, 0xEC, 0x96, 0x20,
0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xAA, 0xAD, 0xB7, 0x20, 0x80,
0x80, 0x20, 0xE4, 0x31, 0x67, 0xDA, 0x3C, 0xD4,
0xEC, 0xDE, 0x20, 0xDA, 0x8E, 0xB6, 0x7A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x6F, 0x32, 0x8E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3C, 0xD1, 0xDC, 0xB9, 0x5F,
0x90, 0x20, 0xF1, 0xFC, 0x7D, 0x39, 0x94, 0xCD,
0x28, 0x63, 0x20, 0x20, 0x20, 0xB8, 0xDC, 0x20,
0x20, 0x20, 0x20, 0x20, 0x6F, 0xC0, 0xBD, 0x79,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x43, 0x5F, 0x7A, 0xB9, 0x9E,
0x8D, 0x20, 0x20, 0x5A, 0x87, 0xE0, 0xC2, 0x2B,
0x82, 0x51, 0x20, 0x20, 0xB5, 0xEC, 0xC7, 0x20,
0x20, 0x20, 0x20, 0x20, 0xAD, 0x68, 0x9E, 0x79,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x79,
0x83, 0x93, 0xCC, 0xF4, 0xE0, 0xE1, 0x21, 0xC8,
0x47, 0x9B, 0x57, 0xC4, 0xB8, 0xEC, 0x77, 0x20,
0x20, 0x20, 0x20, 0x20, 0x60, 0x4B, 0x60, 0x5D,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0xB9, 0x20,
0x75, 0xD0, 0xF4, 0xA7, 0xE0, 0x21, 0xA4, 0xDD,
0x3E, 0xDD, 0x61, 0x71, 0x21, 0xB4, 0x2E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x60, 0x7B, 0xA0, 0x5D,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x43, 0xBF, 0xB6, 0x85, 0xCD,
0xCC, 0x81, 0xAC, 0xE0, 0xE1, 0xC3, 0x8B, 0x3D,
0x3E, 0x61, 0x61, 0x6D, 0x71, 0x47, 0xAF, 0x20,
0x20, 0x20, 0x20, 0x20, 0x8E, 0xB6, 0x5F, 0xB9,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0xA0, 0x7B, 0x7D, 0xDF,
0xA8, 0xD6, 0xA3, 0xE0, 0x21, 0xA4, 0x35, 0xFB,
0x61, 0x61, 0x61, 0x4C, 0x2B, 0x86, 0xCF, 0x20,
0x20, 0x20, 0x20, 0x20, 0x5D, 0x8D, 0x78, 0x99,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x39,
0xF5, 0xAC, 0xA7, 0xE1, 0x21, 0x8B, 0x35, 0x71,
0x8B, 0x59, 0x6C, 0xD0, 0xD7, 0xD6, 0x5A, 0x20,
0x20, 0xB9, 0x20, 0x20, 0x20, 0x90, 0xCB, 0x60,
0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0x60, 0xB8, 0x7D, 0x20,
0xBC, 0xBB, 0x22, 0x21, 0x2F, 0x8B, 0xC3, 0x57,
0xCF, 0x3F, 0xBA, 0xD7, 0x81, 0x3A, 0x77, 0x20,
0x20, 0xA0, 0x63, 0x36, 0x20, 0xD2, 0x7A, 0x6F,
0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x4E, 0xA0, 0x7B, 0x7D, 0x20,
0xDE, 0x51, 0x46, 0xF5, 0x6C, 0xCF, 0x72, 0xCC,
0x5E, 0xA8, 0x5E, 0xE5, 0x4A, 0xB2, 0xED, 0x20,
0x20, 0x43, 0x6F, 0x90, 0x4E, 0x20, 0xED, 0xB7,
0x7D, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x36, 0xD1, 0x7A, 0x8E, 0x20,
0xAD, 0xCB, 0x34, 0xB1, 0xF7, 0xBA, 0xA8, 0xEB,
0xD3, 0x74, 0x7F, 0xF9, 0xB2, 0x7A, 0x7B, 0x36,
0x20, 0x20, 0xE4, 0xA0, 0x79, 0x20, 0xAA, 0xB6,
0x67, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x4E, 0x60, 0x68, 0xC0, 0x79, 0x20,
0x6F, 0xB2, 0x68, 0x8A, 0x42, 0x42, 0x42, 0x42,
0x34, 0xA6, 0x28, 0xB2, 0xEC, 0xEC, 0xEC, 0x9F,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F,
0x4B, 0x63, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x79, 0x8E, 0x9F, 0xB6, 0xD2, 0x20, 0x20,
0xDC, 0x7C, 0xB7, 0xF0, 0x28, 0xF2, 0xF2, 0xED,
0xC7, 0xF9, 0xB2, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC,
0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA,
0x56, 0xCE, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x79, 0x85, 0xD1, 0x8D, 0xE8, 0x20, 0x20, 0x67,
0xEC, 0xEC, 0xB8, 0xF9, 0xF9, 0x28, 0xC7, 0xC7,
0x68, 0x8D, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0x68, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x63, 0x8D, 0xDE, 0xAA, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3C, 0xBF, 0x4B, 0xCE, 0x79, 0x20, 0x99, 0xEC,
0xEC, 0xEC, 0xFE, 0xF9, 0xC0, 0xC7, 0xC7, 0x4B,
0xFE, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x99, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x79, 0x68, 0x68, 0xD8, 0x43, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43,
0x7D, 0xE3, 0x4B, 0x3C, 0x20, 0x20, 0x4B, 0xEC,
0xEC, 0xEC, 0xEC, 0x5B, 0x56, 0x56, 0xDC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xCE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x99, 0xB6, 0xED, 0x4D, 0x4E, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E, 0x9E,
0xCE, 0xB6, 0x99, 0x20, 0x20, 0x4D, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x83, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x77, 0xDC, 0x78, 0xF8, 0x4E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x8E, 0xE7,
0x7A, 0x60, 0x20, 0x20, 0x20, 0x68, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xBF, 0x7A, 0xE7, 0xBD, 0x79,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0xAA, 0x80, 0x8D,
0xBF, 0x20, 0x20, 0x20, 0x4E, 0x56, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0x83, 0x83, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xDB, 0xEC, 0xD8, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0xBF, 0x8D, 0xD1, 0x85,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x5D, 0x4D, 0xE3, 0x32,
0x79, 0x20, 0x20, 0x20, 0x99, 0x32, 0xDC, 0xEC,
0xEC, 0xEC, 0xEC, 0xDC, 0x8D, 0x8D, 0x45, 0x83,
0x83, 0x83, 0x83, 0x7A, 0x8D, 0x56, 0x7B, 0xB8,
0xB8, 0x8D, 0x78, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x79, 0x78, 0xCB, 0xD8,
0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0xAA, 0xD1, 0x7A, 0xD2,
0x20, 0x20, 0x20, 0x20, 0xE4, 0xED, 0x7B, 0xFE,
0xEC, 0xEC, 0xEC, 0xDB, 0xB6, 0x5B, 0xEC, 0xEC,
0xEC, 0xEC, 0xDB, 0xFE, 0x8D, 0x4B, 0xB7, 0x68,
0x68, 0xB7, 0xDC, 0x5F, 0x20, 0x20, 0xAA, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3C, 0x8D, 0x67,
0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x79, 0xBD, 0xED, 0xCE, 0x20,
0x20, 0x20, 0x20, 0x79, 0x67, 0xDC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xDB, 0x45, 0xEC, 0xDB, 0xDB,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x45,
0x8D, 0x4B, 0xB8, 0x83, 0x99, 0x20, 0x20, 0x85,
0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0xB7,
0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x5D, 0x7D, 0xB8, 0xBF, 0x20,
0x20, 0x43, 0x20, 0xBF, 0xFE, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xDB, 0xDB, 0xDB, 0xDB,
0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xDC, 0xB6, 0x7B, 0x20, 0x20, 0x20,
0xD4, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x99, 0x7A,
0xD1, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3C, 0x80, 0x7A, 0xD2, 0x20,
0x36, 0x20, 0x4E, 0x68, 0xEC, 0xEC, 0x5B, 0xEC,
0xEC, 0x7C, 0x4B, 0x4B, 0x4B, 0x4B, 0x3B, 0x3B,
0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x30, 0x30, 0xC1,
0xB6, 0xEC, 0x5B, 0x5B, 0x5B, 0x9E, 0x20, 0x20,
0x20, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0xED,
0xED, 0xBD, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0xD2, 0x96, 0xB8, 0x79, 0x79,
0x4E, 0x20, 0xD1, 0x45, 0x83, 0xEC, 0xEC, 0xEC,
0xEC, 0x30, 0x25, 0x52, 0x25, 0x25, 0x25, 0x25,
0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x29,
0xDC, 0xEC, 0xEC, 0xEC, 0x83, 0xB7, 0x20, 0x43,
0xD2, 0xB9, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x9C,
0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x5D, 0x7D, 0x4B, 0x80, 0x20, 0x85,
0x20, 0x79, 0x7A, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x30, 0x25, 0x25, 0x23, 0x29, 0x2C, 0x3B,
0x4B, 0x7C, 0x4B, 0x3B, 0x30, 0x52, 0x25, 0x29,
0x5B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x4E, 0xAA,
0xD2, 0x5D, 0xD4, 0x20, 0x20, 0x20, 0x20, 0x5D,
0xB6, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xAA, 0xD1, 0x7A, 0x99, 0x20, 0xB9,
0x20, 0xE4, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x52, 0x23,
0xFE, 0xEC, 0x83, 0xEC, 0xEC, 0xEC, 0x4D, 0x20,
0x20, 0x20, 0x5D, 0x85, 0x20, 0x20, 0x20, 0x20,
0x96, 0xE3, 0xF8, 0x79, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x79, 0xF8, 0x32, 0x32, 0x20, 0xAA, 0x20,
0x20, 0xCB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C,
0x30, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x29, 0x25,
0x4B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x6F, 0x20,
0x20, 0x20, 0x20, 0x99, 0x20, 0x20, 0x20, 0x20,
0xD8, 0x7B, 0x63, 0x4E, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3C, 0xDE, 0x8D, 0xE4, 0x20, 0x36, 0x20,
0x36, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30,
0x4B, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x30, 0x29,
0x29, 0x29, 0x29, 0x3B, 0x7C, 0xEC, 0x29, 0x25,
0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xE3, 0x20,
0x20, 0x20, 0x20, 0xD2, 0x20, 0x20, 0x20, 0x20,
0x3C, 0x7A, 0x80, 0xB9, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x5D, 0x4D, 0xC0, 0x68, 0x79, 0x20, 0x5D, 0x20,
0x90, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x3B, 0x7C,
0xEC, 0xEC, 0x3B, 0x29, 0x52, 0x52, 0x29, 0x29,
0x29, 0x29, 0x25, 0x25, 0x29, 0x4B, 0x29, 0x25,
0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xB6, 0x20,
0x20, 0x20, 0x20, 0xD4, 0x20, 0x20, 0x20, 0x20,
0x79, 0x7B, 0x67, 0x36, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x85, 0x6F, 0x7A, 0x77, 0x20, 0xB9, 0x20, 0x20,
0xB8, 0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC,
0x3B, 0x29, 0x29, 0x6E, 0x4B, 0x7C, 0xEC, 0xEC,
0xEC, 0x7C, 0x4B, 0x30, 0x25, 0x52, 0x52, 0x25,
0x30, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x5B, 0x20,
0x20, 0x20, 0x20, 0x36, 0x20, 0x20, 0x20, 0x20,
0x20, 0x68, 0xCE, 0x99, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E,
0xD8, 0xCB, 0x67, 0x20, 0x20, 0xAA, 0x20, 0x20,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30,
0x29, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0x6E, 0x25, 0x52, 0x25,
0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20,
0x20, 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20,
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xAA,
0x6F, 0x8D, 0x3C, 0x20, 0x20, 0x36, 0x20, 0xB5,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x3B,
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x7C,
0x7C, 0xEC, 0xEC, 0xEC, 0x7C, 0x52, 0x52, 0x25,
0x29, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20,
0x20, 0x20, 0x79, 0x43, 0x20, 0x20, 0x20, 0x20,
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x99,
0xCE, 0x68, 0x20, 0x20, 0x20, 0xBD, 0xF1, 0x36,
0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x6E, 0x7C, 0xEC,
0xEC, 0xEC, 0x3B, 0x6E, 0x29, 0x29, 0x52, 0x52,
0x23, 0x29, 0x3B, 0xEC, 0x7C, 0x23, 0x52, 0x52,
0x23, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20,
0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xBD,
0xC0, 0xD1, 0x20, 0x20, 0x20, 0x36, 0x3C, 0x8E,
0xEC, 0xEC, 0xEC, 0xEC, 0x4B, 0xEC, 0xEC, 0xEC,
0x3B, 0x29, 0x52, 0x29, 0x29, 0x30, 0x30, 0x30,
0x29, 0x25, 0x25, 0x29, 0x3B, 0x52, 0x52, 0x52,
0x52, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x20,
0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0xD1, 0xC0, 0xBD, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xBD,
0xC0, 0xD1, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x8E,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x3B, 0x30,
0x30, 0x3B, 0x4B, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x4B, 0x29, 0x25, 0x52, 0x52, 0x52, 0x52,
0x52, 0x3B, 0xEC, 0xEC, 0xEC, 0xEC, 0x45, 0x20,
0x20, 0x3C, 0x4E, 0x4E, 0xB5, 0x20, 0x20, 0x20,
0x20, 0x78, 0x32, 0x8E, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8E,
0x32, 0x68, 0xEE, 0xCA, 0x24, 0x84, 0x20, 0xC9,
0xEC, 0xEC, 0xEC, 0xEC, 0x7C, 0x30, 0x30, 0x7C,
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0x29, 0x25, 0x25, 0x25, 0x25,
0x25, 0x2C, 0xEC, 0xEC, 0xEC, 0xEC, 0xF9, 0x20,
0x79, 0x20, 0x20, 0x20, 0xDA, 0xAA, 0xF8, 0xB9,
0x20, 0xCB, 0x78, 0xD4, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x79, 0x5D, 0x5D, 0x43, 0x4D,
0x68, 0x8D, 0xAE, 0x47, 0x21, 0xE1, 0x53, 0x20,
0x90, 0xEC, 0xEC, 0x7C, 0x30, 0x4B, 0xEC, 0xEC,
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0x4B, 0x30, 0x30, 0x30, 0x29,
0x29, 0x30, 0xEC, 0xB0, 0x58, 0x55, 0x65, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x85, 0xC9,
0x5D, 0xFE, 0x9F, 0xD4, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x5D, 0xAA, 0x77, 0x7D, 0xA0, 0x63, 0x9F,
0x7A, 0x44, 0xAC, 0xBE, 0x21, 0x21, 0xE0, 0xBC,
0x20, 0x9C, 0xEC, 0x3B, 0x7C, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0x7C, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0x7C, 0x7C, 0xEC, 0x95, 0x21, 0x71, 0xC3, 0xCD,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x36, 0x4E,
0xA5, 0x56, 0x68, 0xE4, 0x5D, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x5D, 0xBD, 0xD1, 0xC0, 0xB8, 0x7B, 0x56, 0xDC,
0xA6, 0x98, 0x9D, 0xBE, 0x21, 0xE1, 0xE1, 0xC2,
0x92, 0x20, 0xC9, 0x5B, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0x7A, 0xFE, 0xEC, 0xEC, 0xDB, 0xDB,
0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xB4, 0x9D, 0x21, 0x91, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDA, 0x53,
0x6D, 0x38, 0x7A, 0x90, 0x3C, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xD4, 0xAD, 0xB6, 0xA6, 0x7F, 0xF3, 0x44, 0xE5,
0xF7, 0x87, 0xF6, 0xBE, 0xBE, 0xE1, 0xE0, 0xE0,
0xAF, 0x20, 0x20, 0xB5, 0x7B, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB,
0xDB, 0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0x9A, 0x9D, 0xA7, 0x98, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x22,
0x8B, 0x8B, 0x68, 0xE7, 0x36, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D,
0x7D, 0x4B, 0x5C, 0xF4, 0x9D, 0xE6, 0xEF, 0x87,
0xE6, 0xA3, 0xD9, 0xD9, 0xD9, 0xA1, 0xA1, 0xE0,
0x21, 0x2D, 0x20, 0x20, 0x20, 0x96, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB,
0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xFE, 0xB2, 0xE2, 0xAC, 0x9D, 0x81, 0xDF,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xCF, 0xBE,
0x47, 0x47, 0x68, 0x96, 0xD4, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43,
0x5F, 0x7A, 0xE2, 0x9D, 0xBE, 0xBE, 0xD9, 0xF6,
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xA1, 0xD5,
0xE0, 0x7E, 0x92, 0x20, 0x20, 0x20, 0x63, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB,
0xDB, 0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xB2, 0xF0, 0xE2, 0xEF, 0xEF, 0xD7, 0xCC,
0x26, 0x84, 0x94, 0x84, 0x26, 0x40, 0xEF, 0xD9,
0x41, 0x41, 0xE3, 0xB7, 0x7D, 0x43, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43,
0xDE, 0x7A, 0x37, 0xA3, 0xBE, 0x41, 0xBE, 0xBE,
0xD9, 0xD9, 0xF6, 0x64, 0x64, 0xD5, 0xD5, 0xA1,
0xA1, 0x21, 0x6C, 0x20, 0x20, 0x20, 0x20, 0xD2,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xDB,
0xDB, 0xDB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xB2, 0x88, 0x3A, 0xF4, 0xAC, 0xF4, 0xBA,
0xA8, 0x8F, 0x8F, 0x40, 0xBA, 0xF4, 0xD9, 0x41,
0x41, 0x41, 0x89, 0x8D, 0x96, 0x9E, 0x4E, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4E,
0x9C, 0x8D, 0xF3, 0xAC, 0xD9, 0x41, 0xBE, 0xD9,
0xF6, 0x64, 0x64, 0x64, 0x64, 0x64, 0xD5, 0xD5,
0xA1, 0xA1, 0x21, 0x2A, 0x20, 0x20, 0x20, 0x20,
0x7D, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x7B, 0x88, 0xE5, 0xD7, 0x22, 0x22, 0x86,
0x98, 0x81, 0x81, 0x98, 0x87, 0xEA, 0xBE, 0xBE,
0x41, 0xBE, 0xBE, 0x50, 0x7A, 0x78, 0x4D, 0xB9,
0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D,
0xD8, 0x7B, 0x49, 0xFD, 0xF6, 0xBE, 0xD9, 0xD9,
0x64, 0x64, 0xC2, 0xC2, 0xC2, 0xEA, 0x64, 0xD5,
0xD9, 0xA1, 0xE1, 0x57, 0x20, 0x20, 0x20, 0x20,
0x20, 0x83, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0x7C, 0x88, 0xC6, 0x81, 0xAC, 0xEA, 0x22,
0x87, 0x87, 0xF4, 0x87, 0x22, 0xF6, 0xD9, 0xD9,
0xBE, 0xBE, 0xBE, 0xD9, 0x50, 0xDC, 0x32, 0xBF,
0xD2, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79,
0x4D, 0xCB, 0x5C, 0x86, 0xA3, 0xBE, 0xD9, 0xF6,
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64, 0x64,
0xD5, 0xD9, 0xA1, 0x21, 0xBB, 0x20, 0x20, 0x20,
0x20, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xFE, 0x9C, 0x46, 0x81, 0x22, 0xD5, 0xA3,
0x9D, 0x22, 0x22, 0xE6, 0xEA, 0xF6, 0xD9, 0xD9,
0xD9, 0xBE, 0xBE, 0x41, 0x41, 0x70, 0x7B, 0x7B,
0x6F, 0x85, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79,
0xF8, 0x68, 0xF2, 0xAE, 0xEA, 0xD9, 0xD9, 0x64,
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xEA, 0x64,
0xD5, 0xD5, 0xA1, 0xE1, 0xE1, 0x33, 0x20, 0xF1,
0x31, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xFC, 0x20, 0x46, 0x98, 0xAC, 0xD5, 0xD9,
0xD9, 0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9,
0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x41, 0x66,
0xB7, 0x4D, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D,
0xE4, 0xCB, 0x5C, 0xAE, 0xEA, 0xD9, 0xD9, 0x64,
0x64, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64,
0x64, 0xD5, 0xA1, 0xD5, 0x21, 0xAF, 0xCE, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0x63, 0x20, 0x20, 0xB1, 0xD7, 0xE6, 0xD5, 0xD9,
0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6,
0xD9, 0xBE, 0xBE, 0x41, 0x47, 0x9B, 0x9B, 0x76,
0x7B, 0xD8, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43,
0xBF, 0x8D, 0x44, 0xAE, 0xF6, 0xD9, 0xD9, 0xF6,
0x64, 0xEA, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0x64,
0x64, 0xD5, 0xD5, 0xD5, 0xE0, 0x7E, 0xC5, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFE, 0x99,
0x20, 0x20, 0x20, 0xB1, 0xD7, 0x9D, 0xD5, 0xD9,
0xD5, 0x64, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9,
0xD9, 0xBE, 0x41, 0x41, 0x47, 0x41, 0xD9, 0x66,
0x4B, 0x60, 0x5D, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD4,
0x9F, 0xB6, 0xBA, 0x87, 0xD9, 0xBE, 0xD9, 0xD9,
0xF6, 0x64, 0x64, 0x64, 0x64, 0xEA, 0x64, 0x64,
0x64, 0xD5, 0xD5, 0xD5, 0xD5, 0x7E, 0xAF, 0x8C,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0x90, 0x20, 0x20,
0x20, 0x20, 0xEE, 0xB1, 0x86, 0xEA, 0xD9, 0xD9,
0xD5, 0x64, 0x64, 0x64, 0x64, 0xF6, 0xD9, 0xD9,
0xBE, 0xBE, 0x41, 0x41, 0xBE, 0xE6, 0x9A, 0x8D,
0x9F, 0xD2, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x9E,
0xB7, 0xB3, 0xD7, 0xD5, 0x41, 0xBE, 0xBE, 0xD9,
0xD9, 0xD9, 0xF6, 0x64, 0x64, 0x64, 0x64, 0x64,
0x64, 0xD5, 0xD9, 0xA1, 0xA1, 0x22, 0x86, 0x46,
0x77, 0x7B, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC,
0xEC, 0xEC, 0x7A, 0xD1, 0x79, 0x20, 0x20, 0x20,
0x20, 0x20, 0x92, 0x3F, 0x86, 0xEA, 0xD9, 0xD9,
0xD9, 0xF6, 0xF6, 0xF6, 0xD9, 0xD9, 0xD9, 0xBE,
0xBE, 0xBE, 0xF6, 0xE6, 0xFD, 0x5C, 0xDC, 0xED,
0x60, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8,
0x7B, 0xF3, 0x86, 0xA3, 0xBE, 0xBE, 0xBE, 0xD9,
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
0xD9, 0xD5, 0xD9, 0xD9, 0xA1, 0x9D, 0x86, 0x72,
0x94, 0x20, 0xB5, 0xE4, 0x5F, 0x80, 0xBF, 0xA0,
0x8E, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x84, 0x72, 0x86, 0xA3, 0xBE, 0xBE,
0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xF6, 0xD9,
0xF6, 0xFD, 0x37, 0x5C, 0x7B, 0xB8, 0x67, 0x4D,
0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D, 0xD8,
0xB8, 0xF3, 0x81, 0xF4, 0xAC, 0xE6, 0xEA, 0xEA,
0xA3, 0xF6, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9,
0xD9, 0xD9, 0xBE, 0xBE, 0xBE, 0xEA, 0xD7, 0x72,
0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x6B, 0x74, 0xAE, 0xEA, 0xBE, 0xBE,
0xBE, 0xBE, 0xD9, 0xD9, 0xD9, 0xEA, 0xE6, 0x87,
0xF7, 0x93, 0xB6, 0xB8, 0x78, 0x63, 0x99, 0x5D,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0xF8,
0xC0, 0xCB, 0xA9, 0x8F, 0xA8, 0xD0, 0xF7, 0x81,
0xAE, 0x86, 0x87, 0x22, 0xE6, 0xEA, 0xD9, 0xD9,
0xBE, 0xBE, 0xBE, 0xBE, 0xD9, 0xEF, 0xD0, 0xB1,
0xDF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x6B, 0x72, 0xF7, 0xEF, 0xD9, 0xD9,
0xBE, 0xD9, 0xD9, 0xF6, 0x22, 0x86, 0x81, 0xE5,
0x4B, 0x56, 0x78, 0x63, 0x99, 0x43, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3C,
0x9C, 0xC0, 0xB6, 0xB6, 0x32, 0x8A, 0x48, 0xD3,
0xCC, 0xCC, 0x8F, 0x40, 0xD0, 0x81, 0xF4, 0x22,
0xA3, 0xF6, 0xD9, 0xF6, 0xAC, 0x81, 0x74, 0x46,
0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x2E, 0xB1, 0x40, 0xAE, 0xAC, 0xF6,
0xF6, 0xF6, 0xAC, 0xF4, 0x81, 0xCC, 0x8A, 0xDC,
0xC0, 0x5F, 0x8E, 0x4E, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79,
0x3C, 0x4D, 0xBF, 0x67, 0x32, 0xB8, 0x7A, 0xCB,
0xCE, 0x8C, 0x69, 0x46, 0xB1, 0x3F, 0xCC, 0xA8,
0xBA, 0x98, 0x86, 0xAE, 0xBA, 0x74, 0x42, 0x4F,
0x84, 0xD2, 0x32, 0x32, 0xCB, 0x45, 0xDC, 0xDC,
0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0x56, 0x32,
0xED, 0x80, 0x6A, 0xCA, 0x74, 0xA8, 0x81, 0x86,
0x86, 0xAE, 0xBA, 0x40, 0x3F, 0xF2, 0xB6, 0x78,
0xE4, 0x3C, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x79, 0x43, 0x36, 0xBD, 0xD8, 0x90, 0x78,
0x68, 0x56, 0xDC, 0xCB, 0x93, 0xA2, 0x26, 0x46,
0xB1, 0x3F, 0x72, 0x72, 0xB1, 0xFA, 0x4F, 0xBC,
0xAD, 0x56, 0x4B, 0xCE, 0xE7, 0x6F, 0x90, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0xD1, 0x67, 0x96,
0xE3, 0xDC, 0x90, 0xDF, 0xB1, 0x74, 0xCC, 0x8F,
0x8F, 0xCC, 0x72, 0x46, 0xCE, 0x56, 0xAD, 0x77,
0x4E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x79, 0x5D, 0x3C, 0xD4,
0xF8, 0x63, 0xD1, 0x96, 0x68, 0x8D, 0x7A, 0xE7,
0x73, 0x4F, 0x4F, 0x26, 0x4F, 0xDF, 0x6B, 0x32,
0x56, 0x9F, 0xA0, 0xD2, 0x36, 0x3C, 0xB9, 0xB9,
0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0x3C, 0x36, 0xD4,
0xE4, 0x96, 0xB6, 0xE8, 0xBC, 0xFA, 0x42, 0xB1,
0xB1, 0x46, 0x54, 0xCE, 0x56, 0xD1, 0xD2, 0x5D,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x79, 0x4E, 0x3C, 0x99, 0x9E, 0xBF, 0xE7, 0xB7,
0x7A, 0xCB, 0x6F, 0xE9, 0xE9, 0xE7, 0x56, 0xCB,
0x80, 0xD2, 0x4E, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x4E, 0x4D, 0x78, 0x8D, 0xE3, 0x5F, 0x97, 0xE9,
0xAB, 0x67, 0xB6, 0xCB, 0x90, 0x99, 0x79, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x79, 0x43, 0xD4, 0xE4,
0x80, 0xCE, 0xB7, 0x7B, 0x7B, 0x68, 0xE7, 0x63,
0x36, 0x79, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x4E, 0xBD, 0x80, 0xED, 0x4B, 0x7B, 0x7B,
0xB8, 0x68, 0x67, 0xD8, 0x85, 0x79, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5D,
0x3C, 0x99, 0x4D, 0xD8, 0xD8, 0x9E, 0x85, 0x4E,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x79, 0x3C, 0x8E, 0x60, 0xD8, 0xA0,
0x7D, 0xF8, 0x85, 0x4E, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
};
#endif /* !__HAVE_ARCH_LINUX_LOGO */
#ifndef __HAVE_ARCH_LINUX_LOGOBW
unsigned char linux_logo_bw[] __initdata = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfd, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfd, 0xff, 0xf7, 0xef, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x9f, 0x87, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x0f, 0x03, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x67, 0x33, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xe7, 0x79, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xf7, 0x79, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x60, 0x3b, 0xf7, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x89, 0x07, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x00, 0x0d, 0xfb, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x80, 0x33, 0xfd, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xc0, 0xc3, 0xfd, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0xff, 0x0d, 0xdd, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfb, 0x40, 0x31, 0xee, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf7, 0x20, 0xc1, 0xee, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf7, 0x1f, 0x00, 0xff, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xef, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xee, 0x00, 0x00, 0x7f, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xde, 0x00, 0x00, 0x7f, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xbc, 0x00, 0x00, 0x3f, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x3f, 0xf7, 0xff, 0xff,
0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x1f, 0xf7, 0xff, 0xff,
0xff, 0xff, 0xfe, 0xff, 0x1c, 0x07, 0xdf, 0xfb, 0xff, 0xff,
0xff, 0xff, 0xfd, 0xfc, 0x08, 0x0f, 0xef, 0xfd, 0xff, 0xff,
0xff, 0xff, 0xfd, 0xf8, 0x00, 0x01, 0xef, 0xfd, 0xff, 0xff,
0xff, 0xff, 0xfb, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xfb, 0xe0, 0x00, 0x00, 0x1f, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xf7, 0xe0, 0x00, 0x00, 0x07, 0xbf, 0x7f, 0xff,
0xff, 0xff, 0xf7, 0xc0, 0x00, 0x00, 0x03, 0xbf, 0x7f, 0xff,
0xff, 0xff, 0xef, 0xc0, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff,
0xff, 0xff, 0xef, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff,
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x03, 0xdf, 0xbf, 0xff,
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xdf, 0x80, 0x00, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x01, 0xef, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x03, 0x03, 0xdf, 0xff,
0xff, 0xff, 0xbf, 0x00, 0x20, 0x00, 0x02, 0xfd, 0xdf, 0xff,
0xff, 0xff, 0xa3, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xdf, 0xff,
0xff, 0xff, 0xc1, 0xc0, 0x00, 0x00, 0x11, 0xff, 0x3f, 0xff,
0xff, 0xff, 0x80, 0xe0, 0x00, 0x00, 0x21, 0xfe, 0x3f, 0xff,
0xff, 0xff, 0x00, 0x70, 0x00, 0x00, 0x21, 0xfc, 0x3f, 0xff,
0xff, 0xfe, 0x00, 0x3c, 0x00, 0x00, 0x20, 0xf8, 0x3f, 0xff,
0xff, 0xf0, 0x00, 0x3e, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff,
0xff, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x20, 0x00, 0x3f, 0xff,
0xff, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x20, 0x00, 0x1f, 0xff,
0xff, 0xc0, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x00, 0x07, 0xff,
0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x20, 0x00, 0x03, 0xff,
0xff, 0xc0, 0x00, 0x07, 0x80, 0x00, 0x60, 0x00, 0x01, 0xff,
0xff, 0xc0, 0x00, 0x02, 0x00, 0x00, 0xe0, 0x00, 0x01, 0xff,
0xff, 0xc0, 0x00, 0x01, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xff,
0xff, 0xc0, 0x00, 0x00, 0x80, 0x07, 0xe0, 0x00, 0x03, 0xff,
0xff, 0xc0, 0x00, 0x00, 0x80, 0x3f, 0xe0, 0x00, 0x0f, 0xff,
0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x1f, 0xff,
0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x7f, 0xff,
0xff, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0xff, 0xff,
0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x03, 0xff, 0xff,
0xff, 0xff, 0xc0, 0x00, 0x70, 0x00, 0xc0, 0x07, 0xff, 0xff,
0xff, 0xff, 0xfc, 0x00, 0x8f, 0xff, 0x20, 0x0f, 0xff, 0xff,
0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
#endif /* !__HAVE_ARCH_LINUX_LOGOBW */
#ifndef __HAVE_ARCH_LINUX_LOGO16
unsigned char linux_logo16[] __initdata = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x88, 0x88, 0x88, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0x80, 0x00, 0x00, 0x08, 0x88, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x80,
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x08, 0x70, 0x00, 0x00, 0x00, 0x77, 0x70, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x87, 0x77, 0x00, 0x00, 0x07, 0xff, 0xf7, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x77, 0xff, 0x00, 0x00, 0x7f, 0x77, 0xf7, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x70, 0x0f, 0x80, 0x00, 0xf7, 0x08, 0x7f, 0x70,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x80, 0x07, 0x80, 0x00, 0xf8, 0x00, 0x8f, 0x70,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
0x70, 0x07, 0x88, 0x88, 0xf8, 0x00, 0x8f, 0x70,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0xf0, 0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x77, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x77, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00,
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x60,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66, 0x80,
0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
0x86, 0xe6, 0xe6, 0xe6, 0x66, 0x66, 0x66, 0x80,
0x08, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
0x86, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, 0x70,
0x00, 0x77, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x87, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x78,
0x00, 0x88, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x87, 0x76, 0x66, 0x66, 0x77, 0x77, 0xff, 0xf7,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08,
0xff, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff,
0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07,
0xff, 0x77, 0x77, 0x77, 0x7f, 0xff, 0xff, 0xff,
0x70, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x8f,
0xff, 0xf7, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff,
0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x7f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x87, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x87, 0x77,
0xff, 0xf7, 0x77, 0xff, 0xff, 0xff, 0x77, 0x77,
0x77, 0x78, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x77, 0x7f,
0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x77,
0x77, 0x78, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x77, 0x00, 0x08, 0x80, 0x00, 0x00, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x80, 0x08, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x77, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x00, 0x80, 0x07, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x78, 0x00, 0x08, 0x80, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x08, 0x00, 0x8f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x08, 0x08, 0x7f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x08, 0x07, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x00, 0x08, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x80, 0x0f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x80, 0x8f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x08, 0x00, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x70, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x08, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x88, 0x88, 0x80, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x06, 0xe6, 0x00, 0x8f, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x08, 0x80,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff, 0xff,
0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x88,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0xe6, 0xe6, 0xe6, 0x00, 0x8f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x00,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x08, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x06,
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0x6e, 0x60, 0x00, 0x00, 0x00, 0x0e,
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x08, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x76, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0xe6,
0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x8f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00, 0x08,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x7e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x60, 0x00,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x76, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe0, 0x00,
0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf7, 0x8e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x88,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x78, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xef,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7,
0x80, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78,
0x00, 0x06, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80,
0x00, 0x06, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66,
0x67, 0xff, 0xff, 0xff, 0xff, 0x78, 0x80, 0x00,
0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e,
0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x6e, 0x6e, 0x6e,
0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x86, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xe6, 0xe6,
0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x86, 0x6e, 0x6e, 0x6e, 0x6e, 0x66, 0x66,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66,
0x66, 0x66, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x66,
0x60, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x00, 0x06, 0x66, 0xe6, 0xe6, 0xe6, 0x66, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x66,
0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x88, 0x86, 0x66, 0x6e, 0x6e, 0x66, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x66, 0x66,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x06, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x66, 0x66, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#endif /* !__HAVE_ARCH_LINUX_LOGO16 */
#else /* !INCLUDE_LINUX_LOGO_DATA */
/* prototypes only */
extern unsigned char linux_logo_red[];
extern unsigned char linux_logo_green[];
extern unsigned char linux_logo_blue[];
extern unsigned char linux_logo[];
extern unsigned char linux_logo_bw[];
extern unsigned char linux_logo16[];
#include <linux/linux_logo.h> #endif /* !INCLUDE_LINUX_LOGO_DATA */
...@@ -3,10 +3,23 @@ ...@@ -3,10 +3,23 @@
/* /*
* This file contains the parisc architecture specific module code. * This file contains the parisc architecture specific module code.
*/ */
#ifdef __LP64__
#define Elf_Shdr Elf64_Shdr
#define Elf_Sym Elf64_Sym
#define Elf_Ehdr Elf64_Ehdr
#else
#define Elf_Shdr Elf32_Shdr
#define Elf_Sym Elf32_Sym
#define Elf_Ehdr Elf32_Ehdr
#endif
#define module_map(x) vmalloc(x) #define module_map(x) vmalloc(x)
#define module_unmap(x) vfree(x) #define module_unmap(x) vfree(x)
#define module_arch_init(x) (0) #define module_arch_init(x) (0)
#define arch_init_modules(x) do { } while (0) #define arch_init_modules(x) do { } while (0)
struct mod_arch_specific
{
};
#endif /* _ASM_PARISC_MODULE_H */ #endif /* _ASM_PARISC_MODULE_H */
#include <linux/device.h>
struct parisc_device {
unsigned long hpa; /* Hard Physical Address */
struct parisc_device_id id;
struct parisc_device *parent;
struct parisc_device *sibling;
struct parisc_device *child;
struct parisc_driver *driver; /* Driver for this device */
void *sysdata; /* Driver instance private data */
char name[80]; /* The hardware description */
int irq;
char hw_path; /* The module number on this bus */
unsigned int num_addrs; /* some devices have additional address ranges. */
unsigned long *addr; /* which will be stored here */
#ifdef __LP64__
/* parms for pdc_pat_cell_module() call */
unsigned long pcell_loc; /* Physical Cell location */
unsigned long mod_index; /* PAT specific - Misc Module info */
/* generic info returned from pdc_pat_cell_module() */
unsigned long mod_info; /* PAT specific - Misc Module info */
unsigned long pmod_loc; /* physical Module location */
#endif
u64 dma_mask; /* DMA mask for I/O */
struct device dev;
};
struct parisc_driver {
struct parisc_driver *next;
char *name;
const struct parisc_device_id *id_table;
int (*probe) (struct parisc_device *dev); /* New device discovered */
struct device_driver drv;
};
#define to_parisc_device(d) container_of(d, struct parisc_device, dev)
#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv)
extern struct bus_type parisc_bus_type;
...@@ -131,74 +131,6 @@ struct pci_bios_ops { ...@@ -131,74 +131,6 @@ struct pci_bios_ops {
void (*fixup_bus)(struct pci_bus *bus); void (*fixup_bus)(struct pci_bus *bus);
}; };
/*
** See Documentation/DMA-mapping.txt
*/
struct pci_dma_ops {
int (*dma_supported)(struct pci_dev *dev, u64 mask);
void *(*alloc_consistent)(struct pci_dev *dev, size_t size, dma_addr_t *iova);
void (*free_consistent)(struct pci_dev *dev, size_t size, void *vaddr, dma_addr_t iova);
dma_addr_t (*map_single)(struct pci_dev *dev, void *addr, size_t size, int direction);
void (*unmap_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction);
int (*map_sg)(struct pci_dev *dev, struct scatterlist *sg, int nents, int direction);
void (*unmap_sg)(struct pci_dev *dev, struct scatterlist *sg, int nhwents, int direction);
void (*dma_sync_single)(struct pci_dev *dev, dma_addr_t iova, size_t size, int direction);
void (*dma_sync_sg)(struct pci_dev *dev, struct scatterlist *sg, int nelems, int direction);
};
/*
** We could live without the hppa_dma_ops indirection if we didn't want
** to support 4 different coherent dma models with one binary (they will
** someday be loadable modules):
** I/O MMU consistent method dma_sync behavior
** ============= ====================== =======================
** a) PA-7x00LC uncachable host memory flush/purge
** b) U2/Uturn cachable host memory NOP
** c) Ike/Astro cachable host memory NOP
** d) EPIC/SAGA memory on EPIC/SAGA flush/reset DMA channel
**
** PA-7[13]00LC processors have a GSC bus interface and no I/O MMU.
**
** Systems (eg PCX-T workstations) that don't fall into the above
** categories will need to modify the needed drivers to perform
** flush/purge and allocate "regular" cacheable pages for everything.
*/
extern struct pci_dma_ops *hppa_dma_ops;
#ifdef CONFIG_PA11
extern struct pci_dma_ops pcxl_dma_ops;
extern struct pci_dma_ops pcx_dma_ops;
#endif
/*
** Oops hard if we haven't setup hppa_dma_ops by the time the first driver
** attempts to initialize.
** Since panic() is a (void)(), pci_dma_panic() is needed to satisfy
** the (int)() required by pci_dma_supported() interface.
*/
static inline int pci_dma_panic(char *msg)
{
extern void panic(const char *, ...); /* linux/kernel.h */
panic(msg);
/* NOTREACHED */
return -1;
}
#define pci_dma_supported(p, m) ( \
(NULL == hppa_dma_ops) \
? pci_dma_panic("Dynamic DMA support missing...OOPS!\n(Hint: was Astro/Ike/U2/Uturn not claimed?)\n") \
: hppa_dma_ops->dma_supported(p,m) \
)
#define pci_alloc_consistent(p, s, a) hppa_dma_ops->alloc_consistent(p,s,a)
#define pci_free_consistent(p, s, v, a) hppa_dma_ops->free_consistent(p,s,v,a)
#define pci_map_single(p, v, s, d) hppa_dma_ops->map_single(p, v, s, d)
#define pci_unmap_single(p, a, s, d) hppa_dma_ops->unmap_single(p, a, s, d)
#define pci_map_sg(p, sg, n, d) hppa_dma_ops->map_sg(p, sg, n, d)
#define pci_unmap_sg(p, sg, n, d) hppa_dma_ops->unmap_sg(p, sg, n, d)
/* pci_unmap_{single,page} is not a nop, thus... */ /* pci_unmap_{single,page} is not a nop, thus... */
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \
dma_addr_t ADDR_NAME; dma_addr_t ADDR_NAME;
...@@ -213,24 +145,6 @@ static inline int pci_dma_panic(char *msg) ...@@ -213,24 +145,6 @@ static inline int pci_dma_panic(char *msg)
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ #define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
(((PTR)->LEN_NAME) = (VAL)) (((PTR)->LEN_NAME) = (VAL))
/* For U2/Astro/Ike based platforms (which are fully I/O coherent)
** dma_sync is a NOP. Let's keep the performance path short here.
*/
#define pci_dma_sync_single(p, a, s, d) { if (hppa_dma_ops->dma_sync_single) \
hppa_dma_ops->dma_sync_single(p, a, s, d); \
}
#define pci_dma_sync_sg(p, sg, n, d) { if (hppa_dma_ops->dma_sync_sg) \
hppa_dma_ops->dma_sync_sg(p, sg, n, d); \
}
/* No highmem on parisc, plus we have an IOMMU, so mapping pages is easy. */
#define pci_map_page(dev, page, off, size, dir) \
pci_map_single(dev, (page_address(page) + (off)), size, dir)
#define pci_unmap_page(dev,addr,sz,dir) pci_unmap_single(dev,addr,sz,dir)
/* Don't support DAC yet. */
#define pci_dac_dma_supported(pci_dev, mask) (0)
/* /*
** Stuff declared in arch/parisc/kernel/pci.c ** Stuff declared in arch/parisc/kernel/pci.c
*/ */
...@@ -243,7 +157,6 @@ extern struct pci_hba_data *parisc_pci_hba[]; ...@@ -243,7 +157,6 @@ extern struct pci_hba_data *parisc_pci_hba[];
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
extern void pcibios_register_hba(struct pci_hba_data *); extern void pcibios_register_hba(struct pci_hba_data *);
extern void pcibios_set_master(struct pci_dev *); extern void pcibios_set_master(struct pci_dev *);
extern void pcibios_assign_unassigned_resources(struct pci_bus *);
#else #else
extern inline void pcibios_register_hba(struct pci_hba_data *x) extern inline void pcibios_register_hba(struct pci_hba_data *x)
{ {
...@@ -264,35 +177,13 @@ extern inline void pcibios_register_hba(struct pci_hba_data *x) ...@@ -264,35 +177,13 @@ extern inline void pcibios_register_hba(struct pci_hba_data *x)
#define PCIBIOS_MIN_IO 0x10 #define PCIBIOS_MIN_IO 0x10
#define PCIBIOS_MIN_MEM 0x1000 /* NBPG - but pci/setup-res.c dies */ #define PCIBIOS_MIN_MEM 0x1000 /* NBPG - but pci/setup-res.c dies */
/* Return the index of the PCI controller for device PDEV. */ /* Don't support DAC yet. */
#define pci_controller_num(PDEV) (0) #define pci_dac_dma_supported(pci_dev, mask) (0)
#define GET_IOC(dev) ((struct ioc *)(HBA_DATA(dev->sysdata)->iommu))
#ifdef CONFIG_IOMMU_CCIO /* Return the index of the PCI controller for device PDEV. */
struct parisc_device; #define pci_controller_num(PDEV) (0)
struct ioc;
void * ccio_get_iommu(const struct parisc_device *dev);
struct pci_dev * ccio_get_fake(const struct parisc_device *dev);
int ccio_request_resource(const struct parisc_device *dev,
struct resource *res);
int ccio_allocate_resource(const struct parisc_device *dev,
struct resource *res, unsigned long size,
unsigned long min, unsigned long max, unsigned long align,
void (*alignf)(void *, struct resource *, unsigned long, unsigned long),
void *alignf_data);
#else /* !CONFIG_IOMMU_CCIO */
#define ccio_get_iommu(dev) NULL
#define ccio_get_fake(dev) NULL
#define ccio_request_resource(dev, res) request_resource(&iomem_resource, res)
#define ccio_allocate_resource(dev, res, size, min, max, align, alignf, data) \
allocate_resource(&iomem_resource, res, size, min, max, \
align, alignf, data)
#endif /* !CONFIG_IOMMU_CCIO */
#ifdef CONFIG_IOMMU_SBA /* export the pci_ DMA API in terms of the dma_ one */
struct parisc_device; #include <asm-generic/pci-dma-compat.h>
void * sba_get_iommu(struct parisc_device *dev);
#endif
#endif /* __ASM_PARISC_PCI_H */ #endif /* __ASM_PARISC_PCI_H */
...@@ -55,27 +55,6 @@ typedef struct { ...@@ -55,27 +55,6 @@ typedef struct {
typedef __kernel_uid_t __kernel_old_uid_t; typedef __kernel_uid_t __kernel_old_uid_t;
typedef __kernel_gid_t __kernel_old_gid_t; typedef __kernel_gid_t __kernel_old_gid_t;
#if defined(__KERNEL__) && defined(__LP64__)
/* Now 32bit compatibility types */
typedef unsigned int __kernel_dev_t32;
typedef unsigned int __kernel_ino_t32;
typedef unsigned short __kernel_mode_t32;
typedef unsigned short __kernel_nlink_t32;
typedef int __kernel_off_t32;
typedef int __kernel_pid_t32;
typedef unsigned short __kernel_ipc_pid_t32;
typedef unsigned int __kernel_uid_t32;
typedef unsigned int __kernel_gid_t32;
typedef unsigned int __kernel_size_t32;
typedef int __kernel_ssize_t32;
typedef int __kernel_ptrdiff_t32;
typedef int __kernel_time_t32;
typedef int __kernel_suseconds_t32;
typedef int __kernel_clock_t32;
typedef int __kernel_daddr_t32;
typedef unsigned int __kernel_caddr_t32;
#endif
#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
#undef __FD_SET #undef __FD_SET
......
...@@ -140,10 +140,7 @@ struct thread_struct { ...@@ -140,10 +140,7 @@ struct thread_struct {
* Return saved PC of a blocked thread. This is used by ps mostly. * Return saved PC of a blocked thread. This is used by ps mostly.
*/ */
static inline unsigned long thread_saved_pc(struct task_struct *t) unsigned long thread_saved_pc(struct task_struct *t);
{
return 0xabcdef;
}
/* /*
* Start user thread in another space. * Start user thread in another space.
......
...@@ -89,11 +89,11 @@ struct stat64 { ...@@ -89,11 +89,11 @@ struct stat64 {
signed long long st_blocks; signed long long st_blocks;
signed int st_atime; signed int st_atime;
unsigned int __unused1; unsigned int st_atime_nsec;
signed int st_mtime; signed int st_mtime;
unsigned int __unused2; unsigned int st_mtime_nsec;
signed int st_ctime; signed int st_ctime;
unsigned int __unused3; unsigned int st_ctime_nsec;
unsigned long long st_ino; unsigned long long st_ino;
}; };
......
...@@ -129,6 +129,7 @@ static inline void set_eiem(unsigned long val) ...@@ -129,6 +129,7 @@ static inline void set_eiem(unsigned long val)
#define rmb() mb() #define rmb() mb()
#define wmb() mb() #define wmb() mb()
#define smp_mb() mb() #define smp_mb() mb()
#define smp_rmb() mb()
#define smp_wmb() mb() #define smp_wmb() mb()
#define smp_read_barrier_depends() do { } while(0) #define smp_read_barrier_depends() do { } while(0)
#define read_barrier_depends() do { } while(0) #define read_barrier_depends() do { } while(0)
......
...@@ -12,6 +12,7 @@ struct thread_info { ...@@ -12,6 +12,7 @@ struct thread_info {
__u32 flags; /* thread_info flags (see TIF_*) */ __u32 flags; /* thread_info flags (see TIF_*) */
__u32 cpu; /* current CPU */ __u32 cpu; /* current CPU */
mm_segment_t addr_limit; /* user-level address space limit */ mm_segment_t addr_limit; /* user-level address space limit */
struct restart_block restart_block;
__s32 preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */ __s32 preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */
}; };
...@@ -60,9 +61,6 @@ struct thread_info { ...@@ -60,9 +61,6 @@ struct thread_info {
#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_32BIT 5 /* 32 bit binary */ #define TIF_32BIT 5 /* 32 bit binary */
#define TIF_WORK_MASK 0x7 /* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE */
#define TIF_ALLWORK_MASK 0xf /* bits 0..3 are "work to do on user-return" bits */
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
#if BITS_PER_LONG == 32 #if BITS_PER_LONG == 32
#define LDD_KERNEL(ptr) BUG() #define LDD_KERNEL(ptr) BUG()
#define LDD_USER(ptr) BUG() #define LDD_USER(ptr) BUG()
#define STD_KERNEL(x, ptr) __put_kernel_asm64(x,ptr) #define STD_KERNEL(x, ptr) __put_kernel_asm64((u32)x,ptr)
#define STD_USER(x, ptr) __put_user_asm64(x,ptr) #define STD_USER(x, ptr) __put_user_asm64((u32)x,ptr)
#else #else
#define LDD_KERNEL(ptr) __get_kernel_asm("ldd",ptr) #define LDD_KERNEL(ptr) __get_kernel_asm("ldd",ptr)
#define LDD_USER(ptr) __get_user_asm("ldd",ptr) #define LDD_USER(ptr) __get_user_asm("ldd",ptr)
...@@ -61,9 +61,6 @@ struct exception_table_entry { ...@@ -61,9 +61,6 @@ struct exception_table_entry {
long skip; /* pcoq skip | r9 clear flag | r8 -EFAULT flag */ long skip; /* pcoq skip | r9 clear flag | r8 -EFAULT flag */
}; };
extern const struct exception_table_entry
*search_exception_table(unsigned long addr);
#define __get_user(x,ptr) \ #define __get_user(x,ptr) \
({ \ ({ \
register long __gu_err __asm__ ("r8") = 0; \ register long __gu_err __asm__ ("r8") = 0; \
......
...@@ -701,8 +701,28 @@ ...@@ -701,8 +701,28 @@
#define __NR_gettid (__NR_Linux + 206) #define __NR_gettid (__NR_Linux + 206)
#define __NR_readahead (__NR_Linux + 207) #define __NR_readahead (__NR_Linux + 207)
#define __NR_tkill (__NR_Linux + 208) #define __NR_tkill (__NR_Linux + 208)
#define __NR_sendfile64 (__NR_Linux + 209)
#define __NR_Linux_syscalls 208 #define __NR_futex (__NR_Linux + 210)
#define __NR_sched_setaffinity (__NR_Linux + 211)
#define __NR_sched_getaffinity (__NR_Linux + 212)
#define __NR_set_thread_area (__NR_Linux + 213)
#define __NR_get_thread_area (__NR_Linux + 214)
#define __NR_io_setup (__NR_Linux + 215)
#define __NR_io_destroy (__NR_Linux + 216)
#define __NR_io_getevents (__NR_Linux + 217)
#define __NR_io_submit (__NR_Linux + 218)
#define __NR_io_cancel (__NR_Linux + 219)
#define __NR_alloc_hugepages (__NR_Linux + 220)
#define __NR_free_hugepages (__NR_Linux + 221)
#define __NR_exit_group (__NR_Linux + 222)
#define __NR_lookup_dcookie (__NR_Linux + 223)
#define __NR_epoll_create (__NR_Linux + 224)
#define __NR_epoll_ctl (__NR_Linux + 225)
#define __NR_epoll_wait (__NR_Linux + 226)
#define __NR_remap_file_pages (__NR_Linux + 227)
#define __NR_Linux_syscalls 228
#define HPUX_GATEWAY_ADDR 0xC0000004 #define HPUX_GATEWAY_ADDR 0xC0000004
#define LINUX_GATEWAY_ADDR 0x100 #define LINUX_GATEWAY_ADDR 0x100
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment