Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
89a2fa5f
Commit
89a2fa5f
authored
Feb 03, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
parents
27266a18
68ee3eb8
Changes
40
Show whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
904 additions
and
328 deletions
+904
-328
arch/parisc/Kconfig
arch/parisc/Kconfig
+13
-7
arch/parisc/Kconfig.debug
arch/parisc/Kconfig.debug
+10
-0
arch/parisc/configs/b180_defconfig
arch/parisc/configs/b180_defconfig
+146
-36
arch/parisc/hpux/entry_hpux.S
arch/parisc/hpux/entry_hpux.S
+1
-2
arch/parisc/kernel/drivers.c
arch/parisc/kernel/drivers.c
+1
-2
arch/parisc/kernel/parisc_ksyms.c
arch/parisc/kernel/parisc_ksyms.c
+0
-3
arch/parisc/kernel/pci.c
arch/parisc/kernel/pci.c
+7
-6
arch/parisc/kernel/perf.c
arch/parisc/kernel/perf.c
+18
-20
arch/parisc/kernel/perf_images.h
arch/parisc/kernel/perf_images.h
+2
-2
arch/parisc/kernel/process.c
arch/parisc/kernel/process.c
+6
-29
arch/parisc/kernel/ptrace.c
arch/parisc/kernel/ptrace.c
+4
-4
arch/parisc/kernel/signal.c
arch/parisc/kernel/signal.c
+1
-1
arch/parisc/kernel/signal32.c
arch/parisc/kernel/signal32.c
+101
-1
arch/parisc/kernel/signal32.h
arch/parisc/kernel/signal32.h
+125
-2
arch/parisc/kernel/syscall.S
arch/parisc/kernel/syscall.S
+2
-0
arch/parisc/kernel/syscall_table.S
arch/parisc/kernel/syscall_table.S
+19
-0
arch/parisc/kernel/traps.c
arch/parisc/kernel/traps.c
+1
-2
arch/parisc/math-emu/decode_exc.c
arch/parisc/math-emu/decode_exc.c
+1
-0
arch/parisc/mm/init.c
arch/parisc/mm/init.c
+17
-18
drivers/parisc/ccio-dma.c
drivers/parisc/ccio-dma.c
+3
-4
drivers/parisc/dino.c
drivers/parisc/dino.c
+1
-3
drivers/parisc/hppb.c
drivers/parisc/hppb.c
+1
-2
drivers/parisc/iosapic.c
drivers/parisc/iosapic.c
+2
-6
drivers/parisc/lasi.c
drivers/parisc/lasi.c
+3
-2
drivers/parisc/lba_pci.c
drivers/parisc/lba_pci.c
+2
-4
drivers/parisc/pdc_stable.c
drivers/parisc/pdc_stable.c
+262
-94
drivers/parisc/sba_iommu.c
drivers/parisc/sba_iommu.c
+1
-2
drivers/parisc/superio.c
drivers/parisc/superio.c
+22
-19
drivers/parisc/wax.c
drivers/parisc/wax.c
+1
-1
drivers/parport/parport_gsc.c
drivers/parport/parport_gsc.c
+1
-1
drivers/video/console/sticore.c
drivers/video/console/sticore.c
+19
-26
include/asm-parisc/atomic.h
include/asm-parisc/atomic.h
+69
-15
include/asm-parisc/cacheflush.h
include/asm-parisc/cacheflush.h
+6
-0
include/asm-parisc/compat_ucontext.h
include/asm-parisc/compat_ucontext.h
+1
-2
include/asm-parisc/grfioctl.h
include/asm-parisc/grfioctl.h
+1
-1
include/asm-parisc/pci.h
include/asm-parisc/pci.h
+13
-4
include/asm-parisc/pgalloc.h
include/asm-parisc/pgalloc.h
+0
-1
include/asm-parisc/pgtable.h
include/asm-parisc/pgtable.h
+1
-1
include/asm-parisc/rt_sigframe.h
include/asm-parisc/rt_sigframe.h
+0
-4
include/asm-parisc/unistd.h
include/asm-parisc/unistd.h
+20
-1
No files found.
arch/parisc/Kconfig
View file @
89a2fa5f
...
@@ -149,14 +149,20 @@ config HOTPLUG_CPU
...
@@ -149,14 +149,20 @@ config HOTPLUG_CPU
default y if SMP
default y if SMP
select HOTPLUG
select HOTPLUG
config ARCH_SELECT_MEMORY_MODEL
def_bool y
depends on 64BIT
config ARCH_DISCONTIGMEM_ENABLE
config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous memory support (EXPERIMENTAL)"
def_bool y
depends on 64BIT && EXPERIMENTAL
depends on 64BIT
help
Say Y to support efficient handling of discontiguous physical memory,
config ARCH_FLATMEM_ENABLE
for architectures which are either NUMA (Non-Uniform Memory Access)
def_bool y
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more.
config ARCH_DISCONTIGMEM_DEFAULT
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
source "kernel/Kconfig.hz"
source "kernel/Kconfig.hz"
source "mm/Kconfig"
source "mm/Kconfig"
...
...
arch/parisc/Kconfig.debug
View file @
89a2fa5f
...
@@ -11,4 +11,14 @@ config DEBUG_RWLOCK
...
@@ -11,4 +11,14 @@ config DEBUG_RWLOCK
too many attempts. If you suspect a rwlock problem or a kernel
too many attempts. If you suspect a rwlock problem or a kernel
hacker asks for this option then say Y. Otherwise say N.
hacker asks for this option then say Y. Otherwise say N.
config DEBUG_RODATA
bool "Write protect kernel read-only data structures"
depends on DEBUG_KERNEL
help
Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const
data. This option may have a slight performance impact because a
portion of the kernel code won't be covered by a TLB anymore.
If in doubt, say "N".
endmenu
endmenu
arch/parisc/configs/b180_defconfig
View file @
89a2fa5f
#
#
# Automatically generated make config: don't edit
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
4-rc5-pa1
# Linux kernel version: 2.6.1
6-rc1-pa0
#
Fri Oct 21 23:06:10 2005
#
Tue Jan 17 08:21:01 2006
#
#
CONFIG_PARISC=y
CONFIG_PARISC=y
CONFIG_MMU=y
CONFIG_MMU=y
...
@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y
...
@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
# CONFIG_AUDIT is not set
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKCONFIG_PROC=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_INITRAMFS_SOURCE=""
...
@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE=""
...
@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE=""
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_EPOLL=y
...
@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
...
@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
#
#
# Loadable module support
# Loadable module support
...
@@ -57,9 +59,27 @@ CONFIG_BASE_SMALL=0
...
@@ -57,9 +59,27 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODULE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
CONFIG_OBSOLETE_MODPARM=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD is not set
# CONFIG_KMOD is not set
#
# Block layer
#
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
#
#
# Processor type and features
# Processor type and features
#
#
...
@@ -77,6 +97,7 @@ CONFIG_HZ=250
...
@@ -77,6 +97,7 @@ CONFIG_HZ=250
CONFIG_FLATMEM=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT is not set
# CONFIG_HPUX is not set
# CONFIG_HPUX is not set
...
@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
...
@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
#
#
CONFIG_GSC=y
CONFIG_GSC=y
# CONFIG_HPPB is not set
CONFIG_HPPB=y
# CONFIG_IOMMU_CCIO is not set
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
...
@@ -165,8 +186,11 @@ CONFIG_IPV6=y
...
@@ -165,8 +186,11 @@ CONFIG_IPV6=y
# CONFIG_LLC2 is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_ATALK is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
#
# Network testing
# Network testing
...
@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y
...
@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y
CONFIG_PARPORT=y
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_SERIAL is not set
CONFIG_PARPORT_NOT_PC=y
CONFIG_PARPORT_GSC=y
CONFIG_PARPORT_GSC=y
# CONFIG_PARPORT_1284 is not set
# CONFIG_PARPORT_1284 is not set
...
@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
...
@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_ATA_OVER_ETH=y
CONFIG_ATA_OVER_ETH=y
#
#
...
@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y
...
@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y
#
#
# SCSI low-level drivers
# SCSI low-level drivers
#
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_ACARD is not set
...
@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y
...
@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
CONFIG_SCSI_SYM53C8XX_MMIO=y
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_ZALON is not set
CONFIG_SCSI_ZALON=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=40
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA2XXX=y
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA21XX is not set
# CONFIG_SCSI_QLA22XX is not set
# CONFIG_SCSI_QLA2300 is not set
# CONFIG_SCSI_QLA2322 is not set
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_SYM53C416 is not set
...
@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y
...
@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y
#
#
CONFIG_NET_ETHERNET=y
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
# CONFIG_MII is not set
# CONFIG_LASI_82596 is not set
CONFIG_LASI_82596=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_CASSINI is not set
...
@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y
...
@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y
# Wireless 802.11b ISA/PCI cards support
# Wireless 802.11b ISA/PCI cards support
#
#
# CONFIG_HERMES is not set
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
#
#
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
...
@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
...
@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
# 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_KEYBOARD_HIL_OLD is not set
# CONFIG_KEYBOARD_HIL_OLD is not set
# CONFIG_KEYBOARD_HIL is not set
CONFIG_KEYBOARD_HIL=y
CONFIG_INPUT_MOUSE=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_SERIAL is not set
...
@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y
...
@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_MOUSE_HIL is not set
CONFIG_MOUSE_HIL=y
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
CONFIG_INPUT_MISC=y
...
@@ -549,7 +566,8 @@ CONFIG_SERIO=y
...
@@ -549,7 +566,8 @@ CONFIG_SERIO=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_PARKBD is not set
# CONFIG_SERIO_PARKBD is not set
CONFIG_SERIO_GSCPS2=y
CONFIG_SERIO_GSCPS2=y
# CONFIG_HP_SDC is not set
CONFIG_HP_SDC=y
CONFIG_HIL_MLC=y
# CONFIG_SERIO_PCIPS2 is not set
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
# CONFIG_SERIO_RAW is not set
...
@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y
...
@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=13
CONFIG_SERIAL_8250_NR_UARTS=13
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
...
@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
...
@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
#
#
# Non-8250 serial port support
# Non-8250 serial port support
#
#
# CONFIG_SERIAL_MUX is not set
CONFIG_SERIAL_MUX=y
# CONFIG_PDC_CONSOLE is not set
CONFIG_SERIAL_MUX_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_LEGACY_PTY_COUNT=256
...
@@ -625,6 +643,12 @@ CONFIG_GEN_RTC=y
...
@@ -625,6 +643,12 @@ CONFIG_GEN_RTC=y
#
#
# CONFIG_I2C is not set
# CONFIG_I2C is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
#
#
# Dallas's 1-wire bus
# Dallas's 1-wire bus
#
#
...
@@ -661,7 +685,6 @@ CONFIG_FB=y
...
@@ -661,7 +685,6 @@ CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
# CONFIG_FB_TILEBLITTING is not set
...
@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y
...
@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_IMSTT is not set
CONFIG_FB_STI=y
CONFIG_FB_STI=y
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_NVIDIA 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
...
@@ -683,9 +707,7 @@ CONFIG_FB_STI=y
...
@@ -683,9 +707,7 @@ CONFIG_FB_STI=y
# CONFIG_FB_KYRO is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_VIRTUAL is not set
#
#
...
@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y
...
@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=160
CONFIG_DUMMY_CONSOLE_COLUMNS=160
CONFIG_DUMMY_CONSOLE_ROWS=64
CONFIG_DUMMY_CONSOLE_ROWS=64
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_STI_CONSOLE=y
CONFIG_STI_CONSOLE=y
# CONFIG_FONTS is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x8=y
...
@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y
...
@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y
#
#
# Sound
# Sound
#
#
# CONFIG_SOUND is not set
CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_SEQUENCER=y
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
#
# Generic devices
#
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
#
# PCI devices
#
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_HDA_INTEL is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
#
# GSC devices
#
CONFIG_SND_HARMONY=y
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
#
#
# USB support
# USB support
...
@@ -722,6 +823,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
...
@@ -722,6 +823,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB is not set
# CONFIG_USB is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
#
# USB Gadget Support
# USB Gadget Support
#
#
...
@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1"
...
@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# Kernel hacking
# Kernel hacking
#
#
# CONFIG_PRINTK_TIME is not set
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=16
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_IOREMAP is not set
# CONFIG_DEBUG_IOREMAP is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_RODATA is not set
#
#
# Security options
# Security options
...
...
arch/parisc/hpux/entry_hpux.S
View file @
89a2fa5f
...
@@ -22,10 +22,9 @@
...
@@ -22,10 +22,9 @@
#include <linux/linkage.h>
#include <linux/linkage.h>
#include <asm/unistd.h>
#include <asm/unistd.h>
.
text
#define ENTRY_NAME(_name_) .word _name_
#define ENTRY_NAME(_name_) .word _name_
.
section
.
rodata
,
"a"
.
align
4
.
align
4
.
export
hpux_call_table
.
export
hpux_call_table
.
import
hpux_unimplemented_wrapper
.
import
hpux_unimplemented_wrapper
...
...
arch/parisc/kernel/drivers.c
View file @
89a2fa5f
...
@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev)
...
@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev)
struct
parisc_device
*
create_tree_node
(
char
id
,
struct
device
*
parent
)
struct
parisc_device
*
create_tree_node
(
char
id
,
struct
device
*
parent
)
{
{
struct
parisc_device
*
dev
=
k
m
alloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
struct
parisc_device
*
dev
=
k
z
alloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
if
(
!
dev
)
if
(
!
dev
)
return
NULL
;
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
*
dev
));
dev
->
hw_path
=
id
;
dev
->
hw_path
=
id
;
dev
->
id
.
hw_type
=
HPHW_FAULTY
;
dev
->
id
.
hw_type
=
HPHW_FAULTY
;
...
...
arch/parisc/kernel/parisc_ksyms.c
View file @
89a2fa5f
...
@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr);
...
@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr);
EXPORT_SYMBOL
(
strstr
);
EXPORT_SYMBOL
(
strstr
);
EXPORT_SYMBOL
(
strpbrk
);
EXPORT_SYMBOL
(
strpbrk
);
#include <linux/pm.h>
EXPORT_SYMBOL
(
pm_power_off
);
#include <asm/atomic.h>
#include <asm/atomic.h>
EXPORT_SYMBOL
(
__xchg8
);
EXPORT_SYMBOL
(
__xchg8
);
EXPORT_SYMBOL
(
__xchg32
);
EXPORT_SYMBOL
(
__xchg32
);
...
...
arch/parisc/kernel/pci.c
View file @
89a2fa5f
...
@@ -47,18 +47,17 @@
...
@@ -47,18 +47,17 @@
* this makes the boot time much longer than necessary.
* this makes the boot time much longer than necessary.
* 20ms seems to work for all the HP PCI implementations to date.
* 20ms seems to work for all the HP PCI implementations to date.
*
*
*
XXX: turn into a #defined constant in <asm/pci.h> ?
*
#define pci_post_reset_delay 50
*/
*/
int
pci_post_reset_delay
=
50
;
struct
pci_port_ops
*
pci_port
;
struct
pci_port_ops
*
pci_port
__read_mostly
;
struct
pci_bios_ops
*
pci_bios
;
struct
pci_bios_ops
*
pci_bios
__read_mostly
;
int
pci_hba_count
=
0
;
static
int
pci_hba_count
__read_mostly
;
/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */
/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */
#define PCI_HBA_MAX 32
#define PCI_HBA_MAX 32
st
ruct
pci_hba_data
*
parisc_pci_hba
[
PCI_HBA_MAX
]
;
st
atic
struct
pci_hba_data
*
parisc_pci_hba
[
PCI_HBA_MAX
]
__read_mostly
;
/********************************************************************
/********************************************************************
...
@@ -259,8 +258,10 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
...
@@ -259,8 +258,10 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
void
pcibios_bus_to_resource
(
struct
pci_dev
*
dev
,
struct
resource
*
res
,
void
pcibios_bus_to_resource
(
struct
pci_dev
*
dev
,
struct
resource
*
res
,
struct
pci_bus_region
*
region
)
struct
pci_bus_region
*
region
)
{
{
#ifdef CONFIG_64BIT
struct
pci_bus
*
bus
=
dev
->
bus
;
struct
pci_bus
*
bus
=
dev
->
bus
;
struct
pci_hba_data
*
hba
=
HBA_DATA
(
bus
->
bridge
->
platform_data
);
struct
pci_hba_data
*
hba
=
HBA_DATA
(
bus
->
bridge
->
platform_data
);
#endif
if
(
res
->
flags
&
IORESOURCE_MEM
)
{
if
(
res
->
flags
&
IORESOURCE_MEM
)
{
res
->
start
=
PCI_HOST_ADDR
(
hba
,
region
->
start
);
res
->
start
=
PCI_HOST_ADDR
(
hba
,
region
->
start
);
...
...
arch/parisc/kernel/perf.c
View file @
89a2fa5f
...
@@ -68,20 +68,20 @@ struct rdr_tbl_ent {
...
@@ -68,20 +68,20 @@ struct rdr_tbl_ent {
};
};
static
int
perf_processor_interface
__read_mostly
=
UNKNOWN_INTF
;
static
int
perf_processor_interface
__read_mostly
=
UNKNOWN_INTF
;
static
int
perf_enabled
__read_mostly
=
0
;
static
int
perf_enabled
__read_mostly
;
static
spinlock_t
perf_lock
;
static
spinlock_t
perf_lock
;
struct
parisc_device
*
cpu_device
__read_mostly
=
NULL
;
struct
parisc_device
*
cpu_device
__read_mostly
;
/* RDRs to write for PCX-W */
/* RDRs to write for PCX-W */
static
int
perf_rdrs_W
[]
=
static
const
int
perf_rdrs_W
[]
=
{
0
,
1
,
4
,
5
,
6
,
15
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
{
0
,
1
,
4
,
5
,
6
,
15
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
/* RDRs to write for PCX-U */
/* RDRs to write for PCX-U */
static
int
perf_rdrs_U
[]
=
static
const
int
perf_rdrs_U
[]
=
{
0
,
1
,
4
,
5
,
6
,
7
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
{
0
,
1
,
4
,
5
,
6
,
7
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
/* RDR register descriptions for PCX-W */
/* RDR register descriptions for PCX-W */
static
struct
rdr_tbl_ent
perf_rdr_tbl_W
[]
=
{
static
const
struct
rdr_tbl_ent
perf_rdr_tbl_W
[]
=
{
{
19
,
1
,
8
},
/* RDR 0 */
{
19
,
1
,
8
},
/* RDR 0 */
{
16
,
1
,
16
},
/* RDR 1 */
{
16
,
1
,
16
},
/* RDR 1 */
{
72
,
2
,
0
},
/* RDR 2 */
{
72
,
2
,
0
},
/* RDR 2 */
...
@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = {
...
@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = {
};
};
/* RDR register descriptions for PCX-U */
/* RDR register descriptions for PCX-U */
static
struct
rdr_tbl_ent
perf_rdr_tbl_U
[]
=
{
static
const
struct
rdr_tbl_ent
perf_rdr_tbl_U
[]
=
{
{
19
,
1
,
8
},
/* RDR 0 */
{
19
,
1
,
8
},
/* RDR 0 */
{
32
,
1
,
16
},
/* RDR 1 */
{
32
,
1
,
16
},
/* RDR 1 */
{
20
,
1
,
0
},
/* RDR 2 */
{
20
,
1
,
0
},
/* RDR 2 */
...
@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = {
...
@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = {
* A non-zero write_control in the above tables is a byte offset into
* A non-zero write_control in the above tables is a byte offset into
* this array.
* this array.
*/
*/
static
uint64_t
perf_bitmasks
[]
=
{
static
const
uint64_t
perf_bitmasks
[]
=
{
0x0000000000000000ul
,
/* first dbl word must be zero */
0x0000000000000000ul
,
/* first dbl word must be zero */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
...
@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = {
...
@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = {
* Write control bitmasks for Pa-8700 processor given
* Write control bitmasks for Pa-8700 processor given
* somethings have changed slightly.
* somethings have changed slightly.
*/
*/
static
uint64_t
perf_bitmasks_piranha
[]
=
{
static
const
uint64_t
perf_bitmasks_piranha
[]
=
{
0x0000000000000000ul
,
/* first dbl word must be zero */
0x0000000000000000ul
,
/* first dbl word must be zero */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
...
@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = {
...
@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = {
0xfffc000000000000ul
0xfffc000000000000ul
};
};
static
uint64_t
*
bitmask_array
;
/* array of bitmasks to use */
static
const
uint64_t
*
bitmask_array
;
/* array of bitmasks to use */
/******************************************************************************
/******************************************************************************
* Function Prototypes
* Function Prototypes
...
@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun
...
@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun
static
long
perf_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
static
long
perf_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
static
void
perf_start_counters
(
void
);
static
void
perf_start_counters
(
void
);
static
int
perf_stop_counters
(
uint32_t
*
raddr
);
static
int
perf_stop_counters
(
uint32_t
*
raddr
);
static
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
);
static
const
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
);
static
int
perf_rdr_read_ubuf
(
uint32_t
rdr_num
,
uint64_t
*
buffer
);
static
int
perf_rdr_read_ubuf
(
uint32_t
rdr_num
,
uint64_t
*
buffer
);
static
int
perf_rdr_clear
(
uint32_t
rdr_num
);
static
int
perf_rdr_clear
(
uint32_t
rdr_num
);
static
int
perf_write_image
(
uint64_t
*
memaddr
);
static
int
perf_write_image
(
uint64_t
*
memaddr
);
...
@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
...
@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
uint32_t
raddr
[
4
];
uint32_t
raddr
[
4
];
int
error
=
0
;
int
error
=
0
;
lock_kernel
();
switch
(
cmd
)
{
switch
(
cmd
)
{
case
PA_PERF_ON
:
case
PA_PERF_ON
:
...
@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
...
@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
error
=
-
ENOTTY
;
error
=
-
ENOTTY
;
}
}
unlock_kernel
();
return
error
;
return
error
;
}
}
...
@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr)
...
@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr)
* Retrieve a pointer to the description of what this
* Retrieve a pointer to the description of what this
* RDR contains.
* RDR contains.
*/
*/
static
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
)
static
const
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
)
{
{
if
(
perf_processor_interface
==
ONYX_INTF
)
{
if
(
perf_processor_interface
==
ONYX_INTF
)
{
return
&
perf_rdr_tbl_U
[
rdr_num
];
return
&
perf_rdr_tbl_U
[
rdr_num
];
...
@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
...
@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
{
{
uint64_t
data
,
data_mask
=
0
;
uint64_t
data
,
data_mask
=
0
;
uint32_t
width
,
xbits
,
i
;
uint32_t
width
,
xbits
,
i
;
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
tentry
=
perf_rdr_get_entry
(
rdr_num
);
tentry
=
perf_rdr_get_entry
(
rdr_num
);
if
((
width
=
tentry
->
width
)
==
0
)
if
((
width
=
tentry
->
width
)
==
0
)
...
@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
...
@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
*/
*/
static
int
perf_rdr_clear
(
uint32_t
rdr_num
)
static
int
perf_rdr_clear
(
uint32_t
rdr_num
)
{
{
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int32_t
i
;
int32_t
i
;
tentry
=
perf_rdr_get_entry
(
rdr_num
);
tentry
=
perf_rdr_get_entry
(
rdr_num
);
...
@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr)
...
@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr)
uint64_t
buffer
[
MAX_RDR_WORDS
];
uint64_t
buffer
[
MAX_RDR_WORDS
];
uint64_t
*
bptr
;
uint64_t
*
bptr
;
uint32_t
dwords
;
uint32_t
dwords
;
uint32_t
*
intrigue_rdr
;
const
uint32_t
*
intrigue_rdr
;
uint64_t
*
intrigue_bitmask
,
tmp64
;
const
uint64_t
*
intrigue_bitmask
;
uint64_t
tmp64
;
void
__iomem
*
runway
;
void
__iomem
*
runway
;
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int
i
;
int
i
;
/* Clear out counters */
/* Clear out counters */
...
@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr)
...
@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr)
*/
*/
static
void
perf_rdr_write
(
uint32_t
rdr_num
,
uint64_t
*
buffer
)
static
void
perf_rdr_write
(
uint32_t
rdr_num
,
uint64_t
*
buffer
)
{
{
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int32_t
i
;
int32_t
i
;
printk
(
"perf_rdr_write
\n
"
);
printk
(
"perf_rdr_write
\n
"
);
...
...
arch/parisc/kernel/perf_images.h
View file @
89a2fa5f
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
#define PCXU_IMAGE_SIZE 584
#define PCXU_IMAGE_SIZE 584
static
uint32_t
onyx_images
[][
PCXU_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
=
{
static
uint32_t
onyx_images
[][
PCXU_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
__read_mostly
=
{
/*
/*
* CPI:
* CPI:
*
*
...
@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = {
...
@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = {
};
};
#define PCXW_IMAGE_SIZE 576
#define PCXW_IMAGE_SIZE 576
static
uint32_t
cuda_images
[][
PCXW_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
=
{
static
uint32_t
cuda_images
[][
PCXW_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
__read_mostly
=
{
/*
/*
* CPI: FROM CPI.IDF (Image 0)
* CPI: FROM CPI.IDF (Image 0)
*
*
...
...
arch/parisc/kernel/process.c
View file @
89a2fa5f
...
@@ -54,27 +54,6 @@
...
@@ -54,27 +54,6 @@
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/unwind.h>
#include <asm/unwind.h>
static
int
hlt_counter
__read_mostly
;
/*
* Power off function, if any
*/
void
(
*
pm_power_off
)(
void
);
void
disable_hlt
(
void
)
{
hlt_counter
++
;
}
EXPORT_SYMBOL
(
disable_hlt
);
void
enable_hlt
(
void
)
{
hlt_counter
--
;
}
EXPORT_SYMBOL
(
enable_hlt
);
void
default_idle
(
void
)
void
default_idle
(
void
)
{
{
barrier
();
barrier
();
...
@@ -102,12 +81,7 @@ void cpu_idle(void)
...
@@ -102,12 +81,7 @@ void cpu_idle(void)
}
}
#ifdef __LP64__
#define COMMAND_GLOBAL F_EXTEND(0xfffe0030)
#define COMMAND_GLOBAL 0xfffffffffffe0030UL
#else
#define COMMAND_GLOBAL 0xfffe0030
#endif
#define CMD_RESET 5
/* reset any module */
#define CMD_RESET 5
/* reset any module */
/*
/*
...
@@ -162,6 +136,7 @@ void machine_halt(void)
...
@@ -162,6 +136,7 @@ void machine_halt(void)
*/
*/
}
}
void
(
*
chassis_power_off
)(
void
);
/*
/*
* This routine is called from sys_reboot to actually turn off the
* This routine is called from sys_reboot to actually turn off the
...
@@ -170,8 +145,8 @@ void machine_halt(void)
...
@@ -170,8 +145,8 @@ void machine_halt(void)
void
machine_power_off
(
void
)
void
machine_power_off
(
void
)
{
{
/* If there is a registered power off handler, call it. */
/* If there is a registered power off handler, call it. */
if
(
pm
_power_off
)
if
(
chassis
_power_off
)
pm
_power_off
();
chassis
_power_off
();
/* Put the soft power button back under hardware control.
/* Put the soft power button back under hardware control.
* If the user had already pressed the power button, the
* If the user had already pressed the power button, the
...
@@ -187,6 +162,8 @@ void machine_power_off(void)
...
@@ -187,6 +162,8 @@ void machine_power_off(void)
KERN_EMERG
"Please power this system off now."
);
KERN_EMERG
"Please power this system off now."
);
}
}
void
(
*
pm_power_off
)(
void
)
=
machine_power_off
;
EXPORT_SYMBOL
(
pm_power_off
);
/*
/*
* Create a kernel thread
* Create a kernel thread
...
...
arch/parisc/kernel/ptrace.c
View file @
89a2fa5f
...
@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
...
@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
int
copied
;
int
copied
;
#ifdef __LP64__
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
;
unsigned
int
tmp
;
addr
&=
0xffffffffL
;
addr
&=
0xffffffffL
;
...
@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
...
@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case
PTRACE_POKEDATA
:
case
PTRACE_POKEDATA
:
ret
=
0
;
ret
=
0
;
#ifdef __LP64__
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
=
(
unsigned
int
)
data
;
unsigned
int
tmp
=
(
unsigned
int
)
data
;
DBG
(
"sys_ptrace(POKE%s, %d, %lx, %lx)
\n
"
,
DBG
(
"sys_ptrace(POKE%s, %d, %lx, %lx)
\n
"
,
request
==
PTRACE_POKETEXT
?
"TEXT"
:
"DATA"
,
request
==
PTRACE_POKETEXT
?
"TEXT"
:
"DATA"
,
...
@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
...
@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case
PTRACE_PEEKUSR
:
{
case
PTRACE_PEEKUSR
:
{
ret
=
-
EIO
;
ret
=
-
EIO
;
#ifdef __LP64__
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
;
unsigned
int
tmp
;
if
(
addr
&
(
sizeof
(
int
)
-
1
))
if
(
addr
&
(
sizeof
(
int
)
-
1
))
...
@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
...
@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
goto
out_tsk
;
goto
out_tsk
;
}
}
#ifdef __LP64__
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
if
(
addr
&
(
sizeof
(
int
)
-
1
))
if
(
addr
&
(
sizeof
(
int
)
-
1
))
goto
out_tsk
;
goto
out_tsk
;
if
((
addr
=
translate_usr_offset
(
addr
))
<
0
)
if
((
addr
=
translate_usr_offset
(
addr
))
<
0
)
...
...
arch/parisc/kernel/signal.c
View file @
89a2fa5f
...
@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
...
@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
if
(
personality
(
current
->
personality
)
==
PER_LINUX32
)
{
if
(
personality
(
current
->
personality
)
==
PER_LINUX32
)
{
DBG
(
1
,
"setup_rt_frame: frame->info = 0x%p
\n
"
,
&
compat_frame
->
info
);
DBG
(
1
,
"setup_rt_frame: frame->info = 0x%p
\n
"
,
&
compat_frame
->
info
);
err
|=
co
mpat_copy_siginfo_to_user
(
&
compat_frame
->
info
,
info
);
err
|=
co
py_siginfo_to_user32
(
&
compat_frame
->
info
,
info
);
DBG
(
1
,
"SETUP_RT_FRAME: 1
\n
"
);
DBG
(
1
,
"SETUP_RT_FRAME: 1
\n
"
);
compat_val
=
(
compat_int_t
)
current
->
sas_ss_sp
;
compat_val
=
(
compat_int_t
)
current
->
sas_ss_sp
;
err
|=
__put_user
(
compat_val
,
&
compat_frame
->
uc
.
uc_stack
.
ss_sp
);
err
|=
__put_user
(
compat_val
,
&
compat_frame
->
uc
.
uc_stack
.
ss_sp
);
...
...
arch/parisc/kernel/signal32.c
View file @
89a2fa5f
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#include <linux/types.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <asm/compat_signal.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include "signal32.h"
#include "signal32.h"
...
@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
...
@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
return
err
;
return
err
;
}
}
int
copy_siginfo_from_user32
(
siginfo_t
*
to
,
compat_siginfo_t
__user
*
from
)
{
unsigned
long
tmp
;
int
err
;
if
(
!
access_ok
(
VERIFY_READ
,
from
,
sizeof
(
compat_siginfo_t
)))
return
-
EFAULT
;
err
=
__get_user
(
to
->
si_signo
,
&
from
->
si_signo
);
err
|=
__get_user
(
to
->
si_errno
,
&
from
->
si_errno
);
err
|=
__get_user
(
to
->
si_code
,
&
from
->
si_code
);
if
(
to
->
si_code
<
0
)
err
|=
__copy_from_user
(
&
to
->
_sifields
.
_pad
,
&
from
->
_sifields
.
_pad
,
SI_PAD_SIZE
);
else
{
switch
(
to
->
si_code
>>
16
)
{
case
__SI_CHLD
>>
16
:
err
|=
__get_user
(
to
->
si_utime
,
&
from
->
si_utime
);
err
|=
__get_user
(
to
->
si_stime
,
&
from
->
si_stime
);
err
|=
__get_user
(
to
->
si_status
,
&
from
->
si_status
);
default:
err
|=
__get_user
(
to
->
si_pid
,
&
from
->
si_pid
);
err
|=
__get_user
(
to
->
si_uid
,
&
from
->
si_uid
);
break
;
case
__SI_FAULT
>>
16
:
err
|=
__get_user
(
tmp
,
&
from
->
si_addr
);
to
->
si_addr
=
(
void
__user
*
)
tmp
;
break
;
case
__SI_POLL
>>
16
:
err
|=
__get_user
(
to
->
si_band
,
&
from
->
si_band
);
err
|=
__get_user
(
to
->
si_fd
,
&
from
->
si_fd
);
break
;
case
__SI_RT
>>
16
:
/* This is not generated by the kernel as of now. */
case
__SI_MESGQ
>>
16
:
err
|=
__get_user
(
to
->
si_pid
,
&
from
->
si_pid
);
err
|=
__get_user
(
to
->
si_uid
,
&
from
->
si_uid
);
err
|=
__get_user
(
to
->
si_int
,
&
from
->
si_int
);
break
;
}
}
return
err
;
}
int
copy_siginfo_to_user32
(
compat_siginfo_t
__user
*
to
,
siginfo_t
*
from
)
{
unsigned
int
addr
;
int
err
;
if
(
!
access_ok
(
VERIFY_WRITE
,
to
,
sizeof
(
compat_siginfo_t
)))
return
-
EFAULT
;
/* If you change siginfo_t structure, please be sure
this code is fixed accordingly.
It should never copy any pad contained in the structure
to avoid security leaks, but must copy the generic
3 ints plus the relevant union member.
This routine must convert siginfo from 64bit to 32bit as well
at the same time. */
err
=
__put_user
(
from
->
si_signo
,
&
to
->
si_signo
);
err
|=
__put_user
(
from
->
si_errno
,
&
to
->
si_errno
);
err
|=
__put_user
((
short
)
from
->
si_code
,
&
to
->
si_code
);
if
(
from
->
si_code
<
0
)
err
|=
__copy_to_user
(
&
to
->
_sifields
.
_pad
,
&
from
->
_sifields
.
_pad
,
SI_PAD_SIZE
);
else
{
switch
(
from
->
si_code
>>
16
)
{
case
__SI_CHLD
>>
16
:
err
|=
__put_user
(
from
->
si_utime
,
&
to
->
si_utime
);
err
|=
__put_user
(
from
->
si_stime
,
&
to
->
si_stime
);
err
|=
__put_user
(
from
->
si_status
,
&
to
->
si_status
);
default:
err
|=
__put_user
(
from
->
si_pid
,
&
to
->
si_pid
);
err
|=
__put_user
(
from
->
si_uid
,
&
to
->
si_uid
);
break
;
case
__SI_FAULT
>>
16
:
/* avoid type-checking warnings by copying _pad[0] in lieu of si_addr... */
err
|=
__put_user
(
from
->
_sifields
.
_pad
[
0
],
&
to
->
si_addr
);
break
;
case
__SI_POLL
>>
16
:
err
|=
__put_user
(
from
->
si_band
,
&
to
->
si_band
);
err
|=
__put_user
(
from
->
si_fd
,
&
to
->
si_fd
);
break
;
case
__SI_TIMER
>>
16
:
err
|=
__put_user
(
from
->
si_tid
,
&
to
->
si_tid
);
err
|=
__put_user
(
from
->
si_overrun
,
&
to
->
si_overrun
);
addr
=
(
unsigned
long
)
from
->
si_ptr
;
err
|=
__put_user
(
addr
,
&
to
->
si_ptr
);
break
;
case
__SI_RT
>>
16
:
/* Not generated by the kernel as of now. */
case
__SI_MESGQ
>>
16
:
err
|=
__put_user
(
from
->
si_uid
,
&
to
->
si_uid
);
err
|=
__put_user
(
from
->
si_pid
,
&
to
->
si_pid
);
addr
=
(
unsigned
long
)
from
->
si_ptr
;
err
|=
__put_user
(
addr
,
&
to
->
si_ptr
);
break
;
}
}
return
err
;
}
arch/parisc/kernel/signal32.h
View file @
89a2fa5f
...
@@ -20,8 +20,34 @@
...
@@ -20,8 +20,34 @@
#define _PARISC64_KERNEL_SIGNAL32_H
#define _PARISC64_KERNEL_SIGNAL32_H
#include <linux/compat.h>
#include <linux/compat.h>
#include <asm/compat_signal.h>
#include <asm/compat_rt_sigframe.h>
typedef
compat_uptr_t
compat_sighandler_t
;
typedef
struct
compat_sigaltstack
{
compat_uptr_t
ss_sp
;
compat_int_t
ss_flags
;
compat_size_t
ss_size
;
}
compat_stack_t
;
/* Most things should be clean enough to redefine this at will, if care
is taken to make libc match. */
struct
compat_sigaction
{
compat_sighandler_t
sa_handler
;
compat_uint_t
sa_flags
;
compat_sigset_t
sa_mask
;
/* mask last for extensibility */
};
/* 32-bit ucontext as seen from an 64-bit kernel */
struct
compat_ucontext
{
compat_uint_t
uc_flags
;
compat_uptr_t
uc_link
;
compat_stack_t
uc_stack
;
/* struct compat_sigaltstack (12 bytes)*/
/* FIXME: Pad out to get uc_mcontext to start at an 8-byte aligned boundary */
compat_uint_t
pad
[
1
];
struct
compat_sigcontext
uc_mcontext
;
compat_sigset_t
uc_sigmask
;
/* mask last for extensibility */
};
/* ELF32 signal handling */
/* ELF32 signal handling */
...
@@ -29,6 +55,103 @@ struct k_sigaction32 {
...
@@ -29,6 +55,103 @@ struct k_sigaction32 {
struct
compat_sigaction
sa
;
struct
compat_sigaction
sa
;
};
};
typedef
struct
compat_siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[((
128
/
sizeof
(
int
))
-
3
)];
/* kill() */
struct
{
unsigned
int
_pid
;
/* sender's pid */
unsigned
int
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
compat_timer_t
_tid
;
/* timer id */
int
_overrun
;
/* overrun count */
char
_pad
[
sizeof
(
unsigned
int
)
-
sizeof
(
int
)];
compat_sigval_t
_sigval
;
/* same as below */
int
_sys_private
;
/* not to be passed to user */
}
_timer
;
/* POSIX.1b signals */
struct
{
unsigned
int
_pid
;
/* sender's pid */
unsigned
int
_uid
;
/* sender's uid */
compat_sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
unsigned
int
_pid
;
/* which child */
unsigned
int
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
compat_clock_t
_utime
;
compat_clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
unsigned
int
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
compat_siginfo_t
;
int
copy_siginfo_to_user32
(
compat_siginfo_t
__user
*
to
,
siginfo_t
*
from
);
int
copy_siginfo_from_user32
(
siginfo_t
*
to
,
compat_siginfo_t
__user
*
from
);
/* In a deft move of uber-hackery, we decide to carry the top half of all
* 64-bit registers in a non-portable, non-ABI, hidden structure.
* Userspace can read the hidden structure if it *wants* but is never
* guaranteed to be in the same place. Infact the uc_sigmask from the
* ucontext_t structure may push the hidden register file downards
*/
struct
compat_regfile
{
/* Upper half of all the 64-bit registers that were truncated
on a copy to a 32-bit userspace */
compat_int_t
rf_gr
[
32
];
compat_int_t
rf_iasq
[
2
];
compat_int_t
rf_iaoq
[
2
];
compat_int_t
rf_sar
;
};
#define COMPAT_SIGRETURN_TRAMP 4
#define COMPAT_SIGRESTARTBLOCK_TRAMP 5
#define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \
COMPAT_SIGRESTARTBLOCK_TRAMP)
struct
compat_rt_sigframe
{
/* XXX: Must match trampoline size in arch/parisc/kernel/signal.c
Secondary to that it must protect the ERESTART_RESTARTBLOCK
trampoline we left on the stack (we were bad and didn't
change sp so we could run really fast.) */
compat_uint_t
tramp
[
COMPAT_TRAMP_SIZE
];
compat_siginfo_t
info
;
struct
compat_ucontext
uc
;
/* Hidden location of truncated registers, *must* be last. */
struct
compat_regfile
regs
;
};
/*
* The 32-bit ABI wants at least 48 bytes for a function call frame:
* 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of
* which Linux/parisc uses is sp-20 for the saved return pointer...)
* Then, the stack pointer must be rounded to a cache line (64 bytes).
*/
#define SIGFRAME32 64
#define FUNCTIONCALLFRAME32 48
#define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32)
void
sigset_32to64
(
sigset_t
*
s64
,
compat_sigset_t
*
s32
);
void
sigset_32to64
(
sigset_t
*
s64
,
compat_sigset_t
*
s32
);
void
sigset_64to32
(
compat_sigset_t
*
s32
,
sigset_t
*
s64
);
void
sigset_64to32
(
compat_sigset_t
*
s32
,
sigset_t
*
s64
);
int
do_sigaltstack32
(
const
compat_stack_t
__user
*
uss32
,
int
do_sigaltstack32
(
const
compat_stack_t
__user
*
uss32
,
...
...
arch/parisc/kernel/syscall.S
View file @
89a2fa5f
...
@@ -650,6 +650,8 @@ end_linux_gateway_page:
...
@@ -650,6 +650,8 @@ end_linux_gateway_page:
#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
#endif
#endif
.
section
.
rodata
,
"a"
.
align
4096
.
align
4096
/
*
Light
-
weight
-
syscall
table
*/
/
*
Light
-
weight
-
syscall
table
*/
/
*
Start
of
lws
table
.
*/
/
*
Start
of
lws
table
.
*/
...
...
arch/parisc/kernel/syscall_table.S
View file @
89a2fa5f
...
@@ -374,5 +374,24 @@
...
@@ -374,5 +374,24 @@
ENTRY_SAME
(
keyctl
)
ENTRY_SAME
(
keyctl
)
ENTRY_SAME
(
ioprio_set
)
ENTRY_SAME
(
ioprio_set
)
ENTRY_SAME
(
ioprio_get
)
ENTRY_SAME
(
ioprio_get
)
ENTRY_SAME
(
inotify_init
)
ENTRY_SAME
(
inotify_add_watch
)
/*
270
*/
ENTRY_SAME
(
inotify_rm_watch
)
ENTRY_COMP
(
pselect6
)
ENTRY_COMP
(
ppoll
)
ENTRY_SAME
(
migrate_pages
)
ENTRY_COMP
(
openat
)
/*
275
*/
ENTRY_SAME
(
mkdirat
)
ENTRY_SAME
(
mknodat
)
ENTRY_SAME
(
fchownat
)
ENTRY_COMP
(
futimesat
)
ENTRY_COMP
(
newfstatat
)
/*
280
*/
ENTRY_SAME
(
unlinkat
)
ENTRY_SAME
(
renameat
)
ENTRY_SAME
(
linkat
)
ENTRY_SAME
(
symlinkat
)
ENTRY_SAME
(
readlinkat
)
/*
285
*/
ENTRY_SAME
(
fchmodat
)
ENTRY_SAME
(
faccessat
)
/
*
Nothing
yet
*/
/
*
Nothing
yet
*/
arch/parisc/kernel/traps.c
View file @
89a2fa5f
...
@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s)
...
@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s)
HERE:
HERE:
asm
volatile
(
"copy %%r30, %0"
:
"=r"
(
sp
));
asm
volatile
(
"copy %%r30, %0"
:
"=r"
(
sp
));
r
=
(
struct
pt_regs
*
)
km
alloc
(
sizeof
(
struct
pt_regs
),
GFP_KERNEL
);
r
=
kz
alloc
(
sizeof
(
struct
pt_regs
),
GFP_KERNEL
);
if
(
!
r
)
if
(
!
r
)
return
;
return
;
memset
(
r
,
0
,
sizeof
(
struct
pt_regs
));
r
->
iaoq
[
0
]
=
(
unsigned
long
)
&&
HERE
;
r
->
iaoq
[
0
]
=
(
unsigned
long
)
&&
HERE
;
r
->
gr
[
2
]
=
(
unsigned
long
)
__builtin_return_address
(
0
);
r
->
gr
[
2
]
=
(
unsigned
long
)
__builtin_return_address
(
0
);
r
->
gr
[
30
]
=
sp
;
r
->
gr
[
30
]
=
sp
;
...
...
arch/parisc/math-emu/decode_exc.c
View file @
89a2fa5f
...
@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[])
...
@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[])
}
}
break
;
break
;
case
INVALIDEXCEPTION
:
case
INVALIDEXCEPTION
:
case
OPC_2E_INVALIDEXCEPTION
:
update_trap_counts
(
Fpu_register
,
aflags
,
bflags
,
trap_counts
);
update_trap_counts
(
Fpu_register
,
aflags
,
bflags
,
trap_counts
);
return
SIGNALCODE
(
SIGFPE
,
FPE_FLTINV
);
return
SIGNALCODE
(
SIGFPE
,
FPE_FLTINV
);
case
DIVISIONBYZEROEXCEPTION
:
case
DIVISIONBYZEROEXCEPTION
:
...
...
arch/parisc/mm/init.c
View file @
89a2fa5f
...
@@ -371,17 +371,11 @@ static void __init setup_bootmem(void)
...
@@ -371,17 +371,11 @@ static void __init setup_bootmem(void)
void
free_initmem
(
void
)
void
free_initmem
(
void
)
{
{
/* FIXME: */
#if 0
printk(KERN_INFO "NOT FREEING INITMEM (%dk)\n",
(&__init_end - &__init_begin) >> 10);
return;
#else
unsigned
long
addr
;
unsigned
long
addr
;
printk
(
KERN_INFO
"Freeing unused kernel memory: "
);
printk
(
KERN_INFO
"Freeing unused kernel memory: "
);
#if
1
#if
def CONFIG_DEBUG_KERNEL
/* Attempt to catch anyone trying to execute code here
/* Attempt to catch anyone trying to execute code here
* by filling the page with BRK insns.
* by filling the page with BRK insns.
*
*
...
@@ -414,9 +408,21 @@ void free_initmem(void)
...
@@ -414,9 +408,21 @@ void free_initmem(void)
pdc_chassis_send_status
(
PDC_CHASSIS_DIRECT_BCOMPLETE
);
pdc_chassis_send_status
(
PDC_CHASSIS_DIRECT_BCOMPLETE
);
printk
(
"%luk freed
\n
"
,
(
unsigned
long
)(
&
__init_end
-
&
__init_begin
)
>>
10
);
printk
(
"%luk freed
\n
"
,
(
unsigned
long
)(
&
__init_end
-
&
__init_begin
)
>>
10
);
#endif
}
}
#ifdef CONFIG_DEBUG_RODATA
void
mark_rodata_ro
(
void
)
{
extern
char
__start_rodata
,
__end_rodata
;
/* rodata memory was already mapped with KERNEL_RO access rights by
pagetable_init() and map_pages(). No need to do additional stuff here */
printk
(
KERN_INFO
"Write protecting the kernel read-only data: %luk
\n
"
,
(
unsigned
long
)(
&
__end_rodata
-
&
__start_rodata
)
>>
10
);
}
#endif
/*
/*
* Just an arbitrary offset to serve as a "hole" between mapping areas
* Just an arbitrary offset to serve as a "hole" between mapping areas
* (between top of physical memory and a potential pcxl dma mapping
* (between top of physical memory and a potential pcxl dma mapping
...
@@ -477,11 +483,6 @@ void __init mem_init(void)
...
@@ -477,11 +483,6 @@ void __init mem_init(void)
}
}
int
do_check_pgt_cache
(
int
low
,
int
high
)
{
return
0
;
}
unsigned
long
*
empty_zero_page
__read_mostly
;
unsigned
long
*
empty_zero_page
__read_mostly
;
void
show_mem
(
void
)
void
show_mem
(
void
)
...
@@ -690,7 +691,7 @@ static void __init pagetable_init(void)
...
@@ -690,7 +691,7 @@ static void __init pagetable_init(void)
#ifdef CONFIG_BLK_DEV_INITRD
#ifdef CONFIG_BLK_DEV_INITRD
if
(
initrd_end
&&
initrd_end
>
mem_limit
)
{
if
(
initrd_end
&&
initrd_end
>
mem_limit
)
{
printk
(
"initrd: mapping %08lx-%08lx
\n
"
,
initrd_start
,
initrd_end
);
printk
(
KERN_INFO
"initrd: mapping %08lx-%08lx
\n
"
,
initrd_start
,
initrd_end
);
map_pages
(
initrd_start
,
__pa
(
initrd_start
),
map_pages
(
initrd_start
,
__pa
(
initrd_start
),
initrd_end
-
initrd_start
,
PAGE_KERNEL
);
initrd_end
-
initrd_start
,
PAGE_KERNEL
);
}
}
...
@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm)
...
@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm)
EXPORT_SYMBOL
(
map_hpux_gateway_page
);
EXPORT_SYMBOL
(
map_hpux_gateway_page
);
#endif
#endif
extern
void
flush_tlb_all_local
(
void
);
void
__init
paging_init
(
void
)
void
__init
paging_init
(
void
)
{
{
int
i
;
int
i
;
...
@@ -802,7 +801,7 @@ void __init paging_init(void)
...
@@ -802,7 +801,7 @@ void __init paging_init(void)
pagetable_init
();
pagetable_init
();
gateway_init
();
gateway_init
();
flush_cache_all_local
();
/* start with known state */
flush_cache_all_local
();
/* start with known state */
flush_tlb_all_local
();
flush_tlb_all_local
(
NULL
);
for
(
i
=
0
;
i
<
npmem_ranges
;
i
++
)
{
for
(
i
=
0
;
i
<
npmem_ranges
;
i
++
)
{
unsigned
long
zones_size
[
MAX_NR_ZONES
]
=
{
0
,
0
,
0
};
unsigned
long
zones_size
[
MAX_NR_ZONES
]
=
{
0
,
0
,
0
};
...
@@ -993,7 +992,7 @@ void flush_tlb_all(void)
...
@@ -993,7 +992,7 @@ void flush_tlb_all(void)
do_recycle
++
;
do_recycle
++
;
}
}
spin_unlock
(
&
sid_lock
);
spin_unlock
(
&
sid_lock
);
on_each_cpu
(
(
void
(
*
)(
void
*
))
flush_tlb_all_local
,
NULL
,
1
,
1
);
on_each_cpu
(
flush_tlb_all_local
,
NULL
,
1
,
1
);
if
(
do_recycle
)
{
if
(
do_recycle
)
{
spin_lock
(
&
sid_lock
);
spin_lock
(
&
sid_lock
);
recycle_sids
(
recycle_ndirty
,
recycle_dirty_array
);
recycle_sids
(
recycle_ndirty
,
recycle_dirty_array
);
...
...
drivers/parisc/ccio-dma.c
View file @
89a2fa5f
...
@@ -1423,7 +1423,7 @@ static void __init ccio_init_resources(struct ioc *ioc)
...
@@ -1423,7 +1423,7 @@ static void __init ccio_init_resources(struct ioc *ioc)
struct
resource
*
res
=
ioc
->
mmio_region
;
struct
resource
*
res
=
ioc
->
mmio_region
;
char
*
name
=
kmalloc
(
14
,
GFP_KERNEL
);
char
*
name
=
kmalloc
(
14
,
GFP_KERNEL
);
s
printf
(
name
,
"GSC Bus [%d/]"
,
ioc
->
hw_path
);
s
nprintf
(
name
,
14
,
"GSC Bus [%d/]"
,
ioc
->
hw_path
);
ccio_init_resource
(
res
,
name
,
&
ioc
->
ioc_regs
->
io_io_low
);
ccio_init_resource
(
res
,
name
,
&
ioc
->
ioc_regs
->
io_io_low
);
ccio_init_resource
(
res
+
1
,
name
,
&
ioc
->
ioc_regs
->
io_io_low_hv
);
ccio_init_resource
(
res
+
1
,
name
,
&
ioc
->
ioc_regs
->
io_io_low_hv
);
...
@@ -1557,12 +1557,11 @@ static int ccio_probe(struct parisc_device *dev)
...
@@ -1557,12 +1557,11 @@ static int ccio_probe(struct parisc_device *dev)
int
i
;
int
i
;
struct
ioc
*
ioc
,
**
ioc_p
=
&
ioc_list
;
struct
ioc
*
ioc
,
**
ioc_p
=
&
ioc_list
;
ioc
=
k
m
alloc
(
sizeof
(
struct
ioc
),
GFP_KERNEL
);
ioc
=
k
z
alloc
(
sizeof
(
struct
ioc
),
GFP_KERNEL
);
if
(
ioc
==
NULL
)
{
if
(
ioc
==
NULL
)
{
printk
(
KERN_ERR
MODULE_NAME
": memory allocation failure
\n
"
);
printk
(
KERN_ERR
MODULE_NAME
": memory allocation failure
\n
"
);
return
1
;
return
1
;
}
}
memset
(
ioc
,
0
,
sizeof
(
struct
ioc
));
ioc
->
name
=
dev
->
id
.
hversion
==
U2_IOA_RUNWAY
?
"U2"
:
"UTurn"
;
ioc
->
name
=
dev
->
id
.
hversion
==
U2_IOA_RUNWAY
?
"U2"
:
"UTurn"
;
...
@@ -1578,7 +1577,7 @@ static int ccio_probe(struct parisc_device *dev)
...
@@ -1578,7 +1577,7 @@ static int ccio_probe(struct parisc_device *dev)
ccio_ioc_init
(
ioc
);
ccio_ioc_init
(
ioc
);
ccio_init_resources
(
ioc
);
ccio_init_resources
(
ioc
);
hppa_dma_ops
=
&
ccio_ops
;
hppa_dma_ops
=
&
ccio_ops
;
dev
->
dev
.
platform_data
=
k
m
alloc
(
sizeof
(
struct
pci_hba_data
),
GFP_KERNEL
);
dev
->
dev
.
platform_data
=
k
z
alloc
(
sizeof
(
struct
pci_hba_data
),
GFP_KERNEL
);
/* if this fails, no I/O cards will work, so may as well bug */
/* if this fails, no I/O cards will work, so may as well bug */
BUG_ON
(
dev
->
dev
.
platform_data
==
NULL
);
BUG_ON
(
dev
->
dev
.
platform_data
==
NULL
);
...
...
drivers/parisc/dino.c
View file @
89a2fa5f
...
@@ -989,14 +989,12 @@ static int __init dino_probe(struct parisc_device *dev)
...
@@ -989,14 +989,12 @@ static int __init dino_probe(struct parisc_device *dev)
*/
*/
}
}
dino_dev
=
k
m
alloc
(
sizeof
(
struct
dino_device
),
GFP_KERNEL
);
dino_dev
=
k
z
alloc
(
sizeof
(
struct
dino_device
),
GFP_KERNEL
);
if
(
!
dino_dev
)
{
if
(
!
dino_dev
)
{
printk
(
"dino_init_chip - couldn't alloc dino_device
\n
"
);
printk
(
"dino_init_chip - couldn't alloc dino_device
\n
"
);
return
1
;
return
1
;
}
}
memset
(
dino_dev
,
0
,
sizeof
(
struct
dino_device
));
dino_dev
->
hba
.
dev
=
dev
;
dino_dev
->
hba
.
dev
=
dev
;
dino_dev
->
hba
.
base_addr
=
ioremap
(
hpa
,
4096
);
dino_dev
->
hba
.
base_addr
=
ioremap
(
hpa
,
4096
);
dino_dev
->
hba
.
lmmio_space_offset
=
0
;
/* CPU addrs == bus addrs */
dino_dev
->
hba
.
lmmio_space_offset
=
0
;
/* CPU addrs == bus addrs */
...
...
drivers/parisc/hppb.c
View file @
89a2fa5f
...
@@ -60,12 +60,11 @@ static int hppb_probe(struct parisc_device *dev)
...
@@ -60,12 +60,11 @@ static int hppb_probe(struct parisc_device *dev)
}
}
if
(
card
->
hpa
)
{
if
(
card
->
hpa
)
{
card
->
next
=
k
m
alloc
(
sizeof
(
struct
hppb_card
),
GFP_KERNEL
);
card
->
next
=
k
z
alloc
(
sizeof
(
struct
hppb_card
),
GFP_KERNEL
);
if
(
!
card
->
next
)
{
if
(
!
card
->
next
)
{
printk
(
KERN_ERR
"HP-PB: Unable to allocate memory.
\n
"
);
printk
(
KERN_ERR
"HP-PB: Unable to allocate memory.
\n
"
);
return
1
;
return
1
;
}
}
memset
(
card
->
next
,
'\0'
,
sizeof
(
struct
hppb_card
));
card
=
card
->
next
;
card
=
card
->
next
;
}
}
printk
(
KERN_INFO
"Found GeckoBoa at 0x%lx
\n
"
,
dev
->
hpa
.
start
);
printk
(
KERN_INFO
"Found GeckoBoa at 0x%lx
\n
"
,
dev
->
hpa
.
start
);
...
...
drivers/parisc/iosapic.c
View file @
89a2fa5f
...
@@ -873,28 +873,24 @@ void *iosapic_register(unsigned long hpa)
...
@@ -873,28 +873,24 @@ void *iosapic_register(unsigned long hpa)
return
NULL
;
return
NULL
;
}
}
isi
=
(
struct
iosapic_info
*
)
k
m
alloc
(
sizeof
(
struct
iosapic_info
),
GFP_KERNEL
);
isi
=
(
struct
iosapic_info
*
)
k
z
alloc
(
sizeof
(
struct
iosapic_info
),
GFP_KERNEL
);
if
(
!
isi
)
{
if
(
!
isi
)
{
BUG
();
BUG
();
return
NULL
;
return
NULL
;
}
}
memset
(
isi
,
0
,
sizeof
(
struct
iosapic_info
));
isi
->
addr
=
ioremap
(
hpa
,
4096
);
isi
->
addr
=
ioremap
(
hpa
,
4096
);
isi
->
isi_hpa
=
hpa
;
isi
->
isi_hpa
=
hpa
;
isi
->
isi_version
=
iosapic_rd_version
(
isi
);
isi
->
isi_version
=
iosapic_rd_version
(
isi
);
isi
->
isi_num_vectors
=
IOSAPIC_IRDT_MAX_ENTRY
(
isi
->
isi_version
)
+
1
;
isi
->
isi_num_vectors
=
IOSAPIC_IRDT_MAX_ENTRY
(
isi
->
isi_version
)
+
1
;
vip
=
isi
->
isi_vector
=
(
struct
vector_info
*
)
vip
=
isi
->
isi_vector
=
(
struct
vector_info
*
)
k
m
alloc
(
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
,
GFP_KERNEL
);
k
z
alloc
(
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
,
GFP_KERNEL
);
if
(
vip
==
NULL
)
{
if
(
vip
==
NULL
)
{
kfree
(
isi
);
kfree
(
isi
);
return
NULL
;
return
NULL
;
}
}
memset
(
vip
,
0
,
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
);
for
(
cnt
=
0
;
cnt
<
isi
->
isi_num_vectors
;
cnt
++
,
vip
++
)
{
for
(
cnt
=
0
;
cnt
<
isi
->
isi_num_vectors
;
cnt
++
,
vip
++
)
{
vip
->
irqline
=
(
unsigned
char
)
cnt
;
vip
->
irqline
=
(
unsigned
char
)
cnt
;
vip
->
iosapic
=
isi
;
vip
->
iosapic
=
isi
;
...
...
drivers/parisc/lasi.c
View file @
89a2fa5f
...
@@ -166,11 +166,12 @@ static void lasi_power_off(void)
...
@@ -166,11 +166,12 @@ static void lasi_power_off(void)
int
__init
int
__init
lasi_init_chip
(
struct
parisc_device
*
dev
)
lasi_init_chip
(
struct
parisc_device
*
dev
)
{
{
extern
void
(
*
chassis_power_off
)(
void
);
struct
gsc_asic
*
lasi
;
struct
gsc_asic
*
lasi
;
struct
gsc_irq
gsc_irq
;
struct
gsc_irq
gsc_irq
;
int
ret
;
int
ret
;
lasi
=
k
m
alloc
(
sizeof
(
*
lasi
),
GFP_KERNEL
);
lasi
=
k
z
alloc
(
sizeof
(
*
lasi
),
GFP_KERNEL
);
if
(
!
lasi
)
if
(
!
lasi
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -222,7 +223,7 @@ lasi_init_chip(struct parisc_device *dev)
...
@@ -222,7 +223,7 @@ lasi_init_chip(struct parisc_device *dev)
* ensure that only the first LASI (the one controlling the power off)
* ensure that only the first LASI (the one controlling the power off)
* should set the HPA here */
* should set the HPA here */
lasi_power_off_hpa
=
lasi
->
hpa
;
lasi_power_off_hpa
=
lasi
->
hpa
;
pm
_power_off
=
lasi_power_off
;
chassis
_power_off
=
lasi_power_off
;
return
ret
;
return
ret
;
}
}
...
...
drivers/parisc/lba_pci.c
View file @
89a2fa5f
...
@@ -1565,7 +1565,7 @@ lba_driver_probe(struct parisc_device *dev)
...
@@ -1565,7 +1565,7 @@ lba_driver_probe(struct parisc_device *dev)
}
else
if
(
IS_MERCURY
(
dev
)
||
IS_QUICKSILVER
(
dev
))
{
}
else
if
(
IS_MERCURY
(
dev
)
||
IS_QUICKSILVER
(
dev
))
{
func_class
&=
0xff
;
func_class
&=
0xff
;
version
=
kmalloc
(
6
,
GFP_KERNEL
);
version
=
kmalloc
(
6
,
GFP_KERNEL
);
s
printf
(
version
,
"TR%d.%d"
,(
func_class
>>
4
),(
func_class
&
0xf
));
s
nprintf
(
version
,
6
,
"TR%d.%d"
,(
func_class
>>
4
),(
func_class
&
0xf
));
/* We could use one printk for both Elroy and Mercury,
/* We could use one printk for both Elroy and Mercury,
* but for the mask for func_class.
* but for the mask for func_class.
*/
*/
...
@@ -1586,14 +1586,12 @@ lba_driver_probe(struct parisc_device *dev)
...
@@ -1586,14 +1586,12 @@ lba_driver_probe(struct parisc_device *dev)
** have an IRT entry will get NULL back from iosapic code.
** have an IRT entry will get NULL back from iosapic code.
*/
*/
lba_dev
=
k
m
alloc
(
sizeof
(
struct
lba_device
),
GFP_KERNEL
);
lba_dev
=
k
z
alloc
(
sizeof
(
struct
lba_device
),
GFP_KERNEL
);
if
(
!
lba_dev
)
{
if
(
!
lba_dev
)
{
printk
(
KERN_ERR
"lba_init_chip - couldn't alloc lba_device
\n
"
);
printk
(
KERN_ERR
"lba_init_chip - couldn't alloc lba_device
\n
"
);
return
(
1
);
return
(
1
);
}
}
memset
(
lba_dev
,
0
,
sizeof
(
struct
lba_device
));
/* ---------- First : initialize data we already have --------- */
/* ---------- First : initialize data we already have --------- */
...
...
drivers/parisc/pdc_stable.c
View file @
89a2fa5f
/*
/*
* Interfaces to retrieve and set PDC Stable options (firmware)
* Interfaces to retrieve and set PDC Stable options (firmware)
*
*
* Copyright (C) 2005 Thibaut VARENE <varenet@parisc-linux.org>
* Copyright (C) 2005
-2006
Thibaut VARENE <varenet@parisc-linux.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
...
@@ -26,11 +26,19 @@
...
@@ -26,11 +26,19 @@
*
*
* Since locations between 96 and 192 are the various paths, most (if not
* Since locations between 96 and 192 are the various paths, most (if not
* all) PA-RISC machines should have them. Anyway, for safety reasons, the
* all) PA-RISC machines should have them. Anyway, for safety reasons, the
* following code can deal with
only
96 bytes of Stable Storage, and all
* following code can deal with
just
96 bytes of Stable Storage, and all
* sizes between 96 and 192 bytes (provided they are multiple of struct
* sizes between 96 and 192 bytes (provided they are multiple of struct
* device_path size, eg: 128, 160 and 192) to provide full information.
* device_path size, eg: 128, 160 and 192) to provide full information.
* The code makes no use of data above 192 bytes. One last word: there's one
* The code makes no use of data above 192 bytes. One last word: there's one
* path we can always count on: the primary path.
* path we can always count on: the primary path.
*
* The current policy wrt file permissions is:
* - write: root only
* - read: (reading triggers PDC calls) ? root only : everyone
* The rationale is that PDC calls could hog (DoS) the machine.
*
* TODO:
* - timer/fastsize write calls
*/
*/
#undef PDCS_DEBUG
#undef PDCS_DEBUG
...
@@ -50,13 +58,15 @@
...
@@ -50,13 +58,15 @@
#include <linux/kobject.h>
#include <linux/kobject.h>
#include <linux/device.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/spinlock.h>
#include <asm/pdc.h>
#include <asm/pdc.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/hardware.h>
#include <asm/hardware.h>
#define PDCS_VERSION "0.10"
#define PDCS_VERSION "0.22"
#define PDCS_PREFIX "PDC Stable Storage"
#define PDCS_ADDR_PPRI 0x00
#define PDCS_ADDR_PPRI 0x00
#define PDCS_ADDR_OSID 0x40
#define PDCS_ADDR_OSID 0x40
...
@@ -70,10 +80,12 @@ MODULE_DESCRIPTION("sysfs interface to HP PDC Stable Storage data");
...
@@ -70,10 +80,12 @@ MODULE_DESCRIPTION("sysfs interface to HP PDC Stable Storage data");
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_VERSION
(
PDCS_VERSION
);
MODULE_VERSION
(
PDCS_VERSION
);
/* holds Stable Storage size. Initialized once and for all, no lock needed */
static
unsigned
long
pdcs_size
__read_mostly
;
static
unsigned
long
pdcs_size
__read_mostly
;
/* This struct defines what we need to deal with a parisc pdc path entry */
/* This struct defines what we need to deal with a parisc pdc path entry */
struct
pdcspath_entry
{
struct
pdcspath_entry
{
rwlock_t
rw_lock
;
/* to protect path entry access */
short
ready
;
/* entry record is valid if != 0 */
short
ready
;
/* entry record is valid if != 0 */
unsigned
long
addr
;
/* entry address in stable storage */
unsigned
long
addr
;
/* entry address in stable storage */
char
*
name
;
/* entry name */
char
*
name
;
/* entry name */
...
@@ -121,6 +133,8 @@ struct pdcspath_attribute paths_attr_##_name = { \
...
@@ -121,6 +133,8 @@ struct pdcspath_attribute paths_attr_##_name = { \
* content of the stable storage WRT various paths in these structs. We read
* content of the stable storage WRT various paths in these structs. We read
* these structs when reading the files, and we will write to these structs when
* these structs when reading the files, and we will write to these structs when
* writing to the files, and only then write them back to the Stable Storage.
* writing to the files, and only then write them back to the Stable Storage.
*
* This function expects to be called with @entry->rw_lock write-hold.
*/
*/
static
int
static
int
pdcspath_fetch
(
struct
pdcspath_entry
*
entry
)
pdcspath_fetch
(
struct
pdcspath_entry
*
entry
)
...
@@ -160,14 +174,15 @@ pdcspath_fetch(struct pdcspath_entry *entry)
...
@@ -160,14 +174,15 @@ pdcspath_fetch(struct pdcspath_entry *entry)
* pointer, from which it'll find out the corresponding hardware path.
* pointer, from which it'll find out the corresponding hardware path.
* For now we do not handle the case where there's an error in writing to the
* For now we do not handle the case where there's an error in writing to the
* Stable Storage area, so you'd better not mess up the data :P
* Stable Storage area, so you'd better not mess up the data :P
*
* This function expects to be called with @entry->rw_lock write-hold.
*/
*/
static
int
static
void
pdcspath_store
(
struct
pdcspath_entry
*
entry
)
pdcspath_store
(
struct
pdcspath_entry
*
entry
)
{
{
struct
device_path
*
devpath
;
struct
device_path
*
devpath
;
if
(
!
entry
)
BUG_ON
(
!
entry
);
return
-
EINVAL
;
devpath
=
&
entry
->
devpath
;
devpath
=
&
entry
->
devpath
;
...
@@ -176,10 +191,8 @@ pdcspath_store(struct pdcspath_entry *entry)
...
@@ -176,10 +191,8 @@ pdcspath_store(struct pdcspath_entry *entry)
First case, we don't have a preset hwpath... */
First case, we don't have a preset hwpath... */
if
(
!
entry
->
ready
)
{
if
(
!
entry
->
ready
)
{
/* ...but we have a device, map it */
/* ...but we have a device, map it */
if
(
entry
->
dev
)
BUG_ON
(
!
entry
->
dev
);
device_to_hwpath
(
entry
->
dev
,
(
struct
hardware_path
*
)
devpath
);
device_to_hwpath
(
entry
->
dev
,
(
struct
hardware_path
*
)
devpath
);
else
return
-
EINVAL
;
}
}
/* else, we expect the provided hwpath to be valid. */
/* else, we expect the provided hwpath to be valid. */
...
@@ -191,15 +204,13 @@ pdcspath_store(struct pdcspath_entry *entry)
...
@@ -191,15 +204,13 @@ pdcspath_store(struct pdcspath_entry *entry)
printk
(
KERN_ERR
"%s: an error occured when writing to PDC.
\n
"
printk
(
KERN_ERR
"%s: an error occured when writing to PDC.
\n
"
"It is likely that the Stable Storage data has been corrupted.
\n
"
"It is likely that the Stable Storage data has been corrupted.
\n
"
"Please check it carefully upon next reboot.
\n
"
,
__func__
);
"Please check it carefully upon next reboot.
\n
"
,
__func__
);
return
-
EIO
;
WARN_ON
(
1
)
;
}
}
/* kobject is already registered */
/* kobject is already registered */
entry
->
ready
=
2
;
entry
->
ready
=
2
;
DPRINTK
(
"%s: device: 0x%p
\n
"
,
__func__
,
entry
->
dev
);
DPRINTK
(
"%s: device: 0x%p
\n
"
,
__func__
,
entry
->
dev
);
return
0
;
}
}
/**
/**
...
@@ -214,14 +225,17 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
...
@@ -214,14 +225,17 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
{
{
char
*
out
=
buf
;
char
*
out
=
buf
;
struct
device_path
*
devpath
;
struct
device_path
*
devpath
;
unsigned
short
i
;
short
i
;
if
(
!
entry
||
!
buf
)
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
return
-
EINVAL
;
read_lock
(
&
entry
->
rw_lock
);
devpath
=
&
entry
->
devpath
;
devpath
=
&
entry
->
devpath
;
i
=
entry
->
ready
;
read_unlock
(
&
entry
->
rw_lock
);
if
(
!
entry
->
ready
)
if
(
!
i
)
/* entry is not ready */
return
-
ENODATA
;
return
-
ENODATA
;
for
(
i
=
0
;
i
<
6
;
i
++
)
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
...
@@ -242,7 +256,7 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
...
@@ -242,7 +256,7 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
*
*
* We will call this function to change the current hardware path.
* We will call this function to change the current hardware path.
* Hardware paths are to be given '/'-delimited, without brackets.
* Hardware paths are to be given '/'-delimited, without brackets.
* We
take care to
make sure that the provided path actually maps to an existing
* We make sure that the provided path actually maps to an existing
* device, BUT nothing would prevent some foolish user to set the path to some
* device, BUT nothing would prevent some foolish user to set the path to some
* PCI bridge or even a CPU...
* PCI bridge or even a CPU...
* A better work around would be to make sure we are at the end of a device tree
* A better work around would be to make sure we are at the end of a device tree
...
@@ -298,17 +312,19 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun
...
@@ -298,17 +312,19 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun
}
}
/* So far so good, let's get in deep */
/* So far so good, let's get in deep */
write_lock
(
&
entry
->
rw_lock
);
entry
->
ready
=
0
;
entry
->
ready
=
0
;
entry
->
dev
=
dev
;
entry
->
dev
=
dev
;
/* Now, dive in. Write back to the hardware */
/* Now, dive in. Write back to the hardware */
WARN_ON
(
pdcspath_store
(
entry
));
/* this warn should *NEVER* happen */
pdcspath_store
(
entry
);
/* Update the symlink to the real device */
/* Update the symlink to the real device */
sysfs_remove_link
(
&
entry
->
kobj
,
"device"
);
sysfs_remove_link
(
&
entry
->
kobj
,
"device"
);
sysfs_create_link
(
&
entry
->
kobj
,
&
entry
->
dev
->
kobj
,
"device"
);
sysfs_create_link
(
&
entry
->
kobj
,
&
entry
->
dev
->
kobj
,
"device"
);
write_unlock
(
&
entry
->
rw_lock
);
printk
(
KERN_INFO
"PDC Stable Storage
: changed
\"
%s
\"
path to
\"
%s
\"\n
"
,
printk
(
KERN_INFO
PDCS_PREFIX
"
: changed
\"
%s
\"
path to
\"
%s
\"\n
"
,
entry
->
name
,
buf
);
entry
->
name
,
buf
);
return
count
;
return
count
;
...
@@ -326,14 +342,17 @@ pdcspath_layer_read(struct pdcspath_entry *entry, char *buf)
...
@@ -326,14 +342,17 @@ pdcspath_layer_read(struct pdcspath_entry *entry, char *buf)
{
{
char
*
out
=
buf
;
char
*
out
=
buf
;
struct
device_path
*
devpath
;
struct
device_path
*
devpath
;
unsigned
short
i
;
short
i
;
if
(
!
entry
||
!
buf
)
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
return
-
EINVAL
;
read_lock
(
&
entry
->
rw_lock
);
devpath
=
&
entry
->
devpath
;
devpath
=
&
entry
->
devpath
;
i
=
entry
->
ready
;
read_unlock
(
&
entry
->
rw_lock
);
if
(
!
entry
->
ready
)
if
(
!
i
)
/* entry is not ready */
return
-
ENODATA
;
return
-
ENODATA
;
for
(
i
=
0
;
devpath
->
layers
[
i
]
&&
(
likely
(
i
<
6
));
i
++
)
for
(
i
=
0
;
devpath
->
layers
[
i
]
&&
(
likely
(
i
<
6
));
i
++
)
...
@@ -388,15 +407,17 @@ pdcspath_layer_write(struct pdcspath_entry *entry, const char *buf, size_t count
...
@@ -388,15 +407,17 @@ pdcspath_layer_write(struct pdcspath_entry *entry, const char *buf, size_t count
}
}
/* So far so good, let's get in deep */
/* So far so good, let's get in deep */
write_lock
(
&
entry
->
rw_lock
);
/* First, overwrite the current layers with the new ones, not touching
/* First, overwrite the current layers with the new ones, not touching
the hardware path. */
the hardware path. */
memcpy
(
&
entry
->
devpath
.
layers
,
&
layers
,
sizeof
(
layers
));
memcpy
(
&
entry
->
devpath
.
layers
,
&
layers
,
sizeof
(
layers
));
/* Now, dive in. Write back to the hardware */
/* Now, dive in. Write back to the hardware */
WARN_ON
(
pdcspath_store
(
entry
));
/* this warn should *NEVER* happen */
pdcspath_store
(
entry
);
write_unlock
(
&
entry
->
rw_lock
);
printk
(
KERN_INFO
"PDC Stable Storage
: changed
\"
%s
\"
layers to
\"
%s
\"\n
"
,
printk
(
KERN_INFO
PDCS_PREFIX
"
: changed
\"
%s
\"
layers to
\"
%s
\"\n
"
,
entry
->
name
,
buf
);
entry
->
name
,
buf
);
return
count
;
return
count
;
...
@@ -415,9 +436,6 @@ pdcspath_attr_show(struct kobject *kobj, struct attribute *attr, char *buf)
...
@@ -415,9 +436,6 @@ pdcspath_attr_show(struct kobject *kobj, struct attribute *attr, char *buf)
struct
pdcspath_attribute
*
pdcs_attr
=
to_pdcspath_attribute
(
attr
);
struct
pdcspath_attribute
*
pdcs_attr
=
to_pdcspath_attribute
(
attr
);
ssize_t
ret
=
0
;
ssize_t
ret
=
0
;
if
(
!
capable
(
CAP_SYS_ADMIN
))
return
-
EACCES
;
if
(
pdcs_attr
->
show
)
if
(
pdcs_attr
->
show
)
ret
=
pdcs_attr
->
show
(
entry
,
buf
);
ret
=
pdcs_attr
->
show
(
entry
,
buf
);
...
@@ -454,8 +472,8 @@ static struct sysfs_ops pdcspath_attr_ops = {
...
@@ -454,8 +472,8 @@ static struct sysfs_ops pdcspath_attr_ops = {
};
};
/* These are the two attributes of any PDC path. */
/* These are the two attributes of any PDC path. */
static
PATHS_ATTR
(
hwpath
,
06
00
,
pdcspath_hwpath_read
,
pdcspath_hwpath_write
);
static
PATHS_ATTR
(
hwpath
,
06
44
,
pdcspath_hwpath_read
,
pdcspath_hwpath_write
);
static
PATHS_ATTR
(
layer
,
06
00
,
pdcspath_layer_read
,
pdcspath_layer_write
);
static
PATHS_ATTR
(
layer
,
06
44
,
pdcspath_layer_read
,
pdcspath_layer_write
);
static
struct
attribute
*
paths_subsys_attrs
[]
=
{
static
struct
attribute
*
paths_subsys_attrs
[]
=
{
&
paths_attr_hwpath
.
attr
,
&
paths_attr_hwpath
.
attr
,
...
@@ -484,36 +502,119 @@ static struct pdcspath_entry *pdcspath_entries[] = {
...
@@ -484,36 +502,119 @@ static struct pdcspath_entry *pdcspath_entries[] = {
NULL
,
NULL
,
};
};
/* For more insight of what's going on here, refer to PDC Procedures doc,
* Section PDC_STABLE */
/**
/**
* pdcs_
info_read - Pretty printing of the remaining useful data
.
* pdcs_
size_read - Stable Storage size output
.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
* @buf: The output buffer to write to.
*
* We will call this function to format the output of the 'info' attribute file.
* Please refer to PDC Procedures documentation, section PDC_STABLE to get a
* better insight of what we're doing here.
*/
*/
static
ssize_t
static
ssize_t
pdcs_
info
_read
(
struct
subsystem
*
entry
,
char
*
buf
)
pdcs_
size
_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
{
char
*
out
=
buf
;
char
*
out
=
buf
;
__u32
result
;
struct
device_path
devpath
;
char
*
tmpstr
=
NULL
;
if
(
!
entry
||
!
buf
)
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
return
-
EINVAL
;
/* show the size of the stable storage */
/* show the size of the stable storage */
out
+=
sprintf
(
out
,
"
Stable Storage size: %ld bytes
\n
"
,
pdcs_size
);
out
+=
sprintf
(
out
,
"
%ld
\n
"
,
pdcs_size
);
/* deal with flags */
return
out
-
buf
;
if
(
pdc_stable_read
(
PDCS_ADDR_PPRI
,
&
devpath
,
sizeof
(
devpath
))
!=
PDC_OK
)
}
return
-
EIO
;
/**
* pdcs_auto_read - Stable Storage autoboot/search flag output.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
* @knob: The PF_AUTOBOOT or PF_AUTOSEARCH flag
*/
static
ssize_t
pdcs_auto_read
(
struct
subsystem
*
entry
,
char
*
buf
,
int
knob
)
{
char
*
out
=
buf
;
struct
pdcspath_entry
*
pathentry
;
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
/* Current flags are stored in primary boot path entry */
pathentry
=
&
pdcspath_entry_primary
;
read_lock
(
&
pathentry
->
rw_lock
);
out
+=
sprintf
(
out
,
"%s
\n
"
,
(
pathentry
->
devpath
.
flags
&
knob
)
?
"On"
:
"Off"
);
read_unlock
(
&
pathentry
->
rw_lock
);
return
out
-
buf
;
}
/**
* pdcs_autoboot_read - Stable Storage autoboot flag output.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
*/
static
inline
ssize_t
pdcs_autoboot_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
return
pdcs_auto_read
(
entry
,
buf
,
PF_AUTOBOOT
);
}
/**
* pdcs_autosearch_read - Stable Storage autoboot flag output.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
*/
static
inline
ssize_t
pdcs_autosearch_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
return
pdcs_auto_read
(
entry
,
buf
,
PF_AUTOSEARCH
);
}
/**
* pdcs_timer_read - Stable Storage timer count output (in seconds).
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
*
* The value of the timer field correponds to a number of seconds in powers of 2.
*/
static
ssize_t
pdcs_timer_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
char
*
out
=
buf
;
struct
pdcspath_entry
*
pathentry
;
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
/* Current flags are stored in primary boot path entry */
pathentry
=
&
pdcspath_entry_primary
;
/* print the timer value in seconds */
read_lock
(
&
pathentry
->
rw_lock
);
out
+=
sprintf
(
out
,
"%u
\n
"
,
(
pathentry
->
devpath
.
flags
&
PF_TIMER
)
?
(
1
<<
(
pathentry
->
devpath
.
flags
&
PF_TIMER
))
:
0
);
read_unlock
(
&
pathentry
->
rw_lock
);
out
+=
sprintf
(
out
,
"Autoboot: %s
\n
"
,
(
devpath
.
flags
&
PF_AUTOBOOT
)
?
"On"
:
"Off"
);
return
out
-
buf
;
out
+=
sprintf
(
out
,
"Autosearch: %s
\n
"
,
(
devpath
.
flags
&
PF_AUTOSEARCH
)
?
"On"
:
"Off"
);
}
out
+=
sprintf
(
out
,
"Timer: %u s
\n
"
,
(
devpath
.
flags
&
PF_TIMER
)
?
(
1
<<
(
devpath
.
flags
&
PF_TIMER
))
:
0
);
/**
* pdcs_osid_read - Stable Storage OS ID register output.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
*/
static
ssize_t
pdcs_osid_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
char
*
out
=
buf
;
__u32
result
;
char
*
tmpstr
=
NULL
;
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
/* get OSID */
/* get OSID */
if
(
pdc_stable_read
(
PDCS_ADDR_OSID
,
&
result
,
sizeof
(
result
))
!=
PDC_OK
)
if
(
pdc_stable_read
(
PDCS_ADDR_OSID
,
&
result
,
sizeof
(
result
))
!=
PDC_OK
)
...
@@ -529,13 +630,31 @@ pdcs_info_read(struct subsystem *entry, char *buf)
...
@@ -529,13 +630,31 @@ pdcs_info_read(struct subsystem *entry, char *buf)
case
0x0005
:
tmpstr
=
"Novell Netware dependent data"
;
break
;
case
0x0005
:
tmpstr
=
"Novell Netware dependent data"
;
break
;
default:
tmpstr
=
"Unknown"
;
break
;
default:
tmpstr
=
"Unknown"
;
break
;
}
}
out
+=
sprintf
(
out
,
"OS ID: %s (0x%.4x)
\n
"
,
tmpstr
,
(
result
>>
16
));
out
+=
sprintf
(
out
,
"%s (0x%.4x)
\n
"
,
tmpstr
,
(
result
>>
16
));
return
out
-
buf
;
}
/**
* pdcs_fastsize_read - Stable Storage FastSize register output.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The output buffer to write to.
*
* This register holds the amount of system RAM to be tested during boot sequence.
*/
static
ssize_t
pdcs_fastsize_read
(
struct
subsystem
*
entry
,
char
*
buf
)
{
char
*
out
=
buf
;
__u32
result
;
if
(
!
entry
||
!
buf
)
return
-
EINVAL
;
/* get fast-size */
/* get fast-size */
if
(
pdc_stable_read
(
PDCS_ADDR_FSIZ
,
&
result
,
sizeof
(
result
))
!=
PDC_OK
)
if
(
pdc_stable_read
(
PDCS_ADDR_FSIZ
,
&
result
,
sizeof
(
result
))
!=
PDC_OK
)
return
-
EIO
;
return
-
EIO
;
out
+=
sprintf
(
out
,
"Memory tested: "
);
if
((
result
&
0x0F
)
<
0x0E
)
if
((
result
&
0x0F
)
<
0x0E
)
out
+=
sprintf
(
out
,
"%d kB"
,
(
1
<<
(
result
&
0x0F
))
*
256
);
out
+=
sprintf
(
out
,
"%d kB"
,
(
1
<<
(
result
&
0x0F
))
*
256
);
else
else
...
@@ -546,22 +665,18 @@ pdcs_info_read(struct subsystem *entry, char *buf)
...
@@ -546,22 +665,18 @@ pdcs_info_read(struct subsystem *entry, char *buf)
}
}
/**
/**
* pdcs_
info_write - This function handles boot
flag modifying.
* pdcs_
auto_write - This function handles autoboot/search
flag modifying.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The input buffer to read from.
* @buf: The input buffer to read from.
* @count: The number of bytes to be read.
* @count: The number of bytes to be read.
* @knob: The PF_AUTOBOOT or PF_AUTOSEARCH flag
*
*
* We will call this function to change the current
boot flags
.
* We will call this function to change the current
autoboot flag
.
* We expect a precise syntax:
* We expect a precise syntax:
* \"n n\" (n == 0 or 1) to toggle respectively AutoBoot and AutoSearch
* \"n\" (n == 0 or 1) to toggle AutoBoot Off or On
*
* As of now there is no incentive on my side to provide more "knobs" to that
* interface, since modifying the rest of the data is pretty meaningless when
* the machine is running and for the expected use of that facility, such as
* PALO setting up the boot disk when installing a Linux distribution...
*/
*/
static
ssize_t
static
ssize_t
pdcs_
info_write
(
struct
subsystem
*
entry
,
const
char
*
buf
,
size_t
count
)
pdcs_
auto_write
(
struct
subsystem
*
entry
,
const
char
*
buf
,
size_t
count
,
int
knob
)
{
{
struct
pdcspath_entry
*
pathentry
;
struct
pdcspath_entry
*
pathentry
;
unsigned
char
flags
;
unsigned
char
flags
;
...
@@ -582,7 +697,9 @@ pdcs_info_write(struct subsystem *entry, const char *buf, size_t count)
...
@@ -582,7 +697,9 @@ pdcs_info_write(struct subsystem *entry, const char *buf, size_t count)
pathentry
=
&
pdcspath_entry_primary
;
pathentry
=
&
pdcspath_entry_primary
;
/* Be nice to the existing flag record */
/* Be nice to the existing flag record */
read_lock
(
&
pathentry
->
rw_lock
);
flags
=
pathentry
->
devpath
.
flags
;
flags
=
pathentry
->
devpath
.
flags
;
read_unlock
(
&
pathentry
->
rw_lock
);
DPRINTK
(
"%s: flags before: 0x%X
\n
"
,
__func__
,
flags
);
DPRINTK
(
"%s: flags before: 0x%X
\n
"
,
__func__
,
flags
);
...
@@ -595,50 +712,85 @@ pdcs_info_write(struct subsystem *entry, const char *buf, size_t count)
...
@@ -595,50 +712,85 @@ pdcs_info_write(struct subsystem *entry, const char *buf, size_t count)
if
((
c
!=
0
)
&&
(
c
!=
1
))
if
((
c
!=
0
)
&&
(
c
!=
1
))
goto
parse_error
;
goto
parse_error
;
if
(
c
==
0
)
if
(
c
==
0
)
flags
&=
~
PF_AUTOBOOT
;
flags
&=
~
knob
;
else
flags
|=
PF_AUTOBOOT
;
if
(
*
temp
++
!=
' '
)
goto
parse_error
;
c
=
*
temp
++
-
'0'
;
if
((
c
!=
0
)
&&
(
c
!=
1
))
goto
parse_error
;
if
(
c
==
0
)
flags
&=
~
PF_AUTOSEARCH
;
else
else
flags
|=
PF_AUTOSEARCH
;
flags
|=
knob
;
DPRINTK
(
"%s: flags after: 0x%X
\n
"
,
__func__
,
flags
);
DPRINTK
(
"%s: flags after: 0x%X
\n
"
,
__func__
,
flags
);
/* So far so good, let's get in deep */
/* So far so good, let's get in deep */
write_lock
(
&
pathentry
->
rw_lock
);
/* Change the path entry flags first */
/* Change the path entry flags first */
pathentry
->
devpath
.
flags
=
flags
;
pathentry
->
devpath
.
flags
=
flags
;
/* Now, dive in. Write back to the hardware */
/* Now, dive in. Write back to the hardware */
WARN_ON
(
pdcspath_store
(
pathentry
));
/* this warn should *NEVER* happen */
pdcspath_store
(
pathentry
);
write_unlock
(
&
pathentry
->
rw_lock
);
printk
(
KERN_INFO
"PDC Stable Storage: changed flags to
\"
%s
\"\n
"
,
buf
);
printk
(
KERN_INFO
PDCS_PREFIX
": changed
\"
%s
\"
to
\"
%s
\"\n
"
,
(
knob
&
PF_AUTOBOOT
)
?
"autoboot"
:
"autosearch"
,
(
flags
&
knob
)
?
"On"
:
"Off"
);
return
count
;
return
count
;
parse_error:
parse_error:
printk
(
KERN_WARNING
"%s: Parse error: expect
\"
n
n
\"
(n == 0 or 1) for AB and AS
\n
"
,
__func__
);
printk
(
KERN_WARNING
"%s: Parse error: expect
\"
n
\"
(n == 0 or 1)
\n
"
,
__func__
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
/* The last attribute (the 'root' one actually) with all remaining data. */
/**
static
PDCS_ATTR
(
info
,
0600
,
pdcs_info_read
,
pdcs_info_write
);
* pdcs_autoboot_write - This function handles autoboot flag modifying.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The input buffer to read from.
* @count: The number of bytes to be read.
*
* We will call this function to change the current boot flags.
* We expect a precise syntax:
* \"n\" (n == 0 or 1) to toggle AutoSearch Off or On
*/
static
inline
ssize_t
pdcs_autoboot_write
(
struct
subsystem
*
entry
,
const
char
*
buf
,
size_t
count
)
{
return
pdcs_auto_write
(
entry
,
buf
,
count
,
PF_AUTOBOOT
);
}
/**
* pdcs_autosearch_write - This function handles autosearch flag modifying.
* @entry: An allocated and populated subsytem struct. We don't use it tho.
* @buf: The input buffer to read from.
* @count: The number of bytes to be read.
*
* We will call this function to change the current boot flags.
* We expect a precise syntax:
* \"n\" (n == 0 or 1) to toggle AutoSearch Off or On
*/
static
inline
ssize_t
pdcs_autosearch_write
(
struct
subsystem
*
entry
,
const
char
*
buf
,
size_t
count
)
{
return
pdcs_auto_write
(
entry
,
buf
,
count
,
PF_AUTOSEARCH
);
}
/* The remaining attributes. */
static
PDCS_ATTR
(
size
,
0444
,
pdcs_size_read
,
NULL
);
static
PDCS_ATTR
(
autoboot
,
0644
,
pdcs_autoboot_read
,
pdcs_autoboot_write
);
static
PDCS_ATTR
(
autosearch
,
0644
,
pdcs_autosearch_read
,
pdcs_autosearch_write
);
static
PDCS_ATTR
(
timer
,
0444
,
pdcs_timer_read
,
NULL
);
static
PDCS_ATTR
(
osid
,
0400
,
pdcs_osid_read
,
NULL
);
static
PDCS_ATTR
(
fastsize
,
0400
,
pdcs_fastsize_read
,
NULL
);
static
struct
subsys_attribute
*
pdcs_subsys_attrs
[]
=
{
static
struct
subsys_attribute
*
pdcs_subsys_attrs
[]
=
{
&
pdcs_attr_info
,
&
pdcs_attr_size
,
NULL
,
/* maybe more in the future? */
&
pdcs_attr_autoboot
,
&
pdcs_attr_autosearch
,
&
pdcs_attr_timer
,
&
pdcs_attr_osid
,
&
pdcs_attr_fastsize
,
NULL
,
};
};
static
decl_subsys
(
paths
,
&
ktype_pdcspath
,
NULL
);
static
decl_subsys
(
paths
,
&
ktype_pdcspath
,
NULL
);
static
decl_subsys
(
pdc
,
NULL
,
NULL
);
static
decl_subsys
(
stable
,
NULL
,
NULL
);
/**
/**
* pdcs_register_pathentries - Prepares path entries kobjects for sysfs usage.
* pdcs_register_pathentries - Prepares path entries kobjects for sysfs usage.
...
@@ -656,8 +808,16 @@ pdcs_register_pathentries(void)
...
@@ -656,8 +808,16 @@ pdcs_register_pathentries(void)
struct
pdcspath_entry
*
entry
;
struct
pdcspath_entry
*
entry
;
int
err
;
int
err
;
/* Initialize the entries rw_lock before anything else */
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
rwlock_init
(
&
entry
->
rw_lock
);
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
{
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
{
if
(
pdcspath_fetch
(
entry
)
<
0
)
write_lock
(
&
entry
->
rw_lock
);
err
=
pdcspath_fetch
(
entry
);
write_unlock
(
&
entry
->
rw_lock
);
if
(
err
<
0
)
continue
;
continue
;
if
((
err
=
kobject_set_name
(
&
entry
->
kobj
,
"%s"
,
entry
->
name
)))
if
((
err
=
kobject_set_name
(
&
entry
->
kobj
,
"%s"
,
entry
->
name
)))
...
@@ -667,13 +827,14 @@ pdcs_register_pathentries(void)
...
@@ -667,13 +827,14 @@ pdcs_register_pathentries(void)
return
err
;
return
err
;
/* kobject is now registered */
/* kobject is now registered */
write_lock
(
&
entry
->
rw_lock
);
entry
->
ready
=
2
;
entry
->
ready
=
2
;
if
(
!
entry
->
dev
)
continue
;
/* Add a nice symlink to the real device */
/* Add a nice symlink to the real device */
if
(
entry
->
dev
)
sysfs_create_link
(
&
entry
->
kobj
,
&
entry
->
dev
->
kobj
,
"device"
);
sysfs_create_link
(
&
entry
->
kobj
,
&
entry
->
dev
->
kobj
,
"device"
);
write_unlock
(
&
entry
->
rw_lock
);
}
}
return
0
;
return
0
;
...
@@ -688,14 +849,17 @@ pdcs_unregister_pathentries(void)
...
@@ -688,14 +849,17 @@ pdcs_unregister_pathentries(void)
unsigned
short
i
;
unsigned
short
i
;
struct
pdcspath_entry
*
entry
;
struct
pdcspath_entry
*
entry
;
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
for
(
i
=
0
;
(
entry
=
pdcspath_entries
[
i
]);
i
++
)
{
read_lock
(
&
entry
->
rw_lock
);
if
(
entry
->
ready
>=
2
)
if
(
entry
->
ready
>=
2
)
kobject_unregister
(
&
entry
->
kobj
);
kobject_unregister
(
&
entry
->
kobj
);
read_unlock
(
&
entry
->
rw_lock
);
}
}
}
/*
/*
* For now we register the
pdc
subsystem with the firmware subsystem
* For now we register the
stable
subsystem with the firmware subsystem
* and the paths subsystem with the
pdc
subsystem
* and the paths subsystem with the
stable
subsystem
*/
*/
static
int
__init
static
int
__init
pdc_stable_init
(
void
)
pdc_stable_init
(
void
)
...
@@ -707,19 +871,23 @@ pdc_stable_init(void)
...
@@ -707,19 +871,23 @@ pdc_stable_init(void)
if
(
pdc_stable_get_size
(
&
pdcs_size
)
!=
PDC_OK
)
if
(
pdc_stable_get_size
(
&
pdcs_size
)
!=
PDC_OK
)
return
-
ENODEV
;
return
-
ENODEV
;
printk
(
KERN_INFO
"PDC Stable Storage facility v%s
\n
"
,
PDCS_VERSION
);
/* make sure we have enough data */
if
(
pdcs_size
<
96
)
return
-
ENODATA
;
printk
(
KERN_INFO
PDCS_PREFIX
" facility v%s
\n
"
,
PDCS_VERSION
);
/* For now we'll register the
pdc
subsys within this driver */
/* For now we'll register the
stable
subsys within this driver */
if
((
rc
=
firmware_register
(
&
pdc
_subsys
)))
if
((
rc
=
firmware_register
(
&
stable
_subsys
)))
goto
fail_firmreg
;
goto
fail_firmreg
;
/* Don't forget the
info entry
*/
/* Don't forget the
root entries
*/
for
(
i
=
0
;
(
attr
=
pdcs_subsys_attrs
[
i
])
&&
!
error
;
i
++
)
for
(
i
=
0
;
(
attr
=
pdcs_subsys_attrs
[
i
])
&&
!
error
;
i
++
)
if
(
attr
->
show
)
if
(
attr
->
show
)
error
=
subsys_create_file
(
&
pdc
_subsys
,
attr
);
error
=
subsys_create_file
(
&
stable
_subsys
,
attr
);
/* register the paths subsys as a subsystem of
pdc
subsys */
/* register the paths subsys as a subsystem of
stable
subsys */
kset_set_kset_s
(
&
paths_subsys
,
pdc
_subsys
);
kset_set_kset_s
(
&
paths_subsys
,
stable
_subsys
);
if
((
rc
=
subsystem_register
(
&
paths_subsys
)))
if
((
rc
=
subsystem_register
(
&
paths_subsys
)))
goto
fail_subsysreg
;
goto
fail_subsysreg
;
...
@@ -734,10 +902,10 @@ pdc_stable_init(void)
...
@@ -734,10 +902,10 @@ pdc_stable_init(void)
subsystem_unregister
(
&
paths_subsys
);
subsystem_unregister
(
&
paths_subsys
);
fail_subsysreg:
fail_subsysreg:
firmware_unregister
(
&
pdc
_subsys
);
firmware_unregister
(
&
stable
_subsys
);
fail_firmreg:
fail_firmreg:
printk
(
KERN_INFO
"PDC Stable Storage
bailing out
\n
"
);
printk
(
KERN_INFO
PDCS_PREFIX
"
bailing out
\n
"
);
return
rc
;
return
rc
;
}
}
...
@@ -747,7 +915,7 @@ pdc_stable_exit(void)
...
@@ -747,7 +915,7 @@ pdc_stable_exit(void)
pdcs_unregister_pathentries
();
pdcs_unregister_pathentries
();
subsystem_unregister
(
&
paths_subsys
);
subsystem_unregister
(
&
paths_subsys
);
firmware_unregister
(
&
pdc
_subsys
);
firmware_unregister
(
&
stable
_subsys
);
}
}
...
...
drivers/parisc/sba_iommu.c
View file @
89a2fa5f
...
@@ -2064,14 +2064,13 @@ sba_driver_callback(struct parisc_device *dev)
...
@@ -2064,14 +2064,13 @@ sba_driver_callback(struct parisc_device *dev)
printk
(
KERN_INFO
"%s found %s at 0x%lx
\n
"
,
printk
(
KERN_INFO
"%s found %s at 0x%lx
\n
"
,
MODULE_NAME
,
version
,
dev
->
hpa
.
start
);
MODULE_NAME
,
version
,
dev
->
hpa
.
start
);
sba_dev
=
k
m
alloc
(
sizeof
(
struct
sba_device
),
GFP_KERNEL
);
sba_dev
=
k
z
alloc
(
sizeof
(
struct
sba_device
),
GFP_KERNEL
);
if
(
!
sba_dev
)
{
if
(
!
sba_dev
)
{
printk
(
KERN_ERR
MODULE_NAME
" - couldn't alloc sba_device
\n
"
);
printk
(
KERN_ERR
MODULE_NAME
" - couldn't alloc sba_device
\n
"
);
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
parisc_set_drvdata
(
dev
,
sba_dev
);
parisc_set_drvdata
(
dev
,
sba_dev
);
memset
(
sba_dev
,
0
,
sizeof
(
struct
sba_device
));
for
(
i
=
0
;
i
<
MAX_IOC
;
i
++
)
for
(
i
=
0
;
i
<
MAX_IOC
;
i
++
)
spin_lock_init
(
&
(
sba_dev
->
ioc
[
i
].
res_lock
));
spin_lock_init
(
&
(
sba_dev
->
ioc
[
i
].
res_lock
));
...
...
drivers/parisc/superio.c
View file @
89a2fa5f
...
@@ -89,6 +89,9 @@ static struct superio_device sio_dev;
...
@@ -89,6 +89,9 @@ static struct superio_device sio_dev;
#define DBG_INIT(x...)
#define DBG_INIT(x...)
#endif
#endif
#define SUPERIO "SuperIO"
#define PFX SUPERIO ": "
static
irqreturn_t
static
irqreturn_t
superio_interrupt
(
int
parent_irq
,
void
*
devp
,
struct
pt_regs
*
regs
)
superio_interrupt
(
int
parent_irq
,
void
*
devp
,
struct
pt_regs
*
regs
)
{
{
...
@@ -117,7 +120,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
...
@@ -117,7 +120,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
local_irq
=
results
&
0x0f
;
local_irq
=
results
&
0x0f
;
if
(
local_irq
==
2
||
local_irq
>
7
)
{
if
(
local_irq
==
2
||
local_irq
>
7
)
{
printk
(
KERN_ERR
"SuperIO:
slave interrupted!
\n
"
);
printk
(
KERN_ERR
PFX
"
slave interrupted!
\n
"
);
return
IRQ_HANDLED
;
return
IRQ_HANDLED
;
}
}
...
@@ -128,7 +131,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
...
@@ -128,7 +131,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
outb
(
OCW3_ISR
,
IC_PIC1
+
0
);
outb
(
OCW3_ISR
,
IC_PIC1
+
0
);
results
=
inb
(
IC_PIC1
+
0
);
results
=
inb
(
IC_PIC1
+
0
);
if
((
results
&
0x80
)
==
0
)
{
/* if ISR7 not set: spurious */
if
((
results
&
0x80
)
==
0
)
{
/* if ISR7 not set: spurious */
printk
(
KERN_WARNING
"SuperIO:
spurious interrupt!
\n
"
);
printk
(
KERN_WARNING
PFX
"
spurious interrupt!
\n
"
);
return
IRQ_HANDLED
;
return
IRQ_HANDLED
;
}
}
}
}
...
@@ -163,27 +166,27 @@ superio_init(struct pci_dev *pcidev)
...
@@ -163,27 +166,27 @@ superio_init(struct pci_dev *pcidev)
/* ...then properly fixup the USB to point at suckyio PIC */
/* ...then properly fixup the USB to point at suckyio PIC */
sio
->
usb_pdev
->
irq
=
superio_fixup_irq
(
sio
->
usb_pdev
);
sio
->
usb_pdev
->
irq
=
superio_fixup_irq
(
sio
->
usb_pdev
);
printk
(
KERN_INFO
"SuperIO:
Found NS87560 Legacy I/O device at %s (IRQ %i)
\n
"
,
printk
(
KERN_INFO
PFX
"
Found NS87560 Legacy I/O device at %s (IRQ %i)
\n
"
,
pci_name
(
pdev
),
pdev
->
irq
);
pci_name
(
pdev
),
pdev
->
irq
);
pci_read_config_dword
(
pdev
,
SIO_SP1BAR
,
&
sio
->
sp1_base
);
pci_read_config_dword
(
pdev
,
SIO_SP1BAR
,
&
sio
->
sp1_base
);
sio
->
sp1_base
&=
~
1
;
sio
->
sp1_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Serial port 1 at 0x%x
\n
"
,
sio
->
sp1_base
);
printk
(
KERN_INFO
PFX
"
Serial port 1 at 0x%x
\n
"
,
sio
->
sp1_base
);
pci_read_config_dword
(
pdev
,
SIO_SP2BAR
,
&
sio
->
sp2_base
);
pci_read_config_dword
(
pdev
,
SIO_SP2BAR
,
&
sio
->
sp2_base
);
sio
->
sp2_base
&=
~
1
;
sio
->
sp2_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Serial port 2 at 0x%x
\n
"
,
sio
->
sp2_base
);
printk
(
KERN_INFO
PFX
"
Serial port 2 at 0x%x
\n
"
,
sio
->
sp2_base
);
pci_read_config_dword
(
pdev
,
SIO_PPBAR
,
&
sio
->
pp_base
);
pci_read_config_dword
(
pdev
,
SIO_PPBAR
,
&
sio
->
pp_base
);
sio
->
pp_base
&=
~
1
;
sio
->
pp_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Parallel port at 0x%x
\n
"
,
sio
->
pp_base
);
printk
(
KERN_INFO
PFX
"
Parallel port at 0x%x
\n
"
,
sio
->
pp_base
);
pci_read_config_dword
(
pdev
,
SIO_FDCBAR
,
&
sio
->
fdc_base
);
pci_read_config_dword
(
pdev
,
SIO_FDCBAR
,
&
sio
->
fdc_base
);
sio
->
fdc_base
&=
~
1
;
sio
->
fdc_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Floppy controller at 0x%x
\n
"
,
sio
->
fdc_base
);
printk
(
KERN_INFO
PFX
"
Floppy controller at 0x%x
\n
"
,
sio
->
fdc_base
);
pci_read_config_dword
(
pdev
,
SIO_ACPIBAR
,
&
sio
->
acpi_base
);
pci_read_config_dword
(
pdev
,
SIO_ACPIBAR
,
&
sio
->
acpi_base
);
sio
->
acpi_base
&=
~
1
;
sio
->
acpi_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
ACPI at 0x%x
\n
"
,
sio
->
acpi_base
);
printk
(
KERN_INFO
PFX
"
ACPI at 0x%x
\n
"
,
sio
->
acpi_base
);
request_region
(
IC_PIC1
,
0x1f
,
"pic1"
);
request_region
(
IC_PIC1
,
0x1f
,
"pic1"
);
request_region
(
IC_PIC2
,
0x1f
,
"pic2"
);
request_region
(
IC_PIC2
,
0x1f
,
"pic2"
);
...
@@ -263,14 +266,14 @@ superio_init(struct pci_dev *pcidev)
...
@@ -263,14 +266,14 @@ superio_init(struct pci_dev *pcidev)
/* Setup USB power regulation */
/* Setup USB power regulation */
outb
(
1
,
sio
->
acpi_base
+
USB_REG_CR
);
outb
(
1
,
sio
->
acpi_base
+
USB_REG_CR
);
if
(
inb
(
sio
->
acpi_base
+
USB_REG_CR
)
&
1
)
if
(
inb
(
sio
->
acpi_base
+
USB_REG_CR
)
&
1
)
printk
(
KERN_INFO
"SuperIO:
USB regulator enabled
\n
"
);
printk
(
KERN_INFO
PFX
"
USB regulator enabled
\n
"
);
else
else
printk
(
KERN_ERR
"USB regulator not initialized!
\n
"
);
printk
(
KERN_ERR
PFX
"USB regulator not initialized!
\n
"
);
if
(
request_irq
(
pdev
->
irq
,
superio_interrupt
,
SA_INTERRUPT
,
if
(
request_irq
(
pdev
->
irq
,
superio_interrupt
,
SA_INTERRUPT
,
"SuperIO"
,
(
void
*
)
sio
))
{
SUPERIO
,
(
void
*
)
sio
))
{
printk
(
KERN_ERR
"SuperIO:
could not get irq
\n
"
);
printk
(
KERN_ERR
PFX
"
could not get irq
\n
"
);
BUG
();
BUG
();
return
;
return
;
}
}
...
@@ -284,7 +287,7 @@ static void superio_disable_irq(unsigned int irq)
...
@@ -284,7 +287,7 @@ static void superio_disable_irq(unsigned int irq)
u8
r8
;
u8
r8
;
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
printk
(
KERN_ERR
"SuperIO:
Illegal irq number.
\n
"
);
printk
(
KERN_ERR
PFX
"
Illegal irq number.
\n
"
);
BUG
();
BUG
();
return
;
return
;
}
}
...
@@ -301,7 +304,7 @@ static void superio_enable_irq(unsigned int irq)
...
@@ -301,7 +304,7 @@ static void superio_enable_irq(unsigned int irq)
u8
r8
;
u8
r8
;
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
printk
(
KERN_ERR
"SuperIO:
Illegal irq number (%d).
\n
"
,
irq
);
printk
(
KERN_ERR
PFX
"
Illegal irq number (%d).
\n
"
,
irq
);
BUG
();
BUG
();
return
;
return
;
}
}
...
@@ -319,7 +322,7 @@ static unsigned int superio_startup_irq(unsigned int irq)
...
@@ -319,7 +322,7 @@ static unsigned int superio_startup_irq(unsigned int irq)
}
}
static
struct
hw_interrupt_type
superio_interrupt_type
=
{
static
struct
hw_interrupt_type
superio_interrupt_type
=
{
.
typename
=
"SuperIO"
,
.
typename
=
SUPERIO
,
.
startup
=
superio_startup_irq
,
.
startup
=
superio_startup_irq
,
.
shutdown
=
superio_disable_irq
,
.
shutdown
=
superio_disable_irq
,
.
enable
=
superio_enable_irq
,
.
enable
=
superio_enable_irq
,
...
@@ -413,7 +416,7 @@ static void __devinit superio_serial_init(void)
...
@@ -413,7 +416,7 @@ static void __devinit superio_serial_init(void)
retval
=
early_serial_setup
(
&
serial
[
0
]);
retval
=
early_serial_setup
(
&
serial
[
0
]);
if
(
retval
<
0
)
{
if
(
retval
<
0
)
{
printk
(
KERN_WARNING
"SuperIO:
Register Serial #0 failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Register Serial #0 failed.
\n
"
);
return
;
return
;
}
}
...
@@ -423,7 +426,7 @@ static void __devinit superio_serial_init(void)
...
@@ -423,7 +426,7 @@ static void __devinit superio_serial_init(void)
retval
=
early_serial_setup
(
&
serial
[
1
]);
retval
=
early_serial_setup
(
&
serial
[
1
]);
if
(
retval
<
0
)
if
(
retval
<
0
)
printk
(
KERN_WARNING
"SuperIO:
Register Serial #1 failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Register Serial #1 failed.
\n
"
);
#endif
/* CONFIG_SERIAL_8250 */
#endif
/* CONFIG_SERIAL_8250 */
}
}
...
@@ -437,7 +440,7 @@ static void __devinit superio_parport_init(void)
...
@@ -437,7 +440,7 @@ static void __devinit superio_parport_init(void)
PARPORT_DMA_NONE
/* dma */
,
PARPORT_DMA_NONE
/* dma */
,
NULL
/*struct pci_dev* */
)
)
NULL
/*struct pci_dev* */
)
)
printk
(
KERN_WARNING
"SuperIO:
Probing parallel port failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Probing parallel port failed.
\n
"
);
#endif
/* CONFIG_PARPORT_PC */
#endif
/* CONFIG_PARPORT_PC */
}
}
...
@@ -499,7 +502,7 @@ static struct pci_device_id superio_tbl[] = {
...
@@ -499,7 +502,7 @@ static struct pci_device_id superio_tbl[] = {
};
};
static
struct
pci_driver
superio_driver
=
{
static
struct
pci_driver
superio_driver
=
{
.
name
=
"SuperIO"
,
.
name
=
SUPERIO
,
.
id_table
=
superio_tbl
,
.
id_table
=
superio_tbl
,
.
probe
=
superio_probe
,
.
probe
=
superio_probe
,
};
};
...
...
drivers/parisc/wax.c
View file @
89a2fa5f
...
@@ -76,7 +76,7 @@ wax_init_chip(struct parisc_device *dev)
...
@@ -76,7 +76,7 @@ wax_init_chip(struct parisc_device *dev)
struct
gsc_irq
gsc_irq
;
struct
gsc_irq
gsc_irq
;
int
ret
;
int
ret
;
wax
=
k
m
alloc
(
sizeof
(
*
wax
),
GFP_KERNEL
);
wax
=
k
z
alloc
(
sizeof
(
*
wax
),
GFP_KERNEL
);
if
(
!
wax
)
if
(
!
wax
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
...
drivers/parport/parport_gsc.c
View file @
89a2fa5f
...
@@ -249,7 +249,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
...
@@ -249,7 +249,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
struct
parport
tmp
;
struct
parport
tmp
;
struct
parport
*
p
=
&
tmp
;
struct
parport
*
p
=
&
tmp
;
priv
=
k
m
alloc
(
sizeof
(
struct
parport_gsc_private
),
GFP_KERNEL
);
priv
=
k
z
alloc
(
sizeof
(
struct
parport_gsc_private
),
GFP_KERNEL
);
if
(
!
priv
)
{
if
(
!
priv
)
{
printk
(
KERN_DEBUG
"parport (0x%lx): no memory!
\n
"
,
base
);
printk
(
KERN_DEBUG
"parport (0x%lx): no memory!
\n
"
,
base
);
return
NULL
;
return
NULL
;
...
...
drivers/video/console/sticore.c
View file @
89a2fa5f
...
@@ -30,10 +30,11 @@
...
@@ -30,10 +30,11 @@
#define STI_DRIVERVERSION "Version 0.9a"
#define STI_DRIVERVERSION "Version 0.9a"
struct
sti_struct
*
default_sti
;
struct
sti_struct
*
default_sti
__read_mostly
;
static
int
num_sti_roms
;
/* # of STI ROMS found */
/* number of STI ROMS found and their ptrs to each struct */
static
struct
sti_struct
*
sti_roms
[
MAX_STI_ROMS
];
/* ptr to each sti_struct */
static
int
num_sti_roms
__read_mostly
;
static
struct
sti_struct
*
sti_roms
[
MAX_STI_ROMS
]
__read_mostly
;
/* The colour indices used by STI are
/* The colour indices used by STI are
...
@@ -266,7 +267,7 @@ sti_rom_copy(unsigned long base, unsigned long count, void *dest)
...
@@ -266,7 +267,7 @@ sti_rom_copy(unsigned long base, unsigned long count, void *dest)
static
char
default_sti_path
[
21
];
static
char
default_sti_path
[
21
]
__read_mostly
;
#ifndef MODULE
#ifndef MODULE
static
int
__init
sti_setup
(
char
*
str
)
static
int
__init
sti_setup
(
char
*
str
)
...
@@ -414,10 +415,10 @@ sti_init_glob_cfg(struct sti_struct *sti,
...
@@ -414,10 +415,10 @@ sti_init_glob_cfg(struct sti_struct *sti,
if
(
!
sti
->
sti_mem_request
)
if
(
!
sti
->
sti_mem_request
)
sti
->
sti_mem_request
=
256
;
/* STI default */
sti
->
sti_mem_request
=
256
;
/* STI default */
glob_cfg
=
k
m
alloc
(
sizeof
(
*
sti
->
glob_cfg
),
GFP_KERNEL
);
glob_cfg
=
k
z
alloc
(
sizeof
(
*
sti
->
glob_cfg
),
GFP_KERNEL
);
glob_cfg_ext
=
k
m
alloc
(
sizeof
(
*
glob_cfg_ext
),
GFP_KERNEL
);
glob_cfg_ext
=
k
z
alloc
(
sizeof
(
*
glob_cfg_ext
),
GFP_KERNEL
);
save_addr
=
k
m
alloc
(
save_addr_size
,
GFP_KERNEL
);
save_addr
=
k
z
alloc
(
save_addr_size
,
GFP_KERNEL
);
sti_mem_addr
=
k
m
alloc
(
sti
->
sti_mem_request
,
GFP_KERNEL
);
sti_mem_addr
=
k
z
alloc
(
sti
->
sti_mem_request
,
GFP_KERNEL
);
if
(
!
(
glob_cfg
&&
glob_cfg_ext
&&
save_addr
&&
sti_mem_addr
))
{
if
(
!
(
glob_cfg
&&
glob_cfg_ext
&&
save_addr
&&
sti_mem_addr
))
{
kfree
(
glob_cfg
);
kfree
(
glob_cfg
);
...
@@ -427,11 +428,6 @@ sti_init_glob_cfg(struct sti_struct *sti,
...
@@ -427,11 +428,6 @@ sti_init_glob_cfg(struct sti_struct *sti,
return
-
ENOMEM
;
return
-
ENOMEM
;
}
}
memset
(
glob_cfg
,
0
,
sizeof
(
*
glob_cfg
));
memset
(
glob_cfg_ext
,
0
,
sizeof
(
*
glob_cfg_ext
));
memset
(
save_addr
,
0
,
save_addr_size
);
memset
(
sti_mem_addr
,
0
,
sti
->
sti_mem_request
);
glob_cfg
->
ext_ptr
=
STI_PTR
(
glob_cfg_ext
);
glob_cfg
->
ext_ptr
=
STI_PTR
(
glob_cfg_ext
);
glob_cfg
->
save_addr
=
STI_PTR
(
save_addr
);
glob_cfg
->
save_addr
=
STI_PTR
(
save_addr
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
@@ -502,9 +498,9 @@ sti_init_glob_cfg(struct sti_struct *sti,
...
@@ -502,9 +498,9 @@ sti_init_glob_cfg(struct sti_struct *sti,
#ifdef CONFIG_FB
#ifdef CONFIG_FB
struct
sti_cooked_font
*
__init
struct
sti_cooked_font
*
__init
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
char
*
fbfont_name
)
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
const
char
*
fbfont_name
)
{
{
struct
font_desc
*
fbfont
;
const
struct
font_desc
*
fbfont
;
unsigned
int
size
,
bpc
;
unsigned
int
size
,
bpc
;
void
*
dest
;
void
*
dest
;
struct
sti_rom_font
*
nf
;
struct
sti_rom_font
*
nf
;
...
@@ -525,10 +521,9 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
...
@@ -525,10 +521,9 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
size
=
bpc
*
256
;
size
=
bpc
*
256
;
size
+=
sizeof
(
struct
sti_rom_font
);
size
+=
sizeof
(
struct
sti_rom_font
);
nf
=
k
m
alloc
(
size
,
GFP_KERNEL
);
nf
=
k
z
alloc
(
size
,
GFP_KERNEL
);
if
(
!
nf
)
if
(
!
nf
)
return
NULL
;
return
NULL
;
memset
(
nf
,
0
,
size
);
nf
->
first_char
=
0
;
nf
->
first_char
=
0
;
nf
->
last_char
=
255
;
nf
->
last_char
=
255
;
...
@@ -544,7 +539,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
...
@@ -544,7 +539,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
dest
+=
sizeof
(
struct
sti_rom_font
);
dest
+=
sizeof
(
struct
sti_rom_font
);
memcpy
(
dest
,
fbfont
->
data
,
bpc
*
256
);
memcpy
(
dest
,
fbfont
->
data
,
bpc
*
256
);
cooked_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
)
{
if
(
!
cooked_font
)
{
kfree
(
nf
);
kfree
(
nf
);
return
NULL
;
return
NULL
;
...
@@ -559,7 +554,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
...
@@ -559,7 +554,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
}
}
#else
#else
struct
sti_cooked_font
*
__init
struct
sti_cooked_font
*
__init
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
char
*
fbfont_name
)
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
c
onst
c
har
*
fbfont_name
)
{
{
return
NULL
;
return
NULL
;
}
}
...
@@ -617,7 +612,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
...
@@ -617,7 +612,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
struct
sti_rom_font
*
raw_font
,
*
font_start
;
struct
sti_rom_font
*
raw_font
,
*
font_start
;
struct
sti_cooked_font
*
cooked_font
;
struct
sti_cooked_font
*
cooked_font
;
cooked_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
)
if
(
!
cooked_font
)
return
0
;
return
0
;
...
@@ -631,7 +626,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
...
@@ -631,7 +626,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
while
(
raw_font
->
next_font
)
{
while
(
raw_font
->
next_font
)
{
raw_font
=
((
void
*
)
font_start
)
+
(
raw_font
->
next_font
);
raw_font
=
((
void
*
)
font_start
)
+
(
raw_font
->
next_font
);
cooked_font
->
next_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
->
next_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
->
next_font
)
if
(
!
cooked_font
->
next_font
)
return
1
;
return
1
;
...
@@ -668,10 +663,9 @@ sti_bmode_font_raw(struct sti_cooked_font *f)
...
@@ -668,10 +663,9 @@ sti_bmode_font_raw(struct sti_cooked_font *f)
unsigned
char
*
n
,
*
p
,
*
q
;
unsigned
char
*
n
,
*
p
,
*
q
;
int
size
=
f
->
raw
->
bytes_per_char
*
256
+
sizeof
(
struct
sti_rom_font
);
int
size
=
f
->
raw
->
bytes_per_char
*
256
+
sizeof
(
struct
sti_rom_font
);
n
=
k
m
alloc
(
4
*
size
,
GFP_KERNEL
);
n
=
k
z
alloc
(
4
*
size
,
GFP_KERNEL
);
if
(
!
n
)
if
(
!
n
)
return
NULL
;
return
NULL
;
memset
(
n
,
0
,
4
*
size
);
p
=
n
+
3
;
p
=
n
+
3
;
q
=
(
unsigned
char
*
)
f
->
raw
;
q
=
(
unsigned
char
*
)
f
->
raw
;
while
(
size
--
)
{
while
(
size
--
)
{
...
@@ -816,13 +810,12 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd
...
@@ -816,13 +810,12 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd
return
NULL
;
return
NULL
;
}
}
sti
=
k
m
alloc
(
sizeof
(
*
sti
),
GFP_KERNEL
);
sti
=
k
z
alloc
(
sizeof
(
*
sti
),
GFP_KERNEL
);
if
(
!
sti
)
{
if
(
!
sti
)
{
printk
(
KERN_ERR
"Not enough memory !
\n
"
);
printk
(
KERN_ERR
"Not enough memory !
\n
"
);
return
NULL
;
return
NULL
;
}
}
memset
(
sti
,
0
,
sizeof
(
*
sti
));
spin_lock_init
(
&
sti
->
lock
);
spin_lock_init
(
&
sti
->
lock
);
test_rom:
test_rom:
...
@@ -1035,7 +1028,7 @@ static struct parisc_driver pa_sti_driver = {
...
@@ -1035,7 +1028,7 @@ static struct parisc_driver pa_sti_driver = {
* sti_init_roms() - detects all STI ROMs and stores them in sti_roms[]
* sti_init_roms() - detects all STI ROMs and stores them in sti_roms[]
*/
*/
static
int
sticore_initialized
;
static
int
sticore_initialized
__read_mostly
;
static
void
__init
sti_init_roms
(
void
)
static
void
__init
sti_init_roms
(
void
)
{
{
...
...
include/asm-parisc/atomic.h
View file @
89a2fa5f
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
* Copyright (C) 2006 Kyle McMartin <kyle@parisc-linux.org>
*/
#ifndef _ASM_PARISC_ATOMIC_H_
#ifndef _ASM_PARISC_ATOMIC_H_
#define _ASM_PARISC_ATOMIC_H_
#define _ASM_PARISC_ATOMIC_H_
#include <linux/config.h>
#include <linux/config.h>
#include <linux/types.h>
#include <asm/system.h>
#include <asm/system.h>
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>. */
/*
/*
* Atomic operations that C can't guarantee us. Useful for
* Atomic operations that C can't guarantee us. Useful for
...
@@ -46,15 +50,6 @@ extern raw_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
...
@@ -46,15 +50,6 @@ extern raw_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
# define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
# define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
#endif
#endif
/* Note that we need not lock read accesses - aligned word writes/reads
* are atomic, so a reader never sees unconsistent values.
*
* Cache-line alignment would conflict with, for example, linux/module.h
*/
typedef
struct
{
volatile
int
counter
;
}
atomic_t
;
/* This should get optimized out since it's never called.
/* This should get optimized out since it's never called.
** Or get a link error if xchg is used "wrong".
** Or get a link error if xchg is used "wrong".
*/
*/
...
@@ -69,10 +64,9 @@ extern unsigned long __xchg64(unsigned long, unsigned long *);
...
@@ -69,10 +64,9 @@ extern unsigned long __xchg64(unsigned long, unsigned long *);
#endif
#endif
/* optimizer better get rid of switch since size is a constant */
/* optimizer better get rid of switch since size is a constant */
static
__inline__
unsigned
long
__xchg
(
unsigned
long
x
,
__volatile__
void
*
ptr
,
static
__inline__
unsigned
long
int
size
)
__xchg
(
unsigned
long
x
,
__volatile__
void
*
ptr
,
int
size
)
{
{
switch
(
size
)
{
switch
(
size
)
{
#ifdef __LP64__
#ifdef __LP64__
case
8
:
return
__xchg64
(
x
,(
unsigned
long
*
)
ptr
);
case
8
:
return
__xchg64
(
x
,(
unsigned
long
*
)
ptr
);
...
@@ -129,7 +123,13 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
...
@@ -129,7 +123,13 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
(unsigned long)_n_, sizeof(*(ptr))); \
(unsigned long)_n_, sizeof(*(ptr))); \
})
})
/* Note that we need not lock read accesses - aligned word writes/reads
* are atomic, so a reader never sees unconsistent values.
*
* Cache-line alignment would conflict with, for example, linux/module.h
*/
typedef
struct
{
volatile
int
counter
;
}
atomic_t
;
/* It's possible to reduce all atomic operations to either
/* It's possible to reduce all atomic operations to either
* __atomic_add_return, atomic_set and atomic_read (the latter
* __atomic_add_return, atomic_set and atomic_read (the latter
...
@@ -210,12 +210,66 @@ static __inline__ int atomic_read(const atomic_t *v)
...
@@ -210,12 +210,66 @@ static __inline__ int atomic_read(const atomic_t *v)
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
#define ATOMIC_INIT(i)
{ (i) }
#define ATOMIC_INIT(i)
((atomic_t) { (i) })
#define smp_mb__before_atomic_dec() smp_mb()
#define smp_mb__before_atomic_dec() smp_mb()
#define smp_mb__after_atomic_dec() smp_mb()
#define smp_mb__after_atomic_dec() smp_mb()
#define smp_mb__before_atomic_inc() smp_mb()
#define smp_mb__before_atomic_inc() smp_mb()
#define smp_mb__after_atomic_inc() smp_mb()
#define smp_mb__after_atomic_inc() smp_mb()
#ifdef __LP64__
typedef
struct
{
volatile
s64
counter
;
}
atomic64_t
;
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
static
__inline__
int
__atomic64_add_return
(
s64
i
,
atomic64_t
*
v
)
{
int
ret
;
unsigned
long
flags
;
_atomic_spin_lock_irqsave
(
v
,
flags
);
ret
=
(
v
->
counter
+=
i
);
_atomic_spin_unlock_irqrestore
(
v
,
flags
);
return
ret
;
}
static
__inline__
void
atomic64_set
(
atomic64_t
*
v
,
s64
i
)
{
unsigned
long
flags
;
_atomic_spin_lock_irqsave
(
v
,
flags
);
v
->
counter
=
i
;
_atomic_spin_unlock_irqrestore
(
v
,
flags
);
}
static
__inline__
s64
atomic64_read
(
const
atomic64_t
*
v
)
{
return
v
->
counter
;
}
#define atomic64_add(i,v) ((void)(__atomic64_add_return( ((s64)i),(v))))
#define atomic64_sub(i,v) ((void)(__atomic64_add_return(-((s64)i),(v))))
#define atomic64_inc(v) ((void)(__atomic64_add_return( 1,(v))))
#define atomic64_dec(v) ((void)(__atomic64_add_return( -1,(v))))
#define atomic64_add_return(i,v) (__atomic64_add_return( ((s64)i),(v)))
#define atomic64_sub_return(i,v) (__atomic64_add_return(-((s64)i),(v)))
#define atomic64_inc_return(v) (__atomic64_add_return( 1,(v)))
#define atomic64_dec_return(v) (__atomic64_add_return( -1,(v)))
#define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0)
#define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
#define atomic64_dec_and_test(v) (atomic64_dec_return(v) == 0)
#endif
/* __LP64__ */
#include <asm-generic/atomic.h>
#include <asm-generic/atomic.h>
#endif
#endif
/* _ASM_PARISC_ATOMIC_H_ */
include/asm-parisc/cacheflush.h
View file @
89a2fa5f
...
@@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
...
@@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
__flush_cache_page
(
vma
,
vmaddr
);
__flush_cache_page
(
vma
,
vmaddr
);
}
}
#ifdef CONFIG_DEBUG_RODATA
void
mark_rodata_ro
(
void
);
#endif
#endif
#endif
/* _PARISC_CACHEFLUSH_H */
include/asm-parisc/compat_ucontext.h
View file @
89a2fa5f
#ifndef _ASM_PARISC_COMPAT_UCONTEXT_H
#ifndef _ASM_PARISC_COMPAT_UCONTEXT_H
#define _ASM_PARISC_COMPAT_UCONTEXT_H
#define _ASM_PARISC_COMPAT_UCONTEXT_H
#include<linux/compat.h>
#include <linux/compat.h>
#include<asm/compat_signal.h>
/* 32-bit ucontext as seen from an 64-bit kernel */
/* 32-bit ucontext as seen from an 64-bit kernel */
struct
compat_ucontext
{
struct
compat_ucontext
{
...
...
include/asm-parisc/grfioctl.h
View file @
89a2fa5f
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
#define CRT_ID_ELK_1024DB 0x27849CA5
/* Elk 1024x768 double buffer */
#define CRT_ID_ELK_1024DB 0x27849CA5
/* Elk 1024x768 double buffer */
#define CRT_ID_ELK_GS S9000_ID_A1924A
/* Elk 1280x1024 GreyScale */
#define CRT_ID_ELK_GS S9000_ID_A1924A
/* Elk 1280x1024 GreyScale */
#define CRT_ID_CRX24 S9000_ID_A1439A
/* Piranha */
#define CRT_ID_CRX24 S9000_ID_A1439A
/* Piranha */
#define CRT_ID_VISUALIZE_EG 0x2D08C0A7
/* Graffiti (built-in B132+/B160L) */
#define CRT_ID_VISUALIZE_EG 0x2D08C0A7
/* Graffiti
, A4450A
(built-in B132+/B160L) */
#define CRT_ID_THUNDER 0x2F23E5FC
/* Thunder 1 VISUALIZE 48*/
#define CRT_ID_THUNDER 0x2F23E5FC
/* Thunder 1 VISUALIZE 48*/
#define CRT_ID_THUNDER2 0x2F8D570E
/* Thunder 2 VISUALIZE 48 XP*/
#define CRT_ID_THUNDER2 0x2F8D570E
/* Thunder 2 VISUALIZE 48 XP*/
#define CRT_ID_HCRX S9000_ID_HCRX
/* Hyperdrive HCRX */
#define CRT_ID_HCRX S9000_ID_HCRX
/* Hyperdrive HCRX */
...
...
include/asm-parisc/pci.h
View file @
89a2fa5f
...
@@ -18,6 +18,18 @@
...
@@ -18,6 +18,18 @@
*/
*/
#define PCI_MAX_BUSSES 256
#define PCI_MAX_BUSSES 256
/* To be used as: mdelay(pci_post_reset_delay);
*
* post_reset is the time the kernel should stall to prevent anyone from
* accessing the PCI bus once #RESET is de-asserted.
* PCI spec somewhere says 1 second but with multi-PCI bus systems,
* this makes the boot time much longer than necessary.
* 20ms seems to work for all the HP PCI implementations to date.
*/
#define pci_post_reset_delay 50
/*
/*
** pci_hba_data (aka H2P_OBJECT in HP/UX)
** pci_hba_data (aka H2P_OBJECT in HP/UX)
**
**
...
@@ -83,7 +95,7 @@ static __inline__ int pci_is_lmmio(struct pci_hba_data *hba, unsigned long a)
...
@@ -83,7 +95,7 @@ static __inline__ int pci_is_lmmio(struct pci_hba_data *hba, unsigned long a)
/*
/*
** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses.
** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses.
** See pci
bios
.c for more conversions used by Generic PCI code.
** See pci.c for more conversions used by Generic PCI code.
**
**
** Platform characteristics/firmware guarantee that
** Platform characteristics/firmware guarantee that
** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO
** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO
...
@@ -191,9 +203,6 @@ struct pci_bios_ops {
...
@@ -191,9 +203,6 @@ struct pci_bios_ops {
*/
*/
extern
struct
pci_port_ops
*
pci_port
;
extern
struct
pci_port_ops
*
pci_port
;
extern
struct
pci_bios_ops
*
pci_bios
;
extern
struct
pci_bios_ops
*
pci_bios
;
extern
int
pci_post_reset_delay
;
/* delay after de-asserting #RESET */
extern
int
pci_hba_count
;
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
*
);
...
...
include/asm-parisc/pgalloc.h
View file @
89a2fa5f
...
@@ -137,7 +137,6 @@ static inline void pte_free_kernel(pte_t *pte)
...
@@ -137,7 +137,6 @@ static inline void pte_free_kernel(pte_t *pte)
#define pte_free(page) pte_free_kernel(page_address(page))
#define pte_free(page) pte_free_kernel(page_address(page))
extern
int
do_check_pgt_cache
(
int
,
int
);
#define check_pgt_cache() do { } while (0)
#define check_pgt_cache() do { } while (0)
#endif
#endif
include/asm-parisc/pgtable.h
View file @
89a2fa5f
...
@@ -213,7 +213,7 @@ extern void *vmalloc_start;
...
@@ -213,7 +213,7 @@ extern void *vmalloc_start;
#define PAGE_COPY PAGE_EXECREAD
#define PAGE_COPY PAGE_EXECREAD
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED)
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED)
#define PAGE_KERNEL __pgprot(_PAGE_KERNEL)
#define PAGE_KERNEL __pgprot(_PAGE_KERNEL)
#define PAGE_KERNEL_RO __pgprot(_PAGE_
PRESENT | _PAGE_EXEC | _PAGE_READ | _PAGE_DIRTY | _PAGE_ACCESSED
)
#define PAGE_KERNEL_RO __pgprot(_PAGE_
KERNEL & ~_PAGE_WRITE
)
#define PAGE_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
#define PAGE_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ)
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ)
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH)
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH)
...
...
include/asm-parisc/rt_sigframe.h
View file @
89a2fa5f
#ifndef _ASM_PARISC_RT_SIGFRAME_H
#ifndef _ASM_PARISC_RT_SIGFRAME_H
#define _ASM_PARISC_RT_SIGFRAME_H
#define _ASM_PARISC_RT_SIGFRAME_H
#ifdef CONFIG_COMPAT
#include <asm/compat_rt_sigframe.h>
#endif
#define SIGRETURN_TRAMP 4
#define SIGRETURN_TRAMP 4
#define SIGRESTARTBLOCK_TRAMP 5
#define SIGRESTARTBLOCK_TRAMP 5
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
...
...
include/asm-parisc/unistd.h
View file @
89a2fa5f
...
@@ -761,8 +761,27 @@
...
@@ -761,8 +761,27 @@
#define __NR_keyctl (__NR_Linux + 266)
#define __NR_keyctl (__NR_Linux + 266)
#define __NR_ioprio_set (__NR_Linux + 267)
#define __NR_ioprio_set (__NR_Linux + 267)
#define __NR_ioprio_get (__NR_Linux + 268)
#define __NR_ioprio_get (__NR_Linux + 268)
#define __NR_inotify_init (__NR_Linux + 269)
#define __NR_inotify_add_watch (__NR_Linux + 270)
#define __NR_inotify_rm_watch (__NR_Linux + 271)
#define __NR_migrate_pages (__NR_Linux + 272)
#define __NR_pselect6 (__NR_Linux + 273)
#define __NR_ppoll (__NR_Linux + 274)
#define __NR_openat (__NR_Linux + 275)
#define __NR_mkdirat (__NR_Linux + 276)
#define __NR_mknodat (__NR_Linux + 277)
#define __NR_fchownat (__NR_Linux + 278)
#define __NR_futimesat (__NR_Linux + 279)
#define __NR_newfstatat (__NR_Linux + 280)
#define __NR_unlinkat (__NR_Linux + 281)
#define __NR_renameat (__NR_Linux + 282)
#define __NR_linkat (__NR_Linux + 283)
#define __NR_symlinkat (__NR_Linux + 284)
#define __NR_readlinkat (__NR_Linux + 285)
#define __NR_fchmodat (__NR_Linux + 286)
#define __NR_faccessat (__NR_Linux + 287)
#define __NR_Linux_syscalls 2
69
#define __NR_Linux_syscalls 2
88
#define HPUX_GATEWAY_ADDR 0xC0000004
#define HPUX_GATEWAY_ADDR 0xC0000004
#define LINUX_GATEWAY_ADDR 0x100
#define LINUX_GATEWAY_ADDR 0x100
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment