aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 04:15:25 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 04:15:25 -0500
commit78d4a42069b4815040a857a4e9bb0e4fb0aa1dc8 (patch)
treeec7d095a3ad7aa78933d970b16ba55c667fb4b63
parentf9efbce6334844c7f8b9b9459f6d7a6fbc2928e0 (diff)
parentdce0ce46ca9a676e4d9b36432fea77330a0e901d (diff)
Merge branch 'parisc-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc update from Helge Deller: - a bugfix for sticon (parisc text console driver) to not crash the 64bit kernel on machines with more than 4GB RAM - added kernel audit support - made udelay() implementation SMP-safe - "make install" now does not depend on vmlinux - added defconfigs for 32- and 64-kernels * 'parisc-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: add generic 32- and 64-bit defconfigs parisc: sticon - unbreak on 64bit kernel parisc: signal fixup - SIGBUS vs. SIGSEGV parisc: implement full version of access_ok() parisc: correctly display number of active CPUs parisc: do not count IPI calls twice parisc: make udelay() SMP-safe parisc: remove duplicate define parisc: make "make install" not depend on vmlinux parisc: add kernel audit feature parisc: provide macro to create exception table entries
-rw-r--r--arch/parisc/Kconfig3
-rw-r--r--arch/parisc/Makefile22
-rw-r--r--arch/parisc/configs/generic-32bit_defconfig328
-rw-r--r--arch/parisc/configs/generic-64bit_defconfig346
-rw-r--r--arch/parisc/include/asm/assembly.h12
-rw-r--r--arch/parisc/include/asm/delay.h41
-rw-r--r--arch/parisc/include/asm/hardirq.h1
-rw-r--r--arch/parisc/include/asm/ptrace.h4
-rw-r--r--arch/parisc/include/asm/thread_info.h4
-rw-r--r--arch/parisc/include/asm/uaccess.h53
-rw-r--r--arch/parisc/install.sh44
-rw-r--r--arch/parisc/kernel/Makefile4
-rw-r--r--arch/parisc/kernel/audit.c81
-rw-r--r--arch/parisc/kernel/compat_audit.c40
-rw-r--r--arch/parisc/kernel/irq.c4
-rw-r--r--arch/parisc/kernel/ptrace.c26
-rw-r--r--arch/parisc/kernel/setup.c8
-rw-r--r--arch/parisc/kernel/smp.c5
-rw-r--r--arch/parisc/kernel/syscall.S6
-rw-r--r--arch/parisc/lib/Makefile2
-rw-r--r--arch/parisc/lib/delay.c73
-rw-r--r--arch/parisc/lib/lusercopy.S10
-rw-r--r--arch/parisc/math-emu/float.h1
-rw-r--r--arch/parisc/mm/fault.c24
-rw-r--r--drivers/video/console/sticore.c166
-rw-r--r--drivers/video/sticore.h62
-rw-r--r--drivers/video/stifb.c10
-rw-r--r--init/Kconfig2
28 files changed, 1214 insertions, 168 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index ad2ce8dab996..7dcde539d61e 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -287,6 +287,9 @@ config SYSVIPC_COMPAT
287 def_bool y 287 def_bool y
288 depends on COMPAT && SYSVIPC 288 depends on COMPAT && SYSVIPC
289 289
290config AUDIT_ARCH
291 def_bool y
292
290config HPUX 293config HPUX
291 bool "Support for HP-UX binaries" 294 bool "Support for HP-UX binaries"
292 depends on !64BIT 295 depends on !64BIT
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
index e02f665f804a..7187664034c3 100644
--- a/arch/parisc/Makefile
+++ b/arch/parisc/Makefile
@@ -94,7 +94,7 @@ PALOCONF := $(shell if [ -f $(src)/palo.conf ]; then echo $(src)/palo.conf; \
94 else echo $(obj)/palo.conf; \ 94 else echo $(obj)/palo.conf; \
95 fi) 95 fi)
96 96
97palo: vmlinuz 97palo lifimage: vmlinuz
98 @if test ! -x "$(PALO)"; then \ 98 @if test ! -x "$(PALO)"; then \
99 echo 'ERROR: Please install palo first (apt-get install palo)';\ 99 echo 'ERROR: Please install palo first (apt-get install palo)';\
100 echo 'or build it from source and install it somewhere in your $$PATH';\ 100 echo 'or build it from source and install it somewhere in your $$PATH';\
@@ -109,16 +109,23 @@ palo: vmlinuz
109 fi 109 fi
110 $(PALO) -f $(PALOCONF) 110 $(PALO) -f $(PALOCONF)
111 111
112# Shorthands for known targets not supported by parisc, use vmlinux/vmlinuz as default 112BOOT_TARGETS = zImage Image palo lifimage
113INSTALL_TARGETS = zinstall install
114
115PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
116
117bzImage zImage: vmlinuz
113Image: vmlinux 118Image: vmlinux
114zImage bzImage: vmlinuz
115 119
116vmlinuz: vmlinux 120vmlinuz: vmlinux
117 @gzip -cf -9 $< > $@ 121 @gzip -cf -9 $< > $@
118 122
119install: vmlinuz 123install:
120 sh $(src)/arch/parisc/install.sh \ 124 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
121 $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)" 125 $(KERNELRELEASE) vmlinux System.map "$(INSTALL_PATH)"
126zinstall:
127 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
128 $(KERNELRELEASE) vmlinuz System.map "$(INSTALL_PATH)"
122 129
123CLEAN_FILES += lifimage 130CLEAN_FILES += lifimage
124MRPROPER_FILES += palo.conf 131MRPROPER_FILES += palo.conf
@@ -127,10 +134,11 @@ define archhelp
127 @echo '* vmlinux - Uncompressed kernel image (./vmlinux)' 134 @echo '* vmlinux - Uncompressed kernel image (./vmlinux)'
128 @echo ' vmlinuz - Compressed kernel image (./vmlinuz)' 135 @echo ' vmlinuz - Compressed kernel image (./vmlinuz)'
129 @echo ' palo - Bootable image (./lifimage)' 136 @echo ' palo - Bootable image (./lifimage)'
130 @echo ' install - Install kernel using' 137 @echo ' install - Install uncompressed vmlinux kernel using'
131 @echo ' (your) ~/bin/$(INSTALLKERNEL) or' 138 @echo ' (your) ~/bin/$(INSTALLKERNEL) or'
132 @echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 139 @echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
133 @echo ' copy to $$(INSTALL_PATH)' 140 @echo ' copy to $$(INSTALL_PATH)'
141 @echo ' zinstall - Install compressed vmlinuz kernel'
134endef 142endef
135 143
136# we require gcc 3.3 or above to compile the kernel 144# we require gcc 3.3 or above to compile the kernel
diff --git a/arch/parisc/configs/generic-32bit_defconfig b/arch/parisc/configs/generic-32bit_defconfig
new file mode 100644
index 000000000000..33b148f825ba
--- /dev/null
+++ b/arch/parisc/configs/generic-32bit_defconfig
@@ -0,0 +1,328 @@
1CONFIG_LOCALVERSION="-32bit"
2# CONFIG_LOCALVERSION_AUTO is not set
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_FHANDLE=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_IKCONFIG=y
8CONFIG_IKCONFIG_PROC=y
9CONFIG_LOG_BUF_SHIFT=16
10CONFIG_BLK_DEV_INITRD=y
11CONFIG_RD_BZIP2=y
12CONFIG_RD_LZMA=y
13CONFIG_RD_LZO=y
14CONFIG_EXPERT=y
15CONFIG_SYSCTL_SYSCALL=y
16CONFIG_PERF_EVENTS=y
17CONFIG_SLAB=y
18CONFIG_MODULES=y
19CONFIG_MODULE_UNLOAD=y
20CONFIG_MODULE_FORCE_UNLOAD=y
21# CONFIG_LBDAF is not set
22# CONFIG_BLK_DEV_BSG is not set
23CONFIG_PA7100LC=y
24CONFIG_SMP=y
25CONFIG_HZ_100=y
26CONFIG_IOMMU_CCIO=y
27CONFIG_GSC_LASI=y
28CONFIG_GSC_WAX=y
29CONFIG_EISA=y
30CONFIG_PCI=y
31CONFIG_GSC_DINO=y
32CONFIG_PCI_LBA=y
33CONFIG_PCCARD=m
34CONFIG_YENTA=m
35# CONFIG_PDC_CHASSIS is not set
36# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
37CONFIG_BINFMT_MISC=m
38CONFIG_NET=y
39CONFIG_PACKET=y
40CONFIG_UNIX=y
41CONFIG_XFRM_USER=m
42CONFIG_NET_KEY=m
43CONFIG_INET=y
44CONFIG_IP_MULTICAST=y
45CONFIG_IP_PNP=y
46CONFIG_IP_PNP_BOOTP=y
47CONFIG_INET_AH=m
48CONFIG_INET_ESP=m
49# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
50# CONFIG_INET_XFRM_MODE_TUNNEL is not set
51# CONFIG_INET_XFRM_MODE_BEET is not set
52# CONFIG_INET_LRO is not set
53CONFIG_INET_DIAG=m
54CONFIG_LLC2=m
55# CONFIG_WIRELESS is not set
56CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
57CONFIG_DEVTMPFS=y
58CONFIG_DEVTMPFS_MOUNT=y
59# CONFIG_STANDALONE is not set
60# CONFIG_PREVENT_FIRMWARE_BUILD is not set
61CONFIG_PARPORT=y
62CONFIG_PARPORT_PC=m
63CONFIG_PARPORT_1284=y
64CONFIG_BLK_DEV_LOOP=y
65CONFIG_BLK_DEV_CRYPTOLOOP=y
66CONFIG_BLK_DEV_RAM=y
67CONFIG_BLK_DEV_RAM_SIZE=6144
68CONFIG_IDE=y
69CONFIG_BLK_DEV_IDECD=y
70CONFIG_BLK_DEV_GENERIC=y
71CONFIG_BLK_DEV_NS87415=y
72CONFIG_BLK_DEV_SD=y
73CONFIG_CHR_DEV_ST=y
74CONFIG_BLK_DEV_SR=y
75CONFIG_CHR_DEV_SG=y
76CONFIG_SCSI_LASI700=y
77CONFIG_SCSI_SYM53C8XX_2=y
78CONFIG_SCSI_ZALON=y
79CONFIG_SCSI_DH=y
80CONFIG_ATA=y
81CONFIG_MD=y
82CONFIG_BLK_DEV_MD=m
83CONFIG_MD_LINEAR=m
84CONFIG_MD_RAID0=m
85CONFIG_MD_RAID1=m
86CONFIG_MD_RAID10=m
87CONFIG_MD_RAID456=m
88CONFIG_BLK_DEV_DM=y
89CONFIG_DM_UEVENT=y
90CONFIG_NETDEVICES=y
91CONFIG_BONDING=m
92CONFIG_DUMMY=m
93CONFIG_TUN=m
94# CONFIG_NET_VENDOR_3COM is not set
95# CONFIG_NET_VENDOR_ADAPTEC is not set
96# CONFIG_NET_VENDOR_ALTEON is not set
97# CONFIG_NET_VENDOR_AMD is not set
98# CONFIG_NET_VENDOR_ATHEROS is not set
99# CONFIG_NET_CADENCE is not set
100# CONFIG_NET_VENDOR_BROADCOM is not set
101# CONFIG_NET_VENDOR_BROCADE is not set
102# CONFIG_NET_VENDOR_CHELSIO is not set
103# CONFIG_NET_VENDOR_CISCO is not set
104CONFIG_NET_TULIP=y
105CONFIG_TULIP=y
106# CONFIG_NET_VENDOR_DLINK is not set
107# CONFIG_NET_VENDOR_EMULEX is not set
108# CONFIG_NET_VENDOR_EXAR is not set
109# CONFIG_NET_VENDOR_HP is not set
110CONFIG_LASI_82596=y
111# CONFIG_NET_VENDOR_MELLANOX is not set
112# CONFIG_NET_VENDOR_MICREL is not set
113# CONFIG_NET_VENDOR_MYRI is not set
114# CONFIG_NET_VENDOR_NATSEMI is not set
115# CONFIG_NET_VENDOR_NVIDIA is not set
116# CONFIG_NET_VENDOR_OKI is not set
117# CONFIG_NET_PACKET_ENGINE is not set
118# CONFIG_NET_VENDOR_QLOGIC is not set
119# CONFIG_NET_VENDOR_REALTEK is not set
120# CONFIG_NET_VENDOR_RDC is not set
121# CONFIG_NET_VENDOR_SEEQ is not set
122# CONFIG_NET_VENDOR_SILAN is not set
123# CONFIG_NET_VENDOR_SIS is not set
124# CONFIG_NET_VENDOR_STMICRO is not set
125# CONFIG_NET_VENDOR_SUN is not set
126# CONFIG_NET_VENDOR_TEHUTI is not set
127# CONFIG_NET_VENDOR_TI is not set
128# CONFIG_NET_VENDOR_VIA is not set
129CONFIG_PPP=m
130CONFIG_PPP_BSDCOMP=m
131CONFIG_PPP_DEFLATE=m
132CONFIG_PPPOE=m
133# CONFIG_WLAN is not set
134CONFIG_INPUT_POLLDEV=y
135CONFIG_KEYBOARD_HIL_OLD=m
136CONFIG_KEYBOARD_HIL=m
137CONFIG_MOUSE_SERIAL=y
138CONFIG_INPUT_MISC=y
139CONFIG_INPUT_UINPUT=m
140CONFIG_LEGACY_PTY_COUNT=64
141CONFIG_SERIAL_8250=y
142# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
143CONFIG_SERIAL_8250_CONSOLE=y
144CONFIG_SERIAL_8250_NR_UARTS=8
145CONFIG_SERIAL_8250_EXTENDED=y
146CONFIG_SERIAL_8250_MANY_PORTS=y
147CONFIG_SERIAL_8250_SHARE_IRQ=y
148CONFIG_PRINTER=m
149CONFIG_PPDEV=m
150# CONFIG_HW_RANDOM is not set
151CONFIG_I2C=y
152CONFIG_POWER_SUPPLY=y
153# CONFIG_HWMON is not set
154CONFIG_AGP=y
155CONFIG_VIDEO_OUTPUT_CONTROL=y
156CONFIG_FB=y
157CONFIG_FB_FOREIGN_ENDIAN=y
158CONFIG_FB_MODE_HELPERS=y
159CONFIG_FB_MATROX=m
160CONFIG_FB_MATROX_G=y
161CONFIG_FB_VOODOO1=m
162CONFIG_DUMMY_CONSOLE_COLUMNS=128
163CONFIG_DUMMY_CONSOLE_ROWS=48
164CONFIG_FRAMEBUFFER_CONSOLE=y
165CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
166CONFIG_LOGO=y
167# CONFIG_LOGO_LINUX_MONO is not set
168# CONFIG_LOGO_LINUX_VGA16 is not set
169# CONFIG_LOGO_LINUX_CLUT224 is not set
170CONFIG_SOUND=m
171CONFIG_SND=m
172CONFIG_SND_SEQUENCER=m
173CONFIG_SND_MIXER_OSS=m
174CONFIG_SND_PCM_OSS=m
175CONFIG_SND_SEQUENCER_OSS=y
176CONFIG_SND_DYNAMIC_MINORS=y
177CONFIG_SND_AD1889=m
178CONFIG_SND_HARMONY=m
179CONFIG_HIDRAW=y
180CONFIG_HID_A4TECH=y
181CONFIG_HID_APPLE=y
182CONFIG_HID_BELKIN=y
183CONFIG_HID_CHERRY=y
184CONFIG_HID_CHICONY=y
185CONFIG_HID_CYPRESS=y
186CONFIG_HID_DRAGONRISE=y
187CONFIG_HID_EZKEY=y
188CONFIG_HID_KYE=y
189CONFIG_HID_GYRATION=y
190CONFIG_HID_TWINHAN=y
191CONFIG_HID_KENSINGTON=y
192CONFIG_HID_LOGITECH=y
193CONFIG_HID_LOGITECH_DJ=m
194CONFIG_HID_MICROSOFT=y
195CONFIG_HID_MONTEREY=y
196CONFIG_HID_NTRIG=y
197CONFIG_HID_ORTEK=y
198CONFIG_HID_PANTHERLORD=y
199CONFIG_HID_PETALYNX=y
200CONFIG_HID_SAMSUNG=y
201CONFIG_HID_SONY=y
202CONFIG_HID_SUNPLUS=y
203CONFIG_HID_GREENASIA=y
204CONFIG_HID_SMARTJOYPLUS=y
205CONFIG_HID_TOPSEED=y
206CONFIG_HID_THRUSTMASTER=y
207CONFIG_HID_ZEROPLUS=y
208CONFIG_USB=y
209CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
210CONFIG_USB_MON=y
211CONFIG_USB_OHCI_HCD=y
212CONFIG_USB_UHCI_HCD=y
213CONFIG_NEW_LEDS=y
214CONFIG_LEDS_CLASS=y
215CONFIG_LEDS_TRIGGERS=y
216CONFIG_LEDS_TRIGGER_TIMER=y
217CONFIG_LEDS_TRIGGER_IDE_DISK=y
218CONFIG_LEDS_TRIGGER_HEARTBEAT=y
219CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
220CONFIG_DMADEVICES=y
221CONFIG_AUXDISPLAY=y
222CONFIG_EXT2_FS=y
223CONFIG_EXT2_FS_XATTR=y
224CONFIG_EXT2_FS_SECURITY=y
225CONFIG_EXT3_FS=y
226# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
227CONFIG_EXT3_FS_SECURITY=y
228CONFIG_EXT4_FS=y
229CONFIG_XFS_FS=m
230CONFIG_XFS_QUOTA=y
231CONFIG_XFS_RT=y
232CONFIG_QUOTA=y
233CONFIG_QUOTA_NETLINK_INTERFACE=y
234CONFIG_QFMT_V2=y
235CONFIG_AUTOFS4_FS=y
236CONFIG_ISO9660_FS=y
237CONFIG_JOLIET=y
238CONFIG_VFAT_FS=y
239CONFIG_PROC_KCORE=y
240CONFIG_TMPFS=y
241CONFIG_TMPFS_XATTR=y
242CONFIG_NFS_FS=m
243# CONFIG_NFS_V2 is not set
244CONFIG_NFSD=m
245CONFIG_NFSD_V3=y
246CONFIG_CIFS=m
247CONFIG_CIFS_WEAK_PW_HASH=y
248CONFIG_CIFS_XATTR=y
249CONFIG_CIFS_POSIX=y
250# CONFIG_CIFS_DEBUG is not set
251CONFIG_NLS_CODEPAGE_437=y
252CONFIG_NLS_CODEPAGE_737=m
253CONFIG_NLS_CODEPAGE_775=m
254CONFIG_NLS_CODEPAGE_850=m
255CONFIG_NLS_CODEPAGE_852=m
256CONFIG_NLS_CODEPAGE_855=m
257CONFIG_NLS_CODEPAGE_857=m
258CONFIG_NLS_CODEPAGE_860=m
259CONFIG_NLS_CODEPAGE_861=m
260CONFIG_NLS_CODEPAGE_862=m
261CONFIG_NLS_CODEPAGE_863=m
262CONFIG_NLS_CODEPAGE_864=m
263CONFIG_NLS_CODEPAGE_865=m
264CONFIG_NLS_CODEPAGE_866=m
265CONFIG_NLS_CODEPAGE_869=m
266CONFIG_NLS_CODEPAGE_936=m
267CONFIG_NLS_CODEPAGE_950=m
268CONFIG_NLS_CODEPAGE_932=m
269CONFIG_NLS_CODEPAGE_949=m
270CONFIG_NLS_CODEPAGE_874=m
271CONFIG_NLS_ISO8859_8=m
272CONFIG_NLS_CODEPAGE_1250=y
273CONFIG_NLS_CODEPAGE_1251=m
274CONFIG_NLS_ASCII=m
275CONFIG_NLS_ISO8859_1=y
276CONFIG_NLS_ISO8859_2=m
277CONFIG_NLS_ISO8859_3=m
278CONFIG_NLS_ISO8859_4=m
279CONFIG_NLS_ISO8859_5=m
280CONFIG_NLS_ISO8859_6=m
281CONFIG_NLS_ISO8859_7=m
282CONFIG_NLS_ISO8859_9=m
283CONFIG_NLS_ISO8859_13=m
284CONFIG_NLS_ISO8859_14=m
285CONFIG_NLS_ISO8859_15=m
286CONFIG_NLS_KOI8_R=m
287CONFIG_NLS_KOI8_U=m
288CONFIG_NLS_UTF8=y
289CONFIG_UNUSED_SYMBOLS=y
290CONFIG_DEBUG_FS=y
291CONFIG_MAGIC_SYSRQ=y
292CONFIG_DEBUG_MEMORY_INIT=y
293CONFIG_DEBUG_STACKOVERFLOW=y
294CONFIG_DEBUG_SHIRQ=y
295CONFIG_DETECT_HUNG_TASK=y
296CONFIG_TIMER_STATS=y
297CONFIG_DEBUG_RT_MUTEXES=y
298CONFIG_RT_MUTEX_TESTER=y
299CONFIG_DEBUG_SPINLOCK=y
300CONFIG_DEBUG_MUTEXES=y
301CONFIG_RCU_CPU_STALL_INFO=y
302CONFIG_LATENCYTOP=y
303CONFIG_LKDTM=m
304CONFIG_KEYS=y
305CONFIG_KEYS_DEBUG_PROC_KEYS=y
306CONFIG_CRYPTO_NULL=m
307CONFIG_CRYPTO_TEST=m
308CONFIG_CRYPTO_HMAC=y
309CONFIG_CRYPTO_MD5=y
310CONFIG_CRYPTO_MICHAEL_MIC=m
311CONFIG_CRYPTO_SHA1=y
312CONFIG_CRYPTO_SHA512=m
313CONFIG_CRYPTO_TGR192=m
314CONFIG_CRYPTO_WP512=m
315CONFIG_CRYPTO_ANUBIS=m
316CONFIG_CRYPTO_BLOWFISH=m
317CONFIG_CRYPTO_CAST5=m
318CONFIG_CRYPTO_CAST6=m
319CONFIG_CRYPTO_DES=y
320CONFIG_CRYPTO_KHAZAD=m
321CONFIG_CRYPTO_SERPENT=m
322CONFIG_CRYPTO_TEA=m
323CONFIG_CRYPTO_TWOFISH=m
324CONFIG_CRYPTO_DEFLATE=y
325# CONFIG_CRYPTO_ANSI_CPRNG is not set
326CONFIG_CRC_CCITT=m
327CONFIG_CRC_T10DIF=y
328CONFIG_FONTS=y
diff --git a/arch/parisc/configs/generic-64bit_defconfig b/arch/parisc/configs/generic-64bit_defconfig
new file mode 100644
index 000000000000..5874cebee077
--- /dev/null
+++ b/arch/parisc/configs/generic-64bit_defconfig
@@ -0,0 +1,346 @@
1CONFIG_LOCALVERSION="-64bit"
2# CONFIG_LOCALVERSION_AUTO is not set
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_BSD_PROCESS_ACCT=y
6CONFIG_BSD_PROCESS_ACCT_V3=y
7CONFIG_TASKSTATS=y
8CONFIG_TASK_DELAY_ACCT=y
9CONFIG_TASK_XACCT=y
10CONFIG_TASK_IO_ACCOUNTING=y
11# CONFIG_UTS_NS is not set
12# CONFIG_IPC_NS is not set
13# CONFIG_PID_NS is not set
14# CONFIG_NET_NS is not set
15CONFIG_RELAY=y
16CONFIG_BLK_DEV_INITRD=y
17CONFIG_CC_OPTIMIZE_FOR_SIZE=y
18# CONFIG_COMPAT_BRK is not set
19CONFIG_MODULES=y
20CONFIG_MODULE_FORCE_LOAD=y
21CONFIG_MODULE_UNLOAD=y
22CONFIG_MODULE_FORCE_UNLOAD=y
23CONFIG_MODVERSIONS=y
24CONFIG_BLK_DEV_INTEGRITY=y
25# CONFIG_IOSCHED_DEADLINE is not set
26CONFIG_PA8X00=y
27CONFIG_MLONGCALLS=y
28CONFIG_64BIT=y
29CONFIG_SMP=y
30# CONFIG_COMPACTION is not set
31CONFIG_HPPB=y
32CONFIG_IOMMU_CCIO=y
33CONFIG_GSC_LASI=y
34CONFIG_GSC_WAX=y
35CONFIG_PCI=y
36CONFIG_PCI_STUB=m
37CONFIG_PCI_IOV=y
38CONFIG_GSC_DINO=y
39CONFIG_PCI_LBA=y
40CONFIG_BINFMT_MISC=m
41CONFIG_NET=y
42CONFIG_PACKET=y
43CONFIG_UNIX=y
44CONFIG_XFRM_USER=m
45CONFIG_XFRM_SUB_POLICY=y
46CONFIG_XFRM_MIGRATE=y
47CONFIG_INET=y
48CONFIG_IP_MULTICAST=y
49CONFIG_IP_PNP=y
50CONFIG_IP_PNP_BOOTP=y
51CONFIG_INET_AH=m
52CONFIG_INET_ESP=m
53CONFIG_INET_XFRM_MODE_TRANSPORT=m
54CONFIG_INET_XFRM_MODE_TUNNEL=m
55CONFIG_INET_XFRM_MODE_BEET=m
56CONFIG_INET_LRO=m
57CONFIG_INET_DIAG=m
58CONFIG_NETFILTER=y
59# CONFIG_NETFILTER_ADVANCED is not set
60CONFIG_NETFILTER_NETLINK_LOG=y
61CONFIG_DCB=y
62# CONFIG_WIRELESS is not set
63CONFIG_DEVTMPFS=y
64CONFIG_DEVTMPFS_MOUNT=y
65CONFIG_BLK_DEV_LOOP=y
66CONFIG_IDE=y
67CONFIG_IDE_GD=m
68CONFIG_IDE_GD_ATAPI=y
69CONFIG_BLK_DEV_IDECD=m
70CONFIG_BLK_DEV_NS87415=y
71CONFIG_BLK_DEV_SIIMAGE=y
72# CONFIG_SCSI_PROC_FS is not set
73CONFIG_BLK_DEV_SD=y
74CONFIG_BLK_DEV_SR=y
75CONFIG_SCSI_ISCSI_ATTRS=y
76CONFIG_SCSI_SRP_ATTRS=y
77CONFIG_ISCSI_BOOT_SYSFS=y
78CONFIG_SCSI_MPT2SAS=y
79CONFIG_SCSI_LASI700=m
80CONFIG_SCSI_SYM53C8XX_2=y
81CONFIG_SCSI_ZALON=y
82CONFIG_SCSI_QLA_ISCSI=m
83CONFIG_SCSI_DH=y
84CONFIG_ATA=y
85CONFIG_ATA_GENERIC=y
86CONFIG_MD=y
87CONFIG_MD_LINEAR=m
88CONFIG_MD_RAID0=m
89CONFIG_BLK_DEV_DM=m
90CONFIG_DM_RAID=m
91CONFIG_DM_UEVENT=y
92CONFIG_FUSION=y
93CONFIG_FUSION_SPI=y
94CONFIG_FUSION_SAS=y
95CONFIG_NETDEVICES=y
96CONFIG_DUMMY=m
97CONFIG_MACVLAN=m
98CONFIG_MACVTAP=m
99CONFIG_NETCONSOLE=m
100CONFIG_NETCONSOLE_DYNAMIC=y
101CONFIG_TUN=y
102# CONFIG_NET_VENDOR_3COM is not set
103# CONFIG_NET_VENDOR_ADAPTEC is not set
104# CONFIG_NET_VENDOR_ALTEON is not set
105# CONFIG_NET_VENDOR_AMD is not set
106# CONFIG_NET_VENDOR_ATHEROS is not set
107# CONFIG_NET_CADENCE is not set
108# CONFIG_NET_VENDOR_BROADCOM is not set
109# CONFIG_NET_VENDOR_BROCADE is not set
110# CONFIG_NET_VENDOR_CHELSIO is not set
111# CONFIG_NET_VENDOR_CISCO is not set
112CONFIG_NET_TULIP=y
113CONFIG_TULIP=y
114# CONFIG_NET_VENDOR_DLINK is not set
115# CONFIG_NET_VENDOR_EMULEX is not set
116# CONFIG_NET_VENDOR_EXAR is not set
117CONFIG_HP100=m
118CONFIG_E1000=y
119CONFIG_LASI_82596=y
120# CONFIG_NET_VENDOR_MARVELL is not set
121# CONFIG_NET_VENDOR_MELLANOX is not set
122# CONFIG_NET_VENDOR_MICREL is not set
123# CONFIG_NET_VENDOR_MYRI is not set
124# CONFIG_NET_VENDOR_NATSEMI is not set
125# CONFIG_NET_VENDOR_NVIDIA is not set
126# CONFIG_NET_VENDOR_OKI is not set
127CONFIG_QLA3XXX=m
128CONFIG_QLCNIC=m
129CONFIG_QLGE=m
130# CONFIG_NET_VENDOR_REALTEK is not set
131# CONFIG_NET_VENDOR_RDC is not set
132# CONFIG_NET_VENDOR_SEEQ is not set
133# CONFIG_NET_VENDOR_SILAN is not set
134# CONFIG_NET_VENDOR_SIS is not set
135# CONFIG_NET_VENDOR_SMSC is not set
136# CONFIG_NET_VENDOR_STMICRO is not set
137# CONFIG_NET_VENDOR_SUN is not set
138# CONFIG_NET_VENDOR_TEHUTI is not set
139# CONFIG_NET_VENDOR_TI is not set
140# CONFIG_NET_VENDOR_VIA is not set
141# CONFIG_NET_VENDOR_WIZNET is not set
142CONFIG_PHYLIB=y
143CONFIG_MARVELL_PHY=m
144CONFIG_DAVICOM_PHY=m
145CONFIG_QSEMI_PHY=m
146CONFIG_LXT_PHY=m
147CONFIG_CICADA_PHY=m
148CONFIG_VITESSE_PHY=m
149CONFIG_SMSC_PHY=m
150CONFIG_BROADCOM_PHY=m
151CONFIG_ICPLUS_PHY=m
152CONFIG_REALTEK_PHY=m
153CONFIG_NATIONAL_PHY=m
154CONFIG_STE10XP=m
155CONFIG_LSI_ET1011C_PHY=m
156CONFIG_MDIO_BITBANG=m
157CONFIG_SLIP=m
158CONFIG_SLIP_COMPRESSED=y
159CONFIG_SLIP_SMART=y
160CONFIG_SLIP_MODE_SLIP6=y
161# CONFIG_WLAN is not set
162CONFIG_INPUT_EVDEV=y
163# CONFIG_KEYBOARD_HIL_OLD is not set
164# CONFIG_KEYBOARD_HIL is not set
165# CONFIG_INPUT_MOUSE is not set
166CONFIG_INPUT_MISC=y
167CONFIG_SERIO_SERPORT=m
168# CONFIG_HP_SDC is not set
169CONFIG_SERIO_RAW=m
170CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
171# CONFIG_LEGACY_PTYS is not set
172CONFIG_NOZOMI=m
173# CONFIG_DEVKMEM is not set
174CONFIG_SERIAL_8250=y
175# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
176CONFIG_SERIAL_8250_CONSOLE=y
177CONFIG_SERIAL_8250_NR_UARTS=8
178CONFIG_SERIAL_8250_RUNTIME_UARTS=8
179CONFIG_SERIAL_8250_EXTENDED=y
180CONFIG_SERIAL_8250_MANY_PORTS=y
181CONFIG_SERIAL_8250_SHARE_IRQ=y
182CONFIG_SERIAL_JSM=m
183CONFIG_IPMI_HANDLER=y
184CONFIG_IPMI_DEVICE_INTERFACE=y
185CONFIG_IPMI_SI=y
186# CONFIG_HW_RANDOM is not set
187CONFIG_TCG_TPM=m
188CONFIG_TCG_ATMEL=m
189CONFIG_PTP_1588_CLOCK=m
190CONFIG_SENSORS_I5K_AMB=m
191CONFIG_SENSORS_F71882FG=m
192CONFIG_SENSORS_PC87427=m
193CONFIG_SENSORS_VT1211=m
194CONFIG_SENSORS_VT8231=m
195CONFIG_SENSORS_W83627EHF=m
196CONFIG_WATCHDOG=y
197CONFIG_SOFT_WATCHDOG=m
198CONFIG_SSB=m
199CONFIG_SSB_DRIVER_PCICORE=y
200CONFIG_HTC_PASIC3=m
201CONFIG_LPC_SCH=m
202CONFIG_MFD_SM501=m
203CONFIG_REGULATOR=y
204CONFIG_REGULATOR_FIXED_VOLTAGE=m
205CONFIG_REGULATOR_USERSPACE_CONSUMER=m
206CONFIG_MEDIA_SUPPORT=m
207CONFIG_AGP=y
208CONFIG_AGP_PARISC=y
209CONFIG_DRM=y
210CONFIG_DRM_RADEON=y
211CONFIG_DRM_RADEON_UMS=y
212CONFIG_FIRMWARE_EDID=y
213CONFIG_FB_MODE_HELPERS=y
214CONFIG_BACKLIGHT_LCD_SUPPORT=y
215# CONFIG_BACKLIGHT_GENERIC is not set
216CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
217CONFIG_LOGO=y
218# CONFIG_LOGO_LINUX_MONO is not set
219CONFIG_HID=m
220CONFIG_HIDRAW=y
221CONFIG_HID_DRAGONRISE=m
222CONFIG_DRAGONRISE_FF=y
223CONFIG_HID_KYE=m
224CONFIG_HID_GYRATION=m
225CONFIG_HID_TWINHAN=m
226CONFIG_LOGITECH_FF=y
227CONFIG_LOGIRUMBLEPAD2_FF=y
228CONFIG_HID_NTRIG=m
229CONFIG_HID_PANTHERLORD=m
230CONFIG_PANTHERLORD_FF=y
231CONFIG_HID_PETALYNX=m
232CONFIG_HID_SAMSUNG=m
233CONFIG_HID_SONY=m
234CONFIG_HID_SUNPLUS=m
235CONFIG_HID_GREENASIA=m
236CONFIG_GREENASIA_FF=y
237CONFIG_HID_SMARTJOYPLUS=m
238CONFIG_SMARTJOYPLUS_FF=y
239CONFIG_HID_TOPSEED=m
240CONFIG_HID_THRUSTMASTER=m
241CONFIG_THRUSTMASTER_FF=y
242CONFIG_HID_ZEROPLUS=m
243CONFIG_ZEROPLUS_FF=y
244CONFIG_USB_HID=m
245CONFIG_HID_PID=y
246CONFIG_USB_HIDDEV=y
247CONFIG_USB=y
248CONFIG_USB_DEBUG=y
249CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
250CONFIG_USB_DYNAMIC_MINORS=y
251CONFIG_USB_MON=m
252CONFIG_USB_WUSB_CBAF=m
253CONFIG_USB_XHCI_HCD=m
254CONFIG_USB_EHCI_HCD=m
255CONFIG_USB_OHCI_HCD=m
256CONFIG_USB_R8A66597_HCD=m
257CONFIG_USB_ACM=m
258CONFIG_USB_PRINTER=m
259CONFIG_USB_WDM=m
260CONFIG_USB_TMC=m
261CONFIG_NEW_LEDS=y
262CONFIG_LEDS_CLASS=y
263CONFIG_LEDS_TRIGGERS=y
264CONFIG_LEDS_TRIGGER_TIMER=y
265CONFIG_LEDS_TRIGGER_ONESHOT=y
266CONFIG_LEDS_TRIGGER_IDE_DISK=y
267CONFIG_LEDS_TRIGGER_HEARTBEAT=m
268CONFIG_LEDS_TRIGGER_BACKLIGHT=m
269CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
270CONFIG_UIO=y
271CONFIG_UIO_PDRV_GENIRQ=m
272CONFIG_UIO_AEC=m
273CONFIG_UIO_SERCOS3=m
274CONFIG_UIO_PCI_GENERIC=m
275CONFIG_STAGING=y
276# CONFIG_NET_VENDOR_SILICOM is not set
277CONFIG_EXT2_FS=y
278CONFIG_EXT2_FS_XATTR=y
279CONFIG_EXT2_FS_SECURITY=y
280CONFIG_EXT3_FS=y
281CONFIG_EXT3_FS_SECURITY=y
282CONFIG_EXT4_FS=y
283CONFIG_EXT4_FS_SECURITY=y
284CONFIG_XFS_FS=m
285CONFIG_BTRFS_FS=m
286CONFIG_QUOTA=y
287CONFIG_QUOTA_NETLINK_INTERFACE=y
288CONFIG_QFMT_V2=y
289CONFIG_AUTOFS4_FS=y
290CONFIG_FUSE_FS=y
291CONFIG_CUSE=y
292CONFIG_ISO9660_FS=y
293CONFIG_UDF_FS=y
294CONFIG_VFAT_FS=m
295CONFIG_PROC_KCORE=y
296CONFIG_TMPFS=y
297CONFIG_TMPFS_XATTR=y
298CONFIG_CONFIGFS_FS=y
299CONFIG_SYSV_FS=y
300CONFIG_NFS_FS=m
301CONFIG_NFS_V4=m
302CONFIG_NFS_V4_1=y
303CONFIG_NFSD=m
304CONFIG_NFSD_V4=y
305CONFIG_NLS_DEFAULT="utf8"
306CONFIG_NLS_CODEPAGE_437=m
307CONFIG_NLS_CODEPAGE_850=m
308CONFIG_NLS_CODEPAGE_852=m
309CONFIG_NLS_CODEPAGE_1250=m
310CONFIG_NLS_CODEPAGE_1251=m
311CONFIG_NLS_ASCII=m
312CONFIG_NLS_ISO8859_1=m
313CONFIG_NLS_ISO8859_2=m
314CONFIG_NLS_UTF8=m
315CONFIG_PRINTK_TIME=y
316CONFIG_STRIP_ASM_SYMS=y
317CONFIG_UNUSED_SYMBOLS=y
318CONFIG_DEBUG_FS=y
319CONFIG_MAGIC_SYSRQ=y
320CONFIG_DEBUG_KERNEL=y
321CONFIG_DEBUG_STACKOVERFLOW=y
322CONFIG_LOCKUP_DETECTOR=y
323CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
324CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
325# CONFIG_SCHED_DEBUG is not set
326CONFIG_TIMER_STATS=y
327CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
328CONFIG_CRYPTO_MANAGER=y
329CONFIG_CRYPTO_ECB=m
330CONFIG_CRYPTO_PCBC=m
331CONFIG_CRYPTO_MD4=m
332CONFIG_CRYPTO_MD5=y
333CONFIG_CRYPTO_MICHAEL_MIC=m
334CONFIG_CRYPTO_SHA256=m
335CONFIG_CRYPTO_ARC4=m
336CONFIG_CRYPTO_FCRYPT=m
337CONFIG_CRYPTO_DEFLATE=m
338# CONFIG_CRYPTO_HW is not set
339CONFIG_CRC_CCITT=m
340CONFIG_LIBCRC32C=y
341CONFIG_XZ_DEC_X86=y
342CONFIG_XZ_DEC_POWERPC=y
343CONFIG_XZ_DEC_IA64=y
344CONFIG_XZ_DEC_ARM=y
345CONFIG_XZ_DEC_ARMTHUMB=y
346CONFIG_XZ_DEC_SPARC=y
diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h
index 0da848232344..b3069fd83468 100644
--- a/arch/parisc/include/asm/assembly.h
+++ b/arch/parisc/include/asm/assembly.h
@@ -515,5 +515,17 @@
515 nop /* 7 */ 515 nop /* 7 */
516 .endm 516 .endm
517 517
518 /*
519 * ASM_EXCEPTIONTABLE_ENTRY
520 *
521 * Creates an exception table entry.
522 * Do not convert to a assembler macro. This won't work.
523 */
524#define ASM_EXCEPTIONTABLE_ENTRY(fault_addr, except_addr) \
525 .section __ex_table,"aw" ! \
526 ASM_ULONG_INSN fault_addr, except_addr ! \
527 .previous
528
529
518#endif /* __ASSEMBLY__ */ 530#endif /* __ASSEMBLY__ */
519#endif 531#endif
diff --git a/arch/parisc/include/asm/delay.h b/arch/parisc/include/asm/delay.h
index 912ee7e6a579..08e58e679e3e 100644
--- a/arch/parisc/include/asm/delay.h
+++ b/arch/parisc/include/asm/delay.h
@@ -1,15 +1,5 @@
1#ifndef _PARISC_DELAY_H 1#ifndef _ASM_PARISC_DELAY_H
2#define _PARISC_DELAY_H 2#define _ASM_PARISC_DELAY_H
3
4#include <asm/special_insns.h> /* for mfctl() */
5#include <asm/processor.h> /* for boot_cpu_data */
6
7
8/*
9 * Copyright (C) 1993 Linus Torvalds
10 *
11 * Delay routines
12 */
13 3
14static __inline__ void __delay(unsigned long loops) { 4static __inline__ void __delay(unsigned long loops) {
15 asm volatile( 5 asm volatile(
@@ -19,25 +9,14 @@ static __inline__ void __delay(unsigned long loops) {
19 : "=r" (loops) : "0" (loops)); 9 : "=r" (loops) : "0" (loops));
20} 10}
21 11
22static __inline__ void __cr16_delay(unsigned long clocks) { 12extern void __udelay(unsigned long usecs);
23 unsigned long start; 13extern void __udelay_bad(unsigned long usecs);
24
25 /*
26 * Note: Due to unsigned math, cr16 rollovers shouldn't be
27 * a problem here. However, on 32 bit, we need to make sure
28 * we don't pass in too big a value. The current default
29 * value of MAX_UDELAY_MS should help prevent this.
30 */
31 14
32 start = mfctl(16); 15static inline void udelay(unsigned long usecs)
33 while ((mfctl(16) - start) < clocks) 16{
34 ; 17 if (__builtin_constant_p(usecs) && (usecs) > 20000)
18 __udelay_bad(usecs);
19 __udelay(usecs);
35} 20}
36 21
37static __inline__ void __udelay(unsigned long usecs) { 22#endif /* _ASM_PARISC_DELAY_H */
38 __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
39}
40
41#define udelay(n) __udelay(n)
42
43#endif /* defined(_PARISC_DELAY_H) */
diff --git a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h
index 241c34518465..9b3bd039a609 100644
--- a/arch/parisc/include/asm/hardirq.h
+++ b/arch/parisc/include/asm/hardirq.h
@@ -21,7 +21,6 @@ typedef struct {
21 unsigned int irq_stack_usage; 21 unsigned int irq_stack_usage;
22#ifdef CONFIG_SMP 22#ifdef CONFIG_SMP
23 unsigned int irq_resched_count; 23 unsigned int irq_resched_count;
24 unsigned int irq_call_count;
25#endif 24#endif
26 unsigned int irq_unaligned_count; 25 unsigned int irq_unaligned_count;
27 unsigned int irq_fpassist_count; 26 unsigned int irq_fpassist_count;
diff --git a/arch/parisc/include/asm/ptrace.h b/arch/parisc/include/asm/ptrace.h
index a2db278a5def..3c3cb004b7e2 100644
--- a/arch/parisc/include/asm/ptrace.h
+++ b/arch/parisc/include/asm/ptrace.h
@@ -19,5 +19,9 @@
19#define user_stack_pointer(regs) ((regs)->gr[30]) 19#define user_stack_pointer(regs) ((regs)->gr[30])
20unsigned long profile_pc(struct pt_regs *); 20unsigned long profile_pc(struct pt_regs *);
21 21
22static inline unsigned long regs_return_value(struct pt_regs *regs)
23{
24 return regs->gr[20];
25}
22 26
23#endif 27#endif
diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h
index 540c88fa8f86..bc7cf120106b 100644
--- a/arch/parisc/include/asm/thread_info.h
+++ b/arch/parisc/include/asm/thread_info.h
@@ -59,6 +59,7 @@ struct thread_info {
59#define TIF_32BIT 4 /* 32 bit binary */ 59#define TIF_32BIT 4 /* 32 bit binary */
60#define TIF_MEMDIE 5 /* is terminating due to OOM killer */ 60#define TIF_MEMDIE 5 /* is terminating due to OOM killer */
61#define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */ 61#define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */
62#define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
62#define TIF_NOTIFY_RESUME 8 /* callback before returning to user */ 63#define TIF_NOTIFY_RESUME 8 /* callback before returning to user */
63#define TIF_SINGLESTEP 9 /* single stepping? */ 64#define TIF_SINGLESTEP 9 /* single stepping? */
64#define TIF_BLOCKSTEP 10 /* branch stepping? */ 65#define TIF_BLOCKSTEP 10 /* branch stepping? */
@@ -68,6 +69,7 @@ struct thread_info {
68#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 69#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
69#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 70#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
70#define _TIF_32BIT (1 << TIF_32BIT) 71#define _TIF_32BIT (1 << TIF_32BIT)
72#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
71#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) 73#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
72#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) 74#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
73#define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP) 75#define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP)
@@ -75,7 +77,7 @@ struct thread_info {
75#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \ 77#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \
76 _TIF_NEED_RESCHED) 78 _TIF_NEED_RESCHED)
77#define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ 79#define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
78 _TIF_BLOCKSTEP) 80 _TIF_BLOCKSTEP | _TIF_SYSCALL_AUDIT)
79 81
80#endif /* __KERNEL__ */ 82#endif /* __KERNEL__ */
81 83
diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
index e0a82358517e..63f4dd0b49c2 100644
--- a/arch/parisc/include/asm/uaccess.h
+++ b/arch/parisc/include/asm/uaccess.h
@@ -4,11 +4,14 @@
4/* 4/*
5 * User space memory access functions 5 * User space memory access functions
6 */ 6 */
7#include <asm/processor.h>
7#include <asm/page.h> 8#include <asm/page.h>
8#include <asm/cache.h> 9#include <asm/cache.h>
9#include <asm/errno.h> 10#include <asm/errno.h>
10#include <asm-generic/uaccess-unaligned.h> 11#include <asm-generic/uaccess-unaligned.h>
11 12
13#include <linux/sched.h>
14
12#define VERIFY_READ 0 15#define VERIFY_READ 0
13#define VERIFY_WRITE 1 16#define VERIFY_WRITE 1
14 17
@@ -33,12 +36,43 @@ extern int __get_user_bad(void);
33extern int __put_kernel_bad(void); 36extern int __put_kernel_bad(void);
34extern int __put_user_bad(void); 37extern int __put_user_bad(void);
35 38
36static inline long access_ok(int type, const void __user * addr, 39
37 unsigned long size) 40/*
41 * Test whether a block of memory is a valid user space address.
42 * Returns 0 if the range is valid, nonzero otherwise.
43 */
44static inline int __range_not_ok(unsigned long addr, unsigned long size,
45 unsigned long limit)
38{ 46{
39 return 1; 47 unsigned long __newaddr = addr + size;
48 return (__newaddr < addr || __newaddr > limit || size > limit);
40} 49}
41 50
51/**
52 * access_ok: - Checks if a user space pointer is valid
53 * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that
54 * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe
55 * to write to a block, it is always safe to read from it.
56 * @addr: User space pointer to start of block to check
57 * @size: Size of block to check
58 *
59 * Context: User context only. This function may sleep.
60 *
61 * Checks if a pointer to a block of memory in user space is valid.
62 *
63 * Returns true (nonzero) if the memory block may be valid, false (zero)
64 * if it is definitely invalid.
65 *
66 * Note that, depending on architecture, this function probably just
67 * checks that the pointer is in the user space range - after calling
68 * this function, memory access functions may still return -EFAULT.
69 */
70#define access_ok(type, addr, size) \
71( __chk_user_ptr(addr), \
72 !__range_not_ok((unsigned long) (__force void *) (addr), \
73 size, user_addr_max()) \
74)
75
42#define put_user __put_user 76#define put_user __put_user
43#define get_user __get_user 77#define get_user __get_user
44 78
@@ -59,12 +93,13 @@ static inline long access_ok(int type, const void __user * addr,
59/* 93/*
60 * The exception table contains two values: the first is an address 94 * The exception table contains two values: the first is an address
61 * for an instruction that is allowed to fault, and the second is 95 * for an instruction that is allowed to fault, and the second is
62 * the address to the fixup routine. 96 * the address to the fixup routine. Even on a 64bit kernel we could
97 * use a 32bit (unsigned int) address here.
63 */ 98 */
64 99
65struct exception_table_entry { 100struct exception_table_entry {
66 unsigned long insn; /* address of insn that is allowed to fault. */ 101 unsigned long insn; /* address of insn that is allowed to fault. */
67 long fixup; /* fixup routine */ 102 unsigned long fixup; /* fixup routine */
68}; 103};
69 104
70#define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\ 105#define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\
@@ -218,7 +253,11 @@ extern long lstrnlen_user(const char __user *,long);
218/* 253/*
219 * Complex access routines -- macros 254 * Complex access routines -- macros
220 */ 255 */
221#define user_addr_max() (~0UL) 256#ifdef CONFIG_COMPAT
257#define user_addr_max() (TASK_SIZE)
258#else
259#define user_addr_max() (DEFAULT_TASK_SIZE)
260#endif
222 261
223#define strnlen_user lstrnlen_user 262#define strnlen_user lstrnlen_user
224#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL) 263#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
diff --git a/arch/parisc/install.sh b/arch/parisc/install.sh
index 4da682b466d0..6f68784fea25 100644
--- a/arch/parisc/install.sh
+++ b/arch/parisc/install.sh
@@ -19,20 +19,48 @@
19# $4 - default install path (blank if root directory) 19# $4 - default install path (blank if root directory)
20# 20#
21 21
22verify () {
23 if [ ! -f "$1" ]; then
24 echo "" 1>&2
25 echo " *** Missing file: $1" 1>&2
26 echo ' *** You need to run "make" before "make install".' 1>&2
27 echo "" 1>&2
28 exit 1
29 fi
30}
31
32# Make sure the files actually exist
33
34verify "$2"
35verify "$3"
36
22# User may have a custom install script 37# User may have a custom install script
23 38
24if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi 39if [ -n "${INSTALLKERNEL}" ]; then
25if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi 40 if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
41 if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
42fi
26 43
27# Default install 44# Default install
28 45
29if [ -f $4/vmlinuz ]; then 46if [ "$(basename $2)" = "zImage" ]; then
30 mv $4/vmlinuz $4/vmlinuz.old 47# Compressed install
48 echo "Installing compressed kernel"
49 base=vmlinuz
50else
51# Normal install
52 echo "Installing normal kernel"
53 base=vmlinux
54fi
55
56if [ -f $4/$base-$1 ]; then
57 mv $4/$base-$1 $4/$base-$1.old
31fi 58fi
59cat $2 > $4/$base-$1
32 60
33if [ -f $4/System.map ]; then 61# Install system map file
34 mv $4/System.map $4/System.old 62if [ -f $4/System.map-$1 ]; then
63 mv $4/System.map-$1 $4/System.map-$1.old
35fi 64fi
65cp $3 $4/System.map-$1
36 66
37cat $2 > $4/vmlinuz
38cp $3 $4/System.map
diff --git a/arch/parisc/kernel/Makefile b/arch/parisc/kernel/Makefile
index 66ee3f12df58..ff87b4603e3d 100644
--- a/arch/parisc/kernel/Makefile
+++ b/arch/parisc/kernel/Makefile
@@ -29,7 +29,9 @@ obj-$(CONFIG_PCI) += pci.o
29obj-$(CONFIG_MODULES) += module.o 29obj-$(CONFIG_MODULES) += module.o
30obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o 30obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o
31obj-$(CONFIG_STACKTRACE)+= stacktrace.o 31obj-$(CONFIG_STACKTRACE)+= stacktrace.o
32obj-$(CONFIG_AUDIT) += audit.o
33obj64-$(CONFIG_AUDIT) += compat_audit.o
32# only supported for PCX-W/U in 64-bit mode at the moment 34# only supported for PCX-W/U in 64-bit mode at the moment
33obj-$(CONFIG_64BIT) += perf.o perf_asm.o 35obj-$(CONFIG_64BIT) += perf.o perf_asm.o $(obj64-y)
34obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o 36obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o
35obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o 37obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
diff --git a/arch/parisc/kernel/audit.c b/arch/parisc/kernel/audit.c
new file mode 100644
index 000000000000..eb64a6148c82
--- /dev/null
+++ b/arch/parisc/kernel/audit.c
@@ -0,0 +1,81 @@
1#include <linux/init.h>
2#include <linux/types.h>
3#include <linux/audit.h>
4#include <asm/unistd.h>
5
6static unsigned dir_class[] = {
7#include <asm-generic/audit_dir_write.h>
8~0U
9};
10
11static unsigned read_class[] = {
12#include <asm-generic/audit_read.h>
13~0U
14};
15
16static unsigned write_class[] = {
17#include <asm-generic/audit_write.h>
18~0U
19};
20
21static unsigned chattr_class[] = {
22#include <asm-generic/audit_change_attr.h>
23~0U
24};
25
26static unsigned signal_class[] = {
27#include <asm-generic/audit_signal.h>
28~0U
29};
30
31int audit_classify_arch(int arch)
32{
33#ifdef CONFIG_COMPAT
34 if (arch == AUDIT_ARCH_PARISC)
35 return 1;
36#endif
37 return 0;
38}
39
40int audit_classify_syscall(int abi, unsigned syscall)
41{
42#ifdef CONFIG_COMPAT
43 extern int parisc32_classify_syscall(unsigned);
44 if (abi == AUDIT_ARCH_PARISC)
45 return parisc32_classify_syscall(syscall);
46#endif
47 switch (syscall) {
48 case __NR_open:
49 return 2;
50 case __NR_openat:
51 return 3;
52 case __NR_execve:
53 return 5;
54 default:
55 return 0;
56 }
57}
58
59static int __init audit_classes_init(void)
60{
61#ifdef CONFIG_COMPAT
62 extern __u32 parisc32_dir_class[];
63 extern __u32 parisc32_write_class[];
64 extern __u32 parisc32_read_class[];
65 extern __u32 parisc32_chattr_class[];
66 extern __u32 parisc32_signal_class[];
67 audit_register_class(AUDIT_CLASS_WRITE_32, parisc32_write_class);
68 audit_register_class(AUDIT_CLASS_READ_32, parisc32_read_class);
69 audit_register_class(AUDIT_CLASS_DIR_WRITE_32, parisc32_dir_class);
70 audit_register_class(AUDIT_CLASS_CHATTR_32, parisc32_chattr_class);
71 audit_register_class(AUDIT_CLASS_SIGNAL_32, parisc32_signal_class);
72#endif
73 audit_register_class(AUDIT_CLASS_WRITE, write_class);
74 audit_register_class(AUDIT_CLASS_READ, read_class);
75 audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
76 audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
77 audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
78 return 0;
79}
80
81__initcall(audit_classes_init);
diff --git a/arch/parisc/kernel/compat_audit.c b/arch/parisc/kernel/compat_audit.c
new file mode 100644
index 000000000000..c74478f6bc74
--- /dev/null
+++ b/arch/parisc/kernel/compat_audit.c
@@ -0,0 +1,40 @@
1#include <asm/unistd.h>
2
3unsigned int parisc32_dir_class[] = {
4#include <asm-generic/audit_dir_write.h>
5~0U
6};
7
8unsigned int parisc32_chattr_class[] = {
9#include <asm-generic/audit_change_attr.h>
10~0U
11};
12
13unsigned int parisc32_write_class[] = {
14#include <asm-generic/audit_write.h>
15~0U
16};
17
18unsigned int parisc32_read_class[] = {
19#include <asm-generic/audit_read.h>
20~0U
21};
22
23unsigned int parisc32_signal_class[] = {
24#include <asm-generic/audit_signal.h>
25~0U
26};
27
28int parisc32_classify_syscall(unsigned syscall)
29{
30 switch (syscall) {
31 case __NR_open:
32 return 2;
33 case __NR_openat:
34 return 3;
35 case __NR_execve:
36 return 5;
37 default:
38 return 1;
39 }
40}
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c
index 2e6443b1e922..501ac8b4dcdf 100644
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@ -179,10 +179,6 @@ int arch_show_interrupts(struct seq_file *p, int prec)
179 for_each_online_cpu(j) 179 for_each_online_cpu(j)
180 seq_printf(p, "%10u ", irq_stats(j)->irq_resched_count); 180 seq_printf(p, "%10u ", irq_stats(j)->irq_resched_count);
181 seq_puts(p, " Rescheduling interrupts\n"); 181 seq_puts(p, " Rescheduling interrupts\n");
182 seq_printf(p, "%*s: ", prec, "CAL");
183 for_each_online_cpu(j)
184 seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
185 seq_puts(p, " Function call interrupts\n");
186#endif 182#endif
187 seq_printf(p, "%*s: ", prec, "UAH"); 183 seq_printf(p, "%*s: ", prec, "UAH");
188 for_each_online_cpu(j) 184 for_each_online_cpu(j)
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
index 534abd4936e1..e842ee233db4 100644
--- a/arch/parisc/kernel/ptrace.c
+++ b/arch/parisc/kernel/ptrace.c
@@ -19,6 +19,7 @@
19#include <linux/security.h> 19#include <linux/security.h>
20#include <linux/compat.h> 20#include <linux/compat.h>
21#include <linux/signal.h> 21#include <linux/signal.h>
22#include <linux/audit.h>
22 23
23#include <asm/uaccess.h> 24#include <asm/uaccess.h>
24#include <asm/pgtable.h> 25#include <asm/pgtable.h>
@@ -267,11 +268,28 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
267 268
268long do_syscall_trace_enter(struct pt_regs *regs) 269long do_syscall_trace_enter(struct pt_regs *regs)
269{ 270{
271 long ret = 0;
272
270 if (test_thread_flag(TIF_SYSCALL_TRACE) && 273 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
271 tracehook_report_syscall_entry(regs)) 274 tracehook_report_syscall_entry(regs))
272 return -1L; 275 ret = -1L;
273 276
274 return regs->gr[20]; 277#ifdef CONFIG_64BIT
278 if (!is_compat_task())
279 audit_syscall_entry(AUDIT_ARCH_PARISC64,
280 regs->gr[20],
281 regs->gr[26], regs->gr[25],
282 regs->gr[24], regs->gr[23]);
283 else
284#endif
285 audit_syscall_entry(AUDIT_ARCH_PARISC,
286 regs->gr[20] & 0xffffffff,
287 regs->gr[26] & 0xffffffff,
288 regs->gr[25] & 0xffffffff,
289 regs->gr[24] & 0xffffffff,
290 regs->gr[23] & 0xffffffff);
291
292 return ret ? : regs->gr[20];
275} 293}
276 294
277void do_syscall_trace_exit(struct pt_regs *regs) 295void do_syscall_trace_exit(struct pt_regs *regs)
@@ -279,6 +297,8 @@ void do_syscall_trace_exit(struct pt_regs *regs)
279 int stepping = test_thread_flag(TIF_SINGLESTEP) || 297 int stepping = test_thread_flag(TIF_SINGLESTEP) ||
280 test_thread_flag(TIF_BLOCKSTEP); 298 test_thread_flag(TIF_BLOCKSTEP);
281 299
300 audit_syscall_exit(regs);
301
282 if (stepping || test_thread_flag(TIF_SYSCALL_TRACE)) 302 if (stepping || test_thread_flag(TIF_SYSCALL_TRACE))
283 tracehook_report_syscall_exit(regs, stepping); 303 tracehook_report_syscall_exit(regs, stepping);
284} 304}
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
index 7349a3fedfc7..72a3c658ad7b 100644
--- a/arch/parisc/kernel/setup.c
+++ b/arch/parisc/kernel/setup.c
@@ -318,8 +318,12 @@ static int __init parisc_init(void)
318 pdc_stable_write(0x40, &osid, sizeof(osid)); 318 pdc_stable_write(0x40, &osid, sizeof(osid));
319 319
320 processor_init(); 320 processor_init();
321 printk(KERN_INFO "CPU(s): %d x %s at %d.%06d MHz\n", 321#ifdef CONFIG_SMP
322 num_present_cpus(), 322 pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",
323 num_online_cpus(), num_present_cpus(),
324#else
325 pr_info("CPU(s): 1 x %s at %d.%06d MHz\n",
326#endif
323 boot_cpu_data.cpu_name, 327 boot_cpu_data.cpu_name,
324 boot_cpu_data.cpu_hz / 1000000, 328 boot_cpu_data.cpu_hz / 1000000,
325 boot_cpu_data.cpu_hz % 1000000 ); 329 boot_cpu_data.cpu_hz % 1000000 );
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
index 2b96602e812f..ceda229ea6c2 100644
--- a/arch/parisc/kernel/smp.c
+++ b/arch/parisc/kernel/smp.c
@@ -125,11 +125,6 @@ ipi_interrupt(int irq, void *dev_id)
125 unsigned long ops; 125 unsigned long ops;
126 unsigned long flags; 126 unsigned long flags;
127 127
128 /* Count this now; we may make a call that never returns. */
129 inc_irq_stat(irq_call_count);
130
131 mb(); /* Order interrupt and bit testing. */
132
133 for (;;) { 128 for (;;) {
134 spinlock_t *lock = &per_cpu(ipi_lock, this_cpu); 129 spinlock_t *lock = &per_cpu(ipi_lock, this_cpu);
135 spin_lock_irqsave(lock, flags); 130 spin_lock_irqsave(lock, flags);
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
index e767ab733e32..a63bb179f79a 100644
--- a/arch/parisc/kernel/syscall.S
+++ b/arch/parisc/kernel/syscall.S
@@ -649,10 +649,8 @@ cas_action:
649 /* Two exception table entries, one for the load, 649 /* Two exception table entries, one for the load,
650 the other for the store. Either return -EFAULT. 650 the other for the store. Either return -EFAULT.
651 Each of the entries must be relocated. */ 651 Each of the entries must be relocated. */
652 .section __ex_table,"aw" 652 ASM_EXCEPTIONTABLE_ENTRY(1b-linux_gateway_page, 3b-linux_gateway_page)
653 ASM_ULONG_INSN (1b - linux_gateway_page), (3b - linux_gateway_page) 653 ASM_EXCEPTIONTABLE_ENTRY(2b-linux_gateway_page, 3b-linux_gateway_page)
654 ASM_ULONG_INSN (2b - linux_gateway_page), (3b - linux_gateway_page)
655 .previous
656 654
657 655
658 /* Make sure nothing else is placed on this page */ 656 /* Make sure nothing else is placed on this page */
diff --git a/arch/parisc/lib/Makefile b/arch/parisc/lib/Makefile
index 5651536ac733..8fa92b8d839a 100644
--- a/arch/parisc/lib/Makefile
+++ b/arch/parisc/lib/Makefile
@@ -3,6 +3,6 @@
3# 3#
4 4
5lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \ 5lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \
6 ucmpdi2.o 6 ucmpdi2.o delay.o
7 7
8obj-y := iomap.o 8obj-y := iomap.o
diff --git a/arch/parisc/lib/delay.c b/arch/parisc/lib/delay.c
new file mode 100644
index 000000000000..ec9255f27a81
--- /dev/null
+++ b/arch/parisc/lib/delay.c
@@ -0,0 +1,73 @@
1/*
2 * Precise Delay Loops for parisc
3 *
4 * based on code by:
5 * Copyright (C) 1993 Linus Torvalds
6 * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
7 * Copyright (C) 2008 Jiri Hladky <hladky _dot_ jiri _at_ gmail _dot_ com>
8 *
9 * parisc implementation:
10 * Copyright (C) 2013 Helge Deller <deller@gmx.de>
11 */
12
13
14#include <linux/module.h>
15#include <linux/preempt.h>
16#include <linux/init.h>
17
18#include <asm/processor.h>
19#include <asm/delay.h>
20
21#include <asm/special_insns.h> /* for mfctl() */
22#include <asm/processor.h> /* for boot_cpu_data */
23
24/* CR16 based delay: */
25static void __cr16_delay(unsigned long __loops)
26{
27 /*
28 * Note: Due to unsigned math, cr16 rollovers shouldn't be
29 * a problem here. However, on 32 bit, we need to make sure
30 * we don't pass in too big a value. The current default
31 * value of MAX_UDELAY_MS should help prevent this.
32 */
33 u32 bclock, now, loops = __loops;
34 int cpu;
35
36 preempt_disable();
37 cpu = smp_processor_id();
38 bclock = mfctl(16);
39 for (;;) {
40 now = mfctl(16);
41 if ((now - bclock) >= loops)
42 break;
43
44 /* Allow RT tasks to run */
45 preempt_enable();
46 asm volatile(" nop\n");
47 barrier();
48 preempt_disable();
49
50 /*
51 * It is possible that we moved to another CPU, and
52 * since CR16's are per-cpu we need to calculate
53 * that. The delay must guarantee that we wait "at
54 * least" the amount of time. Being moved to another
55 * CPU could make the wait longer but we just need to
56 * make sure we waited long enough. Rebalance the
57 * counter for this CPU.
58 */
59 if (unlikely(cpu != smp_processor_id())) {
60 loops -= (now - bclock);
61 cpu = smp_processor_id();
62 bclock = mfctl(16);
63 }
64 }
65 preempt_enable();
66}
67
68
69void __udelay(unsigned long usecs)
70{
71 __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
72}
73EXPORT_SYMBOL(__udelay);
diff --git a/arch/parisc/lib/lusercopy.S b/arch/parisc/lib/lusercopy.S
index 6f2d9355efe2..a512f07d4feb 100644
--- a/arch/parisc/lib/lusercopy.S
+++ b/arch/parisc/lib/lusercopy.S
@@ -88,9 +88,7 @@ ENDPROC(lclear_user)
88 ldo 1(%r25),%r25 88 ldo 1(%r25),%r25
89 .previous 89 .previous
90 90
91 .section __ex_table,"aw" 91 ASM_EXCEPTIONTABLE_ENTRY(1b,2b)
92 ASM_ULONG_INSN 1b,2b
93 .previous
94 92
95 .procend 93 .procend
96 94
@@ -129,10 +127,8 @@ ENDPROC(lstrnlen_user)
129 copy %r24,%r26 /* reset r26 so 0 is returned on fault */ 127 copy %r24,%r26 /* reset r26 so 0 is returned on fault */
130 .previous 128 .previous
131 129
132 .section __ex_table,"aw" 130 ASM_EXCEPTIONTABLE_ENTRY(1b,3b)
133 ASM_ULONG_INSN 1b,3b 131 ASM_EXCEPTIONTABLE_ENTRY(2b,3b)
134 ASM_ULONG_INSN 2b,3b
135 .previous
136 132
137 .procend 133 .procend
138 134
diff --git a/arch/parisc/math-emu/float.h b/arch/parisc/math-emu/float.h
index ce76f6dfa25b..7a51f97e72e6 100644
--- a/arch/parisc/math-emu/float.h
+++ b/arch/parisc/math-emu/float.h
@@ -484,7 +484,6 @@ typedef int VOID;
484 * | |G|L|E|U|X| 484 * | |G|L|E|U|X|
485 * +-------+-------+-------+-------+-------+-------+-------+-------+ 485 * +-------+-------+-------+-------+-------+-------+-------+-------+
486 */ 486 */
487#define Allexception(object) (object)
488#define Greaterthanbit(object) Bitfield_extract( 27, 1,object) 487#define Greaterthanbit(object) Bitfield_extract( 27, 1,object)
489#define Lessthanbit(object) Bitfield_extract( 28, 1,object) 488#define Lessthanbit(object) Bitfield_extract( 28, 1,object)
490#define Equalbit(object) Bitfield_extract( 29, 1,object) 489#define Equalbit(object) Bitfield_extract( 29, 1,object)
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index 0293588d5b8c..7584a5df0fa4 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -142,6 +142,12 @@ int fixup_exception(struct pt_regs *regs)
142{ 142{
143 const struct exception_table_entry *fix; 143 const struct exception_table_entry *fix;
144 144
145 /* If we only stored 32bit addresses in the exception table we can drop
146 * out if we faulted on a 64bit address. */
147 if ((sizeof(regs->iaoq[0]) > sizeof(fix->insn))
148 && (regs->iaoq[0] >> 32))
149 return 0;
150
145 fix = search_exception_tables(regs->iaoq[0]); 151 fix = search_exception_tables(regs->iaoq[0]);
146 if (fix) { 152 if (fix) {
147 struct exception_data *d; 153 struct exception_data *d;
@@ -274,12 +280,22 @@ bad_area:
274 } 280 }
275 show_regs(regs); 281 show_regs(regs);
276#endif 282#endif
277 /* FIXME: actually we need to get the signo and code correct */ 283 switch (code) {
278 si.si_signo = SIGSEGV; 284 case 15: /* Data TLB miss fault/Data page fault */
285 case 17: /* NA data TLB miss / page fault */
286 case 18: /* Unaligned access - PCXS only */
287 si.si_signo = SIGBUS;
288 si.si_code = BUS_ADRERR;
289 break;
290 case 16: /* Non-access instruction TLB miss fault */
291 case 26: /* PCXL: Data memory access rights trap */
292 default:
293 si.si_signo = SIGSEGV;
294 si.si_code = SEGV_MAPERR;
295 }
279 si.si_errno = 0; 296 si.si_errno = 0;
280 si.si_code = SEGV_MAPERR;
281 si.si_addr = (void __user *) address; 297 si.si_addr = (void __user *) address;
282 force_sig_info(SIGSEGV, &si, current); 298 force_sig_info(si.si_signo, &si, current);
283 return; 299 return;
284 } 300 }
285 301
diff --git a/drivers/video/console/sticore.c b/drivers/video/console/sticore.c
index 35687fd56456..4ad24f2c6472 100644
--- a/drivers/video/console/sticore.c
+++ b/drivers/video/console/sticore.c
@@ -3,7 +3,7 @@
3 * core code for console driver using HP's STI firmware 3 * core code for console driver using HP's STI firmware
4 * 4 *
5 * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> 5 * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
6 * Copyright (C) 2001-2003 Helge Deller <deller@gmx.de> 6 * Copyright (C) 2001-2013 Helge Deller <deller@gmx.de>
7 * Copyright (C) 2001-2002 Thomas Bogendoerfer <tsbogend@alpha.franken.de> 7 * Copyright (C) 2001-2002 Thomas Bogendoerfer <tsbogend@alpha.franken.de>
8 * 8 *
9 * TODO: 9 * TODO:
@@ -30,7 +30,7 @@
30 30
31#include "../sticore.h" 31#include "../sticore.h"
32 32
33#define STI_DRIVERVERSION "Version 0.9a" 33#define STI_DRIVERVERSION "Version 0.9b"
34 34
35static struct sti_struct *default_sti __read_mostly; 35static struct sti_struct *default_sti __read_mostly;
36 36
@@ -73,28 +73,34 @@ static const struct sti_init_flags default_init_flags = {
73 73
74static int sti_init_graph(struct sti_struct *sti) 74static int sti_init_graph(struct sti_struct *sti)
75{ 75{
76 struct sti_init_inptr_ext inptr_ext = { 0, }; 76 struct sti_init_inptr *inptr = &sti->sti_data->init_inptr;
77 struct sti_init_inptr inptr = { 77 struct sti_init_inptr_ext *inptr_ext = &sti->sti_data->init_inptr_ext;
78 .text_planes = 3, /* # of text planes (max 3 for STI) */ 78 struct sti_init_outptr *outptr = &sti->sti_data->init_outptr;
79 .ext_ptr = STI_PTR(&inptr_ext)
80 };
81 struct sti_init_outptr outptr = { 0, };
82 unsigned long flags; 79 unsigned long flags;
83 int ret; 80 int ret, err;
84 81
85 spin_lock_irqsave(&sti->lock, flags); 82 spin_lock_irqsave(&sti->lock, flags);
86 83
87 ret = STI_CALL(sti->init_graph, &default_init_flags, &inptr, 84 memset(inptr, 0, sizeof(*inptr));
88 &outptr, sti->glob_cfg); 85 inptr->text_planes = 3; /* # of text planes (max 3 for STI) */
86 memset(inptr_ext, 0, sizeof(*inptr_ext));
87 inptr->ext_ptr = STI_PTR(inptr_ext);
88 outptr->errno = 0;
89
90 ret = sti_call(sti, sti->init_graph, &default_init_flags, inptr,
91 outptr, sti->glob_cfg);
92
93 if (ret >= 0)
94 sti->text_planes = outptr->text_planes;
95 err = outptr->errno;
89 96
90 spin_unlock_irqrestore(&sti->lock, flags); 97 spin_unlock_irqrestore(&sti->lock, flags);
91 98
92 if (ret < 0) { 99 if (ret < 0) {
93 printk(KERN_ERR "STI init_graph failed (ret %d, errno %d)\n",ret,outptr.errno); 100 pr_err("STI init_graph failed (ret %d, errno %d)\n", ret, err);
94 return -1; 101 return -1;
95 } 102 }
96 103
97 sti->text_planes = outptr.text_planes;
98 return 0; 104 return 0;
99} 105}
100 106
@@ -104,16 +110,18 @@ static const struct sti_conf_flags default_conf_flags = {
104 110
105static void sti_inq_conf(struct sti_struct *sti) 111static void sti_inq_conf(struct sti_struct *sti)
106{ 112{
107 struct sti_conf_inptr inptr = { 0, }; 113 struct sti_conf_inptr *inptr = &sti->sti_data->inq_inptr;
114 struct sti_conf_outptr *outptr = &sti->sti_data->inq_outptr;
108 unsigned long flags; 115 unsigned long flags;
109 s32 ret; 116 s32 ret;
110 117
111 sti->outptr.ext_ptr = STI_PTR(&sti->outptr_ext); 118 outptr->ext_ptr = STI_PTR(&sti->sti_data->inq_outptr_ext);
112 119
113 do { 120 do {
114 spin_lock_irqsave(&sti->lock, flags); 121 spin_lock_irqsave(&sti->lock, flags);
115 ret = STI_CALL(sti->inq_conf, &default_conf_flags, 122 memset(inptr, 0, sizeof(*inptr));
116 &inptr, &sti->outptr, sti->glob_cfg); 123 ret = sti_call(sti, sti->inq_conf, &default_conf_flags,
124 inptr, outptr, sti->glob_cfg);
117 spin_unlock_irqrestore(&sti->lock, flags); 125 spin_unlock_irqrestore(&sti->lock, flags);
118 } while (ret == 1); 126 } while (ret == 1);
119} 127}
@@ -126,7 +134,8 @@ static const struct sti_font_flags default_font_flags = {
126void 134void
127sti_putc(struct sti_struct *sti, int c, int y, int x) 135sti_putc(struct sti_struct *sti, int c, int y, int x)
128{ 136{
129 struct sti_font_inptr inptr = { 137 struct sti_font_inptr *inptr = &sti->sti_data->font_inptr;
138 struct sti_font_inptr inptr_default = {
130 .font_start_addr= STI_PTR(sti->font->raw), 139 .font_start_addr= STI_PTR(sti->font->raw),
131 .index = c_index(sti, c), 140 .index = c_index(sti, c),
132 .fg_color = c_fg(sti, c), 141 .fg_color = c_fg(sti, c),
@@ -134,14 +143,15 @@ sti_putc(struct sti_struct *sti, int c, int y, int x)
134 .dest_x = x * sti->font_width, 143 .dest_x = x * sti->font_width,
135 .dest_y = y * sti->font_height, 144 .dest_y = y * sti->font_height,
136 }; 145 };
137 struct sti_font_outptr outptr = { 0, }; 146 struct sti_font_outptr *outptr = &sti->sti_data->font_outptr;
138 s32 ret; 147 s32 ret;
139 unsigned long flags; 148 unsigned long flags;
140 149
141 do { 150 do {
142 spin_lock_irqsave(&sti->lock, flags); 151 spin_lock_irqsave(&sti->lock, flags);
143 ret = STI_CALL(sti->font_unpmv, &default_font_flags, 152 *inptr = inptr_default;
144 &inptr, &outptr, sti->glob_cfg); 153 ret = sti_call(sti, sti->font_unpmv, &default_font_flags,
154 inptr, outptr, sti->glob_cfg);
145 spin_unlock_irqrestore(&sti->lock, flags); 155 spin_unlock_irqrestore(&sti->lock, flags);
146 } while (ret == 1); 156 } while (ret == 1);
147} 157}
@@ -156,7 +166,8 @@ void
156sti_set(struct sti_struct *sti, int src_y, int src_x, 166sti_set(struct sti_struct *sti, int src_y, int src_x,
157 int height, int width, u8 color) 167 int height, int width, u8 color)
158{ 168{
159 struct sti_blkmv_inptr inptr = { 169 struct sti_blkmv_inptr *inptr = &sti->sti_data->blkmv_inptr;
170 struct sti_blkmv_inptr inptr_default = {
160 .fg_color = color, 171 .fg_color = color,
161 .bg_color = color, 172 .bg_color = color,
162 .src_x = src_x, 173 .src_x = src_x,
@@ -166,14 +177,15 @@ sti_set(struct sti_struct *sti, int src_y, int src_x,
166 .width = width, 177 .width = width,
167 .height = height, 178 .height = height,
168 }; 179 };
169 struct sti_blkmv_outptr outptr = { 0, }; 180 struct sti_blkmv_outptr *outptr = &sti->sti_data->blkmv_outptr;
170 s32 ret; 181 s32 ret;
171 unsigned long flags; 182 unsigned long flags;
172 183
173 do { 184 do {
174 spin_lock_irqsave(&sti->lock, flags); 185 spin_lock_irqsave(&sti->lock, flags);
175 ret = STI_CALL(sti->block_move, &clear_blkmv_flags, 186 *inptr = inptr_default;
176 &inptr, &outptr, sti->glob_cfg); 187 ret = sti_call(sti, sti->block_move, &clear_blkmv_flags,
188 inptr, outptr, sti->glob_cfg);
177 spin_unlock_irqrestore(&sti->lock, flags); 189 spin_unlock_irqrestore(&sti->lock, flags);
178 } while (ret == 1); 190 } while (ret == 1);
179} 191}
@@ -182,7 +194,8 @@ void
182sti_clear(struct sti_struct *sti, int src_y, int src_x, 194sti_clear(struct sti_struct *sti, int src_y, int src_x,
183 int height, int width, int c) 195 int height, int width, int c)
184{ 196{
185 struct sti_blkmv_inptr inptr = { 197 struct sti_blkmv_inptr *inptr = &sti->sti_data->blkmv_inptr;
198 struct sti_blkmv_inptr inptr_default = {
186 .fg_color = c_fg(sti, c), 199 .fg_color = c_fg(sti, c),
187 .bg_color = c_bg(sti, c), 200 .bg_color = c_bg(sti, c),
188 .src_x = src_x * sti->font_width, 201 .src_x = src_x * sti->font_width,
@@ -192,14 +205,15 @@ sti_clear(struct sti_struct *sti, int src_y, int src_x,
192 .width = width * sti->font_width, 205 .width = width * sti->font_width,
193 .height = height* sti->font_height, 206 .height = height* sti->font_height,
194 }; 207 };
195 struct sti_blkmv_outptr outptr = { 0, }; 208 struct sti_blkmv_outptr *outptr = &sti->sti_data->blkmv_outptr;
196 s32 ret; 209 s32 ret;
197 unsigned long flags; 210 unsigned long flags;
198 211
199 do { 212 do {
200 spin_lock_irqsave(&sti->lock, flags); 213 spin_lock_irqsave(&sti->lock, flags);
201 ret = STI_CALL(sti->block_move, &clear_blkmv_flags, 214 *inptr = inptr_default;
202 &inptr, &outptr, sti->glob_cfg); 215 ret = sti_call(sti, sti->block_move, &clear_blkmv_flags,
216 inptr, outptr, sti->glob_cfg);
203 spin_unlock_irqrestore(&sti->lock, flags); 217 spin_unlock_irqrestore(&sti->lock, flags);
204 } while (ret == 1); 218 } while (ret == 1);
205} 219}
@@ -212,7 +226,8 @@ void
212sti_bmove(struct sti_struct *sti, int src_y, int src_x, 226sti_bmove(struct sti_struct *sti, int src_y, int src_x,
213 int dst_y, int dst_x, int height, int width) 227 int dst_y, int dst_x, int height, int width)
214{ 228{
215 struct sti_blkmv_inptr inptr = { 229 struct sti_blkmv_inptr *inptr = &sti->sti_data->blkmv_inptr;
230 struct sti_blkmv_inptr inptr_default = {
216 .src_x = src_x * sti->font_width, 231 .src_x = src_x * sti->font_width,
217 .src_y = src_y * sti->font_height, 232 .src_y = src_y * sti->font_height,
218 .dest_x = dst_x * sti->font_width, 233 .dest_x = dst_x * sti->font_width,
@@ -220,14 +235,15 @@ sti_bmove(struct sti_struct *sti, int src_y, int src_x,
220 .width = width * sti->font_width, 235 .width = width * sti->font_width,
221 .height = height* sti->font_height, 236 .height = height* sti->font_height,
222 }; 237 };
223 struct sti_blkmv_outptr outptr = { 0, }; 238 struct sti_blkmv_outptr *outptr = &sti->sti_data->blkmv_outptr;
224 s32 ret; 239 s32 ret;
225 unsigned long flags; 240 unsigned long flags;
226 241
227 do { 242 do {
228 spin_lock_irqsave(&sti->lock, flags); 243 spin_lock_irqsave(&sti->lock, flags);
229 ret = STI_CALL(sti->block_move, &default_blkmv_flags, 244 *inptr = inptr_default;
230 &inptr, &outptr, sti->glob_cfg); 245 ret = sti_call(sti, sti->block_move, &default_blkmv_flags,
246 inptr, outptr, sti->glob_cfg);
231 spin_unlock_irqrestore(&sti->lock, flags); 247 spin_unlock_irqrestore(&sti->lock, flags);
232 } while (ret == 1); 248 } while (ret == 1);
233} 249}
@@ -284,7 +300,7 @@ __setup("sti=", sti_setup);
284 300
285 301
286 302
287static char *font_name[MAX_STI_ROMS] = { "VGA8x16", }; 303static char *font_name[MAX_STI_ROMS];
288static int font_index[MAX_STI_ROMS], 304static int font_index[MAX_STI_ROMS],
289 font_height[MAX_STI_ROMS], 305 font_height[MAX_STI_ROMS],
290 font_width[MAX_STI_ROMS]; 306 font_width[MAX_STI_ROMS];
@@ -389,10 +405,10 @@ static void sti_dump_outptr(struct sti_struct *sti)
389 "%d used bits\n" 405 "%d used bits\n"
390 "%d planes\n" 406 "%d planes\n"
391 "attributes %08x\n", 407 "attributes %08x\n",
392 sti->outptr.bits_per_pixel, 408 sti->sti_data->inq_outptr.bits_per_pixel,
393 sti->outptr.bits_used, 409 sti->sti_data->inq_outptr.bits_used,
394 sti->outptr.planes, 410 sti->sti_data->inq_outptr.planes,
395 sti->outptr.attributes)); 411 sti->sti_data->inq_outptr.attributes));
396} 412}
397 413
398static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address, 414static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address,
@@ -402,24 +418,21 @@ static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address,
402 struct sti_glob_cfg_ext *glob_cfg_ext; 418 struct sti_glob_cfg_ext *glob_cfg_ext;
403 void *save_addr; 419 void *save_addr;
404 void *sti_mem_addr; 420 void *sti_mem_addr;
405 const int save_addr_size = 1024; /* XXX */ 421 int i, size;
406 int i;
407 422
408 if (!sti->sti_mem_request) 423 if (sti->sti_mem_request < 256)
409 sti->sti_mem_request = 256; /* STI default */ 424 sti->sti_mem_request = 256; /* STI default */
410 425
411 glob_cfg = kzalloc(sizeof(*sti->glob_cfg), GFP_KERNEL); 426 size = sizeof(struct sti_all_data) + sti->sti_mem_request - 256;
412 glob_cfg_ext = kzalloc(sizeof(*glob_cfg_ext), GFP_KERNEL);
413 save_addr = kzalloc(save_addr_size, GFP_KERNEL);
414 sti_mem_addr = kzalloc(sti->sti_mem_request, GFP_KERNEL);
415 427
416 if (!(glob_cfg && glob_cfg_ext && save_addr && sti_mem_addr)) { 428 sti->sti_data = kzalloc(size, STI_LOWMEM);
417 kfree(glob_cfg); 429 if (!sti->sti_data)
418 kfree(glob_cfg_ext);
419 kfree(save_addr);
420 kfree(sti_mem_addr);
421 return -ENOMEM; 430 return -ENOMEM;
422 } 431
432 glob_cfg = &sti->sti_data->glob_cfg;
433 glob_cfg_ext = &sti->sti_data->glob_cfg_ext;
434 save_addr = &sti->sti_data->save_addr;
435 sti_mem_addr = &sti->sti_data->sti_mem_addr;
423 436
424 glob_cfg->ext_ptr = STI_PTR(glob_cfg_ext); 437 glob_cfg->ext_ptr = STI_PTR(glob_cfg_ext);
425 glob_cfg->save_addr = STI_PTR(save_addr); 438 glob_cfg->save_addr = STI_PTR(save_addr);
@@ -475,32 +488,31 @@ static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address,
475 return 0; 488 return 0;
476} 489}
477 490
478#ifdef CONFIG_FB 491#ifdef CONFIG_FONTS
479static struct sti_cooked_font * 492static struct sti_cooked_font *
480sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) 493sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name)
481{ 494{
482 const struct font_desc *fbfont; 495 const struct font_desc *fbfont = NULL;
483 unsigned int size, bpc; 496 unsigned int size, bpc;
484 void *dest; 497 void *dest;
485 struct sti_rom_font *nf; 498 struct sti_rom_font *nf;
486 struct sti_cooked_font *cooked_font; 499 struct sti_cooked_font *cooked_font;
487 500
488 if (!fbfont_name || !strlen(fbfont_name)) 501 if (fbfont_name && strlen(fbfont_name))
489 return NULL; 502 fbfont = find_font(fbfont_name);
490 fbfont = find_font(fbfont_name);
491 if (!fbfont) 503 if (!fbfont)
492 fbfont = get_default_font(1024,768, ~(u32)0, ~(u32)0); 504 fbfont = get_default_font(1024,768, ~(u32)0, ~(u32)0);
493 if (!fbfont) 505 if (!fbfont)
494 return NULL; 506 return NULL;
495 507
496 DPRINTK((KERN_DEBUG "selected %dx%d fb-font %s\n", 508 pr_info("STI selected %dx%d framebuffer font %s for sticon\n",
497 fbfont->width, fbfont->height, fbfont->name)); 509 fbfont->width, fbfont->height, fbfont->name);
498 510
499 bpc = ((fbfont->width+7)/8) * fbfont->height; 511 bpc = ((fbfont->width+7)/8) * fbfont->height;
500 size = bpc * 256; 512 size = bpc * 256;
501 size += sizeof(struct sti_rom_font); 513 size += sizeof(struct sti_rom_font);
502 514
503 nf = kzalloc(size, GFP_KERNEL); 515 nf = kzalloc(size, STI_LOWMEM);
504 if (!nf) 516 if (!nf)
505 return NULL; 517 return NULL;
506 518
@@ -637,7 +649,7 @@ static void *sti_bmode_font_raw(struct sti_cooked_font *f)
637 unsigned char *n, *p, *q; 649 unsigned char *n, *p, *q;
638 int size = f->raw->bytes_per_char*256+sizeof(struct sti_rom_font); 650 int size = f->raw->bytes_per_char*256+sizeof(struct sti_rom_font);
639 651
640 n = kzalloc (4*size, GFP_KERNEL); 652 n = kzalloc(4*size, STI_LOWMEM);
641 if (!n) 653 if (!n)
642 return NULL; 654 return NULL;
643 p = n + 3; 655 p = n + 3;
@@ -673,7 +685,7 @@ static struct sti_rom *sti_get_bmode_rom (unsigned long address)
673 sti_bmode_rom_copy(address + BMODE_LAST_ADDR_OFFS, sizeof(size), &size); 685 sti_bmode_rom_copy(address + BMODE_LAST_ADDR_OFFS, sizeof(size), &size);
674 686
675 size = (size+3) / 4; 687 size = (size+3) / 4;
676 raw = kmalloc(size, GFP_KERNEL); 688 raw = kmalloc(size, STI_LOWMEM);
677 if (raw) { 689 if (raw) {
678 sti_bmode_rom_copy(address, size, raw); 690 sti_bmode_rom_copy(address, size, raw);
679 memmove (&raw->res004, &raw->type[0], 0x3c); 691 memmove (&raw->res004, &raw->type[0], 0x3c);
@@ -707,7 +719,7 @@ static struct sti_rom *sti_get_wmode_rom(unsigned long address)
707 /* read the ROM size directly from the struct in ROM */ 719 /* read the ROM size directly from the struct in ROM */
708 size = gsc_readl(address + offsetof(struct sti_rom,last_addr)); 720 size = gsc_readl(address + offsetof(struct sti_rom,last_addr));
709 721
710 raw = kmalloc(size, GFP_KERNEL); 722 raw = kmalloc(size, STI_LOWMEM);
711 if (raw) 723 if (raw)
712 sti_rom_copy(address, size, raw); 724 sti_rom_copy(address, size, raw);
713 725
@@ -743,6 +755,10 @@ static int sti_read_rom(int wordmode, struct sti_struct *sti,
743 755
744 address = (unsigned long) STI_PTR(raw); 756 address = (unsigned long) STI_PTR(raw);
745 757
758 pr_info("STI ROM supports 32 %sbit firmware functions.\n",
759 raw->alt_code_type == ALT_CODE_TYPE_PA_RISC_64
760 ? "and 64 " : "");
761
746 sti->font_unpmv = address + (raw->font_unpmv & 0x03ffffff); 762 sti->font_unpmv = address + (raw->font_unpmv & 0x03ffffff);
747 sti->block_move = address + (raw->block_move & 0x03ffffff); 763 sti->block_move = address + (raw->block_move & 0x03ffffff);
748 sti->init_graph = address + (raw->init_graph & 0x03ffffff); 764 sti->init_graph = address + (raw->init_graph & 0x03ffffff);
@@ -901,7 +917,8 @@ test_rom:
901 sti_dump_globcfg(sti->glob_cfg, sti->sti_mem_request); 917 sti_dump_globcfg(sti->glob_cfg, sti->sti_mem_request);
902 sti_dump_outptr(sti); 918 sti_dump_outptr(sti);
903 919
904 printk(KERN_INFO " graphics card name: %s\n", sti->outptr.dev_name ); 920 pr_info(" graphics card name: %s\n",
921 sti->sti_data->inq_outptr.dev_name);
905 922
906 sti_roms[num_sti_roms] = sti; 923 sti_roms[num_sti_roms] = sti;
907 num_sti_roms++; 924 num_sti_roms++;
@@ -1073,6 +1090,29 @@ struct sti_struct * sti_get_rom(unsigned int index)
1073} 1090}
1074EXPORT_SYMBOL(sti_get_rom); 1091EXPORT_SYMBOL(sti_get_rom);
1075 1092
1093
1094int sti_call(const struct sti_struct *sti, unsigned long func,
1095 const void *flags, void *inptr, void *outptr,
1096 struct sti_glob_cfg *glob_cfg)
1097{
1098 unsigned long _flags = STI_PTR(flags);
1099 unsigned long _inptr = STI_PTR(inptr);
1100 unsigned long _outptr = STI_PTR(outptr);
1101 unsigned long _glob_cfg = STI_PTR(glob_cfg);
1102 int ret;
1103
1104#ifdef CONFIG_64BIT
1105 /* Check for overflow when using 32bit STI on 64bit kernel. */
1106 if (WARN_ONCE(_flags>>32 || _inptr>>32 || _outptr>>32 || _glob_cfg>>32,
1107 "Out of 32bit-range pointers!"))
1108 return -1;
1109#endif
1110
1111 ret = pdc_sti_call(func, _flags, _inptr, _outptr, _glob_cfg);
1112
1113 return ret;
1114}
1115
1076MODULE_AUTHOR("Philipp Rumpf, Helge Deller, Thomas Bogendoerfer"); 1116MODULE_AUTHOR("Philipp Rumpf, Helge Deller, Thomas Bogendoerfer");
1077MODULE_DESCRIPTION("Core STI driver for HP's NGLE series graphics cards in HP PARISC machines"); 1117MODULE_DESCRIPTION("Core STI driver for HP's NGLE series graphics cards in HP PARISC machines");
1078MODULE_LICENSE("GPL v2"); 1118MODULE_LICENSE("GPL v2");
diff --git a/drivers/video/sticore.h b/drivers/video/sticore.h
index addf7b615ef8..af1619536ac8 100644
--- a/drivers/video/sticore.h
+++ b/drivers/video/sticore.h
@@ -18,6 +18,9 @@
18#define STI_FONT_HPROMAN8 1 18#define STI_FONT_HPROMAN8 1
19#define STI_FONT_KANA8 2 19#define STI_FONT_KANA8 2
20 20
21#define ALT_CODE_TYPE_UNKNOWN 0x00 /* alt code type values */
22#define ALT_CODE_TYPE_PA_RISC_64 0x01
23
21/* The latency of the STI functions cannot really be reduced by setting 24/* The latency of the STI functions cannot really be reduced by setting
22 * this to 0; STI doesn't seem to be designed to allow calling a different 25 * this to 0; STI doesn't seem to be designed to allow calling a different
23 * function (or the same function with different arguments) after a 26 * function (or the same function with different arguments) after a
@@ -40,14 +43,6 @@
40 43
41#define STI_PTR(p) ( virt_to_phys(p) ) 44#define STI_PTR(p) ( virt_to_phys(p) )
42#define PTR_STI(p) ( phys_to_virt((unsigned long)p) ) 45#define PTR_STI(p) ( phys_to_virt((unsigned long)p) )
43#define STI_CALL(func, flags, inptr, outptr, glob_cfg) \
44 ({ \
45 pdc_sti_call( func, STI_PTR(flags), \
46 STI_PTR(inptr), \
47 STI_PTR(outptr), \
48 STI_PTR(glob_cfg)); \
49 })
50
51 46
52#define sti_onscreen_x(sti) (sti->glob_cfg->onscreen_x) 47#define sti_onscreen_x(sti) (sti->glob_cfg->onscreen_x)
53#define sti_onscreen_y(sti) (sti->glob_cfg->onscreen_y) 48#define sti_onscreen_y(sti) (sti->glob_cfg->onscreen_y)
@@ -56,6 +51,12 @@
56#define sti_font_x(sti) (PTR_STI(sti->font)->width) 51#define sti_font_x(sti) (PTR_STI(sti->font)->width)
57#define sti_font_y(sti) (PTR_STI(sti->font)->height) 52#define sti_font_y(sti) (PTR_STI(sti->font)->height)
58 53
54#ifdef CONFIG_64BIT
55#define STI_LOWMEM (GFP_KERNEL | GFP_DMA)
56#else
57#define STI_LOWMEM (GFP_KERNEL)
58#endif
59
59 60
60/* STI function configuration structs */ 61/* STI function configuration structs */
61 62
@@ -306,6 +307,34 @@ struct sti_blkmv_outptr {
306}; 307};
307 308
308 309
310/* sti_all_data is an internal struct which needs to be allocated in
311 * low memory (< 4GB) if STI is used with 32bit STI on a 64bit kernel */
312
313struct sti_all_data {
314 struct sti_glob_cfg glob_cfg;
315 struct sti_glob_cfg_ext glob_cfg_ext;
316
317 struct sti_conf_inptr inq_inptr;
318 struct sti_conf_outptr inq_outptr; /* configuration */
319 struct sti_conf_outptr_ext inq_outptr_ext;
320
321 struct sti_init_inptr_ext init_inptr_ext;
322 struct sti_init_inptr init_inptr;
323 struct sti_init_outptr init_outptr;
324
325 struct sti_blkmv_inptr blkmv_inptr;
326 struct sti_blkmv_outptr blkmv_outptr;
327
328 struct sti_font_inptr font_inptr;
329 struct sti_font_outptr font_outptr;
330
331 /* leave as last entries */
332 unsigned long save_addr[1024 / sizeof(unsigned long)];
333 /* min 256 bytes which is STI default, max sti->sti_mem_request */
334 unsigned long sti_mem_addr[256 / sizeof(unsigned long)];
335 /* do not add something below here ! */
336};
337
309/* internal generic STI struct */ 338/* internal generic STI struct */
310 339
311struct sti_struct { 340struct sti_struct {
@@ -330,11 +359,9 @@ struct sti_struct {
330 region_t regions[STI_REGION_MAX]; 359 region_t regions[STI_REGION_MAX];
331 unsigned long regions_phys[STI_REGION_MAX]; 360 unsigned long regions_phys[STI_REGION_MAX];
332 361
333 struct sti_glob_cfg *glob_cfg; 362 struct sti_glob_cfg *glob_cfg; /* points into sti_all_data */
334 struct sti_cooked_font *font; /* ptr to selected font (cooked) */
335 363
336 struct sti_conf_outptr outptr; /* configuration */ 364 struct sti_cooked_font *font; /* ptr to selected font (cooked) */
337 struct sti_conf_outptr_ext outptr_ext;
338 365
339 struct pci_dev *pd; 366 struct pci_dev *pd;
340 367
@@ -343,6 +370,9 @@ struct sti_struct {
343 370
344 /* pointer to the fb_info where this STI device is used */ 371 /* pointer to the fb_info where this STI device is used */
345 struct fb_info *info; 372 struct fb_info *info;
373
374 /* pointer to all internal data */
375 struct sti_all_data *sti_data;
346}; 376};
347 377
348 378
@@ -350,6 +380,14 @@ struct sti_struct {
350 380
351struct sti_struct *sti_get_rom(unsigned int index); /* 0: default sti */ 381struct sti_struct *sti_get_rom(unsigned int index); /* 0: default sti */
352 382
383
384/* sticore main function to call STI firmware */
385
386int sti_call(const struct sti_struct *sti, unsigned long func,
387 const void *flags, void *inptr, void *outptr,
388 struct sti_glob_cfg *glob_cfg);
389
390
353/* functions to call the STI ROM directly */ 391/* functions to call the STI ROM directly */
354 392
355void sti_putc(struct sti_struct *sti, int c, int y, int x); 393void sti_putc(struct sti_struct *sti, int c, int y, int x);
diff --git a/drivers/video/stifb.c b/drivers/video/stifb.c
index 876648e15e9d..019a1feef995 100644
--- a/drivers/video/stifb.c
+++ b/drivers/video/stifb.c
@@ -1101,6 +1101,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
1101 var = &info->var; 1101 var = &info->var;
1102 1102
1103 fb->sti = sti; 1103 fb->sti = sti;
1104 dev_name = sti->sti_data->inq_outptr.dev_name;
1104 /* store upper 32bits of the graphics id */ 1105 /* store upper 32bits of the graphics id */
1105 fb->id = fb->sti->graphics_id[0]; 1106 fb->id = fb->sti->graphics_id[0];
1106 1107
@@ -1114,11 +1115,11 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
1114 Since this driver only supports standard mode, we check 1115 Since this driver only supports standard mode, we check
1115 if the device name contains the string "DX" and tell the 1116 if the device name contains the string "DX" and tell the
1116 user how to reconfigure the card. */ 1117 user how to reconfigure the card. */
1117 if (strstr(sti->outptr.dev_name, "DX")) { 1118 if (strstr(dev_name, "DX")) {
1118 printk(KERN_WARNING 1119 printk(KERN_WARNING
1119"WARNING: stifb framebuffer driver does not support '%s' in double-buffer mode.\n" 1120"WARNING: stifb framebuffer driver does not support '%s' in double-buffer mode.\n"
1120"WARNING: Please disable the double-buffer mode in IPL menu (the PARISC-BIOS).\n", 1121"WARNING: Please disable the double-buffer mode in IPL menu (the PARISC-BIOS).\n",
1121 sti->outptr.dev_name); 1122 dev_name);
1122 goto out_err0; 1123 goto out_err0;
1123 } 1124 }
1124 /* fall though */ 1125 /* fall though */
@@ -1130,7 +1131,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
1130 break; 1131 break;
1131 default: 1132 default:
1132 printk(KERN_WARNING "stifb: '%s' (id: 0x%08x) not supported.\n", 1133 printk(KERN_WARNING "stifb: '%s' (id: 0x%08x) not supported.\n",
1133 sti->outptr.dev_name, fb->id); 1134 dev_name, fb->id);
1134 goto out_err0; 1135 goto out_err0;
1135 } 1136 }
1136 1137
@@ -1154,7 +1155,6 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
1154 fb->id = S9000_ID_A1659A; 1155 fb->id = S9000_ID_A1659A;
1155 break; 1156 break;
1156 case S9000_ID_TIMBER: /* HP9000/710 Any (may be a grayscale device) */ 1157 case S9000_ID_TIMBER: /* HP9000/710 Any (may be a grayscale device) */
1157 dev_name = fb->sti->outptr.dev_name;
1158 if (strstr(dev_name, "GRAYSCALE") || 1158 if (strstr(dev_name, "GRAYSCALE") ||
1159 strstr(dev_name, "Grayscale") || 1159 strstr(dev_name, "Grayscale") ||
1160 strstr(dev_name, "grayscale")) 1160 strstr(dev_name, "grayscale"))
@@ -1290,7 +1290,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
1290 var->xres, 1290 var->xres,
1291 var->yres, 1291 var->yres,
1292 var->bits_per_pixel, 1292 var->bits_per_pixel,
1293 sti->outptr.dev_name, 1293 dev_name,
1294 fb->id, 1294 fb->id,
1295 fix->mmio_start); 1295 fix->mmio_start);
1296 1296
diff --git a/init/Kconfig b/init/Kconfig
index 3ecd8a1178f1..d9887456007a 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -284,7 +284,7 @@ config AUDIT
284 284
285config AUDITSYSCALL 285config AUDITSYSCALL
286 bool "Enable system-call auditing support" 286 bool "Enable system-call auditing support"
287 depends on AUDIT && (X86 || PPC || S390 || IA64 || UML || SPARC64 || SUPERH || (ARM && AEABI && !OABI_COMPAT)) 287 depends on AUDIT && (X86 || PARISC || PPC || S390 || IA64 || UML || SPARC64 || SUPERH || (ARM && AEABI && !OABI_COMPAT))
288 default y if SECURITY_SELINUX 288 default y if SECURITY_SELINUX
289 help 289 help
290 Enable low-overhead system-call auditing infrastructure that 290 Enable low-overhead system-call auditing infrastructure that