diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-11 04:15:25 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-11 04:15:25 -0500 |
commit | 78d4a42069b4815040a857a4e9bb0e4fb0aa1dc8 (patch) | |
tree | ec7d095a3ad7aa78933d970b16ba55c667fb4b63 | |
parent | f9efbce6334844c7f8b9b9459f6d7a6fbc2928e0 (diff) | |
parent | dce0ce46ca9a676e4d9b36432fea77330a0e901d (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
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 | ||
290 | config AUDIT_ARCH | ||
291 | def_bool y | ||
292 | |||
290 | config HPUX | 293 | config 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 | ||
97 | palo: vmlinuz | 97 | palo 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 | 112 | BOOT_TARGETS = zImage Image palo lifimage |
113 | INSTALL_TARGETS = zinstall install | ||
114 | |||
115 | PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS) | ||
116 | |||
117 | bzImage zImage: vmlinuz | ||
113 | Image: vmlinux | 118 | Image: vmlinux |
114 | zImage bzImage: vmlinuz | ||
115 | 119 | ||
116 | vmlinuz: vmlinux | 120 | vmlinuz: vmlinux |
117 | @gzip -cf -9 $< > $@ | 121 | @gzip -cf -9 $< > $@ |
118 | 122 | ||
119 | install: vmlinuz | 123 | install: |
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)" |
126 | zinstall: | ||
127 | $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \ | ||
128 | $(KERNELRELEASE) vmlinuz System.map "$(INSTALL_PATH)" | ||
122 | 129 | ||
123 | CLEAN_FILES += lifimage | 130 | CLEAN_FILES += lifimage |
124 | MRPROPER_FILES += palo.conf | 131 | MRPROPER_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' | ||
134 | endef | 142 | endef |
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 @@ | |||
1 | CONFIG_LOCALVERSION="-32bit" | ||
2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
3 | CONFIG_SYSVIPC=y | ||
4 | CONFIG_POSIX_MQUEUE=y | ||
5 | CONFIG_FHANDLE=y | ||
6 | CONFIG_BSD_PROCESS_ACCT=y | ||
7 | CONFIG_IKCONFIG=y | ||
8 | CONFIG_IKCONFIG_PROC=y | ||
9 | CONFIG_LOG_BUF_SHIFT=16 | ||
10 | CONFIG_BLK_DEV_INITRD=y | ||
11 | CONFIG_RD_BZIP2=y | ||
12 | CONFIG_RD_LZMA=y | ||
13 | CONFIG_RD_LZO=y | ||
14 | CONFIG_EXPERT=y | ||
15 | CONFIG_SYSCTL_SYSCALL=y | ||
16 | CONFIG_PERF_EVENTS=y | ||
17 | CONFIG_SLAB=y | ||
18 | CONFIG_MODULES=y | ||
19 | CONFIG_MODULE_UNLOAD=y | ||
20 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
21 | # CONFIG_LBDAF is not set | ||
22 | # CONFIG_BLK_DEV_BSG is not set | ||
23 | CONFIG_PA7100LC=y | ||
24 | CONFIG_SMP=y | ||
25 | CONFIG_HZ_100=y | ||
26 | CONFIG_IOMMU_CCIO=y | ||
27 | CONFIG_GSC_LASI=y | ||
28 | CONFIG_GSC_WAX=y | ||
29 | CONFIG_EISA=y | ||
30 | CONFIG_PCI=y | ||
31 | CONFIG_GSC_DINO=y | ||
32 | CONFIG_PCI_LBA=y | ||
33 | CONFIG_PCCARD=m | ||
34 | CONFIG_YENTA=m | ||
35 | # CONFIG_PDC_CHASSIS is not set | ||
36 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
37 | CONFIG_BINFMT_MISC=m | ||
38 | CONFIG_NET=y | ||
39 | CONFIG_PACKET=y | ||
40 | CONFIG_UNIX=y | ||
41 | CONFIG_XFRM_USER=m | ||
42 | CONFIG_NET_KEY=m | ||
43 | CONFIG_INET=y | ||
44 | CONFIG_IP_MULTICAST=y | ||
45 | CONFIG_IP_PNP=y | ||
46 | CONFIG_IP_PNP_BOOTP=y | ||
47 | CONFIG_INET_AH=m | ||
48 | CONFIG_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 | ||
53 | CONFIG_INET_DIAG=m | ||
54 | CONFIG_LLC2=m | ||
55 | # CONFIG_WIRELESS is not set | ||
56 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
57 | CONFIG_DEVTMPFS=y | ||
58 | CONFIG_DEVTMPFS_MOUNT=y | ||
59 | # CONFIG_STANDALONE is not set | ||
60 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||
61 | CONFIG_PARPORT=y | ||
62 | CONFIG_PARPORT_PC=m | ||
63 | CONFIG_PARPORT_1284=y | ||
64 | CONFIG_BLK_DEV_LOOP=y | ||
65 | CONFIG_BLK_DEV_CRYPTOLOOP=y | ||
66 | CONFIG_BLK_DEV_RAM=y | ||
67 | CONFIG_BLK_DEV_RAM_SIZE=6144 | ||
68 | CONFIG_IDE=y | ||
69 | CONFIG_BLK_DEV_IDECD=y | ||
70 | CONFIG_BLK_DEV_GENERIC=y | ||
71 | CONFIG_BLK_DEV_NS87415=y | ||
72 | CONFIG_BLK_DEV_SD=y | ||
73 | CONFIG_CHR_DEV_ST=y | ||
74 | CONFIG_BLK_DEV_SR=y | ||
75 | CONFIG_CHR_DEV_SG=y | ||
76 | CONFIG_SCSI_LASI700=y | ||
77 | CONFIG_SCSI_SYM53C8XX_2=y | ||
78 | CONFIG_SCSI_ZALON=y | ||
79 | CONFIG_SCSI_DH=y | ||
80 | CONFIG_ATA=y | ||
81 | CONFIG_MD=y | ||
82 | CONFIG_BLK_DEV_MD=m | ||
83 | CONFIG_MD_LINEAR=m | ||
84 | CONFIG_MD_RAID0=m | ||
85 | CONFIG_MD_RAID1=m | ||
86 | CONFIG_MD_RAID10=m | ||
87 | CONFIG_MD_RAID456=m | ||
88 | CONFIG_BLK_DEV_DM=y | ||
89 | CONFIG_DM_UEVENT=y | ||
90 | CONFIG_NETDEVICES=y | ||
91 | CONFIG_BONDING=m | ||
92 | CONFIG_DUMMY=m | ||
93 | CONFIG_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 | ||
104 | CONFIG_NET_TULIP=y | ||
105 | CONFIG_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 | ||
110 | CONFIG_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 | ||
129 | CONFIG_PPP=m | ||
130 | CONFIG_PPP_BSDCOMP=m | ||
131 | CONFIG_PPP_DEFLATE=m | ||
132 | CONFIG_PPPOE=m | ||
133 | # CONFIG_WLAN is not set | ||
134 | CONFIG_INPUT_POLLDEV=y | ||
135 | CONFIG_KEYBOARD_HIL_OLD=m | ||
136 | CONFIG_KEYBOARD_HIL=m | ||
137 | CONFIG_MOUSE_SERIAL=y | ||
138 | CONFIG_INPUT_MISC=y | ||
139 | CONFIG_INPUT_UINPUT=m | ||
140 | CONFIG_LEGACY_PTY_COUNT=64 | ||
141 | CONFIG_SERIAL_8250=y | ||
142 | # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set | ||
143 | CONFIG_SERIAL_8250_CONSOLE=y | ||
144 | CONFIG_SERIAL_8250_NR_UARTS=8 | ||
145 | CONFIG_SERIAL_8250_EXTENDED=y | ||
146 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
147 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
148 | CONFIG_PRINTER=m | ||
149 | CONFIG_PPDEV=m | ||
150 | # CONFIG_HW_RANDOM is not set | ||
151 | CONFIG_I2C=y | ||
152 | CONFIG_POWER_SUPPLY=y | ||
153 | # CONFIG_HWMON is not set | ||
154 | CONFIG_AGP=y | ||
155 | CONFIG_VIDEO_OUTPUT_CONTROL=y | ||
156 | CONFIG_FB=y | ||
157 | CONFIG_FB_FOREIGN_ENDIAN=y | ||
158 | CONFIG_FB_MODE_HELPERS=y | ||
159 | CONFIG_FB_MATROX=m | ||
160 | CONFIG_FB_MATROX_G=y | ||
161 | CONFIG_FB_VOODOO1=m | ||
162 | CONFIG_DUMMY_CONSOLE_COLUMNS=128 | ||
163 | CONFIG_DUMMY_CONSOLE_ROWS=48 | ||
164 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
165 | CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y | ||
166 | CONFIG_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 | ||
170 | CONFIG_SOUND=m | ||
171 | CONFIG_SND=m | ||
172 | CONFIG_SND_SEQUENCER=m | ||
173 | CONFIG_SND_MIXER_OSS=m | ||
174 | CONFIG_SND_PCM_OSS=m | ||
175 | CONFIG_SND_SEQUENCER_OSS=y | ||
176 | CONFIG_SND_DYNAMIC_MINORS=y | ||
177 | CONFIG_SND_AD1889=m | ||
178 | CONFIG_SND_HARMONY=m | ||
179 | CONFIG_HIDRAW=y | ||
180 | CONFIG_HID_A4TECH=y | ||
181 | CONFIG_HID_APPLE=y | ||
182 | CONFIG_HID_BELKIN=y | ||
183 | CONFIG_HID_CHERRY=y | ||
184 | CONFIG_HID_CHICONY=y | ||
185 | CONFIG_HID_CYPRESS=y | ||
186 | CONFIG_HID_DRAGONRISE=y | ||
187 | CONFIG_HID_EZKEY=y | ||
188 | CONFIG_HID_KYE=y | ||
189 | CONFIG_HID_GYRATION=y | ||
190 | CONFIG_HID_TWINHAN=y | ||
191 | CONFIG_HID_KENSINGTON=y | ||
192 | CONFIG_HID_LOGITECH=y | ||
193 | CONFIG_HID_LOGITECH_DJ=m | ||
194 | CONFIG_HID_MICROSOFT=y | ||
195 | CONFIG_HID_MONTEREY=y | ||
196 | CONFIG_HID_NTRIG=y | ||
197 | CONFIG_HID_ORTEK=y | ||
198 | CONFIG_HID_PANTHERLORD=y | ||
199 | CONFIG_HID_PETALYNX=y | ||
200 | CONFIG_HID_SAMSUNG=y | ||
201 | CONFIG_HID_SONY=y | ||
202 | CONFIG_HID_SUNPLUS=y | ||
203 | CONFIG_HID_GREENASIA=y | ||
204 | CONFIG_HID_SMARTJOYPLUS=y | ||
205 | CONFIG_HID_TOPSEED=y | ||
206 | CONFIG_HID_THRUSTMASTER=y | ||
207 | CONFIG_HID_ZEROPLUS=y | ||
208 | CONFIG_USB=y | ||
209 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | ||
210 | CONFIG_USB_MON=y | ||
211 | CONFIG_USB_OHCI_HCD=y | ||
212 | CONFIG_USB_UHCI_HCD=y | ||
213 | CONFIG_NEW_LEDS=y | ||
214 | CONFIG_LEDS_CLASS=y | ||
215 | CONFIG_LEDS_TRIGGERS=y | ||
216 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
217 | CONFIG_LEDS_TRIGGER_IDE_DISK=y | ||
218 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
219 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
220 | CONFIG_DMADEVICES=y | ||
221 | CONFIG_AUXDISPLAY=y | ||
222 | CONFIG_EXT2_FS=y | ||
223 | CONFIG_EXT2_FS_XATTR=y | ||
224 | CONFIG_EXT2_FS_SECURITY=y | ||
225 | CONFIG_EXT3_FS=y | ||
226 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
227 | CONFIG_EXT3_FS_SECURITY=y | ||
228 | CONFIG_EXT4_FS=y | ||
229 | CONFIG_XFS_FS=m | ||
230 | CONFIG_XFS_QUOTA=y | ||
231 | CONFIG_XFS_RT=y | ||
232 | CONFIG_QUOTA=y | ||
233 | CONFIG_QUOTA_NETLINK_INTERFACE=y | ||
234 | CONFIG_QFMT_V2=y | ||
235 | CONFIG_AUTOFS4_FS=y | ||
236 | CONFIG_ISO9660_FS=y | ||
237 | CONFIG_JOLIET=y | ||
238 | CONFIG_VFAT_FS=y | ||
239 | CONFIG_PROC_KCORE=y | ||
240 | CONFIG_TMPFS=y | ||
241 | CONFIG_TMPFS_XATTR=y | ||
242 | CONFIG_NFS_FS=m | ||
243 | # CONFIG_NFS_V2 is not set | ||
244 | CONFIG_NFSD=m | ||
245 | CONFIG_NFSD_V3=y | ||
246 | CONFIG_CIFS=m | ||
247 | CONFIG_CIFS_WEAK_PW_HASH=y | ||
248 | CONFIG_CIFS_XATTR=y | ||
249 | CONFIG_CIFS_POSIX=y | ||
250 | # CONFIG_CIFS_DEBUG is not set | ||
251 | CONFIG_NLS_CODEPAGE_437=y | ||
252 | CONFIG_NLS_CODEPAGE_737=m | ||
253 | CONFIG_NLS_CODEPAGE_775=m | ||
254 | CONFIG_NLS_CODEPAGE_850=m | ||
255 | CONFIG_NLS_CODEPAGE_852=m | ||
256 | CONFIG_NLS_CODEPAGE_855=m | ||
257 | CONFIG_NLS_CODEPAGE_857=m | ||
258 | CONFIG_NLS_CODEPAGE_860=m | ||
259 | CONFIG_NLS_CODEPAGE_861=m | ||
260 | CONFIG_NLS_CODEPAGE_862=m | ||
261 | CONFIG_NLS_CODEPAGE_863=m | ||
262 | CONFIG_NLS_CODEPAGE_864=m | ||
263 | CONFIG_NLS_CODEPAGE_865=m | ||
264 | CONFIG_NLS_CODEPAGE_866=m | ||
265 | CONFIG_NLS_CODEPAGE_869=m | ||
266 | CONFIG_NLS_CODEPAGE_936=m | ||
267 | CONFIG_NLS_CODEPAGE_950=m | ||
268 | CONFIG_NLS_CODEPAGE_932=m | ||
269 | CONFIG_NLS_CODEPAGE_949=m | ||
270 | CONFIG_NLS_CODEPAGE_874=m | ||
271 | CONFIG_NLS_ISO8859_8=m | ||
272 | CONFIG_NLS_CODEPAGE_1250=y | ||
273 | CONFIG_NLS_CODEPAGE_1251=m | ||
274 | CONFIG_NLS_ASCII=m | ||
275 | CONFIG_NLS_ISO8859_1=y | ||
276 | CONFIG_NLS_ISO8859_2=m | ||
277 | CONFIG_NLS_ISO8859_3=m | ||
278 | CONFIG_NLS_ISO8859_4=m | ||
279 | CONFIG_NLS_ISO8859_5=m | ||
280 | CONFIG_NLS_ISO8859_6=m | ||
281 | CONFIG_NLS_ISO8859_7=m | ||
282 | CONFIG_NLS_ISO8859_9=m | ||
283 | CONFIG_NLS_ISO8859_13=m | ||
284 | CONFIG_NLS_ISO8859_14=m | ||
285 | CONFIG_NLS_ISO8859_15=m | ||
286 | CONFIG_NLS_KOI8_R=m | ||
287 | CONFIG_NLS_KOI8_U=m | ||
288 | CONFIG_NLS_UTF8=y | ||
289 | CONFIG_UNUSED_SYMBOLS=y | ||
290 | CONFIG_DEBUG_FS=y | ||
291 | CONFIG_MAGIC_SYSRQ=y | ||
292 | CONFIG_DEBUG_MEMORY_INIT=y | ||
293 | CONFIG_DEBUG_STACKOVERFLOW=y | ||
294 | CONFIG_DEBUG_SHIRQ=y | ||
295 | CONFIG_DETECT_HUNG_TASK=y | ||
296 | CONFIG_TIMER_STATS=y | ||
297 | CONFIG_DEBUG_RT_MUTEXES=y | ||
298 | CONFIG_RT_MUTEX_TESTER=y | ||
299 | CONFIG_DEBUG_SPINLOCK=y | ||
300 | CONFIG_DEBUG_MUTEXES=y | ||
301 | CONFIG_RCU_CPU_STALL_INFO=y | ||
302 | CONFIG_LATENCYTOP=y | ||
303 | CONFIG_LKDTM=m | ||
304 | CONFIG_KEYS=y | ||
305 | CONFIG_KEYS_DEBUG_PROC_KEYS=y | ||
306 | CONFIG_CRYPTO_NULL=m | ||
307 | CONFIG_CRYPTO_TEST=m | ||
308 | CONFIG_CRYPTO_HMAC=y | ||
309 | CONFIG_CRYPTO_MD5=y | ||
310 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
311 | CONFIG_CRYPTO_SHA1=y | ||
312 | CONFIG_CRYPTO_SHA512=m | ||
313 | CONFIG_CRYPTO_TGR192=m | ||
314 | CONFIG_CRYPTO_WP512=m | ||
315 | CONFIG_CRYPTO_ANUBIS=m | ||
316 | CONFIG_CRYPTO_BLOWFISH=m | ||
317 | CONFIG_CRYPTO_CAST5=m | ||
318 | CONFIG_CRYPTO_CAST6=m | ||
319 | CONFIG_CRYPTO_DES=y | ||
320 | CONFIG_CRYPTO_KHAZAD=m | ||
321 | CONFIG_CRYPTO_SERPENT=m | ||
322 | CONFIG_CRYPTO_TEA=m | ||
323 | CONFIG_CRYPTO_TWOFISH=m | ||
324 | CONFIG_CRYPTO_DEFLATE=y | ||
325 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
326 | CONFIG_CRC_CCITT=m | ||
327 | CONFIG_CRC_T10DIF=y | ||
328 | CONFIG_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 @@ | |||
1 | CONFIG_LOCALVERSION="-64bit" | ||
2 | # CONFIG_LOCALVERSION_AUTO is not set | ||
3 | CONFIG_SYSVIPC=y | ||
4 | CONFIG_POSIX_MQUEUE=y | ||
5 | CONFIG_BSD_PROCESS_ACCT=y | ||
6 | CONFIG_BSD_PROCESS_ACCT_V3=y | ||
7 | CONFIG_TASKSTATS=y | ||
8 | CONFIG_TASK_DELAY_ACCT=y | ||
9 | CONFIG_TASK_XACCT=y | ||
10 | CONFIG_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 | ||
15 | CONFIG_RELAY=y | ||
16 | CONFIG_BLK_DEV_INITRD=y | ||
17 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
18 | # CONFIG_COMPAT_BRK is not set | ||
19 | CONFIG_MODULES=y | ||
20 | CONFIG_MODULE_FORCE_LOAD=y | ||
21 | CONFIG_MODULE_UNLOAD=y | ||
22 | CONFIG_MODULE_FORCE_UNLOAD=y | ||
23 | CONFIG_MODVERSIONS=y | ||
24 | CONFIG_BLK_DEV_INTEGRITY=y | ||
25 | # CONFIG_IOSCHED_DEADLINE is not set | ||
26 | CONFIG_PA8X00=y | ||
27 | CONFIG_MLONGCALLS=y | ||
28 | CONFIG_64BIT=y | ||
29 | CONFIG_SMP=y | ||
30 | # CONFIG_COMPACTION is not set | ||
31 | CONFIG_HPPB=y | ||
32 | CONFIG_IOMMU_CCIO=y | ||
33 | CONFIG_GSC_LASI=y | ||
34 | CONFIG_GSC_WAX=y | ||
35 | CONFIG_PCI=y | ||
36 | CONFIG_PCI_STUB=m | ||
37 | CONFIG_PCI_IOV=y | ||
38 | CONFIG_GSC_DINO=y | ||
39 | CONFIG_PCI_LBA=y | ||
40 | CONFIG_BINFMT_MISC=m | ||
41 | CONFIG_NET=y | ||
42 | CONFIG_PACKET=y | ||
43 | CONFIG_UNIX=y | ||
44 | CONFIG_XFRM_USER=m | ||
45 | CONFIG_XFRM_SUB_POLICY=y | ||
46 | CONFIG_XFRM_MIGRATE=y | ||
47 | CONFIG_INET=y | ||
48 | CONFIG_IP_MULTICAST=y | ||
49 | CONFIG_IP_PNP=y | ||
50 | CONFIG_IP_PNP_BOOTP=y | ||
51 | CONFIG_INET_AH=m | ||
52 | CONFIG_INET_ESP=m | ||
53 | CONFIG_INET_XFRM_MODE_TRANSPORT=m | ||
54 | CONFIG_INET_XFRM_MODE_TUNNEL=m | ||
55 | CONFIG_INET_XFRM_MODE_BEET=m | ||
56 | CONFIG_INET_LRO=m | ||
57 | CONFIG_INET_DIAG=m | ||
58 | CONFIG_NETFILTER=y | ||
59 | # CONFIG_NETFILTER_ADVANCED is not set | ||
60 | CONFIG_NETFILTER_NETLINK_LOG=y | ||
61 | CONFIG_DCB=y | ||
62 | # CONFIG_WIRELESS is not set | ||
63 | CONFIG_DEVTMPFS=y | ||
64 | CONFIG_DEVTMPFS_MOUNT=y | ||
65 | CONFIG_BLK_DEV_LOOP=y | ||
66 | CONFIG_IDE=y | ||
67 | CONFIG_IDE_GD=m | ||
68 | CONFIG_IDE_GD_ATAPI=y | ||
69 | CONFIG_BLK_DEV_IDECD=m | ||
70 | CONFIG_BLK_DEV_NS87415=y | ||
71 | CONFIG_BLK_DEV_SIIMAGE=y | ||
72 | # CONFIG_SCSI_PROC_FS is not set | ||
73 | CONFIG_BLK_DEV_SD=y | ||
74 | CONFIG_BLK_DEV_SR=y | ||
75 | CONFIG_SCSI_ISCSI_ATTRS=y | ||
76 | CONFIG_SCSI_SRP_ATTRS=y | ||
77 | CONFIG_ISCSI_BOOT_SYSFS=y | ||
78 | CONFIG_SCSI_MPT2SAS=y | ||
79 | CONFIG_SCSI_LASI700=m | ||
80 | CONFIG_SCSI_SYM53C8XX_2=y | ||
81 | CONFIG_SCSI_ZALON=y | ||
82 | CONFIG_SCSI_QLA_ISCSI=m | ||
83 | CONFIG_SCSI_DH=y | ||
84 | CONFIG_ATA=y | ||
85 | CONFIG_ATA_GENERIC=y | ||
86 | CONFIG_MD=y | ||
87 | CONFIG_MD_LINEAR=m | ||
88 | CONFIG_MD_RAID0=m | ||
89 | CONFIG_BLK_DEV_DM=m | ||
90 | CONFIG_DM_RAID=m | ||
91 | CONFIG_DM_UEVENT=y | ||
92 | CONFIG_FUSION=y | ||
93 | CONFIG_FUSION_SPI=y | ||
94 | CONFIG_FUSION_SAS=y | ||
95 | CONFIG_NETDEVICES=y | ||
96 | CONFIG_DUMMY=m | ||
97 | CONFIG_MACVLAN=m | ||
98 | CONFIG_MACVTAP=m | ||
99 | CONFIG_NETCONSOLE=m | ||
100 | CONFIG_NETCONSOLE_DYNAMIC=y | ||
101 | CONFIG_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 | ||
112 | CONFIG_NET_TULIP=y | ||
113 | CONFIG_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 | ||
117 | CONFIG_HP100=m | ||
118 | CONFIG_E1000=y | ||
119 | CONFIG_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 | ||
127 | CONFIG_QLA3XXX=m | ||
128 | CONFIG_QLCNIC=m | ||
129 | CONFIG_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 | ||
142 | CONFIG_PHYLIB=y | ||
143 | CONFIG_MARVELL_PHY=m | ||
144 | CONFIG_DAVICOM_PHY=m | ||
145 | CONFIG_QSEMI_PHY=m | ||
146 | CONFIG_LXT_PHY=m | ||
147 | CONFIG_CICADA_PHY=m | ||
148 | CONFIG_VITESSE_PHY=m | ||
149 | CONFIG_SMSC_PHY=m | ||
150 | CONFIG_BROADCOM_PHY=m | ||
151 | CONFIG_ICPLUS_PHY=m | ||
152 | CONFIG_REALTEK_PHY=m | ||
153 | CONFIG_NATIONAL_PHY=m | ||
154 | CONFIG_STE10XP=m | ||
155 | CONFIG_LSI_ET1011C_PHY=m | ||
156 | CONFIG_MDIO_BITBANG=m | ||
157 | CONFIG_SLIP=m | ||
158 | CONFIG_SLIP_COMPRESSED=y | ||
159 | CONFIG_SLIP_SMART=y | ||
160 | CONFIG_SLIP_MODE_SLIP6=y | ||
161 | # CONFIG_WLAN is not set | ||
162 | CONFIG_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 | ||
166 | CONFIG_INPUT_MISC=y | ||
167 | CONFIG_SERIO_SERPORT=m | ||
168 | # CONFIG_HP_SDC is not set | ||
169 | CONFIG_SERIO_RAW=m | ||
170 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y | ||
171 | # CONFIG_LEGACY_PTYS is not set | ||
172 | CONFIG_NOZOMI=m | ||
173 | # CONFIG_DEVKMEM is not set | ||
174 | CONFIG_SERIAL_8250=y | ||
175 | # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set | ||
176 | CONFIG_SERIAL_8250_CONSOLE=y | ||
177 | CONFIG_SERIAL_8250_NR_UARTS=8 | ||
178 | CONFIG_SERIAL_8250_RUNTIME_UARTS=8 | ||
179 | CONFIG_SERIAL_8250_EXTENDED=y | ||
180 | CONFIG_SERIAL_8250_MANY_PORTS=y | ||
181 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
182 | CONFIG_SERIAL_JSM=m | ||
183 | CONFIG_IPMI_HANDLER=y | ||
184 | CONFIG_IPMI_DEVICE_INTERFACE=y | ||
185 | CONFIG_IPMI_SI=y | ||
186 | # CONFIG_HW_RANDOM is not set | ||
187 | CONFIG_TCG_TPM=m | ||
188 | CONFIG_TCG_ATMEL=m | ||
189 | CONFIG_PTP_1588_CLOCK=m | ||
190 | CONFIG_SENSORS_I5K_AMB=m | ||
191 | CONFIG_SENSORS_F71882FG=m | ||
192 | CONFIG_SENSORS_PC87427=m | ||
193 | CONFIG_SENSORS_VT1211=m | ||
194 | CONFIG_SENSORS_VT8231=m | ||
195 | CONFIG_SENSORS_W83627EHF=m | ||
196 | CONFIG_WATCHDOG=y | ||
197 | CONFIG_SOFT_WATCHDOG=m | ||
198 | CONFIG_SSB=m | ||
199 | CONFIG_SSB_DRIVER_PCICORE=y | ||
200 | CONFIG_HTC_PASIC3=m | ||
201 | CONFIG_LPC_SCH=m | ||
202 | CONFIG_MFD_SM501=m | ||
203 | CONFIG_REGULATOR=y | ||
204 | CONFIG_REGULATOR_FIXED_VOLTAGE=m | ||
205 | CONFIG_REGULATOR_USERSPACE_CONSUMER=m | ||
206 | CONFIG_MEDIA_SUPPORT=m | ||
207 | CONFIG_AGP=y | ||
208 | CONFIG_AGP_PARISC=y | ||
209 | CONFIG_DRM=y | ||
210 | CONFIG_DRM_RADEON=y | ||
211 | CONFIG_DRM_RADEON_UMS=y | ||
212 | CONFIG_FIRMWARE_EDID=y | ||
213 | CONFIG_FB_MODE_HELPERS=y | ||
214 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
215 | # CONFIG_BACKLIGHT_GENERIC is not set | ||
216 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | ||
217 | CONFIG_LOGO=y | ||
218 | # CONFIG_LOGO_LINUX_MONO is not set | ||
219 | CONFIG_HID=m | ||
220 | CONFIG_HIDRAW=y | ||
221 | CONFIG_HID_DRAGONRISE=m | ||
222 | CONFIG_DRAGONRISE_FF=y | ||
223 | CONFIG_HID_KYE=m | ||
224 | CONFIG_HID_GYRATION=m | ||
225 | CONFIG_HID_TWINHAN=m | ||
226 | CONFIG_LOGITECH_FF=y | ||
227 | CONFIG_LOGIRUMBLEPAD2_FF=y | ||
228 | CONFIG_HID_NTRIG=m | ||
229 | CONFIG_HID_PANTHERLORD=m | ||
230 | CONFIG_PANTHERLORD_FF=y | ||
231 | CONFIG_HID_PETALYNX=m | ||
232 | CONFIG_HID_SAMSUNG=m | ||
233 | CONFIG_HID_SONY=m | ||
234 | CONFIG_HID_SUNPLUS=m | ||
235 | CONFIG_HID_GREENASIA=m | ||
236 | CONFIG_GREENASIA_FF=y | ||
237 | CONFIG_HID_SMARTJOYPLUS=m | ||
238 | CONFIG_SMARTJOYPLUS_FF=y | ||
239 | CONFIG_HID_TOPSEED=m | ||
240 | CONFIG_HID_THRUSTMASTER=m | ||
241 | CONFIG_THRUSTMASTER_FF=y | ||
242 | CONFIG_HID_ZEROPLUS=m | ||
243 | CONFIG_ZEROPLUS_FF=y | ||
244 | CONFIG_USB_HID=m | ||
245 | CONFIG_HID_PID=y | ||
246 | CONFIG_USB_HIDDEV=y | ||
247 | CONFIG_USB=y | ||
248 | CONFIG_USB_DEBUG=y | ||
249 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | ||
250 | CONFIG_USB_DYNAMIC_MINORS=y | ||
251 | CONFIG_USB_MON=m | ||
252 | CONFIG_USB_WUSB_CBAF=m | ||
253 | CONFIG_USB_XHCI_HCD=m | ||
254 | CONFIG_USB_EHCI_HCD=m | ||
255 | CONFIG_USB_OHCI_HCD=m | ||
256 | CONFIG_USB_R8A66597_HCD=m | ||
257 | CONFIG_USB_ACM=m | ||
258 | CONFIG_USB_PRINTER=m | ||
259 | CONFIG_USB_WDM=m | ||
260 | CONFIG_USB_TMC=m | ||
261 | CONFIG_NEW_LEDS=y | ||
262 | CONFIG_LEDS_CLASS=y | ||
263 | CONFIG_LEDS_TRIGGERS=y | ||
264 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
265 | CONFIG_LEDS_TRIGGER_ONESHOT=y | ||
266 | CONFIG_LEDS_TRIGGER_IDE_DISK=y | ||
267 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||
268 | CONFIG_LEDS_TRIGGER_BACKLIGHT=m | ||
269 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=m | ||
270 | CONFIG_UIO=y | ||
271 | CONFIG_UIO_PDRV_GENIRQ=m | ||
272 | CONFIG_UIO_AEC=m | ||
273 | CONFIG_UIO_SERCOS3=m | ||
274 | CONFIG_UIO_PCI_GENERIC=m | ||
275 | CONFIG_STAGING=y | ||
276 | # CONFIG_NET_VENDOR_SILICOM is not set | ||
277 | CONFIG_EXT2_FS=y | ||
278 | CONFIG_EXT2_FS_XATTR=y | ||
279 | CONFIG_EXT2_FS_SECURITY=y | ||
280 | CONFIG_EXT3_FS=y | ||
281 | CONFIG_EXT3_FS_SECURITY=y | ||
282 | CONFIG_EXT4_FS=y | ||
283 | CONFIG_EXT4_FS_SECURITY=y | ||
284 | CONFIG_XFS_FS=m | ||
285 | CONFIG_BTRFS_FS=m | ||
286 | CONFIG_QUOTA=y | ||
287 | CONFIG_QUOTA_NETLINK_INTERFACE=y | ||
288 | CONFIG_QFMT_V2=y | ||
289 | CONFIG_AUTOFS4_FS=y | ||
290 | CONFIG_FUSE_FS=y | ||
291 | CONFIG_CUSE=y | ||
292 | CONFIG_ISO9660_FS=y | ||
293 | CONFIG_UDF_FS=y | ||
294 | CONFIG_VFAT_FS=m | ||
295 | CONFIG_PROC_KCORE=y | ||
296 | CONFIG_TMPFS=y | ||
297 | CONFIG_TMPFS_XATTR=y | ||
298 | CONFIG_CONFIGFS_FS=y | ||
299 | CONFIG_SYSV_FS=y | ||
300 | CONFIG_NFS_FS=m | ||
301 | CONFIG_NFS_V4=m | ||
302 | CONFIG_NFS_V4_1=y | ||
303 | CONFIG_NFSD=m | ||
304 | CONFIG_NFSD_V4=y | ||
305 | CONFIG_NLS_DEFAULT="utf8" | ||
306 | CONFIG_NLS_CODEPAGE_437=m | ||
307 | CONFIG_NLS_CODEPAGE_850=m | ||
308 | CONFIG_NLS_CODEPAGE_852=m | ||
309 | CONFIG_NLS_CODEPAGE_1250=m | ||
310 | CONFIG_NLS_CODEPAGE_1251=m | ||
311 | CONFIG_NLS_ASCII=m | ||
312 | CONFIG_NLS_ISO8859_1=m | ||
313 | CONFIG_NLS_ISO8859_2=m | ||
314 | CONFIG_NLS_UTF8=m | ||
315 | CONFIG_PRINTK_TIME=y | ||
316 | CONFIG_STRIP_ASM_SYMS=y | ||
317 | CONFIG_UNUSED_SYMBOLS=y | ||
318 | CONFIG_DEBUG_FS=y | ||
319 | CONFIG_MAGIC_SYSRQ=y | ||
320 | CONFIG_DEBUG_KERNEL=y | ||
321 | CONFIG_DEBUG_STACKOVERFLOW=y | ||
322 | CONFIG_LOCKUP_DETECTOR=y | ||
323 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y | ||
324 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y | ||
325 | # CONFIG_SCHED_DEBUG is not set | ||
326 | CONFIG_TIMER_STATS=y | ||
327 | CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y | ||
328 | CONFIG_CRYPTO_MANAGER=y | ||
329 | CONFIG_CRYPTO_ECB=m | ||
330 | CONFIG_CRYPTO_PCBC=m | ||
331 | CONFIG_CRYPTO_MD4=m | ||
332 | CONFIG_CRYPTO_MD5=y | ||
333 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
334 | CONFIG_CRYPTO_SHA256=m | ||
335 | CONFIG_CRYPTO_ARC4=m | ||
336 | CONFIG_CRYPTO_FCRYPT=m | ||
337 | CONFIG_CRYPTO_DEFLATE=m | ||
338 | # CONFIG_CRYPTO_HW is not set | ||
339 | CONFIG_CRC_CCITT=m | ||
340 | CONFIG_LIBCRC32C=y | ||
341 | CONFIG_XZ_DEC_X86=y | ||
342 | CONFIG_XZ_DEC_POWERPC=y | ||
343 | CONFIG_XZ_DEC_IA64=y | ||
344 | CONFIG_XZ_DEC_ARM=y | ||
345 | CONFIG_XZ_DEC_ARMTHUMB=y | ||
346 | CONFIG_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 | ||
14 | static __inline__ void __delay(unsigned long loops) { | 4 | static __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 | ||
22 | static __inline__ void __cr16_delay(unsigned long clocks) { | 12 | extern void __udelay(unsigned long usecs); |
23 | unsigned long start; | 13 | extern 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); | 15 | static 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 | ||
37 | static __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]) |
20 | unsigned long profile_pc(struct pt_regs *); | 20 | unsigned long profile_pc(struct pt_regs *); |
21 | 21 | ||
22 | static 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); | |||
33 | extern int __put_kernel_bad(void); | 36 | extern int __put_kernel_bad(void); |
34 | extern int __put_user_bad(void); | 37 | extern int __put_user_bad(void); |
35 | 38 | ||
36 | static 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 | */ | ||
44 | static 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 | ||
65 | struct exception_table_entry { | 100 | struct 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 | ||
22 | verify () { | ||
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 | |||
34 | verify "$2" | ||
35 | verify "$3" | ||
36 | |||
22 | # User may have a custom install script | 37 | # User may have a custom install script |
23 | 38 | ||
24 | if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi | 39 | if [ -n "${INSTALLKERNEL}" ]; then |
25 | if [ -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 | ||
42 | fi | ||
26 | 43 | ||
27 | # Default install | 44 | # Default install |
28 | 45 | ||
29 | if [ -f $4/vmlinuz ]; then | 46 | if [ "$(basename $2)" = "zImage" ]; then |
30 | mv $4/vmlinuz $4/vmlinuz.old | 47 | # Compressed install |
48 | echo "Installing compressed kernel" | ||
49 | base=vmlinuz | ||
50 | else | ||
51 | # Normal install | ||
52 | echo "Installing normal kernel" | ||
53 | base=vmlinux | ||
54 | fi | ||
55 | |||
56 | if [ -f $4/$base-$1 ]; then | ||
57 | mv $4/$base-$1 $4/$base-$1.old | ||
31 | fi | 58 | fi |
59 | cat $2 > $4/$base-$1 | ||
32 | 60 | ||
33 | if [ -f $4/System.map ]; then | 61 | # Install system map file |
34 | mv $4/System.map $4/System.old | 62 | if [ -f $4/System.map-$1 ]; then |
63 | mv $4/System.map-$1 $4/System.map-$1.old | ||
35 | fi | 64 | fi |
65 | cp $3 $4/System.map-$1 | ||
36 | 66 | ||
37 | cat $2 > $4/vmlinuz | ||
38 | cp $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 | |||
29 | obj-$(CONFIG_MODULES) += module.o | 29 | obj-$(CONFIG_MODULES) += module.o |
30 | obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o | 30 | obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o |
31 | obj-$(CONFIG_STACKTRACE)+= stacktrace.o | 31 | obj-$(CONFIG_STACKTRACE)+= stacktrace.o |
32 | obj-$(CONFIG_AUDIT) += audit.o | ||
33 | obj64-$(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 |
33 | obj-$(CONFIG_64BIT) += perf.o perf_asm.o | 35 | obj-$(CONFIG_64BIT) += perf.o perf_asm.o $(obj64-y) |
34 | obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o | 36 | obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o |
35 | obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o | 37 | obj-$(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 | |||
6 | static unsigned dir_class[] = { | ||
7 | #include <asm-generic/audit_dir_write.h> | ||
8 | ~0U | ||
9 | }; | ||
10 | |||
11 | static unsigned read_class[] = { | ||
12 | #include <asm-generic/audit_read.h> | ||
13 | ~0U | ||
14 | }; | ||
15 | |||
16 | static unsigned write_class[] = { | ||
17 | #include <asm-generic/audit_write.h> | ||
18 | ~0U | ||
19 | }; | ||
20 | |||
21 | static unsigned chattr_class[] = { | ||
22 | #include <asm-generic/audit_change_attr.h> | ||
23 | ~0U | ||
24 | }; | ||
25 | |||
26 | static unsigned signal_class[] = { | ||
27 | #include <asm-generic/audit_signal.h> | ||
28 | ~0U | ||
29 | }; | ||
30 | |||
31 | int 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 | |||
40 | int 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 | |||
59 | static 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 | |||
3 | unsigned int parisc32_dir_class[] = { | ||
4 | #include <asm-generic/audit_dir_write.h> | ||
5 | ~0U | ||
6 | }; | ||
7 | |||
8 | unsigned int parisc32_chattr_class[] = { | ||
9 | #include <asm-generic/audit_change_attr.h> | ||
10 | ~0U | ||
11 | }; | ||
12 | |||
13 | unsigned int parisc32_write_class[] = { | ||
14 | #include <asm-generic/audit_write.h> | ||
15 | ~0U | ||
16 | }; | ||
17 | |||
18 | unsigned int parisc32_read_class[] = { | ||
19 | #include <asm-generic/audit_read.h> | ||
20 | ~0U | ||
21 | }; | ||
22 | |||
23 | unsigned int parisc32_signal_class[] = { | ||
24 | #include <asm-generic/audit_signal.h> | ||
25 | ~0U | ||
26 | }; | ||
27 | |||
28 | int 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 | ||
268 | long do_syscall_trace_enter(struct pt_regs *regs) | 269 | long 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 | ||
277 | void do_syscall_trace_exit(struct pt_regs *regs) | 295 | void 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 | ||
5 | lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \ | 5 | lib-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 | ||
8 | obj-y := iomap.o | 8 | obj-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: */ | ||
25 | static 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 | |||
69 | void __udelay(unsigned long usecs) | ||
70 | { | ||
71 | __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL)); | ||
72 | } | ||
73 | EXPORT_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 | ||
35 | static struct sti_struct *default_sti __read_mostly; | 35 | static struct sti_struct *default_sti __read_mostly; |
36 | 36 | ||
@@ -73,28 +73,34 @@ static const struct sti_init_flags default_init_flags = { | |||
73 | 73 | ||
74 | static int sti_init_graph(struct sti_struct *sti) | 74 | static 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 | ||
105 | static void sti_inq_conf(struct sti_struct *sti) | 111 | static 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 = { | |||
126 | void | 134 | void |
127 | sti_putc(struct sti_struct *sti, int c, int y, int x) | 135 | sti_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 | |||
156 | sti_set(struct sti_struct *sti, int src_y, int src_x, | 166 | sti_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 | |||
182 | sti_clear(struct sti_struct *sti, int src_y, int src_x, | 194 | sti_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 | |||
212 | sti_bmove(struct sti_struct *sti, int src_y, int src_x, | 226 | sti_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 | ||
287 | static char *font_name[MAX_STI_ROMS] = { "VGA8x16", }; | 303 | static char *font_name[MAX_STI_ROMS]; |
288 | static int font_index[MAX_STI_ROMS], | 304 | static 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 | ||
398 | static int sti_init_glob_cfg(struct sti_struct *sti, unsigned long rom_address, | 414 | static 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 |
479 | static struct sti_cooked_font * | 492 | static struct sti_cooked_font * |
480 | sti_select_fbfont(struct sti_cooked_rom *cooked_rom, const char *fbfont_name) | 493 | sti_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 | } |
1074 | EXPORT_SYMBOL(sti_get_rom); | 1091 | EXPORT_SYMBOL(sti_get_rom); |
1075 | 1092 | ||
1093 | |||
1094 | int 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 | |||
1076 | MODULE_AUTHOR("Philipp Rumpf, Helge Deller, Thomas Bogendoerfer"); | 1116 | MODULE_AUTHOR("Philipp Rumpf, Helge Deller, Thomas Bogendoerfer"); |
1077 | MODULE_DESCRIPTION("Core STI driver for HP's NGLE series graphics cards in HP PARISC machines"); | 1117 | MODULE_DESCRIPTION("Core STI driver for HP's NGLE series graphics cards in HP PARISC machines"); |
1078 | MODULE_LICENSE("GPL v2"); | 1118 | MODULE_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 | |||
313 | struct 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 | ||
311 | struct sti_struct { | 340 | struct 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 | ||
351 | struct sti_struct *sti_get_rom(unsigned int index); /* 0: default sti */ | 381 | struct sti_struct *sti_get_rom(unsigned int index); /* 0: default sti */ |
352 | 382 | ||
383 | |||
384 | /* sticore main function to call STI firmware */ | ||
385 | |||
386 | int 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 | ||
355 | void sti_putc(struct sti_struct *sti, int c, int y, int x); | 393 | void 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 | ||
285 | config AUDITSYSCALL | 285 | config 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 |