aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorGrant Likely <grant.likely@secretlab.ca>2010-12-30 00:20:30 -0500
committerGrant Likely <grant.likely@secretlab.ca>2010-12-30 00:21:47 -0500
commitd392da5207352f09030e95d9ea335a4225667ec0 (patch)
tree7d6cd1932afcad0a5619a5c504a6d93ca318187c /arch/sparc
parente39d5ef678045d61812c1401f04fe8edb14d6359 (diff)
parent387c31c7e5c9805b0aef8833d1731a5fe7bdea14 (diff)
Merge v2.6.37-rc8 into powerpc/next
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/Kconfig11
-rw-r--r--arch/sparc/configs/sparc32_defconfig1120
-rw-r--r--arch/sparc/configs/sparc64_defconfig1714
-rw-r--r--arch/sparc/include/asm/Kbuild1
-rw-r--r--arch/sparc/include/asm/atomic_64.h10
-rw-r--r--arch/sparc/include/asm/backoff.h11
-rw-r--r--arch/sparc/include/asm/compat.h2
-rw-r--r--arch/sparc/include/asm/dma-mapping.h10
-rw-r--r--arch/sparc/include/asm/fb.h4
-rw-r--r--arch/sparc/include/asm/floppy_32.h3
-rw-r--r--arch/sparc/include/asm/highmem.h4
-rw-r--r--arch/sparc/include/asm/io_32.h31
-rw-r--r--arch/sparc/include/asm/io_64.h31
-rw-r--r--arch/sparc/include/asm/ioctls.h2
-rw-r--r--arch/sparc/include/asm/irqflags_32.h35
-rw-r--r--arch/sparc/include/asm/irqflags_64.h29
-rw-r--r--arch/sparc/include/asm/jump_label.h32
-rw-r--r--arch/sparc/include/asm/memblock.h2
-rw-r--r--arch/sparc/include/asm/openprom.h18
-rw-r--r--arch/sparc/include/asm/oplib_32.h77
-rw-r--r--arch/sparc/include/asm/oplib_64.h110
-rw-r--r--arch/sparc/include/asm/pci_64.h2
-rw-r--r--arch/sparc/include/asm/perf_event.h4
-rw-r--r--arch/sparc/include/asm/pgtable_32.h3
-rw-r--r--arch/sparc/include/asm/pgtable_64.h2
-rw-r--r--arch/sparc/include/asm/prom.h5
-rw-r--r--arch/sparc/include/asm/rwsem-const.h12
-rw-r--r--arch/sparc/include/asm/rwsem.h120
-rw-r--r--arch/sparc/include/asm/scatterlist.h1
-rw-r--r--arch/sparc/include/asm/system_64.h1
-rw-r--r--arch/sparc/include/asm/termbits.h1
-rw-r--r--arch/sparc/include/asm/unistd.h5
-rw-r--r--arch/sparc/kernel/Makefile2
-rw-r--r--arch/sparc/kernel/apc.c1
-rw-r--r--arch/sparc/kernel/auxio_32.c4
-rw-r--r--arch/sparc/kernel/btext.c4
-rw-r--r--arch/sparc/kernel/devices.c23
-rw-r--r--arch/sparc/kernel/irq_32.c17
-rw-r--r--arch/sparc/kernel/jump_label.c47
-rw-r--r--arch/sparc/kernel/leon_kernel.c6
-rw-r--r--arch/sparc/kernel/leon_smp.c5
-rw-r--r--arch/sparc/kernel/mdesc.c1
-rw-r--r--arch/sparc/kernel/module.c6
-rw-r--r--arch/sparc/kernel/pci_msi.c8
-rw-r--r--arch/sparc/kernel/pcic.c4
-rw-r--r--arch/sparc/kernel/pcr.c8
-rw-r--r--arch/sparc/kernel/perf_event.c248
-rw-r--r--arch/sparc/kernel/process_32.c6
-rw-r--r--arch/sparc/kernel/process_64.c6
-rw-r--r--arch/sparc/kernel/prom.h6
-rw-r--r--arch/sparc/kernel/prom_common.c202
-rw-r--r--arch/sparc/kernel/ptrace_32.c57
-rw-r--r--arch/sparc/kernel/ptrace_64.c15
-rw-r--r--arch/sparc/kernel/rtrap_32.S6
-rw-r--r--arch/sparc/kernel/rtrap_64.S36
-rw-r--r--arch/sparc/kernel/setup_64.c2
-rw-r--r--arch/sparc/kernel/signal32.c161
-rw-r--r--arch/sparc/kernel/signal_32.c55
-rw-r--r--arch/sparc/kernel/signal_64.c45
-rw-r--r--arch/sparc/kernel/starfire.c2
-rw-r--r--arch/sparc/kernel/sys32.S9
-rw-r--r--arch/sparc/kernel/sys_sparc32.c8
-rw-r--r--arch/sparc/kernel/sys_sparc_32.c7
-rw-r--r--arch/sparc/kernel/sys_sparc_64.c4
-rw-r--r--arch/sparc/kernel/systbls_32.S3
-rw-r--r--arch/sparc/kernel/systbls_64.S6
-rw-r--r--arch/sparc/kernel/tadpole.c2
-rw-r--r--arch/sparc/kernel/unaligned_32.c4
-rw-r--r--arch/sparc/kernel/windows.c3
-rw-r--r--arch/sparc/lib/Makefile2
-rw-r--r--arch/sparc/lib/atomic_64.S36
-rw-r--r--arch/sparc/lib/bitops.S12
-rw-r--r--arch/sparc/lib/rwsem_64.S163
-rw-r--r--arch/sparc/mm/fault_32.c12
-rw-r--r--arch/sparc/mm/highmem.c48
-rw-r--r--arch/sparc/mm/init_64.c48
-rw-r--r--arch/sparc/mm/srmmu.c8
-rw-r--r--arch/sparc/mm/sun4c.c2
-rw-r--r--arch/sparc/prom/Makefile1
-rw-r--r--arch/sparc/prom/cif.S16
-rw-r--r--arch/sparc/prom/console_32.c65
-rw-r--r--arch/sparc/prom/console_64.c71
-rw-r--r--arch/sparc/prom/devops_32.c87
-rw-r--r--arch/sparc/prom/devops_64.c41
-rw-r--r--arch/sparc/prom/init_32.c2
-rw-r--r--arch/sparc/prom/init_64.c4
-rw-r--r--arch/sparc/prom/memory.c3
-rw-r--r--arch/sparc/prom/misc_64.c322
-rw-r--r--arch/sparc/prom/p1275.c104
-rw-r--r--arch/sparc/prom/printf.c35
-rw-r--r--arch/sparc/prom/ranges.c6
-rw-r--r--arch/sparc/prom/tree_32.c68
-rw-r--r--arch/sparc/prom/tree_64.c264
93 files changed, 1397 insertions, 4465 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index 491e9d6de191..45d9c87d083a 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -1,9 +1,3 @@
1# For a description of the syntax of this configuration file,
2# see Documentation/kbuild/kconfig-language.txt.
3#
4
5mainmenu "Linux/SPARC Kernel Configuration"
6
7config 64BIT 1config 64BIT
8 bool "64-bit kernel" if ARCH = "sparc" 2 bool "64-bit kernel" if ARCH = "sparc"
9 default ARCH = "sparc64" 3 default ARCH = "sparc64"
@@ -19,6 +13,7 @@ config SPARC
19 bool 13 bool
20 default y 14 default y
21 select OF 15 select OF
16 select OF_PROMTREE
22 select HAVE_IDE 17 select HAVE_IDE
23 select HAVE_OPROFILE 18 select HAVE_OPROFILE
24 select HAVE_ARCH_KGDB if !SMP || SPARC64 19 select HAVE_ARCH_KGDB if !SMP || SPARC64
@@ -26,10 +21,10 @@ config SPARC
26 select ARCH_WANT_OPTIONAL_GPIOLIB 21 select ARCH_WANT_OPTIONAL_GPIOLIB
27 select RTC_CLASS 22 select RTC_CLASS
28 select RTC_DRV_M48T59 23 select RTC_DRV_M48T59
29 select HAVE_PERF_EVENTS 24 select HAVE_IRQ_WORK
30 select PERF_USE_VMALLOC
31 select HAVE_DMA_ATTRS 25 select HAVE_DMA_ATTRS
32 select HAVE_DMA_API_DEBUG 26 select HAVE_DMA_API_DEBUG
27 select HAVE_ARCH_JUMP_LABEL
33 28
34config SPARC32 29config SPARC32
35 def_bool !64BIT 30 def_bool !64BIT
diff --git a/arch/sparc/configs/sparc32_defconfig b/arch/sparc/configs/sparc32_defconfig
index 6a8d078070ca..fb23fd6b186a 100644
--- a/arch/sparc/configs/sparc32_defconfig
+++ b/arch/sparc/configs/sparc32_defconfig
@@ -1,1225 +1,105 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.33
4# Wed Mar 3 02:52:23 2010
5#
6# CONFIG_64BIT is not set
7CONFIG_SPARC=y
8CONFIG_SPARC32=y
9# CONFIG_SPARC64 is not set
10CONFIG_ARCH_DEFCONFIG="arch/sparc/configs/sparc32_defconfig"
11CONFIG_BITS=32
12CONFIG_GENERIC_TIME=y
13CONFIG_ARCH_USES_GETTIMEOFFSET=y
14CONFIG_AUDIT_ARCH=y
15CONFIG_MMU=y
16CONFIG_HIGHMEM=y
17CONFIG_ZONE_DMA=y
18CONFIG_GENERIC_ISA_DMA=y
19CONFIG_ARCH_NO_VIRT_TO_BUS=y
20CONFIG_OF=y
21CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
22CONFIG_CONSTRUCTORS=y
23
24#
25# General setup
26#
27CONFIG_EXPERIMENTAL=y 1CONFIG_EXPERIMENTAL=y
28CONFIG_BROKEN_ON_SMP=y
29CONFIG_INIT_ENV_ARG_LIMIT=32
30CONFIG_LOCALVERSION=""
31CONFIG_LOCALVERSION_AUTO=y
32CONFIG_SWAP=y
33CONFIG_SYSVIPC=y 2CONFIG_SYSVIPC=y
34CONFIG_SYSVIPC_SYSCTL=y
35CONFIG_POSIX_MQUEUE=y 3CONFIG_POSIX_MQUEUE=y
36CONFIG_POSIX_MQUEUE_SYSCTL=y
37# CONFIG_BSD_PROCESS_ACCT is not set
38# CONFIG_TASKSTATS is not set
39# CONFIG_AUDIT is not set
40
41#
42# RCU Subsystem
43#
44CONFIG_TREE_RCU=y
45# CONFIG_TREE_PREEMPT_RCU is not set
46# CONFIG_TINY_RCU is not set
47# CONFIG_RCU_TRACE is not set
48CONFIG_RCU_FANOUT=32
49# CONFIG_RCU_FANOUT_EXACT is not set
50# CONFIG_TREE_RCU_TRACE is not set
51# CONFIG_IKCONFIG is not set
52CONFIG_LOG_BUF_SHIFT=14 4CONFIG_LOG_BUF_SHIFT=14
53# CONFIG_CGROUPS is not set
54CONFIG_SYSFS_DEPRECATED=y
55CONFIG_SYSFS_DEPRECATED_V2=y 5CONFIG_SYSFS_DEPRECATED_V2=y
56# CONFIG_RELAY is not set
57CONFIG_NAMESPACES=y
58# CONFIG_UTS_NS is not set
59# CONFIG_IPC_NS is not set
60# CONFIG_USER_NS is not set
61# CONFIG_PID_NS is not set
62# CONFIG_NET_NS is not set
63CONFIG_BLK_DEV_INITRD=y 6CONFIG_BLK_DEV_INITRD=y
64CONFIG_INITRAMFS_SOURCE=""
65CONFIG_RD_GZIP=y
66CONFIG_RD_BZIP2=y
67CONFIG_RD_LZMA=y
68CONFIG_RD_LZO=y
69# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 7# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
70CONFIG_SYSCTL=y
71CONFIG_ANON_INODES=y
72# CONFIG_EMBEDDED is not set
73CONFIG_UID16=y
74CONFIG_SYSCTL_SYSCALL=y
75CONFIG_KALLSYMS=y
76# CONFIG_KALLSYMS_ALL is not set
77# CONFIG_KALLSYMS_EXTRA_PASS is not set
78CONFIG_HOTPLUG=y
79CONFIG_PRINTK=y
80CONFIG_BUG=y
81CONFIG_ELF_CORE=y
82CONFIG_BASE_FULL=y
83CONFIG_FUTEX=y
84CONFIG_EPOLL=y
85CONFIG_SIGNALFD=y
86CONFIG_TIMERFD=y
87CONFIG_EVENTFD=y
88CONFIG_SHMEM=y
89CONFIG_AIO=y
90CONFIG_HAVE_PERF_EVENTS=y
91CONFIG_PERF_USE_VMALLOC=y
92
93#
94# Kernel Performance Events And Counters
95#
96# CONFIG_PERF_EVENTS is not set
97# CONFIG_PERF_COUNTERS is not set
98CONFIG_VM_EVENT_COUNTERS=y
99CONFIG_PCI_QUIRKS=y
100CONFIG_COMPAT_BRK=y
101CONFIG_SLAB=y 8CONFIG_SLAB=y
102# CONFIG_SLUB is not set
103# CONFIG_SLOB is not set
104# CONFIG_PROFILING is not set
105CONFIG_HAVE_OPROFILE=y
106CONFIG_HAVE_ARCH_TRACEHOOK=y
107CONFIG_HAVE_DMA_ATTRS=y
108CONFIG_HAVE_DMA_API_DEBUG=y
109
110#
111# GCOV-based kernel profiling
112#
113# CONFIG_SLOW_WORK is not set
114# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
115CONFIG_SLABINFO=y
116CONFIG_RT_MUTEXES=y
117CONFIG_BASE_SMALL=0
118CONFIG_MODULES=y 9CONFIG_MODULES=y
119# CONFIG_MODULE_FORCE_LOAD is not set
120CONFIG_MODULE_UNLOAD=y 10CONFIG_MODULE_UNLOAD=y
121# CONFIG_MODULE_FORCE_UNLOAD is not set
122# CONFIG_MODVERSIONS is not set
123# CONFIG_MODULE_SRCVERSION_ALL is not set
124CONFIG_BLOCK=y
125CONFIG_LBDAF=y
126# CONFIG_BLK_DEV_BSG is not set 11# CONFIG_BLK_DEV_BSG is not set
127# CONFIG_BLK_DEV_INTEGRITY is not set
128
129#
130# IO Schedulers
131#
132CONFIG_IOSCHED_NOOP=y
133CONFIG_IOSCHED_DEADLINE=y
134CONFIG_IOSCHED_CFQ=y
135# CONFIG_DEFAULT_DEADLINE is not set
136CONFIG_DEFAULT_CFQ=y
137# CONFIG_DEFAULT_NOOP is not set
138CONFIG_DEFAULT_IOSCHED="cfq"
139# CONFIG_INLINE_SPIN_TRYLOCK is not set
140# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
141# CONFIG_INLINE_SPIN_LOCK is not set
142# CONFIG_INLINE_SPIN_LOCK_BH is not set
143# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
144# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
145CONFIG_INLINE_SPIN_UNLOCK=y
146# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
147CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
148# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
149# CONFIG_INLINE_READ_TRYLOCK is not set
150# CONFIG_INLINE_READ_LOCK is not set
151# CONFIG_INLINE_READ_LOCK_BH is not set
152# CONFIG_INLINE_READ_LOCK_IRQ is not set
153# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
154CONFIG_INLINE_READ_UNLOCK=y
155# CONFIG_INLINE_READ_UNLOCK_BH is not set
156CONFIG_INLINE_READ_UNLOCK_IRQ=y
157# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
158# CONFIG_INLINE_WRITE_TRYLOCK is not set
159# CONFIG_INLINE_WRITE_LOCK is not set
160# CONFIG_INLINE_WRITE_LOCK_BH is not set
161# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
162# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
163CONFIG_INLINE_WRITE_UNLOCK=y
164# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
165CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
166# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
167# CONFIG_MUTEX_SPIN_ON_OWNER is not set
168# CONFIG_FREEZER is not set
169
170#
171# Processor type and features
172#
173# CONFIG_SMP is not set
174# CONFIG_HZ_100 is not set
175CONFIG_HZ_250=y
176# CONFIG_HZ_300 is not set
177# CONFIG_HZ_1000 is not set
178CONFIG_HZ=250
179# CONFIG_SCHED_HRTICK is not set
180CONFIG_RWSEM_GENERIC_SPINLOCK=y
181CONFIG_GENERIC_FIND_NEXT_BIT=y
182CONFIG_GENERIC_HWEIGHT=y
183CONFIG_GENERIC_CALIBRATE_DELAY=y
184CONFIG_ARCH_MAY_HAVE_PC_FDC=y
185CONFIG_EMULATED_CMPXCHG=y
186CONFIG_SELECT_MEMORY_MODEL=y
187CONFIG_FLATMEM_MANUAL=y
188# CONFIG_DISCONTIGMEM_MANUAL is not set
189# CONFIG_SPARSEMEM_MANUAL is not set
190CONFIG_FLATMEM=y
191CONFIG_FLAT_NODE_MEM_MAP=y
192CONFIG_PAGEFLAGS_EXTENDED=y
193CONFIG_SPLIT_PTLOCK_CPUS=4
194# CONFIG_PHYS_ADDR_T_64BIT is not set
195CONFIG_ZONE_DMA_FLAG=1
196CONFIG_BOUNCE=y
197# CONFIG_KSM is not set
198CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
199CONFIG_SUN_PM=y
200# CONFIG_SPARC_LED is not set
201CONFIG_SERIAL_CONSOLE=y
202# CONFIG_SPARC_LEON is not set
203
204#
205# Bus options (PCI etc.)
206#
207CONFIG_SBUS=y
208CONFIG_SBUSCHAR=y
209CONFIG_PCI=y 12CONFIG_PCI=y
210CONFIG_PCI_SYSCALL=y
211# CONFIG_ARCH_SUPPORTS_MSI is not set
212# CONFIG_PCI_DEBUG is not set
213# CONFIG_PCI_STUB is not set
214# CONFIG_PCI_IOV is not set
215# CONFIG_PCCARD is not set
216CONFIG_SUN_OPENPROMFS=m 13CONFIG_SUN_OPENPROMFS=m
217CONFIG_SPARC32_PCI=y
218
219#
220# Executable file formats
221#
222CONFIG_BINFMT_ELF=y
223# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
224# CONFIG_HAVE_AOUT is not set
225CONFIG_BINFMT_MISC=m 14CONFIG_BINFMT_MISC=m
226CONFIG_NET=y 15CONFIG_NET=y
227
228#
229# Networking options
230#
231CONFIG_PACKET=y 16CONFIG_PACKET=y
232CONFIG_UNIX=y 17CONFIG_UNIX=y
233CONFIG_XFRM=y
234CONFIG_XFRM_USER=m 18CONFIG_XFRM_USER=m
235# CONFIG_XFRM_SUB_POLICY is not set
236# CONFIG_XFRM_MIGRATE is not set
237# CONFIG_XFRM_STATISTICS is not set
238CONFIG_XFRM_IPCOMP=y
239CONFIG_NET_KEY=m 19CONFIG_NET_KEY=m
240# CONFIG_NET_KEY_MIGRATE is not set
241CONFIG_INET=y 20CONFIG_INET=y
242# CONFIG_IP_MULTICAST is not set
243# CONFIG_IP_ADVANCED_ROUTER is not set
244CONFIG_IP_FIB_HASH=y
245CONFIG_IP_PNP=y 21CONFIG_IP_PNP=y
246CONFIG_IP_PNP_DHCP=y 22CONFIG_IP_PNP_DHCP=y
247# CONFIG_IP_PNP_BOOTP is not set
248# CONFIG_IP_PNP_RARP is not set
249# CONFIG_NET_IPIP is not set
250# CONFIG_NET_IPGRE is not set
251# CONFIG_ARPD is not set
252# CONFIG_SYN_COOKIES is not set
253CONFIG_INET_AH=y 23CONFIG_INET_AH=y
254CONFIG_INET_ESP=y 24CONFIG_INET_ESP=y
255CONFIG_INET_IPCOMP=y 25CONFIG_INET_IPCOMP=y
256CONFIG_INET_XFRM_TUNNEL=y
257CONFIG_INET_TUNNEL=y
258CONFIG_INET_XFRM_MODE_TRANSPORT=y
259CONFIG_INET_XFRM_MODE_TUNNEL=y
260CONFIG_INET_XFRM_MODE_BEET=y
261# CONFIG_INET_LRO is not set 26# CONFIG_INET_LRO is not set
262CONFIG_INET_DIAG=y
263CONFIG_INET_TCP_DIAG=y
264# CONFIG_TCP_CONG_ADVANCED is not set
265CONFIG_TCP_CONG_CUBIC=y
266CONFIG_DEFAULT_TCP_CONG="cubic"
267# CONFIG_TCP_MD5SIG is not set
268CONFIG_IPV6=m
269CONFIG_IPV6_PRIVACY=y 27CONFIG_IPV6_PRIVACY=y
270# CONFIG_IPV6_ROUTER_PREF is not set
271# CONFIG_IPV6_OPTIMISTIC_DAD is not set
272CONFIG_INET6_AH=m 28CONFIG_INET6_AH=m
273CONFIG_INET6_ESP=m 29CONFIG_INET6_ESP=m
274CONFIG_INET6_IPCOMP=m 30CONFIG_INET6_IPCOMP=m
275# CONFIG_IPV6_MIP6 is not set
276CONFIG_INET6_XFRM_TUNNEL=m
277CONFIG_INET6_TUNNEL=m
278CONFIG_INET6_XFRM_MODE_TRANSPORT=m
279CONFIG_INET6_XFRM_MODE_TUNNEL=m
280CONFIG_INET6_XFRM_MODE_BEET=m
281# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
282CONFIG_IPV6_SIT=m
283# CONFIG_IPV6_SIT_6RD is not set
284CONFIG_IPV6_NDISC_NODETYPE=y
285CONFIG_IPV6_TUNNEL=m 31CONFIG_IPV6_TUNNEL=m
286# CONFIG_IPV6_MULTIPLE_TABLES is not set
287# CONFIG_IPV6_MROUTE is not set
288# CONFIG_NETWORK_SECMARK is not set
289# CONFIG_NETFILTER is not set
290# CONFIG_IP_DCCP is not set
291# CONFIG_IP_SCTP is not set
292# CONFIG_RDS is not set
293# CONFIG_TIPC is not set
294# CONFIG_ATM is not set
295# CONFIG_BRIDGE is not set
296# CONFIG_NET_DSA is not set
297# CONFIG_VLAN_8021Q is not set
298# CONFIG_DECNET is not set
299# CONFIG_LLC2 is not set
300# CONFIG_IPX is not set
301# CONFIG_ATALK is not set
302# CONFIG_X25 is not set
303# CONFIG_LAPB is not set
304# CONFIG_ECONET is not set
305# CONFIG_WAN_ROUTER is not set
306# CONFIG_PHONET is not set
307# CONFIG_IEEE802154 is not set
308# CONFIG_NET_SCHED is not set
309# CONFIG_DCB is not set
310
311#
312# Network testing
313#
314CONFIG_NET_PKTGEN=m 32CONFIG_NET_PKTGEN=m
315# CONFIG_HAMRADIO is not set
316# CONFIG_CAN is not set
317# CONFIG_IRDA is not set
318# CONFIG_BT is not set
319# CONFIG_AF_RXRPC is not set
320CONFIG_WIRELESS=y
321# CONFIG_CFG80211 is not set
322# CONFIG_LIB80211 is not set
323
324#
325# CFG80211 needs to be enabled for MAC80211
326#
327# CONFIG_WIMAX is not set
328# CONFIG_RFKILL is not set
329# CONFIG_NET_9P is not set
330
331#
332# Device Drivers
333#
334
335#
336# Generic Driver Options
337#
338CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 33CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
339CONFIG_STANDALONE=y
340CONFIG_PREVENT_FIRMWARE_BUILD=y
341CONFIG_FW_LOADER=y
342CONFIG_FIRMWARE_IN_KERNEL=y
343CONFIG_EXTRA_FIRMWARE=""
344# CONFIG_DEBUG_DRIVER is not set
345# CONFIG_DEBUG_DEVRES is not set
346# CONFIG_SYS_HYPERVISOR is not set
347# CONFIG_CONNECTOR is not set
348# CONFIG_MTD is not set
349CONFIG_OF_DEVICE=y
350# CONFIG_PARPORT is not set
351CONFIG_BLK_DEV=y
352# CONFIG_BLK_DEV_FD is not set
353# CONFIG_BLK_CPQ_CISS_DA is not set
354# CONFIG_BLK_DEV_DAC960 is not set
355# CONFIG_BLK_DEV_UMEM is not set
356# CONFIG_BLK_DEV_COW_COMMON is not set
357CONFIG_BLK_DEV_LOOP=m 34CONFIG_BLK_DEV_LOOP=m
358CONFIG_BLK_DEV_CRYPTOLOOP=m 35CONFIG_BLK_DEV_CRYPTOLOOP=m
359
360#
361# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
362#
363# CONFIG_BLK_DEV_NBD is not set
364# CONFIG_BLK_DEV_SX8 is not set
365CONFIG_BLK_DEV_RAM=y 36CONFIG_BLK_DEV_RAM=y
366CONFIG_BLK_DEV_RAM_COUNT=16
367CONFIG_BLK_DEV_RAM_SIZE=4096
368# CONFIG_BLK_DEV_XIP is not set
369# CONFIG_CDROM_PKTCDVD is not set
370# CONFIG_ATA_OVER_ETH is not set
371# CONFIG_BLK_DEV_HD is not set
372CONFIG_MISC_DEVICES=y
373# CONFIG_PHANTOM is not set
374# CONFIG_SGI_IOC4 is not set
375# CONFIG_TIFM_CORE is not set
376# CONFIG_ENCLOSURE_SERVICES is not set
377# CONFIG_HP_ILO is not set
378# CONFIG_TI_DAC7512 is not set
379# CONFIG_C2PORT is not set
380
381#
382# EEPROM support
383#
384# CONFIG_EEPROM_AT25 is not set
385# CONFIG_EEPROM_93CX6 is not set
386# CONFIG_CB710_CORE is not set
387CONFIG_HAVE_IDE=y
388# CONFIG_IDE is not set
389
390#
391# SCSI device support
392#
393# CONFIG_RAID_ATTRS is not set
394CONFIG_SCSI=y 37CONFIG_SCSI=y
395CONFIG_SCSI_DMA=y
396# CONFIG_SCSI_TGT is not set
397# CONFIG_SCSI_NETLINK is not set
398CONFIG_SCSI_PROC_FS=y
399
400#
401# SCSI support type (disk, tape, CD-ROM)
402#
403CONFIG_BLK_DEV_SD=y 38CONFIG_BLK_DEV_SD=y
404# CONFIG_CHR_DEV_ST is not set
405# CONFIG_CHR_DEV_OSST is not set
406CONFIG_BLK_DEV_SR=m 39CONFIG_BLK_DEV_SR=m
407# CONFIG_BLK_DEV_SR_VENDOR is not set
408CONFIG_CHR_DEV_SG=m 40CONFIG_CHR_DEV_SG=m
409# CONFIG_CHR_DEV_SCH is not set
410# CONFIG_SCSI_MULTI_LUN is not set
411# CONFIG_SCSI_CONSTANTS is not set
412# CONFIG_SCSI_LOGGING is not set
413# CONFIG_SCSI_SCAN_ASYNC is not set
414CONFIG_SCSI_WAIT_SCAN=m
415
416#
417# SCSI Transports
418#
419CONFIG_SCSI_SPI_ATTRS=y
420# CONFIG_SCSI_FC_ATTRS is not set
421# CONFIG_SCSI_ISCSI_ATTRS is not set
422# CONFIG_SCSI_SAS_LIBSAS is not set
423# CONFIG_SCSI_SRP_ATTRS is not set
424CONFIG_SCSI_LOWLEVEL=y
425# CONFIG_ISCSI_TCP is not set
426# CONFIG_SCSI_CXGB3_ISCSI is not set
427# CONFIG_SCSI_BNX2_ISCSI is not set
428# CONFIG_BE2ISCSI is not set
429# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
430# CONFIG_SCSI_HPSA is not set
431# CONFIG_SCSI_3W_9XXX is not set
432# CONFIG_SCSI_3W_SAS is not set
433# CONFIG_SCSI_ACARD is not set
434# CONFIG_SCSI_AACRAID is not set
435# CONFIG_SCSI_AIC7XXX is not set
436# CONFIG_SCSI_AIC7XXX_OLD is not set
437# CONFIG_SCSI_AIC79XX is not set
438# CONFIG_SCSI_AIC94XX is not set
439# CONFIG_SCSI_MVSAS is not set
440# CONFIG_SCSI_ARCMSR is not set
441# CONFIG_MEGARAID_NEWGEN is not set
442# CONFIG_MEGARAID_LEGACY is not set
443# CONFIG_MEGARAID_SAS is not set
444# CONFIG_SCSI_MPT2SAS is not set
445# CONFIG_SCSI_HPTIOP is not set
446# CONFIG_LIBFC is not set
447# CONFIG_LIBFCOE is not set
448# CONFIG_FCOE is not set
449# CONFIG_SCSI_DMX3191D is not set
450# CONFIG_SCSI_FUTURE_DOMAIN is not set
451# CONFIG_SCSI_IPS is not set
452# CONFIG_SCSI_INITIO is not set
453# CONFIG_SCSI_INIA100 is not set
454# CONFIG_SCSI_STEX is not set
455# CONFIG_SCSI_SYM53C8XX_2 is not set
456# CONFIG_SCSI_QLOGIC_1280 is not set
457CONFIG_SCSI_QLOGICPTI=m 41CONFIG_SCSI_QLOGICPTI=m
458# CONFIG_SCSI_QLA_FC is not set
459# CONFIG_SCSI_QLA_ISCSI is not set
460# CONFIG_SCSI_LPFC is not set
461# CONFIG_SCSI_DC395x is not set
462# CONFIG_SCSI_DC390T is not set
463# CONFIG_SCSI_NSP32 is not set
464# CONFIG_SCSI_DEBUG is not set
465CONFIG_SCSI_SUNESP=y 42CONFIG_SCSI_SUNESP=y
466# CONFIG_SCSI_PMCRAID is not set
467# CONFIG_SCSI_PM8001 is not set
468# CONFIG_SCSI_SRP is not set
469# CONFIG_SCSI_BFA_FC is not set
470# CONFIG_SCSI_DH is not set
471# CONFIG_SCSI_OSD_INITIATOR is not set
472# CONFIG_ATA is not set
473# CONFIG_MD is not set
474# CONFIG_FUSION is not set
475
476#
477# IEEE 1394 (FireWire) support
478#
479
480#
481# You can enable one or both FireWire driver stacks.
482#
483
484#
485# The newer stack is recommended.
486#
487# CONFIG_FIREWIRE is not set
488# CONFIG_IEEE1394 is not set
489# CONFIG_I2O is not set
490CONFIG_NETDEVICES=y 43CONFIG_NETDEVICES=y
491CONFIG_DUMMY=m 44CONFIG_DUMMY=m
492# CONFIG_BONDING is not set
493# CONFIG_MACVLAN is not set
494# CONFIG_EQUALIZER is not set
495# CONFIG_TUN is not set
496# CONFIG_VETH is not set
497# CONFIG_ARCNET is not set
498# CONFIG_PHYLIB is not set
499CONFIG_NET_ETHERNET=y 45CONFIG_NET_ETHERNET=y
500CONFIG_MII=m 46CONFIG_MII=m
501CONFIG_SUNLANCE=y 47CONFIG_SUNLANCE=y
502CONFIG_HAPPYMEAL=m 48CONFIG_HAPPYMEAL=m
503CONFIG_SUNBMAC=m 49CONFIG_SUNBMAC=m
504CONFIG_SUNQE=m 50CONFIG_SUNQE=m
505# CONFIG_SUNGEM is not set
506# CONFIG_CASSINI is not set
507# CONFIG_NET_VENDOR_3COM is not set
508# CONFIG_ENC28J60 is not set
509# CONFIG_ETHOC is not set
510# CONFIG_GRETH is not set
511# CONFIG_DNET is not set
512# CONFIG_NET_TULIP is not set
513# CONFIG_HP100 is not set
514# CONFIG_IBM_NEW_EMAC_ZMII is not set
515# CONFIG_IBM_NEW_EMAC_RGMII is not set
516# CONFIG_IBM_NEW_EMAC_TAH is not set
517# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
518# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
519# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
520# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
521# CONFIG_NET_PCI is not set
522# CONFIG_B44 is not set
523# CONFIG_KS8842 is not set
524# CONFIG_KS8851 is not set
525# CONFIG_KS8851_MLL is not set
526# CONFIG_ATL2 is not set
527CONFIG_NETDEV_1000=y
528# CONFIG_ACENIC is not set
529# CONFIG_DL2K is not set
530# CONFIG_E1000 is not set
531# CONFIG_IP1000 is not set
532# CONFIG_IGB is not set
533# CONFIG_IGBVF is not set
534# CONFIG_MYRI_SBUS is not set
535# CONFIG_NS83820 is not set
536# CONFIG_HAMACHI is not set
537# CONFIG_YELLOWFIN is not set
538# CONFIG_R8169 is not set
539# CONFIG_SIS190 is not set
540# CONFIG_SKGE is not set
541# CONFIG_SKY2 is not set
542# CONFIG_VIA_VELOCITY is not set
543# CONFIG_TIGON3 is not set
544# CONFIG_BNX2 is not set
545# CONFIG_CNIC is not set
546# CONFIG_QLA3XXX is not set
547# CONFIG_ATL1 is not set
548# CONFIG_ATL1E is not set
549# CONFIG_ATL1C is not set
550# CONFIG_JME is not set
551CONFIG_NETDEV_10000=y
552# CONFIG_CHELSIO_T1 is not set
553CONFIG_CHELSIO_T3_DEPENDS=y
554# CONFIG_CHELSIO_T3 is not set
555# CONFIG_ENIC is not set
556# CONFIG_IXGBE is not set
557# CONFIG_IXGB is not set
558# CONFIG_S2IO is not set
559# CONFIG_VXGE is not set
560# CONFIG_MYRI10GE is not set
561# CONFIG_NETXEN_NIC is not set
562# CONFIG_NIU is not set
563# CONFIG_MLX4_EN is not set
564# CONFIG_MLX4_CORE is not set
565# CONFIG_TEHUTI is not set
566# CONFIG_BNX2X is not set
567# CONFIG_QLCNIC is not set
568# CONFIG_QLGE is not set
569# CONFIG_SFC is not set
570# CONFIG_BE2NET is not set
571# CONFIG_TR is not set
572# CONFIG_WLAN is not set 51# CONFIG_WLAN is not set
573
574#
575# Enable WiMAX (Networking options) to see the WiMAX drivers
576#
577# CONFIG_WAN is not set
578# CONFIG_FDDI is not set
579# CONFIG_HIPPI is not set
580# CONFIG_PPP is not set
581# CONFIG_SLIP is not set
582# CONFIG_NET_FC is not set
583# CONFIG_NETCONSOLE is not set
584# CONFIG_NETPOLL is not set
585# CONFIG_NET_POLL_CONTROLLER is not set
586# CONFIG_VMXNET3 is not set
587# CONFIG_ISDN is not set
588# CONFIG_PHONE is not set
589
590#
591# Input device support
592#
593CONFIG_INPUT=y
594# CONFIG_INPUT_FF_MEMLESS is not set
595# CONFIG_INPUT_POLLDEV is not set
596# CONFIG_INPUT_SPARSEKMAP is not set
597
598#
599# Userland interfaces
600#
601CONFIG_INPUT_MOUSEDEV=y
602CONFIG_INPUT_MOUSEDEV_PSAUX=y
603CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
604CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
605CONFIG_INPUT_JOYDEV=m 52CONFIG_INPUT_JOYDEV=m
606CONFIG_INPUT_EVDEV=m 53CONFIG_INPUT_EVDEV=m
607CONFIG_INPUT_EVBUG=m 54CONFIG_INPUT_EVBUG=m
608
609#
610# Input Device Drivers
611#
612CONFIG_INPUT_KEYBOARD=y
613CONFIG_KEYBOARD_ATKBD=m 55CONFIG_KEYBOARD_ATKBD=m
614# CONFIG_KEYBOARD_LKKBD is not set
615# CONFIG_KEYBOARD_NEWTON is not set
616# CONFIG_KEYBOARD_OPENCORES is not set
617# CONFIG_KEYBOARD_STOWAWAY is not set
618CONFIG_KEYBOARD_SUNKBD=m 56CONFIG_KEYBOARD_SUNKBD=m
619# CONFIG_KEYBOARD_XTKBD is not set
620CONFIG_INPUT_MOUSE=y
621CONFIG_MOUSE_PS2=m 57CONFIG_MOUSE_PS2=m
622CONFIG_MOUSE_PS2_ALPS=y
623CONFIG_MOUSE_PS2_LOGIPS2PP=y
624CONFIG_MOUSE_PS2_SYNAPTICS=y
625CONFIG_MOUSE_PS2_TRACKPOINT=y
626# CONFIG_MOUSE_PS2_ELANTECH is not set
627# CONFIG_MOUSE_PS2_SENTELIC is not set
628# CONFIG_MOUSE_PS2_TOUCHKIT is not set
629CONFIG_MOUSE_SERIAL=m 58CONFIG_MOUSE_SERIAL=m
630# CONFIG_MOUSE_APPLETOUCH is not set
631# CONFIG_MOUSE_BCM5974 is not set
632# CONFIG_MOUSE_VSXXXAA is not set
633# CONFIG_INPUT_JOYSTICK is not set
634# CONFIG_INPUT_TABLET is not set
635# CONFIG_INPUT_TOUCHSCREEN is not set
636# CONFIG_INPUT_MISC is not set
637
638#
639# Hardware I/O ports
640#
641CONFIG_SERIO=m 59CONFIG_SERIO=m
642# CONFIG_SERIO_I8042 is not set 60# CONFIG_SERIO_I8042 is not set
643CONFIG_SERIO_SERPORT=m
644# CONFIG_SERIO_PCIPS2 is not set
645CONFIG_SERIO_LIBPS2=m
646# CONFIG_SERIO_RAW is not set
647# CONFIG_SERIO_ALTERA_PS2 is not set
648# CONFIG_GAMEPORT is not set
649
650#
651# Character devices
652#
653CONFIG_VT=y
654CONFIG_CONSOLE_TRANSLATIONS=y
655CONFIG_VT_CONSOLE=y
656CONFIG_HW_CONSOLE=y
657# CONFIG_VT_HW_CONSOLE_BINDING is not set
658CONFIG_DEVKMEM=y
659# CONFIG_SERIAL_NONSTANDARD is not set
660# CONFIG_NOZOMI is not set
661
662#
663# Serial drivers
664#
665# CONFIG_SERIAL_8250 is not set
666
667#
668# Non-8250 serial port support
669#
670# CONFIG_SERIAL_MAX3100 is not set
671CONFIG_SERIAL_SUNCORE=y
672CONFIG_SERIAL_SUNZILOG=y 61CONFIG_SERIAL_SUNZILOG=y
673CONFIG_SERIAL_SUNZILOG_CONSOLE=y 62CONFIG_SERIAL_SUNZILOG_CONSOLE=y
674CONFIG_SERIAL_SUNSU=y 63CONFIG_SERIAL_SUNSU=y
675CONFIG_SERIAL_SUNSU_CONSOLE=y 64CONFIG_SERIAL_SUNSU_CONSOLE=y
676# CONFIG_SERIAL_SUNSAB is not set
677CONFIG_SERIAL_CORE=y
678CONFIG_SERIAL_CORE_CONSOLE=y
679CONFIG_CONSOLE_POLL=y
680# CONFIG_SERIAL_JSM is not set
681# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
682CONFIG_UNIX98_PTYS=y
683# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
684CONFIG_LEGACY_PTYS=y
685CONFIG_LEGACY_PTY_COUNT=256
686# CONFIG_IPMI_HANDLER is not set
687CONFIG_HW_RANDOM=m
688# CONFIG_HW_RANDOM_TIMERIOMEM is not set
689# CONFIG_R3964 is not set
690# CONFIG_APPLICOM is not set
691# CONFIG_RAW_DRIVER is not set
692# CONFIG_TCG_TPM is not set
693CONFIG_DEVPORT=y
694# CONFIG_I2C is not set
695CONFIG_SPI=y 65CONFIG_SPI=y
696# CONFIG_SPI_DEBUG is not set
697CONFIG_SPI_MASTER=y
698
699#
700# SPI Master Controller Drivers
701#
702CONFIG_SPI_BITBANG=m
703CONFIG_SPI_XILINX=m 66CONFIG_SPI_XILINX=m
704CONFIG_SPI_XILINX_PLTFM=m 67CONFIG_SPI_XILINX_PLTFM=m
705# CONFIG_SPI_DESIGNWARE is not set
706
707#
708# SPI Protocol Masters
709#
710# CONFIG_SPI_SPIDEV is not set
711# CONFIG_SPI_TLE62X0 is not set
712
713#
714# PPS support
715#
716# CONFIG_PPS is not set
717CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
718# CONFIG_GPIOLIB is not set
719# CONFIG_W1 is not set
720# CONFIG_POWER_SUPPLY is not set
721CONFIG_HWMON=y
722# CONFIG_HWMON_VID is not set
723# CONFIG_HWMON_DEBUG_CHIP is not set
724
725#
726# Native drivers
727#
728# CONFIG_SENSORS_ADCXX is not set
729# CONFIG_SENSORS_I5K_AMB is not set
730# CONFIG_SENSORS_F71805F is not set
731# CONFIG_SENSORS_F71882FG is not set
732# CONFIG_SENSORS_IT87 is not set
733# CONFIG_SENSORS_LM70 is not set
734# CONFIG_SENSORS_MAX1111 is not set
735# CONFIG_SENSORS_PC87360 is not set
736# CONFIG_SENSORS_PC87427 is not set
737# CONFIG_SENSORS_SIS5595 is not set
738# CONFIG_SENSORS_SMSC47M1 is not set
739# CONFIG_SENSORS_SMSC47B397 is not set
740# CONFIG_SENSORS_VIA686A is not set
741# CONFIG_SENSORS_VT1211 is not set
742# CONFIG_SENSORS_VT8231 is not set
743# CONFIG_SENSORS_W83627HF is not set
744# CONFIG_SENSORS_W83627EHF is not set
745# CONFIG_SENSORS_LIS3_SPI is not set
746# CONFIG_THERMAL is not set
747# CONFIG_WATCHDOG is not set
748CONFIG_SSB_POSSIBLE=y
749
750#
751# Sonics Silicon Backplane
752#
753# CONFIG_SSB is not set
754
755#
756# Multifunction device drivers
757#
758# CONFIG_MFD_CORE is not set
759# CONFIG_MFD_SM501 is not set
760# CONFIG_HTC_PASIC3 is not set
761# CONFIG_MFD_TMIO is not set
762# CONFIG_MFD_MC13783 is not set
763# CONFIG_AB4500_CORE is not set
764# CONFIG_REGULATOR is not set
765# CONFIG_MEDIA_SUPPORT is not set
766
767#
768# Graphics support
769#
770CONFIG_VGA_ARB=y
771CONFIG_VGA_ARB_MAX_GPUS=16
772# CONFIG_VGASTATE is not set
773# CONFIG_VIDEO_OUTPUT_CONTROL is not set
774# CONFIG_FB is not set
775# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
776
777#
778# Display device support
779#
780# CONFIG_DISPLAY_SUPPORT is not set
781
782#
783# Console display driver support
784#
785CONFIG_DUMMY_CONSOLE=y
786# CONFIG_SOUND is not set
787CONFIG_HID_SUPPORT=y
788CONFIG_HID=y
789# CONFIG_HIDRAW is not set
790# CONFIG_HID_PID is not set
791
792#
793# Special HID drivers
794#
795CONFIG_USB_SUPPORT=y
796CONFIG_USB_ARCH_HAS_HCD=y
797CONFIG_USB_ARCH_HAS_OHCI=y
798CONFIG_USB_ARCH_HAS_EHCI=y
799# CONFIG_USB is not set
800
801#
802# Enable Host or Gadget support to see Inventra options
803#
804
805#
806# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
807#
808# CONFIG_USB_GADGET is not set
809
810#
811# OTG and related infrastructure
812#
813# CONFIG_UWB is not set
814# CONFIG_MMC is not set
815# CONFIG_MEMSTICK is not set
816# CONFIG_NEW_LEDS is not set
817# CONFIG_ACCESSIBILITY is not set
818# CONFIG_INFINIBAND is not set
819CONFIG_RTC_LIB=y
820CONFIG_RTC_CLASS=y
821CONFIG_RTC_HCTOSYS=y
822CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
823# CONFIG_RTC_DEBUG is not set
824
825#
826# RTC interfaces
827#
828CONFIG_RTC_INTF_SYSFS=y
829CONFIG_RTC_INTF_PROC=y
830CONFIG_RTC_INTF_DEV=y
831# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
832# CONFIG_RTC_DRV_TEST is not set
833
834#
835# SPI RTC drivers
836#
837# CONFIG_RTC_DRV_M41T94 is not set
838# CONFIG_RTC_DRV_DS1305 is not set
839# CONFIG_RTC_DRV_DS1390 is not set
840# CONFIG_RTC_DRV_MAX6902 is not set
841# CONFIG_RTC_DRV_R9701 is not set
842# CONFIG_RTC_DRV_RS5C348 is not set
843# CONFIG_RTC_DRV_DS3234 is not set
844# CONFIG_RTC_DRV_PCF2123 is not set
845
846#
847# Platform RTC drivers
848#
849# CONFIG_RTC_DRV_DS1286 is not set
850# CONFIG_RTC_DRV_DS1511 is not set
851# CONFIG_RTC_DRV_DS1553 is not set
852# CONFIG_RTC_DRV_DS1742 is not set
853# CONFIG_RTC_DRV_STK17TA8 is not set
854# CONFIG_RTC_DRV_M48T86 is not set
855# CONFIG_RTC_DRV_M48T35 is not set
856CONFIG_RTC_DRV_M48T59=y
857# CONFIG_RTC_DRV_MSM6242 is not set
858# CONFIG_RTC_DRV_BQ4802 is not set
859# CONFIG_RTC_DRV_RP5C01 is not set
860# CONFIG_RTC_DRV_V3020 is not set
861
862#
863# on-CPU RTC drivers
864#
865# CONFIG_DMADEVICES is not set
866# CONFIG_AUXDISPLAY is not set
867# CONFIG_UIO is not set
868
869#
870# TI VLYNQ
871#
872# CONFIG_STAGING is not set
873
874#
875# Misc Linux/SPARC drivers
876#
877CONFIG_SUN_OPENPROMIO=m 68CONFIG_SUN_OPENPROMIO=m
878# CONFIG_TADPOLE_TS102_UCTRL is not set
879# CONFIG_SUN_JSFLASH is not set
880
881#
882# File systems
883#
884CONFIG_EXT2_FS=y 69CONFIG_EXT2_FS=y
885CONFIG_EXT2_FS_XATTR=y 70CONFIG_EXT2_FS_XATTR=y
886CONFIG_EXT2_FS_POSIX_ACL=y 71CONFIG_EXT2_FS_POSIX_ACL=y
887CONFIG_EXT2_FS_SECURITY=y 72CONFIG_EXT2_FS_SECURITY=y
888# CONFIG_EXT2_FS_XIP is not set
889# CONFIG_EXT3_FS is not set
890# CONFIG_EXT4_FS is not set
891CONFIG_FS_MBCACHE=y
892# CONFIG_REISERFS_FS is not set
893# CONFIG_JFS_FS is not set
894CONFIG_FS_POSIX_ACL=y
895# CONFIG_XFS_FS is not set
896# CONFIG_GFS2_FS is not set
897# CONFIG_OCFS2_FS is not set
898# CONFIG_BTRFS_FS is not set
899# CONFIG_NILFS2_FS is not set
900CONFIG_FILE_LOCKING=y
901CONFIG_FSNOTIFY=y
902CONFIG_DNOTIFY=y
903CONFIG_INOTIFY=y
904CONFIG_INOTIFY_USER=y
905# CONFIG_QUOTA is not set
906CONFIG_AUTOFS_FS=m 73CONFIG_AUTOFS_FS=m
907CONFIG_AUTOFS4_FS=m 74CONFIG_AUTOFS4_FS=m
908# CONFIG_FUSE_FS is not set
909
910#
911# Caches
912#
913# CONFIG_FSCACHE is not set
914
915#
916# CD-ROM/DVD Filesystems
917#
918CONFIG_ISO9660_FS=m 75CONFIG_ISO9660_FS=m
919# CONFIG_JOLIET is not set
920# CONFIG_ZISOFS is not set
921# CONFIG_UDF_FS is not set
922
923#
924# DOS/FAT/NT Filesystems
925#
926# CONFIG_MSDOS_FS is not set
927# CONFIG_VFAT_FS is not set
928# CONFIG_NTFS_FS is not set
929
930#
931# Pseudo filesystems
932#
933CONFIG_PROC_FS=y
934CONFIG_PROC_KCORE=y 76CONFIG_PROC_KCORE=y
935CONFIG_PROC_SYSCTL=y
936CONFIG_PROC_PAGE_MONITOR=y
937CONFIG_SYSFS=y
938# CONFIG_TMPFS is not set
939# CONFIG_HUGETLB_PAGE is not set
940# CONFIG_CONFIGFS_FS is not set
941CONFIG_MISC_FILESYSTEMS=y
942# CONFIG_ADFS_FS is not set
943# CONFIG_AFFS_FS is not set
944# CONFIG_HFS_FS is not set
945# CONFIG_HFSPLUS_FS is not set
946# CONFIG_BEFS_FS is not set
947# CONFIG_BFS_FS is not set
948# CONFIG_EFS_FS is not set
949# CONFIG_CRAMFS is not set
950# CONFIG_SQUASHFS is not set
951# CONFIG_VXFS_FS is not set
952# CONFIG_MINIX_FS is not set
953# CONFIG_OMFS_FS is not set
954# CONFIG_HPFS_FS is not set
955# CONFIG_QNX4FS_FS is not set
956CONFIG_ROMFS_FS=m 77CONFIG_ROMFS_FS=m
957CONFIG_ROMFS_BACKED_BY_BLOCK=y
958# CONFIG_ROMFS_BACKED_BY_MTD is not set
959# CONFIG_ROMFS_BACKED_BY_BOTH is not set
960CONFIG_ROMFS_ON_BLOCK=y
961# CONFIG_SYSV_FS is not set
962# CONFIG_UFS_FS is not set
963CONFIG_NETWORK_FILESYSTEMS=y
964CONFIG_NFS_FS=y 78CONFIG_NFS_FS=y
965# CONFIG_NFS_V3 is not set
966# CONFIG_NFS_V4 is not set
967CONFIG_ROOT_NFS=y 79CONFIG_ROOT_NFS=y
968# CONFIG_NFSD is not set
969CONFIG_LOCKD=y
970CONFIG_NFS_COMMON=y
971CONFIG_SUNRPC=y
972CONFIG_SUNRPC_GSS=m
973CONFIG_RPCSEC_GSS_KRB5=m 80CONFIG_RPCSEC_GSS_KRB5=m
974# CONFIG_RPCSEC_GSS_SPKM3 is not set
975# CONFIG_SMB_FS is not set
976# CONFIG_CIFS is not set
977# CONFIG_NCP_FS is not set
978# CONFIG_CODA_FS is not set
979# CONFIG_AFS_FS is not set
980
981#
982# Partition Types
983#
984# CONFIG_PARTITION_ADVANCED is not set
985CONFIG_MSDOS_PARTITION=y
986CONFIG_SUN_PARTITION=y
987CONFIG_NLS=y 81CONFIG_NLS=y
988CONFIG_NLS_DEFAULT="iso8859-1"
989# CONFIG_NLS_CODEPAGE_437 is not set
990# CONFIG_NLS_CODEPAGE_737 is not set
991# CONFIG_NLS_CODEPAGE_775 is not set
992# CONFIG_NLS_CODEPAGE_850 is not set
993# CONFIG_NLS_CODEPAGE_852 is not set
994# CONFIG_NLS_CODEPAGE_855 is not set
995# CONFIG_NLS_CODEPAGE_857 is not set
996# CONFIG_NLS_CODEPAGE_860 is not set
997# CONFIG_NLS_CODEPAGE_861 is not set
998# CONFIG_NLS_CODEPAGE_862 is not set
999# CONFIG_NLS_CODEPAGE_863 is not set
1000# CONFIG_NLS_CODEPAGE_864 is not set
1001# CONFIG_NLS_CODEPAGE_865 is not set
1002# CONFIG_NLS_CODEPAGE_866 is not set
1003# CONFIG_NLS_CODEPAGE_869 is not set
1004# CONFIG_NLS_CODEPAGE_936 is not set
1005# CONFIG_NLS_CODEPAGE_950 is not set
1006# CONFIG_NLS_CODEPAGE_932 is not set
1007# CONFIG_NLS_CODEPAGE_949 is not set
1008# CONFIG_NLS_CODEPAGE_874 is not set
1009# CONFIG_NLS_ISO8859_8 is not set
1010# CONFIG_NLS_CODEPAGE_1250 is not set
1011# CONFIG_NLS_CODEPAGE_1251 is not set
1012# CONFIG_NLS_ASCII is not set
1013# CONFIG_NLS_ISO8859_1 is not set
1014# CONFIG_NLS_ISO8859_2 is not set
1015# CONFIG_NLS_ISO8859_3 is not set
1016# CONFIG_NLS_ISO8859_4 is not set
1017# CONFIG_NLS_ISO8859_5 is not set
1018# CONFIG_NLS_ISO8859_6 is not set
1019# CONFIG_NLS_ISO8859_7 is not set
1020# CONFIG_NLS_ISO8859_9 is not set
1021# CONFIG_NLS_ISO8859_13 is not set
1022# CONFIG_NLS_ISO8859_14 is not set
1023# CONFIG_NLS_ISO8859_15 is not set
1024# CONFIG_NLS_KOI8_R is not set
1025# CONFIG_NLS_KOI8_U is not set
1026# CONFIG_NLS_UTF8 is not set
1027# CONFIG_DLM is not set
1028
1029#
1030# Kernel hacking
1031#
1032CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1033# CONFIG_PRINTK_TIME is not set
1034# CONFIG_ENABLE_WARN_DEPRECATED is not set 82# CONFIG_ENABLE_WARN_DEPRECATED is not set
1035CONFIG_ENABLE_MUST_CHECK=y
1036CONFIG_FRAME_WARN=1024
1037CONFIG_MAGIC_SYSRQ=y
1038# CONFIG_STRIP_ASM_SYMS is not set
1039# CONFIG_UNUSED_SYMBOLS is not set
1040# CONFIG_DEBUG_FS is not set
1041# CONFIG_HEADERS_CHECK is not set
1042CONFIG_DEBUG_KERNEL=y 83CONFIG_DEBUG_KERNEL=y
1043CONFIG_DETECT_SOFTLOCKUP=y
1044# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
1045CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
1046CONFIG_DETECT_HUNG_TASK=y 84CONFIG_DETECT_HUNG_TASK=y
1047# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1048CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1049# CONFIG_SCHED_DEBUG is not set 85# CONFIG_SCHED_DEBUG is not set
1050# CONFIG_SCHEDSTATS is not set
1051# CONFIG_TIMER_STATS is not set
1052# CONFIG_DEBUG_OBJECTS is not set
1053# CONFIG_DEBUG_SLAB is not set
1054# CONFIG_DEBUG_RT_MUTEXES is not set
1055# CONFIG_RT_MUTEX_TESTER is not set
1056# CONFIG_DEBUG_SPINLOCK is not set
1057# CONFIG_DEBUG_MUTEXES is not set
1058# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1059# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1060# CONFIG_DEBUG_KOBJECT is not set
1061# CONFIG_DEBUG_HIGHMEM is not set
1062CONFIG_DEBUG_BUGVERBOSE=y
1063# CONFIG_DEBUG_INFO is not set
1064# CONFIG_DEBUG_VM is not set
1065# CONFIG_DEBUG_WRITECOUNT is not set
1066CONFIG_DEBUG_MEMORY_INIT=y
1067# CONFIG_DEBUG_LIST is not set
1068# CONFIG_DEBUG_SG is not set
1069# CONFIG_DEBUG_NOTIFIERS is not set
1070# CONFIG_DEBUG_CREDENTIALS is not set
1071# CONFIG_BOOT_PRINTK_DELAY is not set
1072# CONFIG_RCU_TORTURE_TEST is not set
1073# CONFIG_RCU_CPU_STALL_DETECTOR is not set 86# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1074# CONFIG_BACKTRACE_SELF_TEST is not set
1075# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1076# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
1077# CONFIG_FAULT_INJECTION is not set
1078# CONFIG_SYSCTL_SYSCALL_CHECK is not set
1079# CONFIG_PAGE_POISONING is not set
1080# CONFIG_DMA_API_DEBUG is not set
1081# CONFIG_SAMPLES is not set
1082CONFIG_HAVE_ARCH_KGDB=y
1083CONFIG_KGDB=y 87CONFIG_KGDB=y
1084CONFIG_KGDB_SERIAL_CONSOLE=y
1085CONFIG_KGDB_TESTS=y 88CONFIG_KGDB_TESTS=y
1086# CONFIG_KGDB_TESTS_ON_BOOT is not set
1087# CONFIG_DEBUG_STACK_USAGE is not set
1088# CONFIG_STACK_DEBUG is not set
1089# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
1090
1091#
1092# Security options
1093#
1094# CONFIG_KEYS is not set
1095# CONFIG_SECURITY is not set
1096# CONFIG_SECURITYFS is not set
1097# CONFIG_DEFAULT_SECURITY_SELINUX is not set
1098# CONFIG_DEFAULT_SECURITY_SMACK is not set
1099# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
1100CONFIG_DEFAULT_SECURITY_DAC=y
1101CONFIG_DEFAULT_SECURITY=""
1102CONFIG_CRYPTO=y
1103
1104#
1105# Crypto core or helper
1106#
1107CONFIG_CRYPTO_ALGAPI=y
1108CONFIG_CRYPTO_ALGAPI2=y
1109CONFIG_CRYPTO_AEAD=y
1110CONFIG_CRYPTO_AEAD2=y
1111CONFIG_CRYPTO_BLKCIPHER=y
1112CONFIG_CRYPTO_BLKCIPHER2=y
1113CONFIG_CRYPTO_HASH=y
1114CONFIG_CRYPTO_HASH2=y
1115CONFIG_CRYPTO_RNG2=y
1116CONFIG_CRYPTO_PCOMP=y
1117CONFIG_CRYPTO_MANAGER=y
1118CONFIG_CRYPTO_MANAGER2=y
1119# CONFIG_CRYPTO_GF128MUL is not set
1120CONFIG_CRYPTO_NULL=m 89CONFIG_CRYPTO_NULL=m
1121CONFIG_CRYPTO_WORKQUEUE=y
1122# CONFIG_CRYPTO_CRYPTD is not set
1123CONFIG_CRYPTO_AUTHENC=y
1124# CONFIG_CRYPTO_TEST is not set
1125
1126#
1127# Authenticated Encryption with Associated Data
1128#
1129# CONFIG_CRYPTO_CCM is not set
1130# CONFIG_CRYPTO_GCM is not set
1131# CONFIG_CRYPTO_SEQIV is not set
1132
1133#
1134# Block modes
1135#
1136CONFIG_CRYPTO_CBC=y
1137# CONFIG_CRYPTO_CTR is not set
1138# CONFIG_CRYPTO_CTS is not set
1139CONFIG_CRYPTO_ECB=m 90CONFIG_CRYPTO_ECB=m
1140# CONFIG_CRYPTO_LRW is not set
1141CONFIG_CRYPTO_PCBC=m 91CONFIG_CRYPTO_PCBC=m
1142# CONFIG_CRYPTO_XTS is not set
1143
1144#
1145# Hash modes
1146#
1147CONFIG_CRYPTO_HMAC=y
1148# CONFIG_CRYPTO_XCBC is not set
1149# CONFIG_CRYPTO_VMAC is not set
1150
1151#
1152# Digest
1153#
1154CONFIG_CRYPTO_CRC32C=m
1155# CONFIG_CRYPTO_GHASH is not set
1156CONFIG_CRYPTO_MD4=y 92CONFIG_CRYPTO_MD4=y
1157CONFIG_CRYPTO_MD5=y
1158CONFIG_CRYPTO_MICHAEL_MIC=m 93CONFIG_CRYPTO_MICHAEL_MIC=m
1159# CONFIG_CRYPTO_RMD128 is not set
1160# CONFIG_CRYPTO_RMD160 is not set
1161# CONFIG_CRYPTO_RMD256 is not set
1162# CONFIG_CRYPTO_RMD320 is not set
1163CONFIG_CRYPTO_SHA1=y
1164CONFIG_CRYPTO_SHA256=m 94CONFIG_CRYPTO_SHA256=m
1165CONFIG_CRYPTO_SHA512=m 95CONFIG_CRYPTO_SHA512=m
1166# CONFIG_CRYPTO_TGR192 is not set
1167# CONFIG_CRYPTO_WP512 is not set
1168
1169#
1170# Ciphers
1171#
1172CONFIG_CRYPTO_AES=m 96CONFIG_CRYPTO_AES=m
1173# CONFIG_CRYPTO_ANUBIS is not set
1174CONFIG_CRYPTO_ARC4=m 97CONFIG_CRYPTO_ARC4=m
1175CONFIG_CRYPTO_BLOWFISH=m 98CONFIG_CRYPTO_BLOWFISH=m
1176# CONFIG_CRYPTO_CAMELLIA is not set
1177CONFIG_CRYPTO_CAST5=m 99CONFIG_CRYPTO_CAST5=m
1178CONFIG_CRYPTO_CAST6=m 100CONFIG_CRYPTO_CAST6=m
1179CONFIG_CRYPTO_DES=y
1180# CONFIG_CRYPTO_FCRYPT is not set
1181# CONFIG_CRYPTO_KHAZAD is not set
1182# CONFIG_CRYPTO_SALSA20 is not set
1183# CONFIG_CRYPTO_SEED is not set
1184CONFIG_CRYPTO_SERPENT=m 101CONFIG_CRYPTO_SERPENT=m
1185# CONFIG_CRYPTO_TEA is not set
1186CONFIG_CRYPTO_TWOFISH=m 102CONFIG_CRYPTO_TWOFISH=m
1187CONFIG_CRYPTO_TWOFISH_COMMON=m
1188
1189#
1190# Compression
1191#
1192CONFIG_CRYPTO_DEFLATE=y
1193# CONFIG_CRYPTO_ZLIB is not set
1194# CONFIG_CRYPTO_LZO is not set
1195
1196#
1197# Random Number Generation
1198#
1199# CONFIG_CRYPTO_ANSI_CPRNG is not set 103# CONFIG_CRYPTO_ANSI_CPRNG is not set
1200# CONFIG_CRYPTO_HW is not set 104# CONFIG_CRYPTO_HW is not set
1201# CONFIG_BINARY_PRINTF is not set
1202
1203#
1204# Library routines
1205#
1206CONFIG_BITREVERSE=y
1207CONFIG_GENERIC_FIND_LAST_BIT=y
1208# CONFIG_CRC_CCITT is not set
1209# CONFIG_CRC16 is not set
1210# CONFIG_CRC_T10DIF is not set
1211# CONFIG_CRC_ITU_T is not set
1212CONFIG_CRC32=y
1213# CONFIG_CRC7 is not set
1214CONFIG_LIBCRC32C=m 105CONFIG_LIBCRC32C=m
1215CONFIG_ZLIB_INFLATE=y
1216CONFIG_ZLIB_DEFLATE=y
1217CONFIG_LZO_DECOMPRESS=y
1218CONFIG_DECOMPRESS_GZIP=y
1219CONFIG_DECOMPRESS_BZIP2=y
1220CONFIG_DECOMPRESS_LZMA=y
1221CONFIG_DECOMPRESS_LZO=y
1222CONFIG_HAS_IOMEM=y
1223CONFIG_HAS_IOPORT=y
1224CONFIG_HAS_DMA=y
1225CONFIG_NLATTR=y
diff --git a/arch/sparc/configs/sparc64_defconfig b/arch/sparc/configs/sparc64_defconfig
index 8a3b33a20632..3c1e85807403 100644
--- a/arch/sparc/configs/sparc64_defconfig
+++ b/arch/sparc/configs/sparc64_defconfig
@@ -1,300 +1,41 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.35
4# Mon Aug 9 02:31:36 2010
5#
6CONFIG_64BIT=y 1CONFIG_64BIT=y
7CONFIG_SPARC=y
8# CONFIG_SPARC32 is not set
9CONFIG_SPARC64=y
10CONFIG_ARCH_DEFCONFIG="arch/sparc/configs/sparc64_defconfig"
11CONFIG_BITS=64
12CONFIG_GENERIC_CMOS_UPDATE=y
13CONFIG_GENERIC_CLOCKEVENTS=y
14CONFIG_IOMMU_HELPER=y
15CONFIG_QUICKLIST=y
16CONFIG_STACKTRACE_SUPPORT=y
17CONFIG_LOCKDEP_SUPPORT=y
18CONFIG_HAVE_LATENCYTOP_SUPPORT=y
19CONFIG_AUDIT_ARCH=y
20CONFIG_HAVE_SETUP_PER_CPU_AREA=y
21CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
22CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
23CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
24CONFIG_MMU=y
25CONFIG_NEED_DMA_MAP_STATE=y
26CONFIG_NEED_SG_DMA_LENGTH=y
27CONFIG_ARCH_NO_VIRT_TO_BUS=y
28CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
29CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
30CONFIG_CONSTRUCTORS=y
31
32#
33# General setup
34#
35CONFIG_EXPERIMENTAL=y 2CONFIG_EXPERIMENTAL=y
36CONFIG_LOCK_KERNEL=y
37CONFIG_INIT_ENV_ARG_LIMIT=32
38CONFIG_CROSS_COMPILE=""
39CONFIG_LOCALVERSION=""
40# CONFIG_LOCALVERSION_AUTO is not set 3# CONFIG_LOCALVERSION_AUTO is not set
41CONFIG_SWAP=y
42CONFIG_SYSVIPC=y 4CONFIG_SYSVIPC=y
43CONFIG_SYSVIPC_SYSCTL=y
44CONFIG_POSIX_MQUEUE=y 5CONFIG_POSIX_MQUEUE=y
45CONFIG_POSIX_MQUEUE_SYSCTL=y
46# CONFIG_BSD_PROCESS_ACCT is not set
47# CONFIG_TASKSTATS is not set
48# CONFIG_AUDIT is not set
49
50#
51# RCU Subsystem
52#
53CONFIG_TREE_RCU=y
54# CONFIG_RCU_TRACE is not set
55CONFIG_RCU_FANOUT=64
56# CONFIG_RCU_FANOUT_EXACT is not set
57# CONFIG_RCU_FAST_NO_HZ is not set
58# CONFIG_TREE_RCU_TRACE is not set
59# CONFIG_IKCONFIG is not set
60CONFIG_LOG_BUF_SHIFT=18 6CONFIG_LOG_BUF_SHIFT=18
61# CONFIG_CGROUPS is not set
62# CONFIG_SYSFS_DEPRECATED_V2 is not set
63CONFIG_RELAY=y
64CONFIG_NAMESPACES=y
65# CONFIG_UTS_NS is not set
66# CONFIG_IPC_NS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_NET_NS is not set
70CONFIG_BLK_DEV_INITRD=y 7CONFIG_BLK_DEV_INITRD=y
71CONFIG_INITRAMFS_SOURCE=""
72CONFIG_RD_GZIP=y
73CONFIG_RD_BZIP2=y
74CONFIG_RD_LZMA=y
75CONFIG_RD_LZO=y
76CONFIG_CC_OPTIMIZE_FOR_SIZE=y
77CONFIG_SYSCTL=y
78CONFIG_ANON_INODES=y
79# CONFIG_EMBEDDED is not set
80CONFIG_UID16=y
81CONFIG_SYSCTL_SYSCALL=y
82CONFIG_KALLSYMS=y
83# CONFIG_KALLSYMS_ALL is not set
84# CONFIG_KALLSYMS_EXTRA_PASS is not set
85CONFIG_HOTPLUG=y
86CONFIG_PRINTK=y
87CONFIG_BUG=y
88CONFIG_ELF_CORE=y
89CONFIG_BASE_FULL=y
90CONFIG_FUTEX=y
91CONFIG_EPOLL=y
92CONFIG_SIGNALFD=y
93CONFIG_TIMERFD=y
94CONFIG_EVENTFD=y
95CONFIG_SHMEM=y
96CONFIG_AIO=y
97CONFIG_HAVE_PERF_EVENTS=y
98CONFIG_PERF_USE_VMALLOC=y
99
100#
101# Kernel Performance Events And Counters
102#
103CONFIG_PERF_EVENTS=y
104CONFIG_PERF_COUNTERS=y 8CONFIG_PERF_COUNTERS=y
105# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
106CONFIG_VM_EVENT_COUNTERS=y
107CONFIG_PCI_QUIRKS=y
108# CONFIG_COMPAT_BRK is not set 9# CONFIG_COMPAT_BRK is not set
109CONFIG_SLAB=y 10CONFIG_SLAB=y
110# CONFIG_SLUB is not set
111CONFIG_PROFILING=y 11CONFIG_PROFILING=y
112CONFIG_TRACEPOINTS=y
113CONFIG_OPROFILE=m 12CONFIG_OPROFILE=m
114CONFIG_HAVE_OPROFILE=y
115CONFIG_KPROBES=y 13CONFIG_KPROBES=y
116CONFIG_HAVE_SYSCALL_WRAPPERS=y
117CONFIG_KRETPROBES=y
118CONFIG_HAVE_KPROBES=y
119CONFIG_HAVE_KRETPROBES=y
120CONFIG_HAVE_ARCH_TRACEHOOK=y
121CONFIG_HAVE_DMA_ATTRS=y
122CONFIG_USE_GENERIC_SMP_HELPERS=y
123CONFIG_HAVE_DMA_API_DEBUG=y
124
125#
126# GCOV-based kernel profiling
127#
128# CONFIG_GCOV_KERNEL is not set
129# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
130CONFIG_SLABINFO=y
131CONFIG_RT_MUTEXES=y
132CONFIG_BASE_SMALL=0
133CONFIG_MODULES=y 14CONFIG_MODULES=y
134# CONFIG_MODULE_FORCE_LOAD is not set
135CONFIG_MODULE_UNLOAD=y 15CONFIG_MODULE_UNLOAD=y
136CONFIG_MODULE_FORCE_UNLOAD=y 16CONFIG_MODULE_FORCE_UNLOAD=y
137CONFIG_MODVERSIONS=y 17CONFIG_MODVERSIONS=y
138CONFIG_MODULE_SRCVERSION_ALL=y 18CONFIG_MODULE_SRCVERSION_ALL=y
139CONFIG_STOP_MACHINE=y
140CONFIG_BLOCK=y
141CONFIG_BLK_DEV_BSG=y
142# CONFIG_BLK_DEV_INTEGRITY is not set
143CONFIG_BLOCK_COMPAT=y
144
145#
146# IO Schedulers
147#
148CONFIG_IOSCHED_NOOP=y
149CONFIG_IOSCHED_DEADLINE=y
150CONFIG_IOSCHED_CFQ=y
151# CONFIG_DEFAULT_DEADLINE is not set
152CONFIG_DEFAULT_CFQ=y
153# CONFIG_DEFAULT_NOOP is not set
154CONFIG_DEFAULT_IOSCHED="cfq"
155# CONFIG_INLINE_SPIN_TRYLOCK is not set
156# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
157# CONFIG_INLINE_SPIN_LOCK is not set
158# CONFIG_INLINE_SPIN_LOCK_BH is not set
159# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
160# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
161CONFIG_INLINE_SPIN_UNLOCK=y
162# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
163CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
164# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
165# CONFIG_INLINE_READ_TRYLOCK is not set
166# CONFIG_INLINE_READ_LOCK is not set
167# CONFIG_INLINE_READ_LOCK_BH is not set
168# CONFIG_INLINE_READ_LOCK_IRQ is not set
169# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
170CONFIG_INLINE_READ_UNLOCK=y
171# CONFIG_INLINE_READ_UNLOCK_BH is not set
172CONFIG_INLINE_READ_UNLOCK_IRQ=y
173# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
174# CONFIG_INLINE_WRITE_TRYLOCK is not set
175# CONFIG_INLINE_WRITE_LOCK is not set
176# CONFIG_INLINE_WRITE_LOCK_BH is not set
177# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
178# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
179CONFIG_INLINE_WRITE_UNLOCK=y
180# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
181CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
182# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
183CONFIG_MUTEX_SPIN_ON_OWNER=y
184# CONFIG_FREEZER is not set
185
186#
187# Processor type and features
188#
189CONFIG_SMP=y 19CONFIG_SMP=y
190CONFIG_NR_CPUS=64
191CONFIG_HZ_100=y 20CONFIG_HZ_100=y
192# CONFIG_HZ_250 is not set
193# CONFIG_HZ_300 is not set
194# CONFIG_HZ_1000 is not set
195CONFIG_HZ=100
196CONFIG_SCHED_HRTICK=y
197CONFIG_RWSEM_XCHGADD_ALGORITHM=y
198CONFIG_GENERIC_FIND_NEXT_BIT=y
199CONFIG_GENERIC_HWEIGHT=y
200CONFIG_GENERIC_CALIBRATE_DELAY=y
201CONFIG_ARCH_MAY_HAVE_PC_FDC=y
202CONFIG_SPARC64_SMP=y
203CONFIG_EARLYFB=y
204CONFIG_SPARC64_PAGE_SIZE_8KB=y
205# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
206CONFIG_SECCOMP=y
207CONFIG_HOTPLUG_CPU=y 21CONFIG_HOTPLUG_CPU=y
208CONFIG_GENERIC_HARDIRQS=y
209CONFIG_TICK_ONESHOT=y
210CONFIG_NO_HZ=y 22CONFIG_NO_HZ=y
211CONFIG_HIGH_RES_TIMERS=y 23CONFIG_HIGH_RES_TIMERS=y
212CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
213# CONFIG_CPU_FREQ is not set
214CONFIG_US3_MC=y
215CONFIG_HUGETLB_PAGE_SIZE_4MB=y
216# CONFIG_HUGETLB_PAGE_SIZE_512K is not set
217# CONFIG_HUGETLB_PAGE_SIZE_64K is not set
218CONFIG_NUMA=y 24CONFIG_NUMA=y
219CONFIG_NODES_SHIFT=4
220CONFIG_NODES_SPAN_OTHER_NODES=y
221CONFIG_ARCH_POPULATES_NODE_MAP=y
222CONFIG_ARCH_SELECT_MEMORY_MODEL=y
223CONFIG_ARCH_SPARSEMEM_ENABLE=y
224CONFIG_ARCH_SPARSEMEM_DEFAULT=y
225CONFIG_SELECT_MEMORY_MODEL=y
226CONFIG_SPARSEMEM_MANUAL=y
227CONFIG_SPARSEMEM=y
228CONFIG_NEED_MULTIPLE_NODES=y
229CONFIG_HAVE_MEMORY_PRESENT=y
230CONFIG_SPARSEMEM_EXTREME=y
231CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
232CONFIG_SPARSEMEM_VMEMMAP=y
233CONFIG_HAVE_MEMBLOCK=y
234CONFIG_PAGEFLAGS_EXTENDED=y
235CONFIG_SPLIT_PTLOCK_CPUS=4
236# CONFIG_COMPACTION is not set
237CONFIG_MIGRATION=y
238CONFIG_PHYS_ADDR_T_64BIT=y
239CONFIG_ZONE_DMA_FLAG=0
240CONFIG_NR_QUICK=1
241# CONFIG_KSM is not set
242CONFIG_DEFAULT_MMAP_MIN_ADDR=8192 25CONFIG_DEFAULT_MMAP_MIN_ADDR=8192
243CONFIG_SCHED_SMT=y
244CONFIG_SCHED_MC=y
245# CONFIG_PREEMPT_NONE is not set
246CONFIG_PREEMPT_VOLUNTARY=y 26CONFIG_PREEMPT_VOLUNTARY=y
247# CONFIG_PREEMPT is not set
248# CONFIG_CMDLINE_BOOL is not set
249
250#
251# Bus options (PCI etc.)
252#
253CONFIG_SBUS=y
254CONFIG_SBUSCHAR=y
255CONFIG_SUN_LDOMS=y 27CONFIG_SUN_LDOMS=y
256CONFIG_PCI=y 28CONFIG_PCI=y
257CONFIG_PCI_DOMAINS=y
258CONFIG_PCI_SYSCALL=y
259CONFIG_ARCH_SUPPORTS_MSI=y
260CONFIG_PCI_MSI=y 29CONFIG_PCI_MSI=y
261# CONFIG_PCI_DEBUG is not set
262# CONFIG_PCI_STUB is not set
263# CONFIG_PCI_IOV is not set
264# CONFIG_PCCARD is not set
265CONFIG_SUN_OPENPROMFS=m 30CONFIG_SUN_OPENPROMFS=m
266CONFIG_SPARC64_PCI=y
267
268#
269# Executable file formats
270#
271CONFIG_BINFMT_ELF=y
272CONFIG_COMPAT_BINFMT_ELF=y
273# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
274# CONFIG_HAVE_AOUT is not set
275CONFIG_BINFMT_MISC=m 31CONFIG_BINFMT_MISC=m
276CONFIG_COMPAT=y
277CONFIG_SYSVIPC_COMPAT=y
278CONFIG_NET=y
279
280#
281# Networking options
282#
283CONFIG_PACKET=y 32CONFIG_PACKET=y
284CONFIG_UNIX=y 33CONFIG_UNIX=y
285CONFIG_XFRM=y
286CONFIG_XFRM_USER=m 34CONFIG_XFRM_USER=m
287# CONFIG_XFRM_SUB_POLICY is not set
288CONFIG_XFRM_MIGRATE=y
289# CONFIG_XFRM_STATISTICS is not set
290CONFIG_XFRM_IPCOMP=y
291CONFIG_NET_KEY=m 35CONFIG_NET_KEY=m
292CONFIG_NET_KEY_MIGRATE=y 36CONFIG_NET_KEY_MIGRATE=y
293CONFIG_INET=y 37CONFIG_INET=y
294CONFIG_IP_MULTICAST=y 38CONFIG_IP_MULTICAST=y
295# CONFIG_IP_ADVANCED_ROUTER is not set
296CONFIG_IP_FIB_HASH=y
297# CONFIG_IP_PNP is not set
298CONFIG_NET_IPIP=m 39CONFIG_NET_IPIP=m
299CONFIG_NET_IPGRE=m 40CONFIG_NET_IPGRE=m
300CONFIG_NET_IPGRE_BROADCAST=y 41CONFIG_NET_IPGRE_BROADCAST=y
@@ -306,19 +47,6 @@ CONFIG_SYN_COOKIES=y
306CONFIG_INET_AH=y 47CONFIG_INET_AH=y
307CONFIG_INET_ESP=y 48CONFIG_INET_ESP=y
308CONFIG_INET_IPCOMP=y 49CONFIG_INET_IPCOMP=y
309CONFIG_INET_XFRM_TUNNEL=y
310CONFIG_INET_TUNNEL=y
311CONFIG_INET_XFRM_MODE_TRANSPORT=y
312CONFIG_INET_XFRM_MODE_TUNNEL=y
313CONFIG_INET_XFRM_MODE_BEET=y
314CONFIG_INET_LRO=y
315CONFIG_INET_DIAG=y
316CONFIG_INET_TCP_DIAG=y
317# CONFIG_TCP_CONG_ADVANCED is not set
318CONFIG_TCP_CONG_CUBIC=y
319CONFIG_DEFAULT_TCP_CONG="cubic"
320# CONFIG_TCP_MD5SIG is not set
321CONFIG_IPV6=m
322CONFIG_IPV6_PRIVACY=y 50CONFIG_IPV6_PRIVACY=y
323CONFIG_IPV6_ROUTER_PREF=y 51CONFIG_IPV6_ROUTER_PREF=y
324CONFIG_IPV6_ROUTE_INFO=y 52CONFIG_IPV6_ROUTE_INFO=y
@@ -326,283 +54,33 @@ CONFIG_IPV6_OPTIMISTIC_DAD=y
326CONFIG_INET6_AH=m 54CONFIG_INET6_AH=m
327CONFIG_INET6_ESP=m 55CONFIG_INET6_ESP=m
328CONFIG_INET6_IPCOMP=m 56CONFIG_INET6_IPCOMP=m
329# CONFIG_IPV6_MIP6 is not set
330CONFIG_INET6_XFRM_TUNNEL=m
331CONFIG_INET6_TUNNEL=m
332CONFIG_INET6_XFRM_MODE_TRANSPORT=m
333CONFIG_INET6_XFRM_MODE_TUNNEL=m
334CONFIG_INET6_XFRM_MODE_BEET=m
335# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
336CONFIG_IPV6_SIT=m
337# CONFIG_IPV6_SIT_6RD is not set
338CONFIG_IPV6_NDISC_NODETYPE=y
339CONFIG_IPV6_TUNNEL=m 57CONFIG_IPV6_TUNNEL=m
340# CONFIG_IPV6_MULTIPLE_TABLES is not set
341# CONFIG_IPV6_MROUTE is not set
342# CONFIG_NETWORK_SECMARK is not set
343# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
344# CONFIG_NETFILTER is not set
345# CONFIG_IP_DCCP is not set
346# CONFIG_IP_SCTP is not set
347# CONFIG_RDS is not set
348# CONFIG_TIPC is not set
349# CONFIG_ATM is not set
350# CONFIG_L2TP is not set
351# CONFIG_BRIDGE is not set
352# CONFIG_NET_DSA is not set
353CONFIG_VLAN_8021Q=m 58CONFIG_VLAN_8021Q=m
354# CONFIG_VLAN_8021Q_GVRP is not set
355# CONFIG_DECNET is not set
356# CONFIG_LLC2 is not set
357# CONFIG_IPX is not set
358# CONFIG_ATALK is not set
359# CONFIG_X25 is not set
360# CONFIG_LAPB is not set
361# CONFIG_ECONET is not set
362# CONFIG_WAN_ROUTER is not set
363# CONFIG_PHONET is not set
364# CONFIG_IEEE802154 is not set
365# CONFIG_NET_SCHED is not set
366# CONFIG_DCB is not set
367# CONFIG_DNS_RESOLVER is not set
368CONFIG_RPS=y
369
370#
371# Network testing
372#
373CONFIG_NET_PKTGEN=m 59CONFIG_NET_PKTGEN=m
374CONFIG_NET_TCPPROBE=m 60CONFIG_NET_TCPPROBE=m
375# CONFIG_NET_DROP_MONITOR is not set
376# CONFIG_HAMRADIO is not set
377# CONFIG_CAN is not set
378# CONFIG_IRDA is not set
379# CONFIG_BT is not set
380# CONFIG_AF_RXRPC is not set
381CONFIG_WIRELESS=y
382# CONFIG_CFG80211 is not set
383# CONFIG_LIB80211 is not set
384
385#
386# CFG80211 needs to be enabled for MAC80211
387#
388
389#
390# Some wireless drivers require a rate control algorithm
391#
392# CONFIG_WIMAX is not set
393# CONFIG_RFKILL is not set
394# CONFIG_NET_9P is not set
395# CONFIG_CAIF is not set
396
397#
398# Device Drivers
399#
400
401#
402# Generic Driver Options
403#
404CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 61CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
405# CONFIG_DEVTMPFS is not set
406CONFIG_STANDALONE=y
407# CONFIG_PREVENT_FIRMWARE_BUILD is not set 62# CONFIG_PREVENT_FIRMWARE_BUILD is not set
408CONFIG_FW_LOADER=y
409CONFIG_FIRMWARE_IN_KERNEL=y
410CONFIG_EXTRA_FIRMWARE=""
411# CONFIG_DEBUG_DRIVER is not set
412# CONFIG_DEBUG_DEVRES is not set
413# CONFIG_SYS_HYPERVISOR is not set
414CONFIG_CONNECTOR=m 63CONFIG_CONNECTOR=m
415# CONFIG_MTD is not set
416CONFIG_OF=y
417
418#
419# Flattened Device Tree and Open Firmware support
420#
421CONFIG_OF_DEVICE=y
422CONFIG_OF_MDIO=m
423# CONFIG_PARPORT is not set
424CONFIG_BLK_DEV=y
425# CONFIG_BLK_DEV_FD is not set
426# CONFIG_BLK_CPQ_CISS_DA is not set
427# CONFIG_BLK_DEV_DAC960 is not set
428# CONFIG_BLK_DEV_UMEM is not set
429# CONFIG_BLK_DEV_COW_COMMON is not set
430CONFIG_BLK_DEV_LOOP=m 64CONFIG_BLK_DEV_LOOP=m
431CONFIG_BLK_DEV_CRYPTOLOOP=m 65CONFIG_BLK_DEV_CRYPTOLOOP=m
432# CONFIG_BLK_DEV_DRBD is not set
433CONFIG_BLK_DEV_NBD=m 66CONFIG_BLK_DEV_NBD=m
434# CONFIG_BLK_DEV_SX8 is not set
435# CONFIG_BLK_DEV_UB is not set
436# CONFIG_BLK_DEV_RAM is not set
437CONFIG_CDROM_PKTCDVD=m 67CONFIG_CDROM_PKTCDVD=m
438CONFIG_CDROM_PKTCDVD_BUFFERS=8
439CONFIG_CDROM_PKTCDVD_WCACHE=y 68CONFIG_CDROM_PKTCDVD_WCACHE=y
440CONFIG_ATA_OVER_ETH=m 69CONFIG_ATA_OVER_ETH=m
441CONFIG_SUNVDC=m 70CONFIG_SUNVDC=m
442# CONFIG_BLK_DEV_HD is not set
443CONFIG_MISC_DEVICES=y
444# CONFIG_AD525X_DPOT is not set
445# CONFIG_PHANTOM is not set
446# CONFIG_SGI_IOC4 is not set
447# CONFIG_TIFM_CORE is not set
448# CONFIG_ICS932S401 is not set
449# CONFIG_ENCLOSURE_SERVICES is not set
450# CONFIG_HP_ILO is not set
451# CONFIG_ISL29003 is not set
452# CONFIG_SENSORS_TSL2550 is not set
453# CONFIG_DS1682 is not set
454# CONFIG_C2PORT is not set
455
456#
457# EEPROM support
458#
459# CONFIG_EEPROM_AT24 is not set
460# CONFIG_EEPROM_LEGACY is not set
461# CONFIG_EEPROM_MAX6875 is not set
462# CONFIG_EEPROM_93CX6 is not set
463# CONFIG_CB710_CORE is not set
464CONFIG_HAVE_IDE=y
465CONFIG_IDE=y 71CONFIG_IDE=y
466
467#
468# Please see Documentation/ide/ide.txt for help/info on IDE drives
469#
470CONFIG_IDE_XFER_MODE=y
471CONFIG_IDE_TIMINGS=y
472CONFIG_IDE_ATAPI=y
473# CONFIG_BLK_DEV_IDE_SATA is not set
474CONFIG_IDE_GD=y
475CONFIG_IDE_GD_ATA=y
476# CONFIG_IDE_GD_ATAPI is not set
477CONFIG_BLK_DEV_IDECD=y 72CONFIG_BLK_DEV_IDECD=y
478CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
479# CONFIG_BLK_DEV_IDETAPE is not set
480# CONFIG_IDE_TASK_IOCTL is not set
481CONFIG_IDE_PROC_FS=y
482
483#
484# IDE chipset support/bugfixes
485#
486# CONFIG_BLK_DEV_PLATFORM is not set
487CONFIG_BLK_DEV_IDEDMA_SFF=y
488
489#
490# PCI IDE chipsets support
491#
492CONFIG_BLK_DEV_IDEPCI=y
493CONFIG_IDEPCI_PCIBUS_ORDER=y
494# CONFIG_BLK_DEV_GENERIC is not set
495# CONFIG_BLK_DEV_OPTI621 is not set
496CONFIG_BLK_DEV_IDEDMA_PCI=y
497# CONFIG_BLK_DEV_AEC62XX is not set
498CONFIG_BLK_DEV_ALI15X3=y 73CONFIG_BLK_DEV_ALI15X3=y
499# CONFIG_BLK_DEV_AMD74XX is not set
500# CONFIG_BLK_DEV_CMD64X is not set
501# CONFIG_BLK_DEV_TRIFLEX is not set
502# CONFIG_BLK_DEV_CS5520 is not set
503# CONFIG_BLK_DEV_CS5530 is not set
504# CONFIG_BLK_DEV_HPT366 is not set
505# CONFIG_BLK_DEV_JMICRON is not set
506# CONFIG_BLK_DEV_SC1200 is not set
507# CONFIG_BLK_DEV_PIIX is not set
508# CONFIG_BLK_DEV_IT8172 is not set
509# CONFIG_BLK_DEV_IT8213 is not set
510# CONFIG_BLK_DEV_IT821X is not set
511# CONFIG_BLK_DEV_NS87415 is not set
512# CONFIG_BLK_DEV_PDC202XX_OLD is not set
513# CONFIG_BLK_DEV_PDC202XX_NEW is not set
514# CONFIG_BLK_DEV_SVWKS is not set
515# CONFIG_BLK_DEV_SIIMAGE is not set
516# CONFIG_BLK_DEV_SLC90E66 is not set
517# CONFIG_BLK_DEV_TRM290 is not set
518# CONFIG_BLK_DEV_VIA82CXXX is not set
519# CONFIG_BLK_DEV_TC86C001 is not set
520CONFIG_BLK_DEV_IDEDMA=y
521
522#
523# SCSI device support
524#
525CONFIG_SCSI_MOD=y
526CONFIG_RAID_ATTRS=m 74CONFIG_RAID_ATTRS=m
527CONFIG_SCSI=y 75CONFIG_SCSI=y
528CONFIG_SCSI_DMA=y
529# CONFIG_SCSI_TGT is not set
530CONFIG_SCSI_NETLINK=y
531CONFIG_SCSI_PROC_FS=y
532
533#
534# SCSI support type (disk, tape, CD-ROM)
535#
536CONFIG_BLK_DEV_SD=y 76CONFIG_BLK_DEV_SD=y
537# CONFIG_CHR_DEV_ST is not set
538# CONFIG_CHR_DEV_OSST is not set
539CONFIG_BLK_DEV_SR=m 77CONFIG_BLK_DEV_SR=m
540CONFIG_BLK_DEV_SR_VENDOR=y 78CONFIG_BLK_DEV_SR_VENDOR=y
541CONFIG_CHR_DEV_SG=m 79CONFIG_CHR_DEV_SG=m
542# CONFIG_CHR_DEV_SCH is not set
543CONFIG_SCSI_MULTI_LUN=y 80CONFIG_SCSI_MULTI_LUN=y
544CONFIG_SCSI_CONSTANTS=y 81CONFIG_SCSI_CONSTANTS=y
545# CONFIG_SCSI_LOGGING is not set
546# CONFIG_SCSI_SCAN_ASYNC is not set
547CONFIG_SCSI_WAIT_SCAN=m
548
549#
550# SCSI Transports
551#
552CONFIG_SCSI_SPI_ATTRS=y 82CONFIG_SCSI_SPI_ATTRS=y
553CONFIG_SCSI_FC_ATTRS=y 83CONFIG_SCSI_FC_ATTRS=y
554# CONFIG_SCSI_ISCSI_ATTRS is not set
555# CONFIG_SCSI_SAS_ATTRS is not set
556# CONFIG_SCSI_SAS_LIBSAS is not set
557# CONFIG_SCSI_SRP_ATTRS is not set
558CONFIG_SCSI_LOWLEVEL=y
559# CONFIG_ISCSI_TCP is not set
560# CONFIG_SCSI_CXGB3_ISCSI is not set
561# CONFIG_SCSI_BNX2_ISCSI is not set
562# CONFIG_BE2ISCSI is not set
563# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
564# CONFIG_SCSI_HPSA is not set
565# CONFIG_SCSI_3W_9XXX is not set
566# CONFIG_SCSI_3W_SAS is not set
567# CONFIG_SCSI_ACARD is not set
568# CONFIG_SCSI_AACRAID is not set
569# CONFIG_SCSI_AIC7XXX is not set
570# CONFIG_SCSI_AIC7XXX_OLD is not set
571# CONFIG_SCSI_AIC79XX is not set
572# CONFIG_SCSI_AIC94XX is not set
573# CONFIG_SCSI_MVSAS is not set
574# CONFIG_SCSI_ARCMSR is not set
575# CONFIG_MEGARAID_NEWGEN is not set
576# CONFIG_MEGARAID_LEGACY is not set
577# CONFIG_MEGARAID_SAS is not set
578# CONFIG_SCSI_MPT2SAS is not set
579# CONFIG_SCSI_HPTIOP is not set
580# CONFIG_LIBFC is not set
581# CONFIG_LIBFCOE is not set
582# CONFIG_FCOE is not set
583# CONFIG_SCSI_DMX3191D is not set
584# CONFIG_SCSI_FUTURE_DOMAIN is not set
585# CONFIG_SCSI_IPS is not set
586# CONFIG_SCSI_INITIO is not set
587# CONFIG_SCSI_INIA100 is not set
588# CONFIG_SCSI_STEX is not set
589# CONFIG_SCSI_SYM53C8XX_2 is not set
590# CONFIG_SCSI_QLOGIC_1280 is not set
591# CONFIG_SCSI_QLOGICPTI is not set
592# CONFIG_SCSI_QLA_FC is not set
593# CONFIG_SCSI_QLA_ISCSI is not set
594# CONFIG_SCSI_LPFC is not set
595# CONFIG_SCSI_DC395x is not set
596# CONFIG_SCSI_DC390T is not set
597# CONFIG_SCSI_DEBUG is not set
598# CONFIG_SCSI_SUNESP is not set
599# CONFIG_SCSI_PMCRAID is not set
600# CONFIG_SCSI_PM8001 is not set
601# CONFIG_SCSI_SRP is not set
602# CONFIG_SCSI_BFA_FC is not set
603# CONFIG_SCSI_DH is not set
604# CONFIG_SCSI_OSD_INITIATOR is not set
605# CONFIG_ATA is not set
606CONFIG_MD=y 84CONFIG_MD=y
607CONFIG_BLK_DEV_MD=m 85CONFIG_BLK_DEV_MD=m
608CONFIG_MD_LINEAR=m 86CONFIG_MD_LINEAR=m
@@ -610,184 +88,26 @@ CONFIG_MD_RAID0=m
610CONFIG_MD_RAID1=m 88CONFIG_MD_RAID1=m
611CONFIG_MD_RAID10=m 89CONFIG_MD_RAID10=m
612CONFIG_MD_RAID456=m 90CONFIG_MD_RAID456=m
613# CONFIG_MULTICORE_RAID456 is not set
614CONFIG_MD_RAID6_PQ=m
615# CONFIG_ASYNC_RAID6_TEST is not set
616CONFIG_MD_MULTIPATH=m 91CONFIG_MD_MULTIPATH=m
617# CONFIG_MD_FAULTY is not set
618CONFIG_BLK_DEV_DM=m 92CONFIG_BLK_DEV_DM=m
619# CONFIG_DM_DEBUG is not set
620CONFIG_DM_CRYPT=m 93CONFIG_DM_CRYPT=m
621CONFIG_DM_SNAPSHOT=m 94CONFIG_DM_SNAPSHOT=m
622CONFIG_DM_MIRROR=m 95CONFIG_DM_MIRROR=m
623# CONFIG_DM_LOG_USERSPACE is not set
624CONFIG_DM_ZERO=m 96CONFIG_DM_ZERO=m
625# CONFIG_DM_MULTIPATH is not set
626# CONFIG_DM_DELAY is not set
627# CONFIG_DM_UEVENT is not set
628# CONFIG_FUSION is not set
629
630#
631# IEEE 1394 (FireWire) support
632#
633
634#
635# You can enable one or both FireWire driver stacks.
636#
637
638#
639# The newer stack is recommended.
640#
641# CONFIG_FIREWIRE is not set
642# CONFIG_IEEE1394 is not set
643# CONFIG_FIREWIRE_NOSY is not set
644# CONFIG_I2O is not set
645CONFIG_NETDEVICES=y 97CONFIG_NETDEVICES=y
646# CONFIG_DUMMY is not set
647# CONFIG_BONDING is not set
648# CONFIG_MACVLAN is not set
649# CONFIG_EQUALIZER is not set
650# CONFIG_TUN is not set
651# CONFIG_VETH is not set
652# CONFIG_ARCNET is not set
653CONFIG_PHYLIB=m
654
655#
656# MII PHY device drivers
657#
658# CONFIG_MARVELL_PHY is not set
659# CONFIG_DAVICOM_PHY is not set
660# CONFIG_QSEMI_PHY is not set
661# CONFIG_LXT_PHY is not set
662# CONFIG_CICADA_PHY is not set
663# CONFIG_VITESSE_PHY is not set
664# CONFIG_SMSC_PHY is not set
665# CONFIG_BROADCOM_PHY is not set
666# CONFIG_ICPLUS_PHY is not set
667# CONFIG_REALTEK_PHY is not set
668# CONFIG_NATIONAL_PHY is not set
669# CONFIG_STE10XP is not set
670# CONFIG_LSI_ET1011C_PHY is not set
671# CONFIG_MICREL_PHY is not set
672# CONFIG_MDIO_BITBANG is not set
673CONFIG_NET_ETHERNET=y 98CONFIG_NET_ETHERNET=y
674CONFIG_MII=m 99CONFIG_MII=m
675CONFIG_SUNLANCE=m 100CONFIG_SUNLANCE=m
676CONFIG_HAPPYMEAL=m 101CONFIG_HAPPYMEAL=m
677# CONFIG_SUNBMAC is not set
678# CONFIG_SUNQE is not set
679CONFIG_SUNGEM=m 102CONFIG_SUNGEM=m
680# CONFIG_CASSINI is not set
681CONFIG_SUNVNET=m 103CONFIG_SUNVNET=m
682# CONFIG_NET_VENDOR_3COM is not set
683# CONFIG_ETHOC is not set
684# CONFIG_GRETH is not set
685# CONFIG_DNET is not set
686# CONFIG_NET_TULIP is not set
687# CONFIG_HP100 is not set
688# CONFIG_IBM_NEW_EMAC_ZMII is not set
689# CONFIG_IBM_NEW_EMAC_RGMII is not set
690# CONFIG_IBM_NEW_EMAC_TAH is not set
691# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
692# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
693# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
694# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
695CONFIG_NET_PCI=y 104CONFIG_NET_PCI=y
696# CONFIG_PCNET32 is not set
697# CONFIG_AMD8111_ETH is not set
698# CONFIG_ADAPTEC_STARFIRE is not set
699# CONFIG_KSZ884X_PCI is not set
700# CONFIG_B44 is not set
701# CONFIG_FORCEDETH is not set
702# CONFIG_E100 is not set
703# CONFIG_FEALNX is not set
704# CONFIG_NATSEMI is not set
705# CONFIG_NE2K_PCI is not set
706# CONFIG_8139CP is not set
707# CONFIG_8139TOO is not set
708# CONFIG_R6040 is not set
709# CONFIG_SIS900 is not set
710# CONFIG_EPIC100 is not set
711# CONFIG_SMSC9420 is not set
712# CONFIG_SUNDANCE is not set
713# CONFIG_TLAN is not set
714# CONFIG_KS8851_MLL is not set
715# CONFIG_VIA_RHINE is not set
716# CONFIG_SC92031 is not set
717# CONFIG_ATL2 is not set
718CONFIG_NETDEV_1000=y
719# CONFIG_ACENIC is not set
720# CONFIG_DL2K is not set
721CONFIG_E1000=m 105CONFIG_E1000=m
722CONFIG_E1000E=m 106CONFIG_E1000E=m
723# CONFIG_IP1000 is not set
724# CONFIG_IGB is not set
725# CONFIG_IGBVF is not set
726# CONFIG_MYRI_SBUS is not set
727# CONFIG_NS83820 is not set
728# CONFIG_HAMACHI is not set
729# CONFIG_YELLOWFIN is not set
730# CONFIG_R8169 is not set
731# CONFIG_SIS190 is not set
732# CONFIG_SKGE is not set
733# CONFIG_SKY2 is not set
734# CONFIG_VIA_VELOCITY is not set
735CONFIG_TIGON3=m 107CONFIG_TIGON3=m
736CONFIG_BNX2=m 108CONFIG_BNX2=m
737# CONFIG_CNIC is not set
738# CONFIG_QLA3XXX is not set
739# CONFIG_ATL1 is not set
740# CONFIG_ATL1E is not set
741# CONFIG_ATL1C is not set
742# CONFIG_JME is not set
743CONFIG_NETDEV_10000=y
744# CONFIG_CHELSIO_T1 is not set
745CONFIG_CHELSIO_T3_DEPENDS=y
746# CONFIG_CHELSIO_T3 is not set
747CONFIG_CHELSIO_T4_DEPENDS=y
748# CONFIG_CHELSIO_T4 is not set
749CONFIG_CHELSIO_T4VF_DEPENDS=y
750# CONFIG_CHELSIO_T4VF is not set
751# CONFIG_ENIC is not set
752# CONFIG_IXGBE is not set
753# CONFIG_IXGBEVF is not set
754# CONFIG_IXGB is not set
755# CONFIG_S2IO is not set
756# CONFIG_VXGE is not set
757# CONFIG_MYRI10GE is not set
758# CONFIG_NETXEN_NIC is not set
759CONFIG_NIU=m 109CONFIG_NIU=m
760# CONFIG_MLX4_EN is not set
761# CONFIG_MLX4_CORE is not set
762# CONFIG_TEHUTI is not set
763# CONFIG_BNX2X is not set
764# CONFIG_QLCNIC is not set
765# CONFIG_QLGE is not set
766# CONFIG_SFC is not set
767# CONFIG_BE2NET is not set
768# CONFIG_TR is not set
769# CONFIG_WLAN is not set 110# CONFIG_WLAN is not set
770
771#
772# Enable WiMAX (Networking options) to see the WiMAX drivers
773#
774
775#
776# USB Network Adapters
777#
778# CONFIG_USB_CATC is not set
779# CONFIG_USB_KAWETH is not set
780# CONFIG_USB_PEGASUS is not set
781# CONFIG_USB_RTL8150 is not set
782# CONFIG_USB_USBNET is not set
783# CONFIG_USB_IPHETH is not set
784# CONFIG_WAN is not set
785
786#
787# CAIF transport drivers
788#
789# CONFIG_FDDI is not set
790# CONFIG_HIPPI is not set
791CONFIG_PPP=m 111CONFIG_PPP=m
792CONFIG_PPP_MULTILINK=y 112CONFIG_PPP_MULTILINK=y
793CONFIG_PPP_FILTER=y 113CONFIG_PPP_FILTER=y
@@ -797,1160 +117,126 @@ CONFIG_PPP_DEFLATE=m
797CONFIG_PPP_BSDCOMP=m 117CONFIG_PPP_BSDCOMP=m
798CONFIG_PPP_MPPE=m 118CONFIG_PPP_MPPE=m
799CONFIG_PPPOE=m 119CONFIG_PPPOE=m
800# CONFIG_SLIP is not set
801CONFIG_SLHC=m
802# CONFIG_NET_FC is not set
803# CONFIG_NETCONSOLE is not set
804# CONFIG_NETPOLL is not set
805# CONFIG_NET_POLL_CONTROLLER is not set
806# CONFIG_VMXNET3 is not set
807# CONFIG_ISDN is not set
808# CONFIG_PHONE is not set
809
810#
811# Input device support
812#
813CONFIG_INPUT=y
814# CONFIG_INPUT_FF_MEMLESS is not set
815# CONFIG_INPUT_POLLDEV is not set
816# CONFIG_INPUT_SPARSEKMAP is not set
817
818#
819# Userland interfaces
820#
821CONFIG_INPUT_MOUSEDEV=y
822CONFIG_INPUT_MOUSEDEV_PSAUX=y
823CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
824CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
825# CONFIG_INPUT_JOYDEV is not set
826CONFIG_INPUT_EVDEV=y 120CONFIG_INPUT_EVDEV=y
827# CONFIG_INPUT_EVBUG is not set
828
829#
830# Input Device Drivers
831#
832CONFIG_INPUT_KEYBOARD=y
833# CONFIG_KEYBOARD_ADP5588 is not set
834CONFIG_KEYBOARD_ATKBD=y
835# CONFIG_KEYBOARD_QT2160 is not set
836CONFIG_KEYBOARD_LKKBD=m 121CONFIG_KEYBOARD_LKKBD=m
837# CONFIG_KEYBOARD_TCA6416 is not set
838# CONFIG_KEYBOARD_MAX7359 is not set
839# CONFIG_KEYBOARD_MCS is not set
840# CONFIG_KEYBOARD_NEWTON is not set
841# CONFIG_KEYBOARD_OPENCORES is not set
842# CONFIG_KEYBOARD_STOWAWAY is not set
843CONFIG_KEYBOARD_SUNKBD=y 122CONFIG_KEYBOARD_SUNKBD=y
844# CONFIG_KEYBOARD_XTKBD is not set
845CONFIG_INPUT_MOUSE=y
846CONFIG_MOUSE_PS2=y
847CONFIG_MOUSE_PS2_ALPS=y
848CONFIG_MOUSE_PS2_LOGIPS2PP=y
849CONFIG_MOUSE_PS2_SYNAPTICS=y
850CONFIG_MOUSE_PS2_TRACKPOINT=y
851# CONFIG_MOUSE_PS2_ELANTECH is not set
852# CONFIG_MOUSE_PS2_SENTELIC is not set
853# CONFIG_MOUSE_PS2_TOUCHKIT is not set
854CONFIG_MOUSE_SERIAL=y 123CONFIG_MOUSE_SERIAL=y
855# CONFIG_MOUSE_APPLETOUCH is not set
856# CONFIG_MOUSE_BCM5974 is not set
857# CONFIG_MOUSE_VSXXXAA is not set
858# CONFIG_MOUSE_SYNAPTICS_I2C is not set
859# CONFIG_INPUT_JOYSTICK is not set
860# CONFIG_INPUT_TABLET is not set
861# CONFIG_INPUT_TOUCHSCREEN is not set
862CONFIG_INPUT_MISC=y 124CONFIG_INPUT_MISC=y
863# CONFIG_INPUT_AD714X is not set
864CONFIG_INPUT_SPARCSPKR=y 125CONFIG_INPUT_SPARCSPKR=y
865# CONFIG_INPUT_ATI_REMOTE is not set
866# CONFIG_INPUT_ATI_REMOTE2 is not set
867# CONFIG_INPUT_KEYSPAN_REMOTE is not set
868# CONFIG_INPUT_POWERMATE is not set
869# CONFIG_INPUT_YEALINK is not set
870# CONFIG_INPUT_CM109 is not set
871# CONFIG_INPUT_UINPUT is not set
872# CONFIG_INPUT_PCF8574 is not set
873# CONFIG_INPUT_ADXL34X is not set
874
875#
876# Hardware I/O ports
877#
878CONFIG_SERIO=y
879CONFIG_SERIO_I8042=y
880# CONFIG_SERIO_SERPORT is not set 126# CONFIG_SERIO_SERPORT is not set
881CONFIG_SERIO_PCIPS2=m 127CONFIG_SERIO_PCIPS2=m
882CONFIG_SERIO_LIBPS2=y
883CONFIG_SERIO_RAW=m 128CONFIG_SERIO_RAW=m
884# CONFIG_SERIO_ALTERA_PS2 is not set
885# CONFIG_GAMEPORT is not set
886
887#
888# Character devices
889#
890CONFIG_VT=y
891CONFIG_CONSOLE_TRANSLATIONS=y
892CONFIG_VT_CONSOLE=y
893CONFIG_HW_CONSOLE=y
894# CONFIG_VT_HW_CONSOLE_BINDING is not set
895# CONFIG_DEVKMEM is not set 129# CONFIG_DEVKMEM is not set
896# CONFIG_SERIAL_NONSTANDARD is not set
897# CONFIG_N_GSM is not set
898# CONFIG_NOZOMI is not set
899
900#
901# Serial drivers
902#
903# CONFIG_SERIAL_8250 is not set
904
905#
906# Non-8250 serial port support
907#
908CONFIG_SERIAL_SUNCORE=y
909# CONFIG_SERIAL_SUNZILOG is not set
910CONFIG_SERIAL_SUNSU=y 130CONFIG_SERIAL_SUNSU=y
911CONFIG_SERIAL_SUNSU_CONSOLE=y 131CONFIG_SERIAL_SUNSU_CONSOLE=y
912CONFIG_SERIAL_SUNSAB=y 132CONFIG_SERIAL_SUNSAB=y
913CONFIG_SERIAL_SUNSAB_CONSOLE=y 133CONFIG_SERIAL_SUNSAB_CONSOLE=y
914CONFIG_SERIAL_SUNHV=y 134CONFIG_SERIAL_SUNHV=y
915CONFIG_SERIAL_CORE=y
916CONFIG_SERIAL_CORE_CONSOLE=y
917# CONFIG_SERIAL_JSM is not set
918# CONFIG_SERIAL_TIMBERDALE is not set
919# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
920# CONFIG_SERIAL_ALTERA_JTAGUART is not set
921# CONFIG_SERIAL_ALTERA_UART is not set
922CONFIG_UNIX98_PTYS=y
923# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
924# CONFIG_LEGACY_PTYS is not set 135# CONFIG_LEGACY_PTYS is not set
925# CONFIG_IPMI_HANDLER is not set
926CONFIG_HW_RANDOM=m
927# CONFIG_HW_RANDOM_TIMERIOMEM is not set
928CONFIG_HW_RANDOM_N2RNG=m
929# CONFIG_R3964 is not set
930# CONFIG_APPLICOM is not set
931# CONFIG_RAW_DRIVER is not set
932# CONFIG_TCG_TPM is not set
933CONFIG_DEVPORT=y
934# CONFIG_RAMOOPS is not set
935CONFIG_I2C=y
936CONFIG_I2C_BOARDINFO=y
937CONFIG_I2C_COMPAT=y
938# CONFIG_I2C_CHARDEV is not set
939CONFIG_I2C_HELPER_AUTO=y
940CONFIG_I2C_ALGOBIT=y
941
942#
943# I2C Hardware Bus support
944#
945
946#
947# PC SMBus host controller drivers
948#
949# CONFIG_I2C_ALI1535 is not set
950# CONFIG_I2C_ALI1563 is not set
951# CONFIG_I2C_ALI15X3 is not set
952# CONFIG_I2C_AMD756 is not set
953# CONFIG_I2C_AMD8111 is not set
954# CONFIG_I2C_I801 is not set
955# CONFIG_I2C_ISCH is not set
956# CONFIG_I2C_PIIX4 is not set
957# CONFIG_I2C_NFORCE2 is not set
958# CONFIG_I2C_SIS5595 is not set
959# CONFIG_I2C_SIS630 is not set
960# CONFIG_I2C_SIS96X is not set
961# CONFIG_I2C_VIA is not set
962# CONFIG_I2C_VIAPRO is not set
963
964#
965# I2C system bus drivers (mostly embedded / system-on-chip)
966#
967# CONFIG_I2C_OCORES is not set
968# CONFIG_I2C_PCA_PLATFORM is not set
969# CONFIG_I2C_SIMTEC is not set
970# CONFIG_I2C_XILINX is not set
971
972#
973# External I2C/SMBus adapter drivers
974#
975# CONFIG_I2C_PARPORT_LIGHT is not set
976# CONFIG_I2C_TAOS_EVM is not set
977# CONFIG_I2C_TINY_USB is not set
978
979#
980# Other I2C/SMBus bus drivers
981#
982# CONFIG_I2C_STUB is not set
983# CONFIG_I2C_DEBUG_CORE is not set
984# CONFIG_I2C_DEBUG_ALGO is not set
985# CONFIG_I2C_DEBUG_BUS is not set
986# CONFIG_SPI is not set
987
988#
989# PPS support
990#
991# CONFIG_PPS is not set
992CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
993# CONFIG_GPIOLIB is not set
994# CONFIG_W1 is not set
995# CONFIG_POWER_SUPPLY is not set
996CONFIG_HWMON=y
997# CONFIG_HWMON_VID is not set
998# CONFIG_HWMON_DEBUG_CHIP is not set
999
1000#
1001# Native drivers
1002#
1003# CONFIG_SENSORS_AD7414 is not set
1004# CONFIG_SENSORS_AD7418 is not set
1005# CONFIG_SENSORS_ADM1021 is not set
1006# CONFIG_SENSORS_ADM1025 is not set
1007# CONFIG_SENSORS_ADM1026 is not set
1008# CONFIG_SENSORS_ADM1029 is not set
1009# CONFIG_SENSORS_ADM1031 is not set
1010# CONFIG_SENSORS_ADM9240 is not set
1011# CONFIG_SENSORS_ADT7411 is not set
1012# CONFIG_SENSORS_ADT7462 is not set
1013# CONFIG_SENSORS_ADT7470 is not set
1014# CONFIG_SENSORS_ADT7475 is not set
1015# CONFIG_SENSORS_ASC7621 is not set
1016# CONFIG_SENSORS_ATXP1 is not set
1017# CONFIG_SENSORS_DS1621 is not set
1018# CONFIG_SENSORS_I5K_AMB is not set
1019# CONFIG_SENSORS_F71805F is not set
1020# CONFIG_SENSORS_F71882FG is not set
1021# CONFIG_SENSORS_F75375S is not set
1022# CONFIG_SENSORS_G760A is not set
1023# CONFIG_SENSORS_GL518SM is not set
1024# CONFIG_SENSORS_GL520SM is not set
1025# CONFIG_SENSORS_IT87 is not set
1026# CONFIG_SENSORS_LM63 is not set
1027# CONFIG_SENSORS_LM73 is not set
1028# CONFIG_SENSORS_LM75 is not set
1029# CONFIG_SENSORS_LM77 is not set
1030# CONFIG_SENSORS_LM78 is not set
1031# CONFIG_SENSORS_LM80 is not set
1032# CONFIG_SENSORS_LM83 is not set
1033# CONFIG_SENSORS_LM85 is not set
1034# CONFIG_SENSORS_LM87 is not set
1035# CONFIG_SENSORS_LM90 is not set
1036# CONFIG_SENSORS_LM92 is not set
1037# CONFIG_SENSORS_LM93 is not set
1038# CONFIG_SENSORS_LTC4215 is not set
1039# CONFIG_SENSORS_LTC4245 is not set
1040# CONFIG_SENSORS_LM95241 is not set
1041# CONFIG_SENSORS_MAX1619 is not set
1042# CONFIG_SENSORS_MAX6650 is not set
1043# CONFIG_SENSORS_PC87360 is not set
1044# CONFIG_SENSORS_PC87427 is not set
1045# CONFIG_SENSORS_PCF8591 is not set
1046# CONFIG_SENSORS_SIS5595 is not set
1047# CONFIG_SENSORS_DME1737 is not set
1048# CONFIG_SENSORS_EMC1403 is not set
1049# CONFIG_SENSORS_SMSC47M1 is not set
1050# CONFIG_SENSORS_SMSC47M192 is not set
1051# CONFIG_SENSORS_SMSC47B397 is not set
1052# CONFIG_SENSORS_ADS7828 is not set
1053# CONFIG_SENSORS_AMC6821 is not set
1054# CONFIG_SENSORS_THMC50 is not set
1055# CONFIG_SENSORS_TMP102 is not set
1056# CONFIG_SENSORS_TMP401 is not set
1057# CONFIG_SENSORS_TMP421 is not set
1058# CONFIG_SENSORS_VIA686A is not set
1059# CONFIG_SENSORS_VT1211 is not set
1060# CONFIG_SENSORS_VT8231 is not set
1061# CONFIG_SENSORS_W83781D is not set
1062# CONFIG_SENSORS_W83791D is not set
1063# CONFIG_SENSORS_W83792D is not set
1064# CONFIG_SENSORS_W83793 is not set
1065# CONFIG_SENSORS_W83L785TS is not set
1066# CONFIG_SENSORS_W83L786NG is not set
1067# CONFIG_SENSORS_W83627HF is not set
1068# CONFIG_SENSORS_W83627EHF is not set
1069# CONFIG_SENSORS_ULTRA45 is not set
1070# CONFIG_SENSORS_LIS3_I2C is not set
1071# CONFIG_THERMAL is not set
1072# CONFIG_WATCHDOG is not set
1073CONFIG_SSB_POSSIBLE=y
1074
1075#
1076# Sonics Silicon Backplane
1077#
1078# CONFIG_SSB is not set
1079CONFIG_MFD_SUPPORT=y
1080# CONFIG_MFD_CORE is not set
1081# CONFIG_MFD_88PM860X is not set
1082# CONFIG_MFD_SM501 is not set
1083# CONFIG_HTC_PASIC3 is not set
1084# CONFIG_TPS6507X is not set
1085# CONFIG_TWL4030_CORE is not set
1086# CONFIG_MFD_TC35892 is not set
1087# CONFIG_MFD_TMIO is not set
1088# CONFIG_PMIC_DA903X is not set
1089# CONFIG_PMIC_ADP5520 is not set
1090# CONFIG_MFD_MAX8925 is not set
1091# CONFIG_MFD_WM8400 is not set
1092# CONFIG_MFD_WM831X is not set
1093# CONFIG_MFD_WM8350_I2C is not set
1094# CONFIG_MFD_WM8994 is not set
1095# CONFIG_MFD_PCF50633 is not set
1096# CONFIG_ABX500_CORE is not set
1097# CONFIG_LPC_SCH is not set
1098# CONFIG_MFD_RDC321X is not set
1099# CONFIG_MFD_JANZ_CMODIO is not set
1100# CONFIG_REGULATOR is not set
1101# CONFIG_MEDIA_SUPPORT is not set
1102
1103#
1104# Graphics support
1105#
1106CONFIG_VGA_ARB=y
1107CONFIG_VGA_ARB_MAX_GPUS=16
1108# CONFIG_DRM is not set
1109# CONFIG_VGASTATE is not set
1110# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1111CONFIG_FB=y 136CONFIG_FB=y
1112# CONFIG_FIRMWARE_EDID is not set
1113CONFIG_FB_DDC=y
1114# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1115CONFIG_FB_CFB_FILLRECT=y
1116CONFIG_FB_CFB_COPYAREA=y
1117CONFIG_FB_CFB_IMAGEBLIT=y
1118# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1119# CONFIG_FB_SYS_FILLRECT is not set
1120# CONFIG_FB_SYS_COPYAREA is not set
1121# CONFIG_FB_SYS_IMAGEBLIT is not set
1122# CONFIG_FB_FOREIGN_ENDIAN is not set
1123# CONFIG_FB_SYS_FOPS is not set
1124# CONFIG_FB_SVGALIB is not set
1125# CONFIG_FB_MACMODES is not set
1126# CONFIG_FB_BACKLIGHT is not set
1127CONFIG_FB_MODE_HELPERS=y
1128CONFIG_FB_TILEBLITTING=y 137CONFIG_FB_TILEBLITTING=y
1129
1130#
1131# Frame buffer hardware drivers
1132#
1133# CONFIG_FB_CIRRUS is not set
1134# CONFIG_FB_PM2 is not set
1135# CONFIG_FB_ASILIANT is not set
1136# CONFIG_FB_IMSTT is not set
1137# CONFIG_FB_UVESA is not set
1138CONFIG_FB_SBUS=y 138CONFIG_FB_SBUS=y
1139# CONFIG_FB_BW2 is not set
1140# CONFIG_FB_CG3 is not set
1141CONFIG_FB_CG6=y 139CONFIG_FB_CG6=y
1142CONFIG_FB_FFB=y 140CONFIG_FB_FFB=y
1143# CONFIG_FB_TCX is not set
1144# CONFIG_FB_CG14 is not set
1145# CONFIG_FB_P9100 is not set
1146# CONFIG_FB_LEO is not set
1147CONFIG_FB_XVR500=y 141CONFIG_FB_XVR500=y
1148CONFIG_FB_XVR2500=y 142CONFIG_FB_XVR2500=y
1149CONFIG_FB_XVR1000=y 143CONFIG_FB_XVR1000=y
1150# CONFIG_FB_S1D13XXX is not set
1151# CONFIG_FB_NVIDIA is not set
1152# CONFIG_FB_RIVA is not set
1153# CONFIG_FB_MATROX is not set
1154CONFIG_FB_RADEON=y 144CONFIG_FB_RADEON=y
1155CONFIG_FB_RADEON_I2C=y
1156# CONFIG_FB_RADEON_BACKLIGHT is not set 145# CONFIG_FB_RADEON_BACKLIGHT is not set
1157# CONFIG_FB_RADEON_DEBUG is not set
1158# CONFIG_FB_ATY128 is not set
1159CONFIG_FB_ATY=y 146CONFIG_FB_ATY=y
1160CONFIG_FB_ATY_CT=y
1161# CONFIG_FB_ATY_GENERIC_LCD is not set
1162CONFIG_FB_ATY_GX=y 147CONFIG_FB_ATY_GX=y
1163# CONFIG_FB_ATY_BACKLIGHT is not set 148# CONFIG_FB_ATY_BACKLIGHT is not set
1164# CONFIG_FB_S3 is not set
1165# CONFIG_FB_SAVAGE is not set
1166# CONFIG_FB_SIS is not set
1167# CONFIG_FB_VIA is not set
1168# CONFIG_FB_NEOMAGIC is not set
1169# CONFIG_FB_KYRO is not set
1170# CONFIG_FB_3DFX is not set
1171# CONFIG_FB_VOODOO1 is not set
1172# CONFIG_FB_VT8623 is not set
1173# CONFIG_FB_TRIDENT is not set
1174# CONFIG_FB_ARK is not set
1175# CONFIG_FB_PM3 is not set
1176# CONFIG_FB_CARMINE is not set
1177# CONFIG_FB_VIRTUAL is not set
1178# CONFIG_FB_METRONOME is not set
1179# CONFIG_FB_MB862XX is not set
1180# CONFIG_FB_BROADSHEET is not set
1181# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1182
1183#
1184# Display device support
1185#
1186# CONFIG_DISPLAY_SUPPORT is not set
1187
1188#
1189# Console display driver support
1190#
1191CONFIG_DUMMY_CONSOLE=y
1192CONFIG_FRAMEBUFFER_CONSOLE=y 149CONFIG_FRAMEBUFFER_CONSOLE=y
1193CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y 150CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
1194# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1195CONFIG_FONTS=y 151CONFIG_FONTS=y
1196# CONFIG_FONT_8x8 is not set
1197# CONFIG_FONT_8x16 is not set
1198# CONFIG_FONT_6x11 is not set
1199# CONFIG_FONT_7x14 is not set
1200# CONFIG_FONT_PEARL_8x8 is not set
1201# CONFIG_FONT_ACORN_8x8 is not set
1202CONFIG_FONT_SUN8x16=y 152CONFIG_FONT_SUN8x16=y
1203# CONFIG_FONT_SUN12x22 is not set
1204# CONFIG_FONT_10x18 is not set
1205CONFIG_LOGO=y 153CONFIG_LOGO=y
1206# CONFIG_LOGO_LINUX_MONO is not set 154# CONFIG_LOGO_LINUX_MONO is not set
1207# CONFIG_LOGO_LINUX_VGA16 is not set 155# CONFIG_LOGO_LINUX_VGA16 is not set
1208# CONFIG_LOGO_LINUX_CLUT224 is not set 156# CONFIG_LOGO_LINUX_CLUT224 is not set
1209CONFIG_LOGO_SUN_CLUT224=y
1210CONFIG_SOUND=m 157CONFIG_SOUND=m
1211CONFIG_SOUND_OSS_CORE=y
1212CONFIG_SOUND_OSS_CORE_PRECLAIM=y
1213CONFIG_SND=m 158CONFIG_SND=m
1214CONFIG_SND_TIMER=m
1215CONFIG_SND_PCM=m
1216CONFIG_SND_RAWMIDI=m
1217CONFIG_SND_SEQUENCER=m 159CONFIG_SND_SEQUENCER=m
1218CONFIG_SND_SEQ_DUMMY=m 160CONFIG_SND_SEQ_DUMMY=m
1219CONFIG_SND_OSSEMUL=y
1220CONFIG_SND_MIXER_OSS=m 161CONFIG_SND_MIXER_OSS=m
1221CONFIG_SND_PCM_OSS=m 162CONFIG_SND_PCM_OSS=m
1222CONFIG_SND_PCM_OSS_PLUGINS=y
1223CONFIG_SND_SEQUENCER_OSS=y 163CONFIG_SND_SEQUENCER_OSS=y
1224# CONFIG_SND_HRTIMER is not set
1225# CONFIG_SND_DYNAMIC_MINORS is not set
1226CONFIG_SND_SUPPORT_OLD_API=y
1227CONFIG_SND_VERBOSE_PROCFS=y
1228# CONFIG_SND_VERBOSE_PRINTK is not set
1229# CONFIG_SND_DEBUG is not set
1230CONFIG_SND_VMASTER=y
1231CONFIG_SND_RAWMIDI_SEQ=m
1232# CONFIG_SND_OPL3_LIB_SEQ is not set
1233# CONFIG_SND_OPL4_LIB_SEQ is not set
1234# CONFIG_SND_SBAWE_SEQ is not set
1235# CONFIG_SND_EMU10K1_SEQ is not set
1236CONFIG_SND_MPU401_UART=m
1237CONFIG_SND_AC97_CODEC=m
1238CONFIG_SND_DRIVERS=y
1239CONFIG_SND_DUMMY=m 164CONFIG_SND_DUMMY=m
1240CONFIG_SND_VIRMIDI=m 165CONFIG_SND_VIRMIDI=m
1241CONFIG_SND_MTPAV=m 166CONFIG_SND_MTPAV=m
1242# CONFIG_SND_SERIAL_U16550 is not set
1243# CONFIG_SND_MPU401 is not set
1244# CONFIG_SND_AC97_POWER_SAVE is not set
1245CONFIG_SND_PCI=y
1246# CONFIG_SND_AD1889 is not set
1247# CONFIG_SND_ALS300 is not set
1248CONFIG_SND_ALI5451=m 167CONFIG_SND_ALI5451=m
1249# CONFIG_SND_ATIIXP is not set
1250# CONFIG_SND_ATIIXP_MODEM is not set
1251# CONFIG_SND_AU8810 is not set
1252# CONFIG_SND_AU8820 is not set
1253# CONFIG_SND_AU8830 is not set
1254# CONFIG_SND_AW2 is not set
1255# CONFIG_SND_AZT3328 is not set
1256# CONFIG_SND_BT87X is not set
1257# CONFIG_SND_CA0106 is not set
1258# CONFIG_SND_CMIPCI is not set
1259# CONFIG_SND_OXYGEN is not set
1260# CONFIG_SND_CS4281 is not set
1261# CONFIG_SND_CS46XX is not set
1262# CONFIG_SND_CS5535AUDIO is not set
1263# CONFIG_SND_CTXFI is not set
1264# CONFIG_SND_DARLA20 is not set
1265# CONFIG_SND_GINA20 is not set
1266# CONFIG_SND_LAYLA20 is not set
1267# CONFIG_SND_DARLA24 is not set
1268# CONFIG_SND_GINA24 is not set
1269# CONFIG_SND_LAYLA24 is not set
1270# CONFIG_SND_MONA is not set
1271# CONFIG_SND_MIA is not set
1272# CONFIG_SND_ECHO3G is not set
1273# CONFIG_SND_INDIGO is not set
1274# CONFIG_SND_INDIGOIO is not set
1275# CONFIG_SND_INDIGODJ is not set
1276# CONFIG_SND_INDIGOIOX is not set
1277# CONFIG_SND_INDIGODJX is not set
1278# CONFIG_SND_EMU10K1 is not set
1279# CONFIG_SND_EMU10K1X is not set
1280# CONFIG_SND_ENS1370 is not set
1281# CONFIG_SND_ENS1371 is not set
1282# CONFIG_SND_ES1938 is not set
1283# CONFIG_SND_ES1968 is not set
1284# CONFIG_SND_FM801 is not set
1285# CONFIG_SND_HDA_INTEL is not set
1286# CONFIG_SND_HDSP is not set
1287# CONFIG_SND_HDSPM is not set
1288# CONFIG_SND_HIFIER is not set
1289# CONFIG_SND_ICE1712 is not set
1290# CONFIG_SND_ICE1724 is not set
1291# CONFIG_SND_INTEL8X0 is not set
1292# CONFIG_SND_INTEL8X0M is not set
1293# CONFIG_SND_KORG1212 is not set
1294# CONFIG_SND_LX6464ES is not set
1295# CONFIG_SND_MAESTRO3 is not set
1296# CONFIG_SND_MIXART is not set
1297# CONFIG_SND_NM256 is not set
1298# CONFIG_SND_PCXHR is not set
1299# CONFIG_SND_RIPTIDE is not set
1300# CONFIG_SND_RME32 is not set
1301# CONFIG_SND_RME96 is not set
1302# CONFIG_SND_RME9652 is not set
1303# CONFIG_SND_SONICVIBES is not set
1304# CONFIG_SND_TRIDENT is not set
1305# CONFIG_SND_VIA82XX is not set
1306# CONFIG_SND_VIA82XX_MODEM is not set
1307# CONFIG_SND_VIRTUOSO is not set
1308# CONFIG_SND_VX222 is not set
1309# CONFIG_SND_YMFPCI is not set
1310CONFIG_SND_USB=y
1311# CONFIG_SND_USB_AUDIO is not set
1312# CONFIG_SND_USB_UA101 is not set
1313# CONFIG_SND_USB_CAIAQ is not set
1314CONFIG_SND_SPARC=y
1315# CONFIG_SND_SUN_AMD7930 is not set
1316CONFIG_SND_SUN_CS4231=m 168CONFIG_SND_SUN_CS4231=m
1317# CONFIG_SND_SUN_DBRI is not set
1318# CONFIG_SND_SOC is not set
1319# CONFIG_SOUND_PRIME is not set
1320CONFIG_AC97_BUS=m
1321CONFIG_HID_SUPPORT=y
1322CONFIG_HID=y
1323# CONFIG_HIDRAW is not set
1324
1325#
1326# USB Input Devices
1327#
1328CONFIG_USB_HID=y
1329# CONFIG_HID_PID is not set
1330CONFIG_USB_HIDDEV=y 169CONFIG_USB_HIDDEV=y
1331
1332#
1333# Special HID drivers
1334#
1335# CONFIG_HID_3M_PCT is not set
1336CONFIG_HID_A4TECH=y
1337# CONFIG_HID_ACRUX_FF is not set
1338CONFIG_HID_APPLE=y
1339CONFIG_HID_BELKIN=y
1340# CONFIG_HID_CANDO is not set
1341CONFIG_HID_CHERRY=y
1342CONFIG_HID_CHICONY=y
1343# CONFIG_HID_PRODIKEYS is not set
1344CONFIG_HID_CYPRESS=y
1345CONFIG_HID_DRAGONRISE=y 170CONFIG_HID_DRAGONRISE=y
1346# CONFIG_DRAGONRISE_FF is not set
1347# CONFIG_HID_EGALAX is not set
1348CONFIG_HID_EZKEY=y
1349CONFIG_HID_KYE=y
1350CONFIG_HID_GYRATION=y 171CONFIG_HID_GYRATION=y
1351CONFIG_HID_TWINHAN=y 172CONFIG_HID_TWINHAN=y
1352CONFIG_HID_KENSINGTON=y
1353CONFIG_HID_LOGITECH=y
1354# CONFIG_LOGITECH_FF is not set
1355# CONFIG_LOGIRUMBLEPAD2_FF is not set
1356# CONFIG_LOGIG940_FF is not set
1357CONFIG_HID_MICROSOFT=y
1358# CONFIG_HID_MOSART is not set
1359CONFIG_HID_MONTEREY=y
1360CONFIG_HID_NTRIG=y 173CONFIG_HID_NTRIG=y
1361CONFIG_HID_ORTEK=y 174CONFIG_HID_ORTEK=y
1362CONFIG_HID_PANTHERLORD=y 175CONFIG_HID_PANTHERLORD=y
1363# CONFIG_PANTHERLORD_FF is not set
1364CONFIG_HID_PETALYNX=y 176CONFIG_HID_PETALYNX=y
1365# CONFIG_HID_PICOLCD is not set
1366# CONFIG_HID_QUANTA is not set
1367# CONFIG_HID_ROCCAT is not set
1368# CONFIG_HID_ROCCAT_KONE is not set
1369CONFIG_HID_SAMSUNG=y 177CONFIG_HID_SAMSUNG=y
1370CONFIG_HID_SONY=y 178CONFIG_HID_SONY=y
1371# CONFIG_HID_STANTUM is not set
1372CONFIG_HID_SUNPLUS=y 179CONFIG_HID_SUNPLUS=y
1373CONFIG_HID_GREENASIA=y 180CONFIG_HID_GREENASIA=y
1374# CONFIG_GREENASIA_FF is not set
1375CONFIG_HID_SMARTJOYPLUS=y 181CONFIG_HID_SMARTJOYPLUS=y
1376# CONFIG_SMARTJOYPLUS_FF is not set
1377CONFIG_HID_TOPSEED=y 182CONFIG_HID_TOPSEED=y
1378CONFIG_HID_THRUSTMASTER=y 183CONFIG_HID_THRUSTMASTER=y
1379# CONFIG_THRUSTMASTER_FF is not set
1380CONFIG_HID_ZEROPLUS=y 184CONFIG_HID_ZEROPLUS=y
1381# CONFIG_ZEROPLUS_FF is not set
1382# CONFIG_HID_ZYDACRON is not set
1383CONFIG_USB_SUPPORT=y
1384CONFIG_USB_ARCH_HAS_HCD=y
1385CONFIG_USB_ARCH_HAS_OHCI=y
1386CONFIG_USB_ARCH_HAS_EHCI=y
1387CONFIG_USB=y 185CONFIG_USB=y
1388# CONFIG_USB_DEBUG is not set
1389# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1390
1391#
1392# Miscellaneous USB options
1393#
1394# CONFIG_USB_DEVICEFS is not set
1395# CONFIG_USB_DEVICE_CLASS is not set 186# CONFIG_USB_DEVICE_CLASS is not set
1396# CONFIG_USB_DYNAMIC_MINORS is not set
1397# CONFIG_USB_MON is not set
1398# CONFIG_USB_WUSB is not set
1399# CONFIG_USB_WUSB_CBAF is not set
1400
1401#
1402# USB Host Controller Drivers
1403#
1404# CONFIG_USB_C67X00_HCD is not set
1405# CONFIG_USB_XHCI_HCD is not set
1406CONFIG_USB_EHCI_HCD=m 187CONFIG_USB_EHCI_HCD=m
1407# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
1408# CONFIG_USB_EHCI_TT_NEWSCHED is not set 188# CONFIG_USB_EHCI_TT_NEWSCHED is not set
1409# CONFIG_USB_OXU210HP_HCD is not set
1410# CONFIG_USB_ISP116X_HCD is not set
1411# CONFIG_USB_ISP1760_HCD is not set
1412# CONFIG_USB_ISP1362_HCD is not set
1413CONFIG_USB_OHCI_HCD=y 189CONFIG_USB_OHCI_HCD=y
1414# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1415# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1416CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1417CONFIG_USB_UHCI_HCD=m 190CONFIG_USB_UHCI_HCD=m
1418# CONFIG_USB_SL811_HCD is not set
1419# CONFIG_USB_R8A66597_HCD is not set
1420# CONFIG_USB_WHCI_HCD is not set
1421# CONFIG_USB_HWA_HCD is not set
1422
1423#
1424# USB Device Class drivers
1425#
1426# CONFIG_USB_ACM is not set
1427# CONFIG_USB_PRINTER is not set
1428# CONFIG_USB_WDM is not set
1429# CONFIG_USB_TMC is not set
1430
1431#
1432# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
1433#
1434
1435#
1436# also be needed; see USB_STORAGE Help for more info
1437#
1438CONFIG_USB_STORAGE=m 191CONFIG_USB_STORAGE=m
1439# CONFIG_USB_STORAGE_DEBUG is not set
1440# CONFIG_USB_STORAGE_DATAFAB is not set
1441# CONFIG_USB_STORAGE_FREECOM is not set
1442# CONFIG_USB_STORAGE_ISD200 is not set
1443# CONFIG_USB_STORAGE_USBAT is not set
1444# CONFIG_USB_STORAGE_SDDR09 is not set
1445# CONFIG_USB_STORAGE_SDDR55 is not set
1446# CONFIG_USB_STORAGE_JUMPSHOT is not set
1447# CONFIG_USB_STORAGE_ALAUDA is not set
1448# CONFIG_USB_STORAGE_ONETOUCH is not set
1449# CONFIG_USB_STORAGE_KARMA is not set
1450# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1451# CONFIG_USB_LIBUSUAL is not set
1452
1453#
1454# USB Imaging devices
1455#
1456# CONFIG_USB_MDC800 is not set
1457# CONFIG_USB_MICROTEK is not set
1458
1459#
1460# USB port drivers
1461#
1462# CONFIG_USB_SERIAL is not set
1463
1464#
1465# USB Miscellaneous drivers
1466#
1467# CONFIG_USB_EMI62 is not set
1468# CONFIG_USB_EMI26 is not set
1469# CONFIG_USB_ADUTUX is not set
1470# CONFIG_USB_SEVSEG is not set
1471# CONFIG_USB_RIO500 is not set
1472# CONFIG_USB_LEGOTOWER is not set
1473# CONFIG_USB_LCD is not set
1474# CONFIG_USB_LED is not set
1475# CONFIG_USB_CYPRESS_CY7C63 is not set
1476# CONFIG_USB_CYTHERM is not set
1477# CONFIG_USB_IDMOUSE is not set
1478# CONFIG_USB_FTDI_ELAN is not set
1479# CONFIG_USB_APPLEDISPLAY is not set
1480# CONFIG_USB_SISUSBVGA is not set
1481# CONFIG_USB_LD is not set
1482# CONFIG_USB_TRANCEVIBRATOR is not set
1483# CONFIG_USB_IOWARRIOR is not set
1484# CONFIG_USB_TEST is not set
1485# CONFIG_USB_ISIGHTFW is not set
1486# CONFIG_USB_GADGET is not set
1487
1488#
1489# OTG and related infrastructure
1490#
1491# CONFIG_NOP_USB_XCEIV is not set
1492# CONFIG_UWB is not set
1493# CONFIG_MMC is not set
1494# CONFIG_MEMSTICK is not set
1495# CONFIG_NEW_LEDS is not set
1496# CONFIG_ACCESSIBILITY is not set
1497# CONFIG_INFINIBAND is not set
1498CONFIG_RTC_LIB=y
1499CONFIG_RTC_CLASS=y
1500CONFIG_RTC_HCTOSYS=y
1501CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1502# CONFIG_RTC_DEBUG is not set
1503
1504#
1505# RTC interfaces
1506#
1507CONFIG_RTC_INTF_SYSFS=y
1508CONFIG_RTC_INTF_PROC=y
1509CONFIG_RTC_INTF_DEV=y
1510# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1511# CONFIG_RTC_DRV_TEST is not set
1512
1513#
1514# I2C RTC drivers
1515#
1516# CONFIG_RTC_DRV_DS1307 is not set
1517# CONFIG_RTC_DRV_DS1374 is not set
1518# CONFIG_RTC_DRV_DS1672 is not set
1519# CONFIG_RTC_DRV_MAX6900 is not set
1520# CONFIG_RTC_DRV_RS5C372 is not set
1521# CONFIG_RTC_DRV_ISL1208 is not set
1522# CONFIG_RTC_DRV_X1205 is not set
1523# CONFIG_RTC_DRV_PCF8563 is not set
1524# CONFIG_RTC_DRV_PCF8583 is not set
1525# CONFIG_RTC_DRV_M41T80 is not set
1526# CONFIG_RTC_DRV_BQ32K is not set
1527# CONFIG_RTC_DRV_S35390A is not set
1528# CONFIG_RTC_DRV_FM3130 is not set
1529# CONFIG_RTC_DRV_RX8581 is not set
1530# CONFIG_RTC_DRV_RX8025 is not set
1531
1532#
1533# SPI RTC drivers
1534#
1535
1536#
1537# Platform RTC drivers
1538#
1539CONFIG_RTC_DRV_CMOS=y
1540# CONFIG_RTC_DRV_DS1286 is not set
1541# CONFIG_RTC_DRV_DS1511 is not set
1542# CONFIG_RTC_DRV_DS1553 is not set
1543# CONFIG_RTC_DRV_DS1742 is not set
1544# CONFIG_RTC_DRV_STK17TA8 is not set
1545# CONFIG_RTC_DRV_M48T86 is not set
1546# CONFIG_RTC_DRV_M48T35 is not set
1547CONFIG_RTC_DRV_M48T59=y
1548# CONFIG_RTC_DRV_MSM6242 is not set
1549CONFIG_RTC_DRV_BQ4802=y
1550# CONFIG_RTC_DRV_RP5C01 is not set
1551# CONFIG_RTC_DRV_V3020 is not set
1552
1553#
1554# on-CPU RTC drivers
1555#
1556CONFIG_RTC_DRV_SUN4V=y
1557CONFIG_RTC_DRV_STARFIRE=y
1558# CONFIG_DMADEVICES is not set
1559# CONFIG_AUXDISPLAY is not set
1560# CONFIG_UIO is not set
1561# CONFIG_STAGING is not set
1562
1563#
1564# Misc Linux/SPARC drivers
1565#
1566CONFIG_SUN_OPENPROMIO=y 192CONFIG_SUN_OPENPROMIO=y
1567# CONFIG_OBP_FLASH is not set
1568# CONFIG_TADPOLE_TS102_UCTRL is not set
1569# CONFIG_BBC_I2C is not set
1570# CONFIG_ENVCTRL is not set
1571# CONFIG_DISPLAY7SEG is not set
1572
1573#
1574# File systems
1575#
1576CONFIG_EXT2_FS=y 193CONFIG_EXT2_FS=y
1577CONFIG_EXT2_FS_XATTR=y 194CONFIG_EXT2_FS_XATTR=y
1578CONFIG_EXT2_FS_POSIX_ACL=y 195CONFIG_EXT2_FS_POSIX_ACL=y
1579CONFIG_EXT2_FS_SECURITY=y 196CONFIG_EXT2_FS_SECURITY=y
1580# CONFIG_EXT2_FS_XIP is not set
1581CONFIG_EXT3_FS=y 197CONFIG_EXT3_FS=y
1582# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 198# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
1583CONFIG_EXT3_FS_XATTR=y
1584CONFIG_EXT3_FS_POSIX_ACL=y 199CONFIG_EXT3_FS_POSIX_ACL=y
1585CONFIG_EXT3_FS_SECURITY=y 200CONFIG_EXT3_FS_SECURITY=y
1586# CONFIG_EXT4_FS is not set
1587CONFIG_JBD=y
1588# CONFIG_JBD_DEBUG is not set
1589CONFIG_FS_MBCACHE=y
1590# CONFIG_REISERFS_FS is not set
1591# CONFIG_JFS_FS is not set
1592CONFIG_FS_POSIX_ACL=y
1593# CONFIG_XFS_FS is not set
1594# CONFIG_GFS2_FS is not set
1595# CONFIG_OCFS2_FS is not set
1596# CONFIG_BTRFS_FS is not set
1597# CONFIG_NILFS2_FS is not set
1598CONFIG_FILE_LOCKING=y
1599CONFIG_FSNOTIFY=y
1600CONFIG_DNOTIFY=y
1601CONFIG_INOTIFY=y
1602CONFIG_INOTIFY_USER=y
1603# CONFIG_QUOTA is not set
1604# CONFIG_AUTOFS_FS is not set
1605# CONFIG_AUTOFS4_FS is not set
1606# CONFIG_FUSE_FS is not set
1607
1608#
1609# Caches
1610#
1611# CONFIG_FSCACHE is not set
1612
1613#
1614# CD-ROM/DVD Filesystems
1615#
1616# CONFIG_ISO9660_FS is not set
1617# CONFIG_UDF_FS is not set
1618
1619#
1620# DOS/FAT/NT Filesystems
1621#
1622# CONFIG_MSDOS_FS is not set
1623# CONFIG_VFAT_FS is not set
1624# CONFIG_NTFS_FS is not set
1625
1626#
1627# Pseudo filesystems
1628#
1629CONFIG_PROC_FS=y
1630CONFIG_PROC_KCORE=y 201CONFIG_PROC_KCORE=y
1631CONFIG_PROC_SYSCTL=y
1632CONFIG_PROC_PAGE_MONITOR=y
1633CONFIG_SYSFS=y
1634CONFIG_TMPFS=y 202CONFIG_TMPFS=y
1635# CONFIG_TMPFS_POSIX_ACL is not set
1636CONFIG_HUGETLBFS=y 203CONFIG_HUGETLBFS=y
1637CONFIG_HUGETLB_PAGE=y
1638# CONFIG_CONFIGFS_FS is not set
1639CONFIG_MISC_FILESYSTEMS=y
1640# CONFIG_ADFS_FS is not set
1641# CONFIG_AFFS_FS is not set
1642# CONFIG_ECRYPT_FS is not set
1643# CONFIG_HFS_FS is not set
1644# CONFIG_HFSPLUS_FS is not set
1645# CONFIG_BEFS_FS is not set
1646# CONFIG_BFS_FS is not set
1647# CONFIG_EFS_FS is not set
1648# CONFIG_LOGFS is not set
1649# CONFIG_CRAMFS is not set
1650# CONFIG_SQUASHFS is not set
1651# CONFIG_VXFS_FS is not set
1652# CONFIG_MINIX_FS is not set
1653# CONFIG_OMFS_FS is not set
1654# CONFIG_HPFS_FS is not set
1655# CONFIG_QNX4FS_FS is not set
1656# CONFIG_ROMFS_FS is not set
1657# CONFIG_SYSV_FS is not set
1658# CONFIG_UFS_FS is not set
1659CONFIG_NETWORK_FILESYSTEMS=y
1660# CONFIG_NFS_FS is not set
1661# CONFIG_NFSD is not set
1662# CONFIG_SMB_FS is not set
1663# CONFIG_CEPH_FS is not set
1664# CONFIG_CIFS is not set
1665# CONFIG_NCP_FS is not set
1666# CONFIG_CODA_FS is not set
1667# CONFIG_AFS_FS is not set
1668
1669#
1670# Partition Types
1671#
1672# CONFIG_PARTITION_ADVANCED is not set
1673CONFIG_MSDOS_PARTITION=y
1674CONFIG_SUN_PARTITION=y
1675CONFIG_NLS=y
1676CONFIG_NLS_DEFAULT="iso8859-1"
1677# CONFIG_NLS_CODEPAGE_437 is not set
1678# CONFIG_NLS_CODEPAGE_737 is not set
1679# CONFIG_NLS_CODEPAGE_775 is not set
1680# CONFIG_NLS_CODEPAGE_850 is not set
1681# CONFIG_NLS_CODEPAGE_852 is not set
1682# CONFIG_NLS_CODEPAGE_855 is not set
1683# CONFIG_NLS_CODEPAGE_857 is not set
1684# CONFIG_NLS_CODEPAGE_860 is not set
1685# CONFIG_NLS_CODEPAGE_861 is not set
1686# CONFIG_NLS_CODEPAGE_862 is not set
1687# CONFIG_NLS_CODEPAGE_863 is not set
1688# CONFIG_NLS_CODEPAGE_864 is not set
1689# CONFIG_NLS_CODEPAGE_865 is not set
1690# CONFIG_NLS_CODEPAGE_866 is not set
1691# CONFIG_NLS_CODEPAGE_869 is not set
1692# CONFIG_NLS_CODEPAGE_936 is not set
1693# CONFIG_NLS_CODEPAGE_950 is not set
1694# CONFIG_NLS_CODEPAGE_932 is not set
1695# CONFIG_NLS_CODEPAGE_949 is not set
1696# CONFIG_NLS_CODEPAGE_874 is not set
1697# CONFIG_NLS_ISO8859_8 is not set
1698# CONFIG_NLS_CODEPAGE_1250 is not set
1699# CONFIG_NLS_CODEPAGE_1251 is not set
1700# CONFIG_NLS_ASCII is not set
1701# CONFIG_NLS_ISO8859_1 is not set
1702# CONFIG_NLS_ISO8859_2 is not set
1703# CONFIG_NLS_ISO8859_3 is not set
1704# CONFIG_NLS_ISO8859_4 is not set
1705# CONFIG_NLS_ISO8859_5 is not set
1706# CONFIG_NLS_ISO8859_6 is not set
1707# CONFIG_NLS_ISO8859_7 is not set
1708# CONFIG_NLS_ISO8859_9 is not set
1709# CONFIG_NLS_ISO8859_13 is not set
1710# CONFIG_NLS_ISO8859_14 is not set
1711# CONFIG_NLS_ISO8859_15 is not set
1712# CONFIG_NLS_KOI8_R is not set
1713# CONFIG_NLS_KOI8_U is not set
1714# CONFIG_NLS_UTF8 is not set
1715# CONFIG_DLM is not set
1716
1717#
1718# Kernel hacking
1719#
1720CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1721CONFIG_PRINTK_TIME=y 204CONFIG_PRINTK_TIME=y
1722# CONFIG_ENABLE_WARN_DEPRECATED is not set 205# CONFIG_ENABLE_WARN_DEPRECATED is not set
1723CONFIG_ENABLE_MUST_CHECK=y
1724CONFIG_FRAME_WARN=2048
1725CONFIG_MAGIC_SYSRQ=y 206CONFIG_MAGIC_SYSRQ=y
1726# CONFIG_STRIP_ASM_SYMS is not set
1727# CONFIG_UNUSED_SYMBOLS is not set
1728CONFIG_DEBUG_FS=y
1729# CONFIG_HEADERS_CHECK is not set
1730CONFIG_DEBUG_KERNEL=y 207CONFIG_DEBUG_KERNEL=y
1731# CONFIG_DEBUG_SHIRQ is not set
1732CONFIG_LOCKUP_DETECTOR=y 208CONFIG_LOCKUP_DETECTOR=y
1733# CONFIG_HARDLOCKUP_DETECTOR is not set
1734# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
1735CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
1736CONFIG_DETECT_HUNG_TASK=y 209CONFIG_DETECT_HUNG_TASK=y
1737# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
1738CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
1739# CONFIG_SCHED_DEBUG is not set 210# CONFIG_SCHED_DEBUG is not set
1740CONFIG_SCHEDSTATS=y 211CONFIG_SCHEDSTATS=y
1741# CONFIG_TIMER_STATS is not set
1742# CONFIG_DEBUG_OBJECTS is not set
1743# CONFIG_DEBUG_SLAB is not set
1744# CONFIG_DEBUG_KMEMLEAK is not set
1745# CONFIG_DEBUG_RT_MUTEXES is not set
1746# CONFIG_RT_MUTEX_TESTER is not set
1747# CONFIG_DEBUG_SPINLOCK is not set
1748# CONFIG_DEBUG_MUTEXES is not set
1749# CONFIG_DEBUG_LOCK_ALLOC is not set
1750# CONFIG_PROVE_LOCKING is not set
1751# CONFIG_LOCK_STAT is not set
1752# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1753# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1754CONFIG_STACKTRACE=y
1755# CONFIG_DEBUG_KOBJECT is not set
1756CONFIG_DEBUG_BUGVERBOSE=y
1757# CONFIG_DEBUG_INFO is not set
1758# CONFIG_DEBUG_VM is not set
1759# CONFIG_DEBUG_WRITECOUNT is not set
1760CONFIG_DEBUG_MEMORY_INIT=y
1761# CONFIG_DEBUG_LIST is not set
1762# CONFIG_DEBUG_SG is not set
1763# CONFIG_DEBUG_NOTIFIERS is not set
1764# CONFIG_DEBUG_CREDENTIALS is not set
1765# CONFIG_BOOT_PRINTK_DELAY is not set
1766# CONFIG_RCU_TORTURE_TEST is not set
1767# CONFIG_RCU_CPU_STALL_DETECTOR is not set 212# CONFIG_RCU_CPU_STALL_DETECTOR is not set
1768# CONFIG_KPROBES_SANITY_TEST is not set
1769# CONFIG_BACKTRACE_SELF_TEST is not set
1770# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
1771# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
1772# CONFIG_LKDTM is not set
1773# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
1774# CONFIG_FAULT_INJECTION is not set
1775# CONFIG_LATENCYTOP is not set
1776CONFIG_SYSCTL_SYSCALL_CHECK=y 213CONFIG_SYSCTL_SYSCALL_CHECK=y
1777# CONFIG_DEBUG_PAGEALLOC is not set
1778CONFIG_NOP_TRACER=y
1779CONFIG_HAVE_FUNCTION_TRACER=y
1780CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
1781CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
1782CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
1783CONFIG_HAVE_DYNAMIC_FTRACE=y
1784CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
1785CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
1786CONFIG_RING_BUFFER=y
1787CONFIG_EVENT_TRACING=y
1788CONFIG_CONTEXT_SWITCH_TRACER=y
1789CONFIG_RING_BUFFER_ALLOW_SWAP=y
1790CONFIG_TRACING=y
1791CONFIG_GENERIC_TRACER=y
1792CONFIG_TRACING_SUPPORT=y
1793CONFIG_FTRACE=y
1794# CONFIG_FUNCTION_TRACER is not set
1795# CONFIG_IRQSOFF_TRACER is not set
1796# CONFIG_SCHED_TRACER is not set
1797# CONFIG_FTRACE_SYSCALLS is not set
1798CONFIG_BRANCH_PROFILE_NONE=y
1799# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
1800# CONFIG_PROFILE_ALL_BRANCHES is not set
1801# CONFIG_STACK_TRACER is not set
1802CONFIG_BLK_DEV_IO_TRACE=y 214CONFIG_BLK_DEV_IO_TRACE=y
1803# CONFIG_FTRACE_STARTUP_TEST is not set
1804# CONFIG_RING_BUFFER_BENCHMARK is not set
1805# CONFIG_DYNAMIC_DEBUG is not set
1806# CONFIG_DMA_API_DEBUG is not set
1807# CONFIG_ATOMIC64_SELFTEST is not set
1808# CONFIG_SAMPLES is not set
1809CONFIG_HAVE_ARCH_KGDB=y
1810# CONFIG_KGDB is not set
1811# CONFIG_DEBUG_STACK_USAGE is not set
1812# CONFIG_DEBUG_DCFLUSH is not set
1813
1814#
1815# Security options
1816#
1817CONFIG_KEYS=y 215CONFIG_KEYS=y
1818# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
1819# CONFIG_SECURITY is not set
1820# CONFIG_SECURITYFS is not set
1821CONFIG_DEFAULT_SECURITY_DAC=y
1822CONFIG_DEFAULT_SECURITY=""
1823CONFIG_XOR_BLOCKS=m
1824CONFIG_ASYNC_CORE=m
1825CONFIG_ASYNC_MEMCPY=m
1826CONFIG_ASYNC_XOR=m
1827CONFIG_ASYNC_PQ=m
1828CONFIG_ASYNC_RAID6_RECOV=m
1829CONFIG_CRYPTO=y
1830
1831#
1832# Crypto core or helper
1833#
1834CONFIG_CRYPTO_ALGAPI=y
1835CONFIG_CRYPTO_ALGAPI2=y
1836CONFIG_CRYPTO_AEAD=y
1837CONFIG_CRYPTO_AEAD2=y
1838CONFIG_CRYPTO_BLKCIPHER=y
1839CONFIG_CRYPTO_BLKCIPHER2=y
1840CONFIG_CRYPTO_HASH=y
1841CONFIG_CRYPTO_HASH2=y
1842CONFIG_CRYPTO_RNG2=y
1843CONFIG_CRYPTO_PCOMP2=y
1844CONFIG_CRYPTO_MANAGER=y
1845CONFIG_CRYPTO_MANAGER2=y
1846CONFIG_CRYPTO_MANAGER_TESTS=y
1847CONFIG_CRYPTO_GF128MUL=m
1848CONFIG_CRYPTO_NULL=m 216CONFIG_CRYPTO_NULL=m
1849# CONFIG_CRYPTO_PCRYPT is not set
1850CONFIG_CRYPTO_WORKQUEUE=y
1851# CONFIG_CRYPTO_CRYPTD is not set
1852CONFIG_CRYPTO_AUTHENC=y
1853CONFIG_CRYPTO_TEST=m 217CONFIG_CRYPTO_TEST=m
1854
1855#
1856# Authenticated Encryption with Associated Data
1857#
1858# CONFIG_CRYPTO_CCM is not set
1859# CONFIG_CRYPTO_GCM is not set
1860# CONFIG_CRYPTO_SEQIV is not set
1861
1862#
1863# Block modes
1864#
1865CONFIG_CRYPTO_CBC=y
1866# CONFIG_CRYPTO_CTR is not set
1867# CONFIG_CRYPTO_CTS is not set
1868CONFIG_CRYPTO_ECB=m
1869CONFIG_CRYPTO_LRW=m 218CONFIG_CRYPTO_LRW=m
1870CONFIG_CRYPTO_PCBC=m 219CONFIG_CRYPTO_PCBC=m
1871CONFIG_CRYPTO_XTS=m 220CONFIG_CRYPTO_XTS=m
1872
1873#
1874# Hash modes
1875#
1876CONFIG_CRYPTO_HMAC=y
1877CONFIG_CRYPTO_XCBC=y 221CONFIG_CRYPTO_XCBC=y
1878# CONFIG_CRYPTO_VMAC is not set
1879
1880#
1881# Digest
1882#
1883CONFIG_CRYPTO_CRC32C=m
1884# CONFIG_CRYPTO_GHASH is not set
1885CONFIG_CRYPTO_MD4=y 222CONFIG_CRYPTO_MD4=y
1886CONFIG_CRYPTO_MD5=y
1887CONFIG_CRYPTO_MICHAEL_MIC=m 223CONFIG_CRYPTO_MICHAEL_MIC=m
1888# CONFIG_CRYPTO_RMD128 is not set
1889# CONFIG_CRYPTO_RMD160 is not set
1890# CONFIG_CRYPTO_RMD256 is not set
1891# CONFIG_CRYPTO_RMD320 is not set
1892CONFIG_CRYPTO_SHA1=y
1893CONFIG_CRYPTO_SHA256=m 224CONFIG_CRYPTO_SHA256=m
1894CONFIG_CRYPTO_SHA512=m 225CONFIG_CRYPTO_SHA512=m
1895CONFIG_CRYPTO_TGR192=m 226CONFIG_CRYPTO_TGR192=m
1896CONFIG_CRYPTO_WP512=m 227CONFIG_CRYPTO_WP512=m
1897
1898#
1899# Ciphers
1900#
1901CONFIG_CRYPTO_AES=m 228CONFIG_CRYPTO_AES=m
1902CONFIG_CRYPTO_ANUBIS=m 229CONFIG_CRYPTO_ANUBIS=m
1903CONFIG_CRYPTO_ARC4=m
1904CONFIG_CRYPTO_BLOWFISH=m 230CONFIG_CRYPTO_BLOWFISH=m
1905CONFIG_CRYPTO_CAMELLIA=m 231CONFIG_CRYPTO_CAMELLIA=m
1906CONFIG_CRYPTO_CAST5=m 232CONFIG_CRYPTO_CAST5=m
1907CONFIG_CRYPTO_CAST6=m 233CONFIG_CRYPTO_CAST6=m
1908CONFIG_CRYPTO_DES=y
1909CONFIG_CRYPTO_FCRYPT=m 234CONFIG_CRYPTO_FCRYPT=m
1910CONFIG_CRYPTO_KHAZAD=m 235CONFIG_CRYPTO_KHAZAD=m
1911# CONFIG_CRYPTO_SALSA20 is not set
1912CONFIG_CRYPTO_SEED=m 236CONFIG_CRYPTO_SEED=m
1913CONFIG_CRYPTO_SERPENT=m 237CONFIG_CRYPTO_SERPENT=m
1914CONFIG_CRYPTO_TEA=m 238CONFIG_CRYPTO_TEA=m
1915CONFIG_CRYPTO_TWOFISH=m 239CONFIG_CRYPTO_TWOFISH=m
1916CONFIG_CRYPTO_TWOFISH_COMMON=m
1917
1918#
1919# Compression
1920#
1921CONFIG_CRYPTO_DEFLATE=y
1922# CONFIG_CRYPTO_ZLIB is not set
1923# CONFIG_CRYPTO_LZO is not set
1924
1925#
1926# Random Number Generation
1927#
1928# CONFIG_CRYPTO_ANSI_CPRNG is not set 240# CONFIG_CRYPTO_ANSI_CPRNG is not set
1929CONFIG_CRYPTO_HW=y
1930# CONFIG_CRYPTO_DEV_NIAGARA2 is not set
1931# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1932CONFIG_BINARY_PRINTF=y
1933
1934#
1935# Library routines
1936#
1937CONFIG_BITREVERSE=y
1938CONFIG_GENERIC_FIND_LAST_BIT=y
1939CONFIG_CRC_CCITT=m
1940CONFIG_CRC16=m 241CONFIG_CRC16=m
1941# CONFIG_CRC_T10DIF is not set
1942# CONFIG_CRC_ITU_T is not set
1943CONFIG_CRC32=y
1944# CONFIG_CRC7 is not set
1945CONFIG_LIBCRC32C=m 242CONFIG_LIBCRC32C=m
1946CONFIG_ZLIB_INFLATE=y
1947CONFIG_ZLIB_DEFLATE=y
1948CONFIG_LZO_DECOMPRESS=y
1949CONFIG_DECOMPRESS_GZIP=y
1950CONFIG_DECOMPRESS_BZIP2=y
1951CONFIG_DECOMPRESS_LZMA=y
1952CONFIG_DECOMPRESS_LZO=y
1953CONFIG_HAS_IOMEM=y
1954CONFIG_HAS_IOPORT=y
1955CONFIG_HAS_DMA=y
1956CONFIG_NLATTR=y
diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild
index deeb0fba8029..3c93f08ce187 100644
--- a/arch/sparc/include/asm/Kbuild
+++ b/arch/sparc/include/asm/Kbuild
@@ -7,7 +7,6 @@ header-y += display7seg.h
7header-y += envctrl.h 7header-y += envctrl.h
8header-y += fbio.h 8header-y += fbio.h
9header-y += jsflash.h 9header-y += jsflash.h
10header-y += openprom.h
11header-y += openpromio.h 10header-y += openpromio.h
12header-y += perfctr.h 11header-y += perfctr.h
13header-y += psrcompat.h 12header-y += psrcompat.h
diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h
index 2050ca02c423..bdb2ff880bdd 100644
--- a/arch/sparc/include/asm/atomic_64.h
+++ b/arch/sparc/include/asm/atomic_64.h
@@ -20,14 +20,14 @@
20#define atomic64_set(v, i) (((v)->counter) = i) 20#define atomic64_set(v, i) (((v)->counter) = i)
21 21
22extern void atomic_add(int, atomic_t *); 22extern void atomic_add(int, atomic_t *);
23extern void atomic64_add(int, atomic64_t *); 23extern void atomic64_add(long, atomic64_t *);
24extern void atomic_sub(int, atomic_t *); 24extern void atomic_sub(int, atomic_t *);
25extern void atomic64_sub(int, atomic64_t *); 25extern void atomic64_sub(long, atomic64_t *);
26 26
27extern int atomic_add_ret(int, atomic_t *); 27extern int atomic_add_ret(int, atomic_t *);
28extern int atomic64_add_ret(int, atomic64_t *); 28extern long atomic64_add_ret(long, atomic64_t *);
29extern int atomic_sub_ret(int, atomic_t *); 29extern int atomic_sub_ret(int, atomic_t *);
30extern int atomic64_sub_ret(int, atomic64_t *); 30extern long atomic64_sub_ret(long, atomic64_t *);
31 31
32#define atomic_dec_return(v) atomic_sub_ret(1, v) 32#define atomic_dec_return(v) atomic_sub_ret(1, v)
33#define atomic64_dec_return(v) atomic64_sub_ret(1, v) 33#define atomic64_dec_return(v) atomic64_sub_ret(1, v)
@@ -91,7 +91,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
91 ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n))) 91 ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
92#define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) 92#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
93 93
94static inline int atomic64_add_unless(atomic64_t *v, long a, long u) 94static inline long atomic64_add_unless(atomic64_t *v, long a, long u)
95{ 95{
96 long c, old; 96 long c, old;
97 c = atomic64_read(v); 97 c = atomic64_read(v);
diff --git a/arch/sparc/include/asm/backoff.h b/arch/sparc/include/asm/backoff.h
index fa1fdf67e350..db3af0d30fb1 100644
--- a/arch/sparc/include/asm/backoff.h
+++ b/arch/sparc/include/asm/backoff.h
@@ -8,6 +8,9 @@
8#define BACKOFF_SETUP(reg) \ 8#define BACKOFF_SETUP(reg) \
9 mov 1, reg 9 mov 1, reg
10 10
11#define BACKOFF_LABEL(spin_label, continue_label) \
12 spin_label
13
11#define BACKOFF_SPIN(reg, tmp, label) \ 14#define BACKOFF_SPIN(reg, tmp, label) \
12 mov reg, tmp; \ 15 mov reg, tmp; \
1388: brnz,pt tmp, 88b; \ 1688: brnz,pt tmp, 88b; \
@@ -22,9 +25,11 @@
22#else 25#else
23 26
24#define BACKOFF_SETUP(reg) 27#define BACKOFF_SETUP(reg)
25#define BACKOFF_SPIN(reg, tmp, label) \ 28
26 ba,pt %xcc, label; \ 29#define BACKOFF_LABEL(spin_label, continue_label) \
27 nop; 30 continue_label
31
32#define BACKOFF_SPIN(reg, tmp, label)
28 33
29#endif 34#endif
30 35
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h
index 5016f76ea98a..6f57325bb883 100644
--- a/arch/sparc/include/asm/compat.h
+++ b/arch/sparc/include/asm/compat.h
@@ -167,7 +167,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr)
167 return (u32)(unsigned long)uptr; 167 return (u32)(unsigned long)uptr;
168} 168}
169 169
170static inline void __user *compat_alloc_user_space(long len) 170static inline void __user *arch_compat_alloc_user_space(long len)
171{ 171{
172 struct pt_regs *regs = current_thread_info()->kregs; 172 struct pt_regs *regs = current_thread_info()->kregs;
173 unsigned long usp = regs->u_regs[UREG_I6]; 173 unsigned long usp = regs->u_regs[UREG_I6];
diff --git a/arch/sparc/include/asm/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h
index 4b4a0c0b0ccd..8c0e4f7bb204 100644
--- a/arch/sparc/include/asm/dma-mapping.h
+++ b/arch/sparc/include/asm/dma-mapping.h
@@ -11,7 +11,6 @@ extern int dma_supported(struct device *dev, u64 mask);
11 11
12#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 12#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
13#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 13#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
14#define dma_is_consistent(d, h) (1)
15 14
16extern struct dma_map_ops *dma_ops, pci32_dma_ops; 15extern struct dma_map_ops *dma_ops, pci32_dma_ops;
17extern struct bus_type pci_bus_type; 16extern struct bus_type pci_bus_type;
@@ -52,15 +51,6 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
52 return (dma_addr == DMA_ERROR_CODE); 51 return (dma_addr == DMA_ERROR_CODE);
53} 52}
54 53
55static inline int dma_get_cache_alignment(void)
56{
57 /*
58 * no easy way to get cache size on all processors, so return
59 * the maximum possible, to be safe
60 */
61 return (1 << INTERNODE_CACHE_SHIFT);
62}
63
64static inline int dma_set_mask(struct device *dev, u64 mask) 54static inline int dma_set_mask(struct device *dev, u64 mask)
65{ 55{
66#ifdef CONFIG_PCI 56#ifdef CONFIG_PCI
diff --git a/arch/sparc/include/asm/fb.h b/arch/sparc/include/asm/fb.h
index e834880be204..2173432ad7f7 100644
--- a/arch/sparc/include/asm/fb.h
+++ b/arch/sparc/include/asm/fb.h
@@ -1,5 +1,6 @@
1#ifndef _SPARC_FB_H_ 1#ifndef _SPARC_FB_H_
2#define _SPARC_FB_H_ 2#define _SPARC_FB_H_
3#include <linux/console.h>
3#include <linux/fb.h> 4#include <linux/fb.h>
4#include <linux/fs.h> 5#include <linux/fs.h>
5#include <asm/page.h> 6#include <asm/page.h>
@@ -18,6 +19,9 @@ static inline int fb_is_primary_device(struct fb_info *info)
18 struct device *dev = info->device; 19 struct device *dev = info->device;
19 struct device_node *node; 20 struct device_node *node;
20 21
22 if (console_set_on_cmdline)
23 return 0;
24
21 node = dev->of_node; 25 node = dev->of_node;
22 if (node && 26 if (node &&
23 node == of_console_device) 27 node == of_console_device)
diff --git a/arch/sparc/include/asm/floppy_32.h b/arch/sparc/include/asm/floppy_32.h
index c792830636de..86666f70322e 100644
--- a/arch/sparc/include/asm/floppy_32.h
+++ b/arch/sparc/include/asm/floppy_32.h
@@ -304,7 +304,8 @@ static struct linux_prom_registers fd_regs[2];
304static int sun_floppy_init(void) 304static int sun_floppy_init(void)
305{ 305{
306 char state[128]; 306 char state[128];
307 int tnode, fd_node, num_regs; 307 phandle tnode, fd_node;
308 int num_regs;
308 struct resource r; 309 struct resource r;
309 310
310 use_virtual_dma = 1; 311 use_virtual_dma = 1;
diff --git a/arch/sparc/include/asm/highmem.h b/arch/sparc/include/asm/highmem.h
index ec23b0a87b98..3d7afbb7f4bb 100644
--- a/arch/sparc/include/asm/highmem.h
+++ b/arch/sparc/include/asm/highmem.h
@@ -70,8 +70,8 @@ static inline void kunmap(struct page *page)
70 kunmap_high(page); 70 kunmap_high(page);
71} 71}
72 72
73extern void *kmap_atomic(struct page *page, enum km_type type); 73extern void *__kmap_atomic(struct page *page);
74extern void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type); 74extern void __kunmap_atomic(void *kvaddr);
75extern struct page *kmap_atomic_to_page(void *vaddr); 75extern struct page *kmap_atomic_to_page(void *vaddr);
76 76
77#define flush_cache_kmaps() flush_cache_all() 77#define flush_cache_kmaps() flush_cache_all()
diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h
index 2889574608db..c2ced21c9dc1 100644
--- a/arch/sparc/include/asm/io_32.h
+++ b/arch/sparc/include/asm/io_32.h
@@ -208,6 +208,21 @@ _memset_io(volatile void __iomem *dst, int c, __kernel_size_t n)
208#define memset_io(d,c,sz) _memset_io(d,c,sz) 208#define memset_io(d,c,sz) _memset_io(d,c,sz)
209 209
210static inline void 210static inline void
211_sbus_memcpy_fromio(void *dst, const volatile void __iomem *src,
212 __kernel_size_t n)
213{
214 char *d = dst;
215
216 while (n--) {
217 char tmp = sbus_readb(src);
218 *d++ = tmp;
219 src++;
220 }
221}
222
223#define sbus_memcpy_fromio(d, s, sz) _sbus_memcpy_fromio(d, s, sz)
224
225static inline void
211_memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n) 226_memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n)
212{ 227{
213 char *d = dst; 228 char *d = dst;
@@ -222,6 +237,22 @@ _memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n)
222#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz) 237#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz)
223 238
224static inline void 239static inline void
240_sbus_memcpy_toio(volatile void __iomem *dst, const void *src,
241 __kernel_size_t n)
242{
243 const char *s = src;
244 volatile void __iomem *d = dst;
245
246 while (n--) {
247 char tmp = *s++;
248 sbus_writeb(tmp, d);
249 d++;
250 }
251}
252
253#define sbus_memcpy_toio(d, s, sz) _sbus_memcpy_toio(d, s, sz)
254
255static inline void
225_memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n) 256_memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n)
226{ 257{
227 const char *s = src; 258 const char *s = src;
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h
index 9517d063c79c..9c8965415f0a 100644
--- a/arch/sparc/include/asm/io_64.h
+++ b/arch/sparc/include/asm/io_64.h
@@ -419,6 +419,21 @@ _memset_io(volatile void __iomem *dst, int c, __kernel_size_t n)
419#define memset_io(d,c,sz) _memset_io(d,c,sz) 419#define memset_io(d,c,sz) _memset_io(d,c,sz)
420 420
421static inline void 421static inline void
422_sbus_memcpy_fromio(void *dst, const volatile void __iomem *src,
423 __kernel_size_t n)
424{
425 char *d = dst;
426
427 while (n--) {
428 char tmp = sbus_readb(src);
429 *d++ = tmp;
430 src++;
431 }
432}
433
434#define sbus_memcpy_fromio(d, s, sz) _sbus_memcpy_fromio(d, s, sz)
435
436static inline void
422_memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n) 437_memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n)
423{ 438{
424 char *d = dst; 439 char *d = dst;
@@ -433,6 +448,22 @@ _memcpy_fromio(void *dst, const volatile void __iomem *src, __kernel_size_t n)
433#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz) 448#define memcpy_fromio(d,s,sz) _memcpy_fromio(d,s,sz)
434 449
435static inline void 450static inline void
451_sbus_memcpy_toio(volatile void __iomem *dst, const void *src,
452 __kernel_size_t n)
453{
454 const char *s = src;
455 volatile void __iomem *d = dst;
456
457 while (n--) {
458 char tmp = *s++;
459 sbus_writeb(tmp, d);
460 d++;
461 }
462}
463
464#define sbus_memcpy_toio(d, s, sz) _sbus_memcpy_toio(d, s, sz)
465
466static inline void
436_memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n) 467_memcpy_toio(volatile void __iomem *dst, const void *src, __kernel_size_t n)
437{ 468{
438 const char *s = src; 469 const char *s = src;
diff --git a/arch/sparc/include/asm/ioctls.h b/arch/sparc/include/asm/ioctls.h
index 1fe6855c5c18..53f4ee009bdd 100644
--- a/arch/sparc/include/asm/ioctls.h
+++ b/arch/sparc/include/asm/ioctls.h
@@ -80,6 +80,7 @@
80/* Get minor device of a pty master's FD -- Solaris equiv is ISPTM */ 80/* Get minor device of a pty master's FD -- Solaris equiv is ISPTM */
81#define TIOCGPTN _IOR('t', 134, unsigned int) /* Get Pty Number */ 81#define TIOCGPTN _IOR('t', 134, unsigned int) /* Get Pty Number */
82#define TIOCSPTLCK _IOW('t', 135, int) /* Lock/unlock PTY */ 82#define TIOCSPTLCK _IOW('t', 135, int) /* Lock/unlock PTY */
83#define TIOCSIG _IOW('t', 136, int) /* Generate signal on Pty slave */
83 84
84/* Little f */ 85/* Little f */
85#define FIOCLEX _IO('f', 1) 86#define FIOCLEX _IO('f', 1)
@@ -132,5 +133,6 @@
132#define TIOCPKT_START 8 133#define TIOCPKT_START 8
133#define TIOCPKT_NOSTOP 16 134#define TIOCPKT_NOSTOP 16
134#define TIOCPKT_DOSTOP 32 135#define TIOCPKT_DOSTOP 32
136#define TIOCPKT_IOCTL 64
135 137
136#endif /* !(_ASM_SPARC_IOCTLS_H) */ 138#endif /* !(_ASM_SPARC_IOCTLS_H) */
diff --git a/arch/sparc/include/asm/irqflags_32.h b/arch/sparc/include/asm/irqflags_32.h
index 0fca9d97d44f..d4d0711de0f9 100644
--- a/arch/sparc/include/asm/irqflags_32.h
+++ b/arch/sparc/include/asm/irqflags_32.h
@@ -5,33 +5,40 @@
5 * 5 *
6 * This file gets included from lowlevel asm headers too, to provide 6 * This file gets included from lowlevel asm headers too, to provide
7 * wrapped versions of the local_irq_*() APIs, based on the 7 * wrapped versions of the local_irq_*() APIs, based on the
8 * raw_local_irq_*() functions from the lowlevel headers. 8 * arch_local_irq_*() functions from the lowlevel headers.
9 */ 9 */
10#ifndef _ASM_IRQFLAGS_H 10#ifndef _ASM_IRQFLAGS_H
11#define _ASM_IRQFLAGS_H 11#define _ASM_IRQFLAGS_H
12 12
13#ifndef __ASSEMBLY__ 13#ifndef __ASSEMBLY__
14 14
15extern void raw_local_irq_restore(unsigned long); 15#include <linux/types.h>
16extern unsigned long __raw_local_irq_save(void);
17extern void raw_local_irq_enable(void);
18 16
19static inline unsigned long getipl(void) 17extern void arch_local_irq_restore(unsigned long);
18extern unsigned long arch_local_irq_save(void);
19extern void arch_local_irq_enable(void);
20
21static inline unsigned long arch_local_save_flags(void)
20{ 22{
21 unsigned long retval; 23 unsigned long flags;
24
25 asm volatile("rd %%psr, %0" : "=r" (flags));
26 return flags;
27}
22 28
23 __asm__ __volatile__("rd %%psr, %0" : "=r" (retval)); 29static inline void arch_local_irq_disable(void)
24 return retval; 30{
31 arch_local_irq_save();
25} 32}
26 33
27#define raw_local_save_flags(flags) ((flags) = getipl()) 34static inline bool arch_irqs_disabled_flags(unsigned long flags)
28#define raw_local_irq_save(flags) ((flags) = __raw_local_irq_save()) 35{
29#define raw_local_irq_disable() ((void) __raw_local_irq_save()) 36 return (flags & PSR_PIL) != 0;
30#define raw_irqs_disabled() ((getipl() & PSR_PIL) != 0) 37}
31 38
32static inline int raw_irqs_disabled_flags(unsigned long flags) 39static inline bool arch_irqs_disabled(void)
33{ 40{
34 return ((flags & PSR_PIL) != 0); 41 return arch_irqs_disabled_flags(arch_local_save_flags());
35} 42}
36 43
37#endif /* (__ASSEMBLY__) */ 44#endif /* (__ASSEMBLY__) */
diff --git a/arch/sparc/include/asm/irqflags_64.h b/arch/sparc/include/asm/irqflags_64.h
index bfa1ea45b4cd..aab969c82c2b 100644
--- a/arch/sparc/include/asm/irqflags_64.h
+++ b/arch/sparc/include/asm/irqflags_64.h
@@ -5,7 +5,7 @@
5 * 5 *
6 * This file gets included from lowlevel asm headers too, to provide 6 * This file gets included from lowlevel asm headers too, to provide
7 * wrapped versions of the local_irq_*() APIs, based on the 7 * wrapped versions of the local_irq_*() APIs, based on the
8 * raw_local_irq_*() functions from the lowlevel headers. 8 * arch_local_irq_*() functions from the lowlevel headers.
9 */ 9 */
10#ifndef _ASM_IRQFLAGS_H 10#ifndef _ASM_IRQFLAGS_H
11#define _ASM_IRQFLAGS_H 11#define _ASM_IRQFLAGS_H
@@ -14,7 +14,7 @@
14 14
15#ifndef __ASSEMBLY__ 15#ifndef __ASSEMBLY__
16 16
17static inline unsigned long __raw_local_save_flags(void) 17static inline unsigned long arch_local_save_flags(void)
18{ 18{
19 unsigned long flags; 19 unsigned long flags;
20 20
@@ -26,10 +26,7 @@ static inline unsigned long __raw_local_save_flags(void)
26 return flags; 26 return flags;
27} 27}
28 28
29#define raw_local_save_flags(flags) \ 29static inline void arch_local_irq_restore(unsigned long flags)
30 do { (flags) = __raw_local_save_flags(); } while (0)
31
32static inline void raw_local_irq_restore(unsigned long flags)
33{ 30{
34 __asm__ __volatile__( 31 __asm__ __volatile__(
35 "wrpr %0, %%pil" 32 "wrpr %0, %%pil"
@@ -39,7 +36,7 @@ static inline void raw_local_irq_restore(unsigned long flags)
39 ); 36 );
40} 37}
41 38
42static inline void raw_local_irq_disable(void) 39static inline void arch_local_irq_disable(void)
43{ 40{
44 __asm__ __volatile__( 41 __asm__ __volatile__(
45 "wrpr %0, %%pil" 42 "wrpr %0, %%pil"
@@ -49,7 +46,7 @@ static inline void raw_local_irq_disable(void)
49 ); 46 );
50} 47}
51 48
52static inline void raw_local_irq_enable(void) 49static inline void arch_local_irq_enable(void)
53{ 50{
54 __asm__ __volatile__( 51 __asm__ __volatile__(
55 "wrpr 0, %%pil" 52 "wrpr 0, %%pil"
@@ -59,22 +56,17 @@ static inline void raw_local_irq_enable(void)
59 ); 56 );
60} 57}
61 58
62static inline int raw_irqs_disabled_flags(unsigned long flags) 59static inline int arch_irqs_disabled_flags(unsigned long flags)
63{ 60{
64 return (flags > 0); 61 return (flags > 0);
65} 62}
66 63
67static inline int raw_irqs_disabled(void) 64static inline int arch_irqs_disabled(void)
68{ 65{
69 unsigned long flags = __raw_local_save_flags(); 66 return arch_irqs_disabled_flags(arch_local_save_flags());
70
71 return raw_irqs_disabled_flags(flags);
72} 67}
73 68
74/* 69static inline unsigned long arch_local_irq_save(void)
75 * For spinlocks, etc:
76 */
77static inline unsigned long __raw_local_irq_save(void)
78{ 70{
79 unsigned long flags, tmp; 71 unsigned long flags, tmp;
80 72
@@ -100,9 +92,6 @@ static inline unsigned long __raw_local_irq_save(void)
100 return flags; 92 return flags;
101} 93}
102 94
103#define raw_local_irq_save(flags) \
104 do { (flags) = __raw_local_irq_save(); } while (0)
105
106#endif /* (__ASSEMBLY__) */ 95#endif /* (__ASSEMBLY__) */
107 96
108#endif /* !(_ASM_IRQFLAGS_H) */ 97#endif /* !(_ASM_IRQFLAGS_H) */
diff --git a/arch/sparc/include/asm/jump_label.h b/arch/sparc/include/asm/jump_label.h
new file mode 100644
index 000000000000..427d4684e0d2
--- /dev/null
+++ b/arch/sparc/include/asm/jump_label.h
@@ -0,0 +1,32 @@
1#ifndef _ASM_SPARC_JUMP_LABEL_H
2#define _ASM_SPARC_JUMP_LABEL_H
3
4#ifdef __KERNEL__
5
6#include <linux/types.h>
7
8#define JUMP_LABEL_NOP_SIZE 4
9
10#define JUMP_LABEL(key, label) \
11 do { \
12 asm goto("1:\n\t" \
13 "nop\n\t" \
14 "nop\n\t" \
15 ".pushsection __jump_table, \"a\"\n\t"\
16 ".align 4\n\t" \
17 ".word 1b, %l[" #label "], %c0\n\t" \
18 ".popsection \n\t" \
19 : : "i" (key) : : label);\
20 } while (0)
21
22#endif /* __KERNEL__ */
23
24typedef u32 jump_label_t;
25
26struct jump_entry {
27 jump_label_t code;
28 jump_label_t target;
29 jump_label_t key;
30};
31
32#endif
diff --git a/arch/sparc/include/asm/memblock.h b/arch/sparc/include/asm/memblock.h
index f12af880649b..c67b047ef85e 100644
--- a/arch/sparc/include/asm/memblock.h
+++ b/arch/sparc/include/asm/memblock.h
@@ -5,6 +5,4 @@
5 5
6#define MEMBLOCK_DBG(fmt...) prom_printf(fmt) 6#define MEMBLOCK_DBG(fmt...) prom_printf(fmt)
7 7
8#define MEMBLOCK_REAL_LIMIT 0
9
10#endif /* !(_SPARC64_MEMBLOCK_H) */ 8#endif /* !(_SPARC64_MEMBLOCK_H) */
diff --git a/arch/sparc/include/asm/openprom.h b/arch/sparc/include/asm/openprom.h
index 963e1a45c35f..47eaafad15ce 100644
--- a/arch/sparc/include/asm/openprom.h
+++ b/arch/sparc/include/asm/openprom.h
@@ -11,6 +11,8 @@
11#define LINUX_OPPROM_MAGIC 0x10010407 11#define LINUX_OPPROM_MAGIC 0x10010407
12 12
13#ifndef __ASSEMBLY__ 13#ifndef __ASSEMBLY__
14#include <linux/of.h>
15
14/* V0 prom device operations. */ 16/* V0 prom device operations. */
15struct linux_dev_v0_funcs { 17struct linux_dev_v0_funcs {
16 int (*v0_devopen)(char *device_str); 18 int (*v0_devopen)(char *device_str);
@@ -26,7 +28,7 @@ struct linux_dev_v0_funcs {
26 28
27/* V2 and later prom device operations. */ 29/* V2 and later prom device operations. */
28struct linux_dev_v2_funcs { 30struct linux_dev_v2_funcs {
29 int (*v2_inst2pkg)(int d); /* Convert ihandle to phandle */ 31 phandle (*v2_inst2pkg)(int d); /* Convert ihandle to phandle */
30 char * (*v2_dumb_mem_alloc)(char *va, unsigned sz); 32 char * (*v2_dumb_mem_alloc)(char *va, unsigned sz);
31 void (*v2_dumb_mem_free)(char *va, unsigned sz); 33 void (*v2_dumb_mem_free)(char *va, unsigned sz);
32 34
@@ -37,7 +39,7 @@ struct linux_dev_v2_funcs {
37 int (*v2_dev_open)(char *devpath); 39 int (*v2_dev_open)(char *devpath);
38 void (*v2_dev_close)(int d); 40 void (*v2_dev_close)(int d);
39 int (*v2_dev_read)(int d, char *buf, int nbytes); 41 int (*v2_dev_read)(int d, char *buf, int nbytes);
40 int (*v2_dev_write)(int d, char *buf, int nbytes); 42 int (*v2_dev_write)(int d, const char *buf, int nbytes);
41 int (*v2_dev_seek)(int d, int hi, int lo); 43 int (*v2_dev_seek)(int d, int hi, int lo);
42 44
43 /* Never issued (multistage load support) */ 45 /* Never issued (multistage load support) */
@@ -168,12 +170,12 @@ struct linux_romvec {
168 170
169/* Routines for traversing the prom device tree. */ 171/* Routines for traversing the prom device tree. */
170struct linux_nodeops { 172struct linux_nodeops {
171 int (*no_nextnode)(int node); 173 phandle (*no_nextnode)(phandle node);
172 int (*no_child)(int node); 174 phandle (*no_child)(phandle node);
173 int (*no_proplen)(int node, const char *name); 175 int (*no_proplen)(phandle node, const char *name);
174 int (*no_getprop)(int node, const char *name, char *val); 176 int (*no_getprop)(phandle node, const char *name, char *val);
175 int (*no_setprop)(int node, const char *name, char *val, int len); 177 int (*no_setprop)(phandle node, const char *name, char *val, int len);
176 char * (*no_nextprop)(int node, char *name); 178 char * (*no_nextprop)(phandle node, char *name);
177}; 179};
178 180
179/* More fun PROM structures for device probing. */ 181/* More fun PROM structures for device probing. */
diff --git a/arch/sparc/include/asm/oplib_32.h b/arch/sparc/include/asm/oplib_32.h
index 33e31ce6b31f..9e5c64084b86 100644
--- a/arch/sparc/include/asm/oplib_32.h
+++ b/arch/sparc/include/asm/oplib_32.h
@@ -30,7 +30,7 @@ extern unsigned int prom_rev, prom_prev;
30/* Root node of the prom device tree, this stays constant after 30/* Root node of the prom device tree, this stays constant after
31 * initialization is complete. 31 * initialization is complete.
32 */ 32 */
33extern int prom_root_node; 33extern phandle prom_root_node;
34 34
35/* Pointer to prom structure containing the device tree traversal 35/* Pointer to prom structure containing the device tree traversal
36 * and usage utility functions. Only prom-lib should use these, 36 * and usage utility functions. Only prom-lib should use these,
@@ -60,25 +60,6 @@ extern char *prom_getbootargs(void);
60extern char *prom_mapio(char *virt_hint, int io_space, unsigned int phys_addr, unsigned int num_bytes); 60extern char *prom_mapio(char *virt_hint, int io_space, unsigned int phys_addr, unsigned int num_bytes);
61extern void prom_unmapio(char *virt_addr, unsigned int num_bytes); 61extern void prom_unmapio(char *virt_addr, unsigned int num_bytes);
62 62
63/* Device operations. */
64
65/* Open the device described by the passed string. Note, that the format
66 * of the string is different on V0 vs. V2->higher proms. The caller must
67 * know what he/she is doing! Returns the device descriptor, an int.
68 */
69extern int prom_devopen(char *device_string);
70
71/* Close a previously opened device described by the passed integer
72 * descriptor.
73 */
74extern int prom_devclose(int device_handle);
75
76/* Do a seek operation on the device described by the passed integer
77 * descriptor.
78 */
79extern void prom_seek(int device_handle, unsigned int seek_hival,
80 unsigned int seek_lowval);
81
82/* Miscellaneous routines, don't really fit in any category per se. */ 63/* Miscellaneous routines, don't really fit in any category per se. */
83 64
84/* Reboot the machine with the command line passed. */ 65/* Reboot the machine with the command line passed. */
@@ -121,19 +102,8 @@ extern int prom_getrev(void);
121/* Get the prom firmware revision. */ 102/* Get the prom firmware revision. */
122extern int prom_getprev(void); 103extern int prom_getprev(void);
123 104
124/* Character operations to/from the console.... */ 105/* Write a buffer of characters to the console. */
125 106extern void prom_console_write_buf(const char *buf, int len);
126/* Non-blocking get character from console. */
127extern int prom_nbgetchar(void);
128
129/* Non-blocking put character to console. */
130extern int prom_nbputchar(char character);
131
132/* Blocking get character from console. */
133extern char prom_getchar(void);
134
135/* Blocking put character to console. */
136extern void prom_putchar(char character);
137 107
138/* Prom's internal routines, don't use in kernel/boot code. */ 108/* Prom's internal routines, don't use in kernel/boot code. */
139extern void prom_printf(const char *fmt, ...); 109extern void prom_printf(const char *fmt, ...);
@@ -178,68 +148,67 @@ extern void prom_putsegment(int context, unsigned long virt_addr,
178/* PROM device tree traversal functions... */ 148/* PROM device tree traversal functions... */
179 149
180/* Get the child node of the given node, or zero if no child exists. */ 150/* Get the child node of the given node, or zero if no child exists. */
181extern int prom_getchild(int parent_node); 151extern phandle prom_getchild(phandle parent_node);
182 152
183/* Get the next sibling node of the given node, or zero if no further 153/* Get the next sibling node of the given node, or zero if no further
184 * siblings exist. 154 * siblings exist.
185 */ 155 */
186extern int prom_getsibling(int node); 156extern phandle prom_getsibling(phandle node);
187 157
188/* Get the length, at the passed node, of the given property type. 158/* Get the length, at the passed node, of the given property type.
189 * Returns -1 on error (ie. no such property at this node). 159 * Returns -1 on error (ie. no such property at this node).
190 */ 160 */
191extern int prom_getproplen(int thisnode, const char *property); 161extern int prom_getproplen(phandle thisnode, const char *property);
192 162
193/* Fetch the requested property using the given buffer. Returns 163/* Fetch the requested property using the given buffer. Returns
194 * the number of bytes the prom put into your buffer or -1 on error. 164 * the number of bytes the prom put into your buffer or -1 on error.
195 */ 165 */
196extern int __must_check prom_getproperty(int thisnode, const char *property, 166extern int __must_check prom_getproperty(phandle thisnode, const char *property,
197 char *prop_buffer, int propbuf_size); 167 char *prop_buffer, int propbuf_size);
198 168
199/* Acquire an integer property. */ 169/* Acquire an integer property. */
200extern int prom_getint(int node, char *property); 170extern int prom_getint(phandle node, char *property);
201 171
202/* Acquire an integer property, with a default value. */ 172/* Acquire an integer property, with a default value. */
203extern int prom_getintdefault(int node, char *property, int defval); 173extern int prom_getintdefault(phandle node, char *property, int defval);
204 174
205/* Acquire a boolean property, 0=FALSE 1=TRUE. */ 175/* Acquire a boolean property, 0=FALSE 1=TRUE. */
206extern int prom_getbool(int node, char *prop); 176extern int prom_getbool(phandle node, char *prop);
207 177
208/* Acquire a string property, null string on error. */ 178/* Acquire a string property, null string on error. */
209extern void prom_getstring(int node, char *prop, char *buf, int bufsize); 179extern void prom_getstring(phandle node, char *prop, char *buf, int bufsize);
210 180
211/* Does the passed node have the given "name"? YES=1 NO=0 */ 181/* Does the passed node have the given "name"? YES=1 NO=0 */
212extern int prom_nodematch(int thisnode, char *name); 182extern int prom_nodematch(phandle thisnode, char *name);
213 183
214/* Search all siblings starting at the passed node for "name" matching 184/* Search all siblings starting at the passed node for "name" matching
215 * the given string. Returns the node on success, zero on failure. 185 * the given string. Returns the node on success, zero on failure.
216 */ 186 */
217extern int prom_searchsiblings(int node_start, char *name); 187extern phandle prom_searchsiblings(phandle node_start, char *name);
218 188
219/* Return the first property type, as a string, for the given node. 189/* Return the first property type, as a string, for the given node.
220 * Returns a null string on error. 190 * Returns a null string on error.
221 */ 191 */
222extern char *prom_firstprop(int node, char *buffer); 192extern char *prom_firstprop(phandle node, char *buffer);
223 193
224/* Returns the next property after the passed property for the given 194/* Returns the next property after the passed property for the given
225 * node. Returns null string on failure. 195 * node. Returns null string on failure.
226 */ 196 */
227extern char *prom_nextprop(int node, char *prev_property, char *buffer); 197extern char *prom_nextprop(phandle node, char *prev_property, char *buffer);
228 198
229/* Returns phandle of the path specified */ 199/* Returns phandle of the path specified */
230extern int prom_finddevice(char *name); 200extern phandle prom_finddevice(char *name);
231 201
232/* Returns 1 if the specified node has given property. */ 202/* Returns 1 if the specified node has given property. */
233extern int prom_node_has_property(int node, char *property); 203extern int prom_node_has_property(phandle node, char *property);
234 204
235/* Set the indicated property at the given node with the passed value. 205/* Set the indicated property at the given node with the passed value.
236 * Returns the number of bytes of your value that the prom took. 206 * Returns the number of bytes of your value that the prom took.
237 */ 207 */
238extern int prom_setprop(int node, const char *prop_name, char *prop_value, 208extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
239 int value_size); 209 int value_size);
240 210
241extern int prom_pathtoinode(char *path); 211extern phandle prom_inst2pkg(int);
242extern int prom_inst2pkg(int);
243 212
244/* Dorking with Bus ranges... */ 213/* Dorking with Bus ranges... */
245 214
@@ -247,13 +216,13 @@ extern int prom_inst2pkg(int);
247extern void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs); 216extern void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
248 217
249/* Apply ranges of any prom node (and optionally parent node as well) to registers. */ 218/* Apply ranges of any prom node (and optionally parent node as well) to registers. */
250extern void prom_apply_generic_ranges(int node, int parent, 219extern void prom_apply_generic_ranges(phandle node, phandle parent,
251 struct linux_prom_registers *sbusregs, int nregs); 220 struct linux_prom_registers *sbusregs, int nregs);
252 221
253/* CPU probing helpers. */ 222/* CPU probing helpers. */
254int cpu_find_by_instance(int instance, int *prom_node, int *mid); 223int cpu_find_by_instance(int instance, phandle *prom_node, int *mid);
255int cpu_find_by_mid(int mid, int *prom_node); 224int cpu_find_by_mid(int mid, phandle *prom_node);
256int cpu_get_hwmid(int prom_node); 225int cpu_get_hwmid(phandle prom_node);
257 226
258extern spinlock_t prom_lock; 227extern spinlock_t prom_lock;
259 228
diff --git a/arch/sparc/include/asm/oplib_64.h b/arch/sparc/include/asm/oplib_64.h
index a5db0317b5fb..8cd0df34e82b 100644
--- a/arch/sparc/include/asm/oplib_64.h
+++ b/arch/sparc/include/asm/oplib_64.h
@@ -16,7 +16,7 @@ extern char prom_version[];
16/* Root node of the prom device tree, this stays constant after 16/* Root node of the prom device tree, this stays constant after
17 * initialization is complete. 17 * initialization is complete.
18 */ 18 */
19extern int prom_root_node; 19extern phandle prom_root_node;
20 20
21/* PROM stdin and stdout */ 21/* PROM stdin and stdout */
22extern int prom_stdin, prom_stdout; 22extern int prom_stdin, prom_stdout;
@@ -24,7 +24,7 @@ extern int prom_stdin, prom_stdout;
24/* /chosen node of the prom device tree, this stays constant after 24/* /chosen node of the prom device tree, this stays constant after
25 * initialization is complete. 25 * initialization is complete.
26 */ 26 */
27extern int prom_chosen_node; 27extern phandle prom_chosen_node;
28 28
29/* Helper values and strings in arch/sparc64/kernel/head.S */ 29/* Helper values and strings in arch/sparc64/kernel/head.S */
30extern const char prom_peer_name[]; 30extern const char prom_peer_name[];
@@ -67,27 +67,6 @@ extern void prom_init(void *cif_handler, void *cif_stack);
67/* Boot argument acquisition, returns the boot command line string. */ 67/* Boot argument acquisition, returns the boot command line string. */
68extern char *prom_getbootargs(void); 68extern char *prom_getbootargs(void);
69 69
70/* Device utilities. */
71
72/* Device operations. */
73
74/* Open the device described by the passed string. Note, that the format
75 * of the string is different on V0 vs. V2->higher proms. The caller must
76 * know what he/she is doing! Returns the device descriptor, an int.
77 */
78extern int prom_devopen(const char *device_string);
79
80/* Close a previously opened device described by the passed integer
81 * descriptor.
82 */
83extern int prom_devclose(int device_handle);
84
85/* Do a seek operation on the device described by the passed integer
86 * descriptor.
87 */
88extern void prom_seek(int device_handle, unsigned int seek_hival,
89 unsigned int seek_lowval);
90
91/* Miscellaneous routines, don't really fit in any category per se. */ 70/* Miscellaneous routines, don't really fit in any category per se. */
92 71
93/* Reboot the machine with the command line passed. */ 72/* Reboot the machine with the command line passed. */
@@ -109,33 +88,14 @@ extern void prom_halt(void) __attribute__ ((noreturn));
109/* Halt and power-off the machine. */ 88/* Halt and power-off the machine. */
110extern void prom_halt_power_off(void) __attribute__ ((noreturn)); 89extern void prom_halt_power_off(void) __attribute__ ((noreturn));
111 90
112/* Set the PROM 'sync' callback function to the passed function pointer.
113 * When the user gives the 'sync' command at the prom prompt while the
114 * kernel is still active, the prom will call this routine.
115 *
116 */
117typedef int (*callback_func_t)(long *cmd);
118extern void prom_setcallback(callback_func_t func_ptr);
119
120/* Acquire the IDPROM of the root node in the prom device tree. This 91/* Acquire the IDPROM of the root node in the prom device tree. This
121 * gets passed a buffer where you would like it stuffed. The return value 92 * gets passed a buffer where you would like it stuffed. The return value
122 * is the format type of this idprom or 0xff on error. 93 * is the format type of this idprom or 0xff on error.
123 */ 94 */
124extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size); 95extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
125 96
126/* Character operations to/from the console.... */ 97/* Write a buffer of characters to the console. */
127 98extern void prom_console_write_buf(const char *buf, int len);
128/* Non-blocking get character from console. */
129extern int prom_nbgetchar(void);
130
131/* Non-blocking put character to console. */
132extern int prom_nbputchar(char character);
133
134/* Blocking get character from console. */
135extern char prom_getchar(void);
136
137/* Blocking put character to console. */
138extern void prom_putchar(char character);
139 99
140/* Prom's internal routines, don't use in kernel/boot code. */ 100/* Prom's internal routines, don't use in kernel/boot code. */
141extern void prom_printf(const char *fmt, ...); 101extern void prom_printf(const char *fmt, ...);
@@ -185,9 +145,8 @@ extern int prom_getunumber(int syndrome_code,
185 char *buf, int buflen); 145 char *buf, int buflen);
186 146
187/* Retain physical memory to the caller across soft resets. */ 147/* Retain physical memory to the caller across soft resets. */
188extern unsigned long prom_retain(const char *name, 148extern int prom_retain(const char *name, unsigned long size,
189 unsigned long pa_low, unsigned long pa_high, 149 unsigned long align, unsigned long *paddr);
190 long size, long align);
191 150
192/* Load explicit I/D TLB entries into the calling processor. */ 151/* Load explicit I/D TLB entries into the calling processor. */
193extern long prom_itlb_load(unsigned long index, 152extern long prom_itlb_load(unsigned long index,
@@ -219,94 +178,73 @@ extern void prom_unmap(unsigned long size, unsigned long vaddr);
219/* PROM device tree traversal functions... */ 178/* PROM device tree traversal functions... */
220 179
221/* Get the child node of the given node, or zero if no child exists. */ 180/* Get the child node of the given node, or zero if no child exists. */
222extern int prom_getchild(int parent_node); 181extern phandle prom_getchild(phandle parent_node);
223 182
224/* Get the next sibling node of the given node, or zero if no further 183/* Get the next sibling node of the given node, or zero if no further
225 * siblings exist. 184 * siblings exist.
226 */ 185 */
227extern int prom_getsibling(int node); 186extern phandle prom_getsibling(phandle node);
228 187
229/* Get the length, at the passed node, of the given property type. 188/* Get the length, at the passed node, of the given property type.
230 * Returns -1 on error (ie. no such property at this node). 189 * Returns -1 on error (ie. no such property at this node).
231 */ 190 */
232extern int prom_getproplen(int thisnode, const char *property); 191extern int prom_getproplen(phandle thisnode, const char *property);
233 192
234/* Fetch the requested property using the given buffer. Returns 193/* Fetch the requested property using the given buffer. Returns
235 * the number of bytes the prom put into your buffer or -1 on error. 194 * the number of bytes the prom put into your buffer or -1 on error.
236 */ 195 */
237extern int prom_getproperty(int thisnode, const char *property, 196extern int prom_getproperty(phandle thisnode, const char *property,
238 char *prop_buffer, int propbuf_size); 197 char *prop_buffer, int propbuf_size);
239 198
240/* Acquire an integer property. */ 199/* Acquire an integer property. */
241extern int prom_getint(int node, const char *property); 200extern int prom_getint(phandle node, const char *property);
242 201
243/* Acquire an integer property, with a default value. */ 202/* Acquire an integer property, with a default value. */
244extern int prom_getintdefault(int node, const char *property, int defval); 203extern int prom_getintdefault(phandle node, const char *property, int defval);
245 204
246/* Acquire a boolean property, 0=FALSE 1=TRUE. */ 205/* Acquire a boolean property, 0=FALSE 1=TRUE. */
247extern int prom_getbool(int node, const char *prop); 206extern int prom_getbool(phandle node, const char *prop);
248 207
249/* Acquire a string property, null string on error. */ 208/* Acquire a string property, null string on error. */
250extern void prom_getstring(int node, const char *prop, char *buf, int bufsize); 209extern void prom_getstring(phandle node, const char *prop, char *buf,
210 int bufsize);
251 211
252/* Does the passed node have the given "name"? YES=1 NO=0 */ 212/* Does the passed node have the given "name"? YES=1 NO=0 */
253extern int prom_nodematch(int thisnode, const char *name); 213extern int prom_nodematch(phandle thisnode, const char *name);
254 214
255/* Search all siblings starting at the passed node for "name" matching 215/* Search all siblings starting at the passed node for "name" matching
256 * the given string. Returns the node on success, zero on failure. 216 * the given string. Returns the node on success, zero on failure.
257 */ 217 */
258extern int prom_searchsiblings(int node_start, const char *name); 218extern phandle prom_searchsiblings(phandle node_start, const char *name);
259 219
260/* Return the first property type, as a string, for the given node. 220/* Return the first property type, as a string, for the given node.
261 * Returns a null string on error. Buffer should be at least 32B long. 221 * Returns a null string on error. Buffer should be at least 32B long.
262 */ 222 */
263extern char *prom_firstprop(int node, char *buffer); 223extern char *prom_firstprop(phandle node, char *buffer);
264 224
265/* Returns the next property after the passed property for the given 225/* Returns the next property after the passed property for the given
266 * node. Returns null string on failure. Buffer should be at least 32B long. 226 * node. Returns null string on failure. Buffer should be at least 32B long.
267 */ 227 */
268extern char *prom_nextprop(int node, const char *prev_property, char *buffer); 228extern char *prom_nextprop(phandle node, const char *prev_property, char *buf);
269 229
270/* Returns 1 if the specified node has given property. */ 230/* Returns 1 if the specified node has given property. */
271extern int prom_node_has_property(int node, const char *property); 231extern int prom_node_has_property(phandle node, const char *property);
272 232
273/* Returns phandle of the path specified */ 233/* Returns phandle of the path specified */
274extern int prom_finddevice(const char *name); 234extern phandle prom_finddevice(const char *name);
275 235
276/* Set the indicated property at the given node with the passed value. 236/* Set the indicated property at the given node with the passed value.
277 * Returns the number of bytes of your value that the prom took. 237 * Returns the number of bytes of your value that the prom took.
278 */ 238 */
279extern int prom_setprop(int node, const char *prop_name, char *prop_value, 239extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
280 int value_size); 240 int value_size);
281 241
282extern int prom_pathtoinode(const char *path); 242extern phandle prom_inst2pkg(int);
283extern int prom_inst2pkg(int);
284extern int prom_service_exists(const char *service_name);
285extern void prom_sun4v_guest_soft_state(void); 243extern void prom_sun4v_guest_soft_state(void);
286 244
287extern int prom_ihandle2path(int handle, char *buffer, int bufsize); 245extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
288 246
289/* Client interface level routines. */ 247/* Client interface level routines. */
290extern long p1275_cmd(const char *, long, ...); 248extern void p1275_cmd_direct(unsigned long *);
291
292#if 0
293#define P1275_SIZE(x) ((((long)((x) / 32)) << 32) | (x))
294#else
295#define P1275_SIZE(x) x
296#endif
297
298/* We support at most 16 input and 1 output argument */
299#define P1275_ARG_NUMBER 0
300#define P1275_ARG_IN_STRING 1
301#define P1275_ARG_OUT_BUF 2
302#define P1275_ARG_OUT_32B 3
303#define P1275_ARG_IN_FUNCTION 4
304#define P1275_ARG_IN_BUF 5
305#define P1275_ARG_IN_64B 6
306
307#define P1275_IN(x) ((x) & 0xf)
308#define P1275_OUT(x) (((x) << 4) & 0xf0)
309#define P1275_INOUT(i,o) (P1275_IN(i)|P1275_OUT(o))
310#define P1275_ARG(n,x) ((x) << ((n)*3 + 8))
311 249
312#endif /* !(__SPARC64_OPLIB_H) */ 250#endif /* !(__SPARC64_OPLIB_H) */
diff --git a/arch/sparc/include/asm/pci_64.h b/arch/sparc/include/asm/pci_64.h
index 5312782f0b5e..948b686ec089 100644
--- a/arch/sparc/include/asm/pci_64.h
+++ b/arch/sparc/include/asm/pci_64.h
@@ -38,7 +38,7 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)
38 * types on sparc64. However, it requires that the device 38 * types on sparc64. However, it requires that the device
39 * can drive enough of the 64 bits. 39 * can drive enough of the 64 bits.
40 */ 40 */
41#define PCI64_REQUIRED_MASK (~(dma64_addr_t)0) 41#define PCI64_REQUIRED_MASK (~(u64)0)
42#define PCI64_ADDR_BASE 0xfffc000000000000UL 42#define PCI64_ADDR_BASE 0xfffc000000000000UL
43 43
44#ifdef CONFIG_PCI 44#ifdef CONFIG_PCI
diff --git a/arch/sparc/include/asm/perf_event.h b/arch/sparc/include/asm/perf_event.h
index 727af70646cb..6e8bfa1786da 100644
--- a/arch/sparc/include/asm/perf_event.h
+++ b/arch/sparc/include/asm/perf_event.h
@@ -1,10 +1,6 @@
1#ifndef __ASM_SPARC_PERF_EVENT_H 1#ifndef __ASM_SPARC_PERF_EVENT_H
2#define __ASM_SPARC_PERF_EVENT_H 2#define __ASM_SPARC_PERF_EVENT_H
3 3
4extern void set_perf_event_pending(void);
5
6#define PERF_EVENT_INDEX_OFFSET 0
7
8#ifdef CONFIG_PERF_EVENTS 4#ifdef CONFIG_PERF_EVENTS
9#include <asm/ptrace.h> 5#include <asm/ptrace.h>
10 6
diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
index 0ece77f47753..303bd4dc8292 100644
--- a/arch/sparc/include/asm/pgtable_32.h
+++ b/arch/sparc/include/asm/pgtable_32.h
@@ -304,10 +304,7 @@ BTFIXUPDEF_CALL(pte_t *, pte_offset_kernel, pmd_t *, unsigned long)
304 * and sun4c is guaranteed to have no highmem anyway. 304 * and sun4c is guaranteed to have no highmem anyway.
305 */ 305 */
306#define pte_offset_map(d, a) pte_offset_kernel(d,a) 306#define pte_offset_map(d, a) pte_offset_kernel(d,a)
307#define pte_offset_map_nested(d, a) pte_offset_kernel(d,a)
308
309#define pte_unmap(pte) do{}while(0) 307#define pte_unmap(pte) do{}while(0)
310#define pte_unmap_nested(pte) do{}while(0)
311 308
312/* Certain architectures need to do special things when pte's 309/* Certain architectures need to do special things when pte's
313 * within a page table are directly modified. Thus, the following 310 * within a page table are directly modified. Thus, the following
diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h
index f5b5fa76c02d..f8dddb7045bb 100644
--- a/arch/sparc/include/asm/pgtable_64.h
+++ b/arch/sparc/include/asm/pgtable_64.h
@@ -652,9 +652,7 @@ static inline int pte_special(pte_t pte)
652 ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) 652 ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)))
653#define pte_offset_kernel pte_index 653#define pte_offset_kernel pte_index
654#define pte_offset_map pte_index 654#define pte_offset_map pte_index
655#define pte_offset_map_nested pte_index
656#define pte_unmap(pte) do { } while (0) 655#define pte_unmap(pte) do { } while (0)
657#define pte_unmap_nested(pte) do { } while (0)
658 656
659/* Actual page table PTE updates. */ 657/* Actual page table PTE updates. */
660extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig); 658extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig);
diff --git a/arch/sparc/include/asm/prom.h b/arch/sparc/include/asm/prom.h
index 291f12575edd..56bbaadef646 100644
--- a/arch/sparc/include/asm/prom.h
+++ b/arch/sparc/include/asm/prom.h
@@ -18,6 +18,7 @@
18 * 2 of the License, or (at your option) any later version. 18 * 2 of the License, or (at your option) any later version.
19 */ 19 */
20#include <linux/types.h> 20#include <linux/types.h>
21#include <linux/of_pdt.h>
21#include <linux/proc_fs.h> 22#include <linux/proc_fs.h>
22#include <linux/mutex.h> 23#include <linux/mutex.h>
23#include <asm/atomic.h> 24#include <asm/atomic.h>
@@ -67,8 +68,8 @@ extern struct device_node *of_console_device;
67extern char *of_console_path; 68extern char *of_console_path;
68extern char *of_console_options; 69extern char *of_console_options;
69 70
70extern void (*prom_build_more)(struct device_node *dp, struct device_node ***nextp); 71extern void irq_trans_init(struct device_node *dp);
71extern char *build_full_name(struct device_node *dp); 72extern char *build_path_component(struct device_node *dp);
72 73
73#endif /* __KERNEL__ */ 74#endif /* __KERNEL__ */
74#endif /* _SPARC_PROM_H */ 75#endif /* _SPARC_PROM_H */
diff --git a/arch/sparc/include/asm/rwsem-const.h b/arch/sparc/include/asm/rwsem-const.h
deleted file mode 100644
index a303c9d64d84..000000000000
--- a/arch/sparc/include/asm/rwsem-const.h
+++ /dev/null
@@ -1,12 +0,0 @@
1/* rwsem-const.h: RW semaphore counter constants. */
2#ifndef _SPARC64_RWSEM_CONST_H
3#define _SPARC64_RWSEM_CONST_H
4
5#define RWSEM_UNLOCKED_VALUE 0x00000000
6#define RWSEM_ACTIVE_BIAS 0x00000001
7#define RWSEM_ACTIVE_MASK 0x0000ffff
8#define RWSEM_WAITING_BIAS 0xffff0000
9#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
10#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
11
12#endif /* _SPARC64_RWSEM_CONST_H */
diff --git a/arch/sparc/include/asm/rwsem.h b/arch/sparc/include/asm/rwsem.h
index 6e5621006f85..a2b4302869bc 100644
--- a/arch/sparc/include/asm/rwsem.h
+++ b/arch/sparc/include/asm/rwsem.h
@@ -15,16 +15,21 @@
15 15
16#include <linux/list.h> 16#include <linux/list.h>
17#include <linux/spinlock.h> 17#include <linux/spinlock.h>
18#include <asm/rwsem-const.h>
19 18
20struct rwsem_waiter; 19struct rwsem_waiter;
21 20
22struct rw_semaphore { 21struct rw_semaphore {
23 signed int count; 22 signed long count;
24 spinlock_t wait_lock; 23#define RWSEM_UNLOCKED_VALUE 0x00000000L
25 struct list_head wait_list; 24#define RWSEM_ACTIVE_BIAS 0x00000001L
25#define RWSEM_ACTIVE_MASK 0xffffffffL
26#define RWSEM_WAITING_BIAS (-RWSEM_ACTIVE_MASK-1)
27#define RWSEM_ACTIVE_READ_BIAS RWSEM_ACTIVE_BIAS
28#define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
29 spinlock_t wait_lock;
30 struct list_head wait_list;
26#ifdef CONFIG_DEBUG_LOCK_ALLOC 31#ifdef CONFIG_DEBUG_LOCK_ALLOC
27 struct lockdep_map dep_map; 32 struct lockdep_map dep_map;
28#endif 33#endif
29}; 34};
30 35
@@ -41,6 +46,11 @@ struct rw_semaphore {
41#define DECLARE_RWSEM(name) \ 46#define DECLARE_RWSEM(name) \
42 struct rw_semaphore name = __RWSEM_INITIALIZER(name) 47 struct rw_semaphore name = __RWSEM_INITIALIZER(name)
43 48
49extern struct rw_semaphore *rwsem_down_read_failed(struct rw_semaphore *sem);
50extern struct rw_semaphore *rwsem_down_write_failed(struct rw_semaphore *sem);
51extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem);
52extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem);
53
44extern void __init_rwsem(struct rw_semaphore *sem, const char *name, 54extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
45 struct lock_class_key *key); 55 struct lock_class_key *key);
46 56
@@ -51,27 +61,103 @@ do { \
51 __init_rwsem((sem), #sem, &__key); \ 61 __init_rwsem((sem), #sem, &__key); \
52} while (0) 62} while (0)
53 63
54extern void __down_read(struct rw_semaphore *sem); 64/*
55extern int __down_read_trylock(struct rw_semaphore *sem); 65 * lock for reading
56extern void __down_write(struct rw_semaphore *sem); 66 */
57extern int __down_write_trylock(struct rw_semaphore *sem); 67static inline void __down_read(struct rw_semaphore *sem)
58extern void __up_read(struct rw_semaphore *sem); 68{
59extern void __up_write(struct rw_semaphore *sem); 69 if (unlikely(atomic64_inc_return((atomic64_t *)(&sem->count)) <= 0L))
60extern void __downgrade_write(struct rw_semaphore *sem); 70 rwsem_down_read_failed(sem);
71}
72
73static inline int __down_read_trylock(struct rw_semaphore *sem)
74{
75 long tmp;
76
77 while ((tmp = sem->count) >= 0L) {
78 if (tmp == cmpxchg(&sem->count, tmp,
79 tmp + RWSEM_ACTIVE_READ_BIAS)) {
80 return 1;
81 }
82 }
83 return 0;
84}
61 85
86/*
87 * lock for writing
88 */
62static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) 89static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
63{ 90{
64 __down_write(sem); 91 long tmp;
92
93 tmp = atomic64_add_return(RWSEM_ACTIVE_WRITE_BIAS,
94 (atomic64_t *)(&sem->count));
95 if (unlikely(tmp != RWSEM_ACTIVE_WRITE_BIAS))
96 rwsem_down_write_failed(sem);
65} 97}
66 98
67static inline int rwsem_atomic_update(int delta, struct rw_semaphore *sem) 99static inline void __down_write(struct rw_semaphore *sem)
68{ 100{
69 return atomic_add_return(delta, (atomic_t *)(&sem->count)); 101 __down_write_nested(sem, 0);
102}
103
104static inline int __down_write_trylock(struct rw_semaphore *sem)
105{
106 long tmp;
107
108 tmp = cmpxchg(&sem->count, RWSEM_UNLOCKED_VALUE,
109 RWSEM_ACTIVE_WRITE_BIAS);
110 return tmp == RWSEM_UNLOCKED_VALUE;
70} 111}
71 112
72static inline void rwsem_atomic_add(int delta, struct rw_semaphore *sem) 113/*
114 * unlock after reading
115 */
116static inline void __up_read(struct rw_semaphore *sem)
117{
118 long tmp;
119
120 tmp = atomic64_dec_return((atomic64_t *)(&sem->count));
121 if (unlikely(tmp < -1L && (tmp & RWSEM_ACTIVE_MASK) == 0L))
122 rwsem_wake(sem);
123}
124
125/*
126 * unlock after writing
127 */
128static inline void __up_write(struct rw_semaphore *sem)
129{
130 if (unlikely(atomic64_sub_return(RWSEM_ACTIVE_WRITE_BIAS,
131 (atomic64_t *)(&sem->count)) < 0L))
132 rwsem_wake(sem);
133}
134
135/*
136 * implement atomic add functionality
137 */
138static inline void rwsem_atomic_add(long delta, struct rw_semaphore *sem)
139{
140 atomic64_add(delta, (atomic64_t *)(&sem->count));
141}
142
143/*
144 * downgrade write lock to read lock
145 */
146static inline void __downgrade_write(struct rw_semaphore *sem)
147{
148 long tmp;
149
150 tmp = atomic64_add_return(-RWSEM_WAITING_BIAS, (atomic64_t *)(&sem->count));
151 if (tmp < 0L)
152 rwsem_downgrade_wake(sem);
153}
154
155/*
156 * implement exchange and add functionality
157 */
158static inline long rwsem_atomic_update(long delta, struct rw_semaphore *sem)
73{ 159{
74 atomic_add(delta, (atomic_t *)(&sem->count)); 160 return atomic64_add_return(delta, (atomic64_t *)(&sem->count));
75} 161}
76 162
77static inline int rwsem_is_locked(struct rw_semaphore *sem) 163static inline int rwsem_is_locked(struct rw_semaphore *sem)
diff --git a/arch/sparc/include/asm/scatterlist.h b/arch/sparc/include/asm/scatterlist.h
index 433e45f05fd4..92bb638313f8 100644
--- a/arch/sparc/include/asm/scatterlist.h
+++ b/arch/sparc/include/asm/scatterlist.h
@@ -3,7 +3,6 @@
3 3
4#include <asm-generic/scatterlist.h> 4#include <asm-generic/scatterlist.h>
5 5
6#define ISA_DMA_THRESHOLD (~0UL)
7#define ARCH_HAS_SG_CHAIN 6#define ARCH_HAS_SG_CHAIN
8 7
9#endif /* !(_SPARC_SCATTERLIST_H) */ 8#endif /* !(_SPARC_SCATTERLIST_H) */
diff --git a/arch/sparc/include/asm/system_64.h b/arch/sparc/include/asm/system_64.h
index d24cfe16afc1..e3b65d8cf41b 100644
--- a/arch/sparc/include/asm/system_64.h
+++ b/arch/sparc/include/asm/system_64.h
@@ -106,6 +106,7 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
106 */ 106 */
107#define write_pic(__p) \ 107#define write_pic(__p) \
108 __asm__ __volatile__("ba,pt %%xcc, 99f\n\t" \ 108 __asm__ __volatile__("ba,pt %%xcc, 99f\n\t" \
109 " nop\n\t" \
109 ".align 64\n" \ 110 ".align 64\n" \
110 "99:wr %0, 0x0, %%pic\n\t" \ 111 "99:wr %0, 0x0, %%pic\n\t" \
111 "rd %%pic, %%g0" : : "r" (__p)) 112 "rd %%pic, %%g0" : : "r" (__p))
diff --git a/arch/sparc/include/asm/termbits.h b/arch/sparc/include/asm/termbits.h
index d72dfed1f9d7..23b10ff08df2 100644
--- a/arch/sparc/include/asm/termbits.h
+++ b/arch/sparc/include/asm/termbits.h
@@ -225,6 +225,7 @@ struct ktermios {
225#define FLUSHO 0x00002000 225#define FLUSHO 0x00002000
226#define PENDIN 0x00004000 226#define PENDIN 0x00004000
227#define IEXTEN 0x00008000 227#define IEXTEN 0x00008000
228#define EXTPROC 0x00010000
228 229
229/* modem lines */ 230/* modem lines */
230#define TIOCM_LE 0x001 231#define TIOCM_LE 0x001
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h
index d0b3b01ac9d4..03eb5a8f6f93 100644
--- a/arch/sparc/include/asm/unistd.h
+++ b/arch/sparc/include/asm/unistd.h
@@ -397,8 +397,11 @@
397#define __NR_rt_tgsigqueueinfo 326 397#define __NR_rt_tgsigqueueinfo 326
398#define __NR_perf_event_open 327 398#define __NR_perf_event_open 327
399#define __NR_recvmmsg 328 399#define __NR_recvmmsg 328
400#define __NR_fanotify_init 329
401#define __NR_fanotify_mark 330
402#define __NR_prlimit64 331
400 403
401#define NR_syscalls 329 404#define NR_syscalls 332
402 405
403#ifdef __32bit_syscall_numbers__ 406#ifdef __32bit_syscall_numbers__
404/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants, 407/* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
index 0c2dc1f24a9a..599398fbbc7c 100644
--- a/arch/sparc/kernel/Makefile
+++ b/arch/sparc/kernel/Makefile
@@ -119,3 +119,5 @@ obj-$(CONFIG_COMPAT) += $(audit--y)
119 119
120pc--$(CONFIG_PERF_EVENTS) := perf_event.o 120pc--$(CONFIG_PERF_EVENTS) := perf_event.o
121obj-$(CONFIG_SPARC64) += $(pc--y) 121obj-$(CONFIG_SPARC64) += $(pc--y)
122
123obj-$(CONFIG_SPARC64) += jump_label.o
diff --git a/arch/sparc/kernel/apc.c b/arch/sparc/kernel/apc.c
index 2c0046ecc715..52de4a9424e8 100644
--- a/arch/sparc/kernel/apc.c
+++ b/arch/sparc/kernel/apc.c
@@ -132,6 +132,7 @@ static const struct file_operations apc_fops = {
132 .unlocked_ioctl = apc_ioctl, 132 .unlocked_ioctl = apc_ioctl,
133 .open = apc_open, 133 .open = apc_open,
134 .release = apc_release, 134 .release = apc_release,
135 .llseek = noop_llseek,
135}; 136};
136 137
137static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops }; 138static struct miscdevice apc_miscdev = { APC_MINOR, APC_DEVNAME, &apc_fops };
diff --git a/arch/sparc/kernel/auxio_32.c b/arch/sparc/kernel/auxio_32.c
index ee8d214cae1e..35f48837871a 100644
--- a/arch/sparc/kernel/auxio_32.c
+++ b/arch/sparc/kernel/auxio_32.c
@@ -23,7 +23,7 @@ static DEFINE_SPINLOCK(auxio_lock);
23 23
24void __init auxio_probe(void) 24void __init auxio_probe(void)
25{ 25{
26 int node, auxio_nd; 26 phandle node, auxio_nd;
27 struct linux_prom_registers auxregs[1]; 27 struct linux_prom_registers auxregs[1];
28 struct resource r; 28 struct resource r;
29 29
@@ -113,7 +113,7 @@ volatile unsigned char * auxio_power_register = NULL;
113void __init auxio_power_probe(void) 113void __init auxio_power_probe(void)
114{ 114{
115 struct linux_prom_registers regs; 115 struct linux_prom_registers regs;
116 int node; 116 phandle node;
117 struct resource r; 117 struct resource r;
118 118
119 /* Attempt to find the sun4m power control node. */ 119 /* Attempt to find the sun4m power control node. */
diff --git a/arch/sparc/kernel/btext.c b/arch/sparc/kernel/btext.c
index 8cc2d56ffe9a..89aa4eb20cf5 100644
--- a/arch/sparc/kernel/btext.c
+++ b/arch/sparc/kernel/btext.c
@@ -40,7 +40,7 @@ static unsigned char *dispDeviceBase __force_data;
40 40
41static unsigned char vga_font[cmapsz]; 41static unsigned char vga_font[cmapsz];
42 42
43static int __init btext_initialize(unsigned int node) 43static int __init btext_initialize(phandle node)
44{ 44{
45 unsigned int width, height, depth, pitch; 45 unsigned int width, height, depth, pitch;
46 unsigned long address = 0; 46 unsigned long address = 0;
@@ -309,7 +309,7 @@ static struct console btext_console = {
309 309
310int __init btext_find_display(void) 310int __init btext_find_display(void)
311{ 311{
312 unsigned int node; 312 phandle node;
313 char type[32]; 313 char type[32];
314 int ret; 314 int ret;
315 315
diff --git a/arch/sparc/kernel/devices.c b/arch/sparc/kernel/devices.c
index 62dc7a021413..d2eddd6647cd 100644
--- a/arch/sparc/kernel/devices.c
+++ b/arch/sparc/kernel/devices.c
@@ -31,9 +31,9 @@ static char *cpu_mid_prop(void)
31 return "mid"; 31 return "mid";
32} 32}
33 33
34static int check_cpu_node(int nd, int *cur_inst, 34static int check_cpu_node(phandle nd, int *cur_inst,
35 int (*compare)(int, int, void *), void *compare_arg, 35 int (*compare)(phandle, int, void *), void *compare_arg,
36 int *prom_node, int *mid) 36 phandle *prom_node, int *mid)
37{ 37{
38 if (!compare(nd, *cur_inst, compare_arg)) { 38 if (!compare(nd, *cur_inst, compare_arg)) {
39 if (prom_node) 39 if (prom_node)
@@ -51,8 +51,8 @@ static int check_cpu_node(int nd, int *cur_inst,
51 return -ENODEV; 51 return -ENODEV;
52} 52}
53 53
54static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg, 54static int __cpu_find_by(int (*compare)(phandle, int, void *),
55 int *prom_node, int *mid) 55 void *compare_arg, phandle *prom_node, int *mid)
56{ 56{
57 struct device_node *dp; 57 struct device_node *dp;
58 int cur_inst; 58 int cur_inst;
@@ -71,7 +71,7 @@ static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg,
71 return -ENODEV; 71 return -ENODEV;
72} 72}
73 73
74static int cpu_instance_compare(int nd, int instance, void *_arg) 74static int cpu_instance_compare(phandle nd, int instance, void *_arg)
75{ 75{
76 int desired_instance = (int) _arg; 76 int desired_instance = (int) _arg;
77 77
@@ -80,13 +80,13 @@ static int cpu_instance_compare(int nd, int instance, void *_arg)
80 return -ENODEV; 80 return -ENODEV;
81} 81}
82 82
83int cpu_find_by_instance(int instance, int *prom_node, int *mid) 83int cpu_find_by_instance(int instance, phandle *prom_node, int *mid)
84{ 84{
85 return __cpu_find_by(cpu_instance_compare, (void *)instance, 85 return __cpu_find_by(cpu_instance_compare, (void *)instance,
86 prom_node, mid); 86 prom_node, mid);
87} 87}
88 88
89static int cpu_mid_compare(int nd, int instance, void *_arg) 89static int cpu_mid_compare(phandle nd, int instance, void *_arg)
90{ 90{
91 int desired_mid = (int) _arg; 91 int desired_mid = (int) _arg;
92 int this_mid; 92 int this_mid;
@@ -98,7 +98,7 @@ static int cpu_mid_compare(int nd, int instance, void *_arg)
98 return -ENODEV; 98 return -ENODEV;
99} 99}
100 100
101int cpu_find_by_mid(int mid, int *prom_node) 101int cpu_find_by_mid(int mid, phandle *prom_node)
102{ 102{
103 return __cpu_find_by(cpu_mid_compare, (void *)mid, 103 return __cpu_find_by(cpu_mid_compare, (void *)mid,
104 prom_node, NULL); 104 prom_node, NULL);
@@ -108,7 +108,7 @@ int cpu_find_by_mid(int mid, int *prom_node)
108 * address (0-3). This gives us the true hardware mid, which might have 108 * address (0-3). This gives us the true hardware mid, which might have
109 * some other bits set. On 4d hardware and software mids are the same. 109 * some other bits set. On 4d hardware and software mids are the same.
110 */ 110 */
111int cpu_get_hwmid(int prom_node) 111int cpu_get_hwmid(phandle prom_node)
112{ 112{
113 return prom_getintdefault(prom_node, cpu_mid_prop(), -ENODEV); 113 return prom_getintdefault(prom_node, cpu_mid_prop(), -ENODEV);
114} 114}
@@ -119,7 +119,8 @@ void __init device_scan(void)
119 119
120#ifndef CONFIG_SMP 120#ifndef CONFIG_SMP
121 { 121 {
122 int err, cpu_node; 122 phandle cpu_node;
123 int err;
123 err = cpu_find_by_instance(0, &cpu_node, NULL); 124 err = cpu_find_by_instance(0, &cpu_node, NULL);
124 if (err) { 125 if (err) {
125 /* Probably a sun4e, Sun is trying to trick us ;-) */ 126 /* Probably a sun4e, Sun is trying to trick us ;-) */
diff --git a/arch/sparc/kernel/irq_32.c b/arch/sparc/kernel/irq_32.c
index e1af43728329..5ad6e5c5dbb3 100644
--- a/arch/sparc/kernel/irq_32.c
+++ b/arch/sparc/kernel/irq_32.c
@@ -57,7 +57,7 @@
57#define SMP_NOP2 57#define SMP_NOP2
58#define SMP_NOP3 58#define SMP_NOP3
59#endif /* SMP */ 59#endif /* SMP */
60unsigned long __raw_local_irq_save(void) 60unsigned long arch_local_irq_save(void)
61{ 61{
62 unsigned long retval; 62 unsigned long retval;
63 unsigned long tmp; 63 unsigned long tmp;
@@ -74,8 +74,9 @@ unsigned long __raw_local_irq_save(void)
74 74
75 return retval; 75 return retval;
76} 76}
77EXPORT_SYMBOL(arch_local_irq_save);
77 78
78void raw_local_irq_enable(void) 79void arch_local_irq_enable(void)
79{ 80{
80 unsigned long tmp; 81 unsigned long tmp;
81 82
@@ -89,8 +90,9 @@ void raw_local_irq_enable(void)
89 : "i" (PSR_PIL) 90 : "i" (PSR_PIL)
90 : "memory"); 91 : "memory");
91} 92}
93EXPORT_SYMBOL(arch_local_irq_enable);
92 94
93void raw_local_irq_restore(unsigned long old_psr) 95void arch_local_irq_restore(unsigned long old_psr)
94{ 96{
95 unsigned long tmp; 97 unsigned long tmp;
96 98
@@ -105,10 +107,7 @@ void raw_local_irq_restore(unsigned long old_psr)
105 : "i" (PSR_PIL), "r" (old_psr) 107 : "i" (PSR_PIL), "r" (old_psr)
106 : "memory"); 108 : "memory");
107} 109}
108 110EXPORT_SYMBOL(arch_local_irq_restore);
109EXPORT_SYMBOL(__raw_local_irq_save);
110EXPORT_SYMBOL(raw_local_irq_enable);
111EXPORT_SYMBOL(raw_local_irq_restore);
112 111
113/* 112/*
114 * Dave Redman (djhr@tadpole.co.uk) 113 * Dave Redman (djhr@tadpole.co.uk)
@@ -366,7 +365,7 @@ static int request_fast_irq(unsigned int irq,
366 unsigned long flags; 365 unsigned long flags;
367 unsigned int cpu_irq; 366 unsigned int cpu_irq;
368 int ret; 367 int ret;
369#ifdef CONFIG_SMP 368#if defined CONFIG_SMP && !defined CONFIG_SPARC_LEON
370 struct tt_entry *trap_table; 369 struct tt_entry *trap_table;
371 extern struct tt_entry trapbase_cpu1, trapbase_cpu2, trapbase_cpu3; 370 extern struct tt_entry trapbase_cpu1, trapbase_cpu2, trapbase_cpu3;
372#endif 371#endif
@@ -426,7 +425,7 @@ static int request_fast_irq(unsigned int irq,
426 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_four = SPARC_NOP; 425 table[SP_TRAP_IRQ1+(cpu_irq-1)].inst_four = SPARC_NOP;
427 426
428 INSTANTIATE(sparc_ttable) 427 INSTANTIATE(sparc_ttable)
429#ifdef CONFIG_SMP 428#if defined CONFIG_SMP && !defined CONFIG_SPARC_LEON
430 trap_table = &trapbase_cpu1; INSTANTIATE(trap_table) 429 trap_table = &trapbase_cpu1; INSTANTIATE(trap_table)
431 trap_table = &trapbase_cpu2; INSTANTIATE(trap_table) 430 trap_table = &trapbase_cpu2; INSTANTIATE(trap_table)
432 trap_table = &trapbase_cpu3; INSTANTIATE(trap_table) 431 trap_table = &trapbase_cpu3; INSTANTIATE(trap_table)
diff --git a/arch/sparc/kernel/jump_label.c b/arch/sparc/kernel/jump_label.c
new file mode 100644
index 000000000000..ea2dafc93d78
--- /dev/null
+++ b/arch/sparc/kernel/jump_label.c
@@ -0,0 +1,47 @@
1#include <linux/kernel.h>
2#include <linux/types.h>
3#include <linux/mutex.h>
4#include <linux/cpu.h>
5
6#include <linux/jump_label.h>
7#include <linux/memory.h>
8
9#ifdef HAVE_JUMP_LABEL
10
11void arch_jump_label_transform(struct jump_entry *entry,
12 enum jump_label_type type)
13{
14 u32 val;
15 u32 *insn = (u32 *) (unsigned long) entry->code;
16
17 if (type == JUMP_LABEL_ENABLE) {
18 s32 off = (s32)entry->target - (s32)entry->code;
19
20#ifdef CONFIG_SPARC64
21 /* ba,pt %xcc, . + (off << 2) */
22 val = 0x10680000 | ((u32) off >> 2);
23#else
24 /* ba . + (off << 2) */
25 val = 0x10800000 | ((u32) off >> 2);
26#endif
27 } else {
28 val = 0x01000000;
29 }
30
31 get_online_cpus();
32 mutex_lock(&text_mutex);
33 *insn = val;
34 flushi(insn);
35 mutex_unlock(&text_mutex);
36 put_online_cpus();
37}
38
39void arch_jump_label_text_poke_early(jump_label_t addr)
40{
41 u32 *insn_p = (u32 *) (unsigned long) addr;
42
43 *insn_p = 0x01000000;
44 flushi(insn_p);
45}
46
47#endif
diff --git a/arch/sparc/kernel/leon_kernel.c b/arch/sparc/kernel/leon_kernel.c
index 6a7b4dbc8e09..f01c42661ee5 100644
--- a/arch/sparc/kernel/leon_kernel.c
+++ b/arch/sparc/kernel/leon_kernel.c
@@ -114,7 +114,7 @@ void __init leon_init_timers(irq_handler_t counter_fn)
114 if (leon3_gptimer_regs && leon3_irqctrl_regs) { 114 if (leon3_gptimer_regs && leon3_irqctrl_regs) {
115 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0); 115 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0);
116 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].rld, 116 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].rld,
117 (((1000000 / 100) - 1))); 117 (((1000000 / HZ) - 1)));
118 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].ctrl, 0); 118 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].ctrl, 0);
119 119
120#ifdef CONFIG_SMP 120#ifdef CONFIG_SMP
@@ -128,7 +128,7 @@ void __init leon_init_timers(irq_handler_t counter_fn)
128 } 128 }
129 129
130 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].val, 0); 130 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].val, 0);
131 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].rld, (((1000000/100) - 1))); 131 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].rld, (((1000000/HZ) - 1)));
132 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].ctrl, 0); 132 LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].ctrl, 0);
133# endif 133# endif
134 134
@@ -282,5 +282,5 @@ void __init leon_init_IRQ(void)
282 282
283void __init leon_init(void) 283void __init leon_init(void)
284{ 284{
285 prom_build_more = &leon_node_init; 285 of_pdt_build_more = &leon_node_init;
286} 286}
diff --git a/arch/sparc/kernel/leon_smp.c b/arch/sparc/kernel/leon_smp.c
index e1656fc41ccb..16582d85368a 100644
--- a/arch/sparc/kernel/leon_smp.c
+++ b/arch/sparc/kernel/leon_smp.c
@@ -12,7 +12,6 @@
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/threads.h> 13#include <linux/threads.h>
14#include <linux/smp.h> 14#include <linux/smp.h>
15#include <linux/smp_lock.h>
16#include <linux/interrupt.h> 15#include <linux/interrupt.h>
17#include <linux/kernel_stat.h> 16#include <linux/kernel_stat.h>
18#include <linux/init.h> 17#include <linux/init.h>
@@ -56,8 +55,8 @@ void __init leon_configure_cache_smp(void);
56static inline unsigned long do_swap(volatile unsigned long *ptr, 55static inline unsigned long do_swap(volatile unsigned long *ptr,
57 unsigned long val) 56 unsigned long val)
58{ 57{
59 __asm__ __volatile__("swapa [%1] %2, %0\n\t" : "=&r"(val) 58 __asm__ __volatile__("swapa [%2] %3, %0\n\t" : "=&r"(val)
60 : "r"(ptr), "i"(ASI_LEON_DCACHE_MISS) 59 : "0"(val), "r"(ptr), "i"(ASI_LEON_DCACHE_MISS)
61 : "memory"); 60 : "memory");
62 return val; 61 return val;
63} 62}
diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c
index 83e85c2e802a..6addb914fcc8 100644
--- a/arch/sparc/kernel/mdesc.c
+++ b/arch/sparc/kernel/mdesc.c
@@ -890,6 +890,7 @@ static ssize_t mdesc_read(struct file *file, char __user *buf,
890static const struct file_operations mdesc_fops = { 890static const struct file_operations mdesc_fops = {
891 .read = mdesc_read, 891 .read = mdesc_read,
892 .owner = THIS_MODULE, 892 .owner = THIS_MODULE,
893 .llseek = noop_llseek,
893}; 894};
894 895
895static struct miscdevice mdesc_misc = { 896static struct miscdevice mdesc_misc = {
diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c
index f848aadf54dc..ee3c7dde8d9f 100644
--- a/arch/sparc/kernel/module.c
+++ b/arch/sparc/kernel/module.c
@@ -18,6 +18,9 @@
18#include <asm/spitfire.h> 18#include <asm/spitfire.h>
19 19
20#ifdef CONFIG_SPARC64 20#ifdef CONFIG_SPARC64
21
22#include <linux/jump_label.h>
23
21static void *module_map(unsigned long size) 24static void *module_map(unsigned long size)
22{ 25{
23 struct vm_struct *area; 26 struct vm_struct *area;
@@ -227,6 +230,9 @@ int module_finalize(const Elf_Ehdr *hdr,
227 const Elf_Shdr *sechdrs, 230 const Elf_Shdr *sechdrs,
228 struct module *me) 231 struct module *me)
229{ 232{
233 /* make jump label nops */
234 jump_label_apply_nops(me);
235
230 /* Cheetah's I-cache is fully coherent. */ 236 /* Cheetah's I-cache is fully coherent. */
231 if (tlb_type == spitfire) { 237 if (tlb_type == spitfire) {
232 unsigned long va; 238 unsigned long va;
diff --git a/arch/sparc/kernel/pci_msi.c b/arch/sparc/kernel/pci_msi.c
index 548b8ca9c210..b210416ace7b 100644
--- a/arch/sparc/kernel/pci_msi.c
+++ b/arch/sparc/kernel/pci_msi.c
@@ -114,10 +114,10 @@ static void free_msi(struct pci_pbm_info *pbm, int msi_num)
114 114
115static struct irq_chip msi_irq = { 115static struct irq_chip msi_irq = {
116 .name = "PCI-MSI", 116 .name = "PCI-MSI",
117 .mask = mask_msi_irq, 117 .irq_mask = mask_msi_irq,
118 .unmask = unmask_msi_irq, 118 .irq_unmask = unmask_msi_irq,
119 .enable = unmask_msi_irq, 119 .irq_enable = unmask_msi_irq,
120 .disable = mask_msi_irq, 120 .irq_disable = mask_msi_irq,
121 /* XXX affinity XXX */ 121 /* XXX affinity XXX */
122}; 122};
123 123
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
index d36a8d391ca0..aeaa09a3c655 100644
--- a/arch/sparc/kernel/pcic.c
+++ b/arch/sparc/kernel/pcic.c
@@ -284,7 +284,7 @@ int __init pcic_probe(void)
284 struct linux_prom_registers regs[PROMREG_MAX]; 284 struct linux_prom_registers regs[PROMREG_MAX];
285 struct linux_pbm_info* pbm; 285 struct linux_pbm_info* pbm;
286 char namebuf[64]; 286 char namebuf[64];
287 int node; 287 phandle node;
288 int err; 288 int err;
289 289
290 if (pcic0_up) { 290 if (pcic0_up) {
@@ -440,7 +440,7 @@ static int __devinit pdev_to_pnode(struct linux_pbm_info *pbm,
440{ 440{
441 struct linux_prom_pci_registers regs[PROMREG_MAX]; 441 struct linux_prom_pci_registers regs[PROMREG_MAX];
442 int err; 442 int err;
443 int node = prom_getchild(pbm->prom_node); 443 phandle node = prom_getchild(pbm->prom_node);
444 444
445 while(node) { 445 while(node) {
446 err = prom_getproperty(node, "reg", 446 err = prom_getproperty(node, "reg",
diff --git a/arch/sparc/kernel/pcr.c b/arch/sparc/kernel/pcr.c
index c4a6a50b4849..b87873c0e8ea 100644
--- a/arch/sparc/kernel/pcr.c
+++ b/arch/sparc/kernel/pcr.c
@@ -7,7 +7,7 @@
7#include <linux/init.h> 7#include <linux/init.h>
8#include <linux/irq.h> 8#include <linux/irq.h>
9 9
10#include <linux/perf_event.h> 10#include <linux/irq_work.h>
11#include <linux/ftrace.h> 11#include <linux/ftrace.h>
12 12
13#include <asm/pil.h> 13#include <asm/pil.h>
@@ -43,14 +43,14 @@ void __irq_entry deferred_pcr_work_irq(int irq, struct pt_regs *regs)
43 43
44 old_regs = set_irq_regs(regs); 44 old_regs = set_irq_regs(regs);
45 irq_enter(); 45 irq_enter();
46#ifdef CONFIG_PERF_EVENTS 46#ifdef CONFIG_IRQ_WORK
47 perf_event_do_pending(); 47 irq_work_run();
48#endif 48#endif
49 irq_exit(); 49 irq_exit();
50 set_irq_regs(old_regs); 50 set_irq_regs(old_regs);
51} 51}
52 52
53void set_perf_event_pending(void) 53void arch_irq_work_raise(void)
54{ 54{
55 set_softint(1 << PIL_DEFERRED_PCR_WORK); 55 set_softint(1 << PIL_DEFERRED_PCR_WORK);
56} 56}
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
index 357ced3c33ff..0d6deb55a2ae 100644
--- a/arch/sparc/kernel/perf_event.c
+++ b/arch/sparc/kernel/perf_event.c
@@ -658,13 +658,16 @@ static u64 maybe_change_configuration(struct cpu_hw_events *cpuc, u64 pcr)
658 658
659 enc = perf_event_get_enc(cpuc->events[i]); 659 enc = perf_event_get_enc(cpuc->events[i]);
660 pcr &= ~mask_for_index(idx); 660 pcr &= ~mask_for_index(idx);
661 pcr |= event_encoding(enc, idx); 661 if (hwc->state & PERF_HES_STOPPED)
662 pcr |= nop_for_index(idx);
663 else
664 pcr |= event_encoding(enc, idx);
662 } 665 }
663out: 666out:
664 return pcr; 667 return pcr;
665} 668}
666 669
667void hw_perf_enable(void) 670static void sparc_pmu_enable(struct pmu *pmu)
668{ 671{
669 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 672 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
670 u64 pcr; 673 u64 pcr;
@@ -691,7 +694,7 @@ void hw_perf_enable(void)
691 pcr_ops->write(cpuc->pcr); 694 pcr_ops->write(cpuc->pcr);
692} 695}
693 696
694void hw_perf_disable(void) 697static void sparc_pmu_disable(struct pmu *pmu)
695{ 698{
696 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 699 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
697 u64 val; 700 u64 val;
@@ -710,19 +713,65 @@ void hw_perf_disable(void)
710 pcr_ops->write(cpuc->pcr); 713 pcr_ops->write(cpuc->pcr);
711} 714}
712 715
713static void sparc_pmu_disable(struct perf_event *event) 716static int active_event_index(struct cpu_hw_events *cpuc,
717 struct perf_event *event)
718{
719 int i;
720
721 for (i = 0; i < cpuc->n_events; i++) {
722 if (cpuc->event[i] == event)
723 break;
724 }
725 BUG_ON(i == cpuc->n_events);
726 return cpuc->current_idx[i];
727}
728
729static void sparc_pmu_start(struct perf_event *event, int flags)
730{
731 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
732 int idx = active_event_index(cpuc, event);
733
734 if (flags & PERF_EF_RELOAD) {
735 WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE));
736 sparc_perf_event_set_period(event, &event->hw, idx);
737 }
738
739 event->hw.state = 0;
740
741 sparc_pmu_enable_event(cpuc, &event->hw, idx);
742}
743
744static void sparc_pmu_stop(struct perf_event *event, int flags)
745{
746 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
747 int idx = active_event_index(cpuc, event);
748
749 if (!(event->hw.state & PERF_HES_STOPPED)) {
750 sparc_pmu_disable_event(cpuc, &event->hw, idx);
751 event->hw.state |= PERF_HES_STOPPED;
752 }
753
754 if (!(event->hw.state & PERF_HES_UPTODATE) && (flags & PERF_EF_UPDATE)) {
755 sparc_perf_event_update(event, &event->hw, idx);
756 event->hw.state |= PERF_HES_UPTODATE;
757 }
758}
759
760static void sparc_pmu_del(struct perf_event *event, int _flags)
714{ 761{
715 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 762 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
716 struct hw_perf_event *hwc = &event->hw;
717 unsigned long flags; 763 unsigned long flags;
718 int i; 764 int i;
719 765
720 local_irq_save(flags); 766 local_irq_save(flags);
721 perf_disable(); 767 perf_pmu_disable(event->pmu);
722 768
723 for (i = 0; i < cpuc->n_events; i++) { 769 for (i = 0; i < cpuc->n_events; i++) {
724 if (event == cpuc->event[i]) { 770 if (event == cpuc->event[i]) {
725 int idx = cpuc->current_idx[i]; 771 /* Absorb the final count and turn off the
772 * event.
773 */
774 sparc_pmu_stop(event, PERF_EF_UPDATE);
726 775
727 /* Shift remaining entries down into 776 /* Shift remaining entries down into
728 * the existing slot. 777 * the existing slot.
@@ -734,13 +783,6 @@ static void sparc_pmu_disable(struct perf_event *event)
734 cpuc->current_idx[i]; 783 cpuc->current_idx[i];
735 } 784 }
736 785
737 /* Absorb the final count and turn off the
738 * event.
739 */
740 sparc_pmu_disable_event(cpuc, hwc, idx);
741 barrier();
742 sparc_perf_event_update(event, hwc, idx);
743
744 perf_event_update_userpage(event); 786 perf_event_update_userpage(event);
745 787
746 cpuc->n_events--; 788 cpuc->n_events--;
@@ -748,23 +790,10 @@ static void sparc_pmu_disable(struct perf_event *event)
748 } 790 }
749 } 791 }
750 792
751 perf_enable(); 793 perf_pmu_enable(event->pmu);
752 local_irq_restore(flags); 794 local_irq_restore(flags);
753} 795}
754 796
755static int active_event_index(struct cpu_hw_events *cpuc,
756 struct perf_event *event)
757{
758 int i;
759
760 for (i = 0; i < cpuc->n_events; i++) {
761 if (cpuc->event[i] == event)
762 break;
763 }
764 BUG_ON(i == cpuc->n_events);
765 return cpuc->current_idx[i];
766}
767
768static void sparc_pmu_read(struct perf_event *event) 797static void sparc_pmu_read(struct perf_event *event)
769{ 798{
770 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 799 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
@@ -774,15 +803,6 @@ static void sparc_pmu_read(struct perf_event *event)
774 sparc_perf_event_update(event, hwc, idx); 803 sparc_perf_event_update(event, hwc, idx);
775} 804}
776 805
777static void sparc_pmu_unthrottle(struct perf_event *event)
778{
779 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
780 int idx = active_event_index(cpuc, event);
781 struct hw_perf_event *hwc = &event->hw;
782
783 sparc_pmu_enable_event(cpuc, hwc, idx);
784}
785
786static atomic_t active_events = ATOMIC_INIT(0); 806static atomic_t active_events = ATOMIC_INIT(0);
787static DEFINE_MUTEX(pmc_grab_mutex); 807static DEFINE_MUTEX(pmc_grab_mutex);
788 808
@@ -877,7 +897,7 @@ static int sparc_check_constraints(struct perf_event **evts,
877 if (!n_ev) 897 if (!n_ev)
878 return 0; 898 return 0;
879 899
880 if (n_ev > perf_max_events) 900 if (n_ev > MAX_HWEVENTS)
881 return -1; 901 return -1;
882 902
883 msk0 = perf_event_get_msk(events[0]); 903 msk0 = perf_event_get_msk(events[0]);
@@ -984,23 +1004,27 @@ static int collect_events(struct perf_event *group, int max_count,
984 return n; 1004 return n;
985} 1005}
986 1006
987static int sparc_pmu_enable(struct perf_event *event) 1007static int sparc_pmu_add(struct perf_event *event, int ef_flags)
988{ 1008{
989 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 1009 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
990 int n0, ret = -EAGAIN; 1010 int n0, ret = -EAGAIN;
991 unsigned long flags; 1011 unsigned long flags;
992 1012
993 local_irq_save(flags); 1013 local_irq_save(flags);
994 perf_disable(); 1014 perf_pmu_disable(event->pmu);
995 1015
996 n0 = cpuc->n_events; 1016 n0 = cpuc->n_events;
997 if (n0 >= perf_max_events) 1017 if (n0 >= MAX_HWEVENTS)
998 goto out; 1018 goto out;
999 1019
1000 cpuc->event[n0] = event; 1020 cpuc->event[n0] = event;
1001 cpuc->events[n0] = event->hw.event_base; 1021 cpuc->events[n0] = event->hw.event_base;
1002 cpuc->current_idx[n0] = PIC_NO_INDEX; 1022 cpuc->current_idx[n0] = PIC_NO_INDEX;
1003 1023
1024 event->hw.state = PERF_HES_UPTODATE;
1025 if (!(ef_flags & PERF_EF_START))
1026 event->hw.state |= PERF_HES_STOPPED;
1027
1004 /* 1028 /*
1005 * If group events scheduling transaction was started, 1029 * If group events scheduling transaction was started,
1006 * skip the schedulability test here, it will be peformed 1030 * skip the schedulability test here, it will be peformed
@@ -1020,12 +1044,12 @@ nocheck:
1020 1044
1021 ret = 0; 1045 ret = 0;
1022out: 1046out:
1023 perf_enable(); 1047 perf_pmu_enable(event->pmu);
1024 local_irq_restore(flags); 1048 local_irq_restore(flags);
1025 return ret; 1049 return ret;
1026} 1050}
1027 1051
1028static int __hw_perf_event_init(struct perf_event *event) 1052static int sparc_pmu_event_init(struct perf_event *event)
1029{ 1053{
1030 struct perf_event_attr *attr = &event->attr; 1054 struct perf_event_attr *attr = &event->attr;
1031 struct perf_event *evts[MAX_HWEVENTS]; 1055 struct perf_event *evts[MAX_HWEVENTS];
@@ -1038,16 +1062,37 @@ static int __hw_perf_event_init(struct perf_event *event)
1038 if (atomic_read(&nmi_active) < 0) 1062 if (atomic_read(&nmi_active) < 0)
1039 return -ENODEV; 1063 return -ENODEV;
1040 1064
1041 if (attr->type == PERF_TYPE_HARDWARE) { 1065 switch (attr->type) {
1066 case PERF_TYPE_HARDWARE:
1042 if (attr->config >= sparc_pmu->max_events) 1067 if (attr->config >= sparc_pmu->max_events)
1043 return -EINVAL; 1068 return -EINVAL;
1044 pmap = sparc_pmu->event_map(attr->config); 1069 pmap = sparc_pmu->event_map(attr->config);
1045 } else if (attr->type == PERF_TYPE_HW_CACHE) { 1070 break;
1071
1072 case PERF_TYPE_HW_CACHE:
1046 pmap = sparc_map_cache_event(attr->config); 1073 pmap = sparc_map_cache_event(attr->config);
1047 if (IS_ERR(pmap)) 1074 if (IS_ERR(pmap))
1048 return PTR_ERR(pmap); 1075 return PTR_ERR(pmap);
1049 } else 1076 break;
1050 return -EOPNOTSUPP; 1077
1078 case PERF_TYPE_RAW:
1079 pmap = NULL;
1080 break;
1081
1082 default:
1083 return -ENOENT;
1084
1085 }
1086
1087 if (pmap) {
1088 hwc->event_base = perf_event_encode(pmap);
1089 } else {
1090 /*
1091 * User gives us "(encoding << 16) | pic_mask" for
1092 * PERF_TYPE_RAW events.
1093 */
1094 hwc->event_base = attr->config;
1095 }
1051 1096
1052 /* We save the enable bits in the config_base. */ 1097 /* We save the enable bits in the config_base. */
1053 hwc->config_base = sparc_pmu->irq_bit; 1098 hwc->config_base = sparc_pmu->irq_bit;
@@ -1058,12 +1103,10 @@ static int __hw_perf_event_init(struct perf_event *event)
1058 if (!attr->exclude_hv) 1103 if (!attr->exclude_hv)
1059 hwc->config_base |= sparc_pmu->hv_bit; 1104 hwc->config_base |= sparc_pmu->hv_bit;
1060 1105
1061 hwc->event_base = perf_event_encode(pmap);
1062
1063 n = 0; 1106 n = 0;
1064 if (event->group_leader != event) { 1107 if (event->group_leader != event) {
1065 n = collect_events(event->group_leader, 1108 n = collect_events(event->group_leader,
1066 perf_max_events - 1, 1109 MAX_HWEVENTS - 1,
1067 evts, events, current_idx_dmy); 1110 evts, events, current_idx_dmy);
1068 if (n < 0) 1111 if (n < 0)
1069 return -EINVAL; 1112 return -EINVAL;
@@ -1099,10 +1142,11 @@ static int __hw_perf_event_init(struct perf_event *event)
1099 * Set the flag to make pmu::enable() not perform the 1142 * Set the flag to make pmu::enable() not perform the
1100 * schedulability test, it will be performed at commit time 1143 * schedulability test, it will be performed at commit time
1101 */ 1144 */
1102static void sparc_pmu_start_txn(const struct pmu *pmu) 1145static void sparc_pmu_start_txn(struct pmu *pmu)
1103{ 1146{
1104 struct cpu_hw_events *cpuhw = &__get_cpu_var(cpu_hw_events); 1147 struct cpu_hw_events *cpuhw = &__get_cpu_var(cpu_hw_events);
1105 1148
1149 perf_pmu_disable(pmu);
1106 cpuhw->group_flag |= PERF_EVENT_TXN; 1150 cpuhw->group_flag |= PERF_EVENT_TXN;
1107} 1151}
1108 1152
@@ -1111,11 +1155,12 @@ static void sparc_pmu_start_txn(const struct pmu *pmu)
1111 * Clear the flag and pmu::enable() will perform the 1155 * Clear the flag and pmu::enable() will perform the
1112 * schedulability test. 1156 * schedulability test.
1113 */ 1157 */
1114static void sparc_pmu_cancel_txn(const struct pmu *pmu) 1158static void sparc_pmu_cancel_txn(struct pmu *pmu)
1115{ 1159{
1116 struct cpu_hw_events *cpuhw = &__get_cpu_var(cpu_hw_events); 1160 struct cpu_hw_events *cpuhw = &__get_cpu_var(cpu_hw_events);
1117 1161
1118 cpuhw->group_flag &= ~PERF_EVENT_TXN; 1162 cpuhw->group_flag &= ~PERF_EVENT_TXN;
1163 perf_pmu_enable(pmu);
1119} 1164}
1120 1165
1121/* 1166/*
@@ -1123,7 +1168,7 @@ static void sparc_pmu_cancel_txn(const struct pmu *pmu)
1123 * Perform the group schedulability test as a whole 1168 * Perform the group schedulability test as a whole
1124 * Return 0 if success 1169 * Return 0 if success
1125 */ 1170 */
1126static int sparc_pmu_commit_txn(const struct pmu *pmu) 1171static int sparc_pmu_commit_txn(struct pmu *pmu)
1127{ 1172{
1128 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); 1173 struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
1129 int n; 1174 int n;
@@ -1139,28 +1184,24 @@ static int sparc_pmu_commit_txn(const struct pmu *pmu)
1139 return -EAGAIN; 1184 return -EAGAIN;
1140 1185
1141 cpuc->group_flag &= ~PERF_EVENT_TXN; 1186 cpuc->group_flag &= ~PERF_EVENT_TXN;
1187 perf_pmu_enable(pmu);
1142 return 0; 1188 return 0;
1143} 1189}
1144 1190
1145static const struct pmu pmu = { 1191static struct pmu pmu = {
1146 .enable = sparc_pmu_enable, 1192 .pmu_enable = sparc_pmu_enable,
1147 .disable = sparc_pmu_disable, 1193 .pmu_disable = sparc_pmu_disable,
1194 .event_init = sparc_pmu_event_init,
1195 .add = sparc_pmu_add,
1196 .del = sparc_pmu_del,
1197 .start = sparc_pmu_start,
1198 .stop = sparc_pmu_stop,
1148 .read = sparc_pmu_read, 1199 .read = sparc_pmu_read,
1149 .unthrottle = sparc_pmu_unthrottle,
1150 .start_txn = sparc_pmu_start_txn, 1200 .start_txn = sparc_pmu_start_txn,
1151 .cancel_txn = sparc_pmu_cancel_txn, 1201 .cancel_txn = sparc_pmu_cancel_txn,
1152 .commit_txn = sparc_pmu_commit_txn, 1202 .commit_txn = sparc_pmu_commit_txn,
1153}; 1203};
1154 1204
1155const struct pmu *hw_perf_event_init(struct perf_event *event)
1156{
1157 int err = __hw_perf_event_init(event);
1158
1159 if (err)
1160 return ERR_PTR(err);
1161 return &pmu;
1162}
1163
1164void perf_event_print_debug(void) 1205void perf_event_print_debug(void)
1165{ 1206{
1166 unsigned long flags; 1207 unsigned long flags;
@@ -1236,7 +1277,7 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self,
1236 continue; 1277 continue;
1237 1278
1238 if (perf_event_overflow(event, 1, &data, regs)) 1279 if (perf_event_overflow(event, 1, &data, regs))
1239 sparc_pmu_disable_event(cpuc, hwc, idx); 1280 sparc_pmu_stop(event, 0);
1240 } 1281 }
1241 1282
1242 return NOTIFY_STOP; 1283 return NOTIFY_STOP;
@@ -1277,28 +1318,21 @@ void __init init_hw_perf_events(void)
1277 1318
1278 pr_cont("Supported PMU type is '%s'\n", sparc_pmu_type); 1319 pr_cont("Supported PMU type is '%s'\n", sparc_pmu_type);
1279 1320
1280 /* All sparc64 PMUs currently have 2 events. */ 1321 perf_pmu_register(&pmu);
1281 perf_max_events = 2;
1282
1283 register_die_notifier(&perf_event_nmi_notifier); 1322 register_die_notifier(&perf_event_nmi_notifier);
1284} 1323}
1285 1324
1286static inline void callchain_store(struct perf_callchain_entry *entry, u64 ip) 1325void perf_callchain_kernel(struct perf_callchain_entry *entry,
1287{ 1326 struct pt_regs *regs)
1288 if (entry->nr < PERF_MAX_STACK_DEPTH)
1289 entry->ip[entry->nr++] = ip;
1290}
1291
1292static void perf_callchain_kernel(struct pt_regs *regs,
1293 struct perf_callchain_entry *entry)
1294{ 1327{
1295 unsigned long ksp, fp; 1328 unsigned long ksp, fp;
1296#ifdef CONFIG_FUNCTION_GRAPH_TRACER 1329#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1297 int graph = 0; 1330 int graph = 0;
1298#endif 1331#endif
1299 1332
1300 callchain_store(entry, PERF_CONTEXT_KERNEL); 1333 stack_trace_flush();
1301 callchain_store(entry, regs->tpc); 1334
1335 perf_callchain_store(entry, regs->tpc);
1302 1336
1303 ksp = regs->u_regs[UREG_I6]; 1337 ksp = regs->u_regs[UREG_I6];
1304 fp = ksp + STACK_BIAS; 1338 fp = ksp + STACK_BIAS;
@@ -1322,13 +1356,13 @@ static void perf_callchain_kernel(struct pt_regs *regs,
1322 pc = sf->callers_pc; 1356 pc = sf->callers_pc;
1323 fp = (unsigned long)sf->fp + STACK_BIAS; 1357 fp = (unsigned long)sf->fp + STACK_BIAS;
1324 } 1358 }
1325 callchain_store(entry, pc); 1359 perf_callchain_store(entry, pc);
1326#ifdef CONFIG_FUNCTION_GRAPH_TRACER 1360#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1327 if ((pc + 8UL) == (unsigned long) &return_to_handler) { 1361 if ((pc + 8UL) == (unsigned long) &return_to_handler) {
1328 int index = current->curr_ret_stack; 1362 int index = current->curr_ret_stack;
1329 if (current->ret_stack && index >= graph) { 1363 if (current->ret_stack && index >= graph) {
1330 pc = current->ret_stack[index - graph].ret; 1364 pc = current->ret_stack[index - graph].ret;
1331 callchain_store(entry, pc); 1365 perf_callchain_store(entry, pc);
1332 graph++; 1366 graph++;
1333 } 1367 }
1334 } 1368 }
@@ -1336,13 +1370,12 @@ static void perf_callchain_kernel(struct pt_regs *regs,
1336 } while (entry->nr < PERF_MAX_STACK_DEPTH); 1370 } while (entry->nr < PERF_MAX_STACK_DEPTH);
1337} 1371}
1338 1372
1339static void perf_callchain_user_64(struct pt_regs *regs, 1373static void perf_callchain_user_64(struct perf_callchain_entry *entry,
1340 struct perf_callchain_entry *entry) 1374 struct pt_regs *regs)
1341{ 1375{
1342 unsigned long ufp; 1376 unsigned long ufp;
1343 1377
1344 callchain_store(entry, PERF_CONTEXT_USER); 1378 perf_callchain_store(entry, regs->tpc);
1345 callchain_store(entry, regs->tpc);
1346 1379
1347 ufp = regs->u_regs[UREG_I6] + STACK_BIAS; 1380 ufp = regs->u_regs[UREG_I6] + STACK_BIAS;
1348 do { 1381 do {
@@ -1355,17 +1388,16 @@ static void perf_callchain_user_64(struct pt_regs *regs,
1355 1388
1356 pc = sf.callers_pc; 1389 pc = sf.callers_pc;
1357 ufp = (unsigned long)sf.fp + STACK_BIAS; 1390 ufp = (unsigned long)sf.fp + STACK_BIAS;
1358 callchain_store(entry, pc); 1391 perf_callchain_store(entry, pc);
1359 } while (entry->nr < PERF_MAX_STACK_DEPTH); 1392 } while (entry->nr < PERF_MAX_STACK_DEPTH);
1360} 1393}
1361 1394
1362static void perf_callchain_user_32(struct pt_regs *regs, 1395static void perf_callchain_user_32(struct perf_callchain_entry *entry,
1363 struct perf_callchain_entry *entry) 1396 struct pt_regs *regs)
1364{ 1397{
1365 unsigned long ufp; 1398 unsigned long ufp;
1366 1399
1367 callchain_store(entry, PERF_CONTEXT_USER); 1400 perf_callchain_store(entry, regs->tpc);
1368 callchain_store(entry, regs->tpc);
1369 1401
1370 ufp = regs->u_regs[UREG_I6] & 0xffffffffUL; 1402 ufp = regs->u_regs[UREG_I6] & 0xffffffffUL;
1371 do { 1403 do {
@@ -1378,34 +1410,16 @@ static void perf_callchain_user_32(struct pt_regs *regs,
1378 1410
1379 pc = sf.callers_pc; 1411 pc = sf.callers_pc;
1380 ufp = (unsigned long)sf.fp; 1412 ufp = (unsigned long)sf.fp;
1381 callchain_store(entry, pc); 1413 perf_callchain_store(entry, pc);
1382 } while (entry->nr < PERF_MAX_STACK_DEPTH); 1414 } while (entry->nr < PERF_MAX_STACK_DEPTH);
1383} 1415}
1384 1416
1385/* Like powerpc we can't get PMU interrupts within the PMU handler, 1417void
1386 * so no need for separate NMI and IRQ chains as on x86. 1418perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
1387 */
1388static DEFINE_PER_CPU(struct perf_callchain_entry, callchain);
1389
1390struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)
1391{ 1419{
1392 struct perf_callchain_entry *entry = &__get_cpu_var(callchain); 1420 flushw_user();
1393 1421 if (test_thread_flag(TIF_32BIT))
1394 entry->nr = 0; 1422 perf_callchain_user_32(entry, regs);
1395 if (!user_mode(regs)) { 1423 else
1396 stack_trace_flush(); 1424 perf_callchain_user_64(entry, regs);
1397 perf_callchain_kernel(regs, entry);
1398 if (current->mm)
1399 regs = task_pt_regs(current);
1400 else
1401 regs = NULL;
1402 }
1403 if (regs) {
1404 flushw_user();
1405 if (test_thread_flag(TIF_32BIT))
1406 perf_callchain_user_32(regs, entry);
1407 else
1408 perf_callchain_user_64(regs, entry);
1409 }
1410 return entry;
1411} 1425}
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
index 40e29fc8a4d6..17529298c50a 100644
--- a/arch/sparc/kernel/process_32.c
+++ b/arch/sparc/kernel/process_32.c
@@ -633,8 +633,10 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
633 if(IS_ERR(filename)) 633 if(IS_ERR(filename))
634 goto out; 634 goto out;
635 error = do_execve(filename, 635 error = do_execve(filename,
636 (char __user * __user *)regs->u_regs[base + UREG_I1], 636 (const char __user *const __user *)
637 (char __user * __user *)regs->u_regs[base + UREG_I2], 637 regs->u_regs[base + UREG_I1],
638 (const char __user *const __user *)
639 regs->u_regs[base + UREG_I2],
638 regs); 640 regs);
639 putname(filename); 641 putname(filename);
640out: 642out:
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
index dbe81a368b45..c158a95ec664 100644
--- a/arch/sparc/kernel/process_64.c
+++ b/arch/sparc/kernel/process_64.c
@@ -303,7 +303,7 @@ void arch_trigger_all_cpu_backtrace(void)
303 303
304#ifdef CONFIG_MAGIC_SYSRQ 304#ifdef CONFIG_MAGIC_SYSRQ
305 305
306static void sysrq_handle_globreg(int key, struct tty_struct *tty) 306static void sysrq_handle_globreg(int key)
307{ 307{
308 arch_trigger_all_cpu_backtrace(); 308 arch_trigger_all_cpu_backtrace();
309} 309}
@@ -739,9 +739,9 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
739 if (IS_ERR(filename)) 739 if (IS_ERR(filename))
740 goto out; 740 goto out;
741 error = do_execve(filename, 741 error = do_execve(filename,
742 (char __user * __user *) 742 (const char __user *const __user *)
743 regs->u_regs[base + UREG_I1], 743 regs->u_regs[base + UREG_I1],
744 (char __user * __user *) 744 (const char __user *const __user *)
745 regs->u_regs[base + UREG_I2], regs); 745 regs->u_regs[base + UREG_I2], regs);
746 putname(filename); 746 putname(filename);
747 if (!error) { 747 if (!error) {
diff --git a/arch/sparc/kernel/prom.h b/arch/sparc/kernel/prom.h
index eeb04a782ec8..cf5fe1c0b024 100644
--- a/arch/sparc/kernel/prom.h
+++ b/arch/sparc/kernel/prom.h
@@ -4,12 +4,6 @@
4#include <linux/spinlock.h> 4#include <linux/spinlock.h>
5#include <asm/prom.h> 5#include <asm/prom.h>
6 6
7extern void * prom_early_alloc(unsigned long size);
8extern void irq_trans_init(struct device_node *dp);
9
10extern unsigned int prom_unique_id;
11
12extern char *build_path_component(struct device_node *dp);
13extern void of_console_init(void); 7extern void of_console_init(void);
14 8
15extern unsigned int prom_early_allocated; 9extern unsigned int prom_early_allocated;
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c
index 1f830da2ddf2..ed25834328f4 100644
--- a/arch/sparc/kernel/prom_common.c
+++ b/arch/sparc/kernel/prom_common.c
@@ -20,14 +20,13 @@
20#include <linux/mutex.h> 20#include <linux/mutex.h>
21#include <linux/slab.h> 21#include <linux/slab.h>
22#include <linux/of.h> 22#include <linux/of.h>
23#include <linux/of_pdt.h>
23#include <asm/prom.h> 24#include <asm/prom.h>
24#include <asm/oplib.h> 25#include <asm/oplib.h>
25#include <asm/leon.h> 26#include <asm/leon.h>
26 27
27#include "prom.h" 28#include "prom.h"
28 29
29void (*prom_build_more)(struct device_node *dp, struct device_node ***nextp);
30
31struct device_node *of_console_device; 30struct device_node *of_console_device;
32EXPORT_SYMBOL(of_console_device); 31EXPORT_SYMBOL(of_console_device);
33 32
@@ -119,192 +118,47 @@ int of_find_in_proplist(const char *list, const char *match, int len)
119} 118}
120EXPORT_SYMBOL(of_find_in_proplist); 119EXPORT_SYMBOL(of_find_in_proplist);
121 120
122unsigned int prom_unique_id; 121/*
123 122 * SPARC32 and SPARC64's prom_nextprop() do things differently
124static struct property * __init build_one_prop(phandle node, char *prev, 123 * here, despite sharing the same interface. SPARC32 doesn't fill in 'buf',
125 char *special_name, 124 * returning NULL on an error. SPARC64 fills in 'buf', but sets it to an
126 void *special_val, 125 * empty string upon error.
127 int special_len) 126 */
127static int __init handle_nextprop_quirks(char *buf, const char *name)
128{ 128{
129 static struct property *tmp = NULL; 129 if (!name || strlen(name) == 0)
130 struct property *p; 130 return -1;
131 const char *name;
132
133 if (tmp) {
134 p = tmp;
135 memset(p, 0, sizeof(*p) + 32);
136 tmp = NULL;
137 } else {
138 p = prom_early_alloc(sizeof(struct property) + 32);
139 p->unique_id = prom_unique_id++;
140 }
141
142 p->name = (char *) (p + 1);
143 if (special_name) {
144 strcpy(p->name, special_name);
145 p->length = special_len;
146 p->value = prom_early_alloc(special_len);
147 memcpy(p->value, special_val, special_len);
148 } else {
149 if (prev == NULL) {
150 name = prom_firstprop(node, p->name);
151 } else {
152 name = prom_nextprop(node, prev, p->name);
153 }
154 131
155 if (!name || strlen(name) == 0) {
156 tmp = p;
157 return NULL;
158 }
159#ifdef CONFIG_SPARC32 132#ifdef CONFIG_SPARC32
160 strcpy(p->name, name); 133 strcpy(buf, name);
161#endif 134#endif
162 p->length = prom_getproplen(node, p->name); 135 return 0;
163 if (p->length <= 0) {
164 p->length = 0;
165 } else {
166 int len;
167
168 p->value = prom_early_alloc(p->length + 1);
169 len = prom_getproperty(node, p->name, p->value,
170 p->length);
171 if (len <= 0)
172 p->length = 0;
173 ((unsigned char *)p->value)[p->length] = '\0';
174 }
175 }
176 return p;
177}
178
179static struct property * __init build_prop_list(phandle node)
180{
181 struct property *head, *tail;
182
183 head = tail = build_one_prop(node, NULL,
184 ".node", &node, sizeof(node));
185
186 tail->next = build_one_prop(node, NULL, NULL, NULL, 0);
187 tail = tail->next;
188 while(tail) {
189 tail->next = build_one_prop(node, tail->name,
190 NULL, NULL, 0);
191 tail = tail->next;
192 }
193
194 return head;
195}
196
197static char * __init get_one_property(phandle node, const char *name)
198{
199 char *buf = "<NULL>";
200 int len;
201
202 len = prom_getproplen(node, name);
203 if (len > 0) {
204 buf = prom_early_alloc(len);
205 len = prom_getproperty(node, name, buf, len);
206 }
207
208 return buf;
209}
210
211static struct device_node * __init prom_create_node(phandle node,
212 struct device_node *parent)
213{
214 struct device_node *dp;
215
216 if (!node)
217 return NULL;
218
219 dp = prom_early_alloc(sizeof(*dp));
220 dp->unique_id = prom_unique_id++;
221 dp->parent = parent;
222
223 kref_init(&dp->kref);
224
225 dp->name = get_one_property(node, "name");
226 dp->type = get_one_property(node, "device_type");
227 dp->phandle = node;
228
229 dp->properties = build_prop_list(node);
230
231 irq_trans_init(dp);
232
233 return dp;
234}
235
236char * __init build_full_name(struct device_node *dp)
237{
238 int len, ourlen, plen;
239 char *n;
240
241 plen = strlen(dp->parent->full_name);
242 ourlen = strlen(dp->path_component_name);
243 len = ourlen + plen + 2;
244
245 n = prom_early_alloc(len);
246 strcpy(n, dp->parent->full_name);
247 if (!of_node_is_root(dp->parent)) {
248 strcpy(n + plen, "/");
249 plen++;
250 }
251 strcpy(n + plen, dp->path_component_name);
252
253 return n;
254} 136}
255 137
256static struct device_node * __init prom_build_tree(struct device_node *parent, 138static int __init prom_common_nextprop(phandle node, char *prev, char *buf)
257 phandle node,
258 struct device_node ***nextp)
259{ 139{
260 struct device_node *ret = NULL, *prev_sibling = NULL; 140 const char *name;
261 struct device_node *dp;
262
263 while (1) {
264 dp = prom_create_node(node, parent);
265 if (!dp)
266 break;
267
268 if (prev_sibling)
269 prev_sibling->sibling = dp;
270
271 if (!ret)
272 ret = dp;
273 prev_sibling = dp;
274
275 *(*nextp) = dp;
276 *nextp = &dp->allnext;
277
278 dp->path_component_name = build_path_component(dp);
279 dp->full_name = build_full_name(dp);
280
281 dp->child = prom_build_tree(dp, prom_getchild(node), nextp);
282
283 if (prom_build_more)
284 prom_build_more(dp, nextp);
285
286 node = prom_getsibling(node);
287 }
288 141
289 return ret; 142 buf[0] = '\0';
143 name = prom_nextprop(node, prev, buf);
144 return handle_nextprop_quirks(buf, name);
290} 145}
291 146
292unsigned int prom_early_allocated __initdata; 147unsigned int prom_early_allocated __initdata;
293 148
149static struct of_pdt_ops prom_sparc_ops __initdata = {
150 .nextprop = prom_common_nextprop,
151 .getproplen = prom_getproplen,
152 .getproperty = prom_getproperty,
153 .getchild = prom_getchild,
154 .getsibling = prom_getsibling,
155};
156
294void __init prom_build_devicetree(void) 157void __init prom_build_devicetree(void)
295{ 158{
296 struct device_node **nextp; 159 of_pdt_build_devicetree(prom_root_node, &prom_sparc_ops);
297
298 allnodes = prom_create_node(prom_root_node, NULL);
299 allnodes->path_component_name = "";
300 allnodes->full_name = "/";
301
302 nextp = &allnodes->allnext;
303 allnodes->child = prom_build_tree(allnodes,
304 prom_getchild(allnodes->phandle),
305 &nextp);
306 of_console_init(); 160 of_console_init();
307 161
308 printk("PROM: Built device tree with %u bytes of memory.\n", 162 pr_info("PROM: Built device tree with %u bytes of memory.\n",
309 prom_early_allocated); 163 prom_early_allocated);
310} 164}
diff --git a/arch/sparc/kernel/ptrace_32.c b/arch/sparc/kernel/ptrace_32.c
index e608f397e11f..27b9e93d0121 100644
--- a/arch/sparc/kernel/ptrace_32.c
+++ b/arch/sparc/kernel/ptrace_32.c
@@ -323,18 +323,35 @@ const struct user_regset_view *task_user_regset_view(struct task_struct *task)
323 return &user_sparc32_view; 323 return &user_sparc32_view;
324} 324}
325 325
326long arch_ptrace(struct task_struct *child, long request, long addr, long data) 326struct fps {
327 unsigned long regs[32];
328 unsigned long fsr;
329 unsigned long flags;
330 unsigned long extra;
331 unsigned long fpqd;
332 struct fq {
333 unsigned long *insnaddr;
334 unsigned long insn;
335 } fpq[16];
336};
337
338long arch_ptrace(struct task_struct *child, long request,
339 unsigned long addr, unsigned long data)
327{ 340{
328 unsigned long addr2 = current->thread.kregs->u_regs[UREG_I4]; 341 unsigned long addr2 = current->thread.kregs->u_regs[UREG_I4];
342 void __user *addr2p;
329 const struct user_regset_view *view; 343 const struct user_regset_view *view;
344 struct pt_regs __user *pregs;
345 struct fps __user *fps;
330 int ret; 346 int ret;
331 347
332 view = task_user_regset_view(current); 348 view = task_user_regset_view(current);
349 addr2p = (void __user *) addr2;
350 pregs = (struct pt_regs __user *) addr;
351 fps = (struct fps __user *) addr;
333 352
334 switch(request) { 353 switch(request) {
335 case PTRACE_GETREGS: { 354 case PTRACE_GETREGS: {
336 struct pt_regs __user *pregs = (struct pt_regs __user *) addr;
337
338 ret = copy_regset_to_user(child, view, REGSET_GENERAL, 355 ret = copy_regset_to_user(child, view, REGSET_GENERAL,
339 32 * sizeof(u32), 356 32 * sizeof(u32),
340 4 * sizeof(u32), 357 4 * sizeof(u32),
@@ -348,8 +365,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
348 } 365 }
349 366
350 case PTRACE_SETREGS: { 367 case PTRACE_SETREGS: {
351 struct pt_regs __user *pregs = (struct pt_regs __user *) addr;
352
353 ret = copy_regset_from_user(child, view, REGSET_GENERAL, 368 ret = copy_regset_from_user(child, view, REGSET_GENERAL,
354 32 * sizeof(u32), 369 32 * sizeof(u32),
355 4 * sizeof(u32), 370 4 * sizeof(u32),
@@ -363,19 +378,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
363 } 378 }
364 379
365 case PTRACE_GETFPREGS: { 380 case PTRACE_GETFPREGS: {
366 struct fps {
367 unsigned long regs[32];
368 unsigned long fsr;
369 unsigned long flags;
370 unsigned long extra;
371 unsigned long fpqd;
372 struct fq {
373 unsigned long *insnaddr;
374 unsigned long insn;
375 } fpq[16];
376 };
377 struct fps __user *fps = (struct fps __user *) addr;
378
379 ret = copy_regset_to_user(child, view, REGSET_FP, 381 ret = copy_regset_to_user(child, view, REGSET_FP,
380 0 * sizeof(u32), 382 0 * sizeof(u32),
381 32 * sizeof(u32), 383 32 * sizeof(u32),
@@ -397,19 +399,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
397 } 399 }
398 400
399 case PTRACE_SETFPREGS: { 401 case PTRACE_SETFPREGS: {
400 struct fps {
401 unsigned long regs[32];
402 unsigned long fsr;
403 unsigned long flags;
404 unsigned long extra;
405 unsigned long fpqd;
406 struct fq {
407 unsigned long *insnaddr;
408 unsigned long insn;
409 } fpq[16];
410 };
411 struct fps __user *fps = (struct fps __user *) addr;
412
413 ret = copy_regset_from_user(child, view, REGSET_FP, 402 ret = copy_regset_from_user(child, view, REGSET_FP,
414 0 * sizeof(u32), 403 0 * sizeof(u32),
415 32 * sizeof(u32), 404 32 * sizeof(u32),
@@ -424,8 +413,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
424 413
425 case PTRACE_READTEXT: 414 case PTRACE_READTEXT:
426 case PTRACE_READDATA: 415 case PTRACE_READDATA:
427 ret = ptrace_readdata(child, addr, 416 ret = ptrace_readdata(child, addr, addr2p, data);
428 (void __user *) addr2, data);
429 417
430 if (ret == data) 418 if (ret == data)
431 ret = 0; 419 ret = 0;
@@ -435,8 +423,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
435 423
436 case PTRACE_WRITETEXT: 424 case PTRACE_WRITETEXT:
437 case PTRACE_WRITEDATA: 425 case PTRACE_WRITEDATA:
438 ret = ptrace_writedata(child, (void __user *) addr2, 426 ret = ptrace_writedata(child, addr2p, addr, data);
439 addr, data);
440 427
441 if (ret == data) 428 if (ret == data)
442 ret = 0; 429 ret = 0;
diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
index aa90da08bf61..9ccc812bc09e 100644
--- a/arch/sparc/kernel/ptrace_64.c
+++ b/arch/sparc/kernel/ptrace_64.c
@@ -969,16 +969,19 @@ struct fps {
969 unsigned long fsr; 969 unsigned long fsr;
970}; 970};
971 971
972long arch_ptrace(struct task_struct *child, long request, long addr, long data) 972long arch_ptrace(struct task_struct *child, long request,
973 unsigned long addr, unsigned long data)
973{ 974{
974 const struct user_regset_view *view = task_user_regset_view(current); 975 const struct user_regset_view *view = task_user_regset_view(current);
975 unsigned long addr2 = task_pt_regs(current)->u_regs[UREG_I4]; 976 unsigned long addr2 = task_pt_regs(current)->u_regs[UREG_I4];
976 struct pt_regs __user *pregs; 977 struct pt_regs __user *pregs;
977 struct fps __user *fps; 978 struct fps __user *fps;
979 void __user *addr2p;
978 int ret; 980 int ret;
979 981
980 pregs = (struct pt_regs __user *) (unsigned long) addr; 982 pregs = (struct pt_regs __user *) addr;
981 fps = (struct fps __user *) (unsigned long) addr; 983 fps = (struct fps __user *) addr;
984 addr2p = (void __user *) addr2;
982 985
983 switch (request) { 986 switch (request) {
984 case PTRACE_PEEKUSR: 987 case PTRACE_PEEKUSR:
@@ -1029,8 +1032,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
1029 1032
1030 case PTRACE_READTEXT: 1033 case PTRACE_READTEXT:
1031 case PTRACE_READDATA: 1034 case PTRACE_READDATA:
1032 ret = ptrace_readdata(child, addr, 1035 ret = ptrace_readdata(child, addr, addr2p, data);
1033 (char __user *)addr2, data);
1034 if (ret == data) 1036 if (ret == data)
1035 ret = 0; 1037 ret = 0;
1036 else if (ret >= 0) 1038 else if (ret >= 0)
@@ -1039,8 +1041,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
1039 1041
1040 case PTRACE_WRITETEXT: 1042 case PTRACE_WRITETEXT:
1041 case PTRACE_WRITEDATA: 1043 case PTRACE_WRITEDATA:
1042 ret = ptrace_writedata(child, (char __user *) addr2, 1044 ret = ptrace_writedata(child, addr2p, addr, data);
1043 addr, data);
1044 if (ret == data) 1045 if (ret == data)
1045 ret = 0; 1046 ret = 0;
1046 else if (ret >= 0) 1047 else if (ret >= 0)
diff --git a/arch/sparc/kernel/rtrap_32.S b/arch/sparc/kernel/rtrap_32.S
index 4da2e1f66290..5f5f74c2c2ca 100644
--- a/arch/sparc/kernel/rtrap_32.S
+++ b/arch/sparc/kernel/rtrap_32.S
@@ -78,9 +78,9 @@ signal_p:
78 call do_notify_resume 78 call do_notify_resume
79 add %sp, STACKFRAME_SZ, %o0 ! pt_regs ptr 79 add %sp, STACKFRAME_SZ, %o0 ! pt_regs ptr
80 80
81 /* Fall through. */ 81 b signal_p
82 ld [%sp + STACKFRAME_SZ + PT_PSR], %t_psr 82 ld [%curptr + TI_FLAGS], %g2
83 clr %l6 83
84ret_trap_continue: 84ret_trap_continue:
85 sethi %hi(PSR_SYSCALL), %g1 85 sethi %hi(PSR_SYSCALL), %g1
86 andn %t_psr, %g1, %t_psr 86 andn %t_psr, %g1, %t_psr
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S
index 090b9e9ad5e3..77f1b95e0806 100644
--- a/arch/sparc/kernel/rtrap_64.S
+++ b/arch/sparc/kernel/rtrap_64.S
@@ -34,37 +34,9 @@ __handle_preemption:
34__handle_user_windows: 34__handle_user_windows:
35 call fault_in_user_windows 35 call fault_in_user_windows
36 wrpr %g0, RTRAP_PSTATE, %pstate 36 wrpr %g0, RTRAP_PSTATE, %pstate
37 wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate 37 ba,pt %xcc, __handle_preemption_continue
38 /* Redo sched+sig checks */ 38 wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
39 ldx [%g6 + TI_FLAGS], %l0
40 andcc %l0, _TIF_NEED_RESCHED, %g0
41
42 be,pt %xcc, 1f
43 nop
44 call schedule
45 wrpr %g0, RTRAP_PSTATE, %pstate
46 wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
47 ldx [%g6 + TI_FLAGS], %l0
48
491: andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
50 be,pt %xcc, __handle_user_windows_continue
51 nop
52 mov %l5, %o1
53 add %sp, PTREGS_OFF, %o0
54 mov %l0, %o2
55
56 call do_notify_resume
57 wrpr %g0, RTRAP_PSTATE, %pstate
58 wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
59 /* Signal delivery can modify pt_regs tstate, so we must
60 * reload it.
61 */
62 ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
63 sethi %hi(0xf << 20), %l4
64 and %l1, %l4, %l4
65 ba,pt %xcc, __handle_user_windows_continue
66 39
67 andn %l1, %l4, %l1
68__handle_userfpu: 40__handle_userfpu:
69 rd %fprs, %l5 41 rd %fprs, %l5
70 andcc %l5, FPRS_FEF, %g0 42 andcc %l5, FPRS_FEF, %g0
@@ -87,7 +59,7 @@ __handle_signal:
87 ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 59 ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
88 sethi %hi(0xf << 20), %l4 60 sethi %hi(0xf << 20), %l4
89 and %l1, %l4, %l4 61 and %l1, %l4, %l4
90 ba,pt %xcc, __handle_signal_continue 62 ba,pt %xcc, __handle_preemption_continue
91 andn %l1, %l4, %l1 63 andn %l1, %l4, %l1
92 64
93 /* When returning from a NMI (%pil==15) interrupt we want to 65 /* When returning from a NMI (%pil==15) interrupt we want to
@@ -177,11 +149,9 @@ __handle_preemption_continue:
177 bne,pn %xcc, __handle_preemption 149 bne,pn %xcc, __handle_preemption
178 andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0 150 andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
179 bne,pn %xcc, __handle_signal 151 bne,pn %xcc, __handle_signal
180__handle_signal_continue:
181 ldub [%g6 + TI_WSAVED], %o2 152 ldub [%g6 + TI_WSAVED], %o2
182 brnz,pn %o2, __handle_user_windows 153 brnz,pn %o2, __handle_user_windows
183 nop 154 nop
184__handle_user_windows_continue:
185 sethi %hi(TSTATE_PEF), %o0 155 sethi %hi(TSTATE_PEF), %o0
186 andcc %l1, %o0, %g0 156 andcc %l1, %o0, %g0
187 157
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c
index 5f72de67588b..29bafe051bb1 100644
--- a/arch/sparc/kernel/setup_64.c
+++ b/arch/sparc/kernel/setup_64.c
@@ -315,7 +315,7 @@ void __init setup_arch(char **cmdline_p)
315 315
316#ifdef CONFIG_IP_PNP 316#ifdef CONFIG_IP_PNP
317 if (!ic_set_manually) { 317 if (!ic_set_manually) {
318 int chosen = prom_finddevice ("/chosen"); 318 phandle chosen = prom_finddevice("/chosen");
319 u32 cl, sv, gw; 319 u32 cl, sv, gw;
320 320
321 cl = prom_getintdefault (chosen, "client-ip", 0); 321 cl = prom_getintdefault (chosen, "client-ip", 0);
diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c
index ea22cd373c64..75fad425e249 100644
--- a/arch/sparc/kernel/signal32.c
+++ b/arch/sparc/kernel/signal32.c
@@ -453,8 +453,66 @@ static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
453 return err; 453 return err;
454} 454}
455 455
456static void setup_frame32(struct k_sigaction *ka, struct pt_regs *regs, 456/* The I-cache flush instruction only works in the primary ASI, which
457 int signo, sigset_t *oldset) 457 * right now is the nucleus, aka. kernel space.
458 *
459 * Therefore we have to kick the instructions out using the kernel
460 * side linear mapping of the physical address backing the user
461 * instructions.
462 */
463static void flush_signal_insns(unsigned long address)
464{
465 unsigned long pstate, paddr;
466 pte_t *ptep, pte;
467 pgd_t *pgdp;
468 pud_t *pudp;
469 pmd_t *pmdp;
470
471 /* Commit all stores of the instructions we are about to flush. */
472 wmb();
473
474 /* Disable cross-call reception. In this way even a very wide
475 * munmap() on another cpu can't tear down the page table
476 * hierarchy from underneath us, since that can't complete
477 * until the IPI tlb flush returns.
478 */
479
480 __asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate));
481 __asm__ __volatile__("wrpr %0, %1, %%pstate"
482 : : "r" (pstate), "i" (PSTATE_IE));
483
484 pgdp = pgd_offset(current->mm, address);
485 if (pgd_none(*pgdp))
486 goto out_irqs_on;
487 pudp = pud_offset(pgdp, address);
488 if (pud_none(*pudp))
489 goto out_irqs_on;
490 pmdp = pmd_offset(pudp, address);
491 if (pmd_none(*pmdp))
492 goto out_irqs_on;
493
494 ptep = pte_offset_map(pmdp, address);
495 pte = *ptep;
496 if (!pte_present(pte))
497 goto out_unmap;
498
499 paddr = (unsigned long) page_address(pte_page(pte));
500
501 __asm__ __volatile__("flush %0 + %1"
502 : /* no outputs */
503 : "r" (paddr),
504 "r" (address & (PAGE_SIZE - 1))
505 : "memory");
506
507out_unmap:
508 pte_unmap(ptep);
509out_irqs_on:
510 __asm__ __volatile__("wrpr %0, 0x0, %%pstate" : : "r" (pstate));
511
512}
513
514static int setup_frame32(struct k_sigaction *ka, struct pt_regs *regs,
515 int signo, sigset_t *oldset)
458{ 516{
459 struct signal_frame32 __user *sf; 517 struct signal_frame32 __user *sf;
460 int sigframe_size; 518 int sigframe_size;
@@ -547,13 +605,7 @@ static void setup_frame32(struct k_sigaction *ka, struct pt_regs *regs,
547 if (ka->ka_restorer) { 605 if (ka->ka_restorer) {
548 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer; 606 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer;
549 } else { 607 } else {
550 /* Flush instruction space. */
551 unsigned long address = ((unsigned long)&(sf->insns[0])); 608 unsigned long address = ((unsigned long)&(sf->insns[0]));
552 pgd_t *pgdp = pgd_offset(current->mm, address);
553 pud_t *pudp = pud_offset(pgdp, address);
554 pmd_t *pmdp = pmd_offset(pudp, address);
555 pte_t *ptep;
556 pte_t pte;
557 609
558 regs->u_regs[UREG_I7] = (unsigned long) (&(sf->insns[0]) - 2); 610 regs->u_regs[UREG_I7] = (unsigned long) (&(sf->insns[0]) - 2);
559 611
@@ -562,34 +614,22 @@ static void setup_frame32(struct k_sigaction *ka, struct pt_regs *regs,
562 if (err) 614 if (err)
563 goto sigsegv; 615 goto sigsegv;
564 616
565 preempt_disable(); 617 flush_signal_insns(address);
566 ptep = pte_offset_map(pmdp, address);
567 pte = *ptep;
568 if (pte_present(pte)) {
569 unsigned long page = (unsigned long)
570 page_address(pte_page(pte));
571
572 wmb();
573 __asm__ __volatile__("flush %0 + %1"
574 : /* no outputs */
575 : "r" (page),
576 "r" (address & (PAGE_SIZE - 1))
577 : "memory");
578 }
579 pte_unmap(ptep);
580 preempt_enable();
581 } 618 }
582 return; 619 return 0;
583 620
584sigill: 621sigill:
585 do_exit(SIGILL); 622 do_exit(SIGILL);
623 return -EINVAL;
624
586sigsegv: 625sigsegv:
587 force_sigsegv(signo, current); 626 force_sigsegv(signo, current);
627 return -EFAULT;
588} 628}
589 629
590static void setup_rt_frame32(struct k_sigaction *ka, struct pt_regs *regs, 630static int setup_rt_frame32(struct k_sigaction *ka, struct pt_regs *regs,
591 unsigned long signr, sigset_t *oldset, 631 unsigned long signr, sigset_t *oldset,
592 siginfo_t *info) 632 siginfo_t *info)
593{ 633{
594 struct rt_signal_frame32 __user *sf; 634 struct rt_signal_frame32 __user *sf;
595 int sigframe_size; 635 int sigframe_size;
@@ -687,12 +727,7 @@ static void setup_rt_frame32(struct k_sigaction *ka, struct pt_regs *regs,
687 if (ka->ka_restorer) 727 if (ka->ka_restorer)
688 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer; 728 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer;
689 else { 729 else {
690 /* Flush instruction space. */
691 unsigned long address = ((unsigned long)&(sf->insns[0])); 730 unsigned long address = ((unsigned long)&(sf->insns[0]));
692 pgd_t *pgdp = pgd_offset(current->mm, address);
693 pud_t *pudp = pud_offset(pgdp, address);
694 pmd_t *pmdp = pmd_offset(pudp, address);
695 pte_t *ptep;
696 731
697 regs->u_regs[UREG_I7] = (unsigned long) (&(sf->insns[0]) - 2); 732 regs->u_regs[UREG_I7] = (unsigned long) (&(sf->insns[0]) - 2);
698 733
@@ -704,38 +739,32 @@ static void setup_rt_frame32(struct k_sigaction *ka, struct pt_regs *regs,
704 if (err) 739 if (err)
705 goto sigsegv; 740 goto sigsegv;
706 741
707 preempt_disable(); 742 flush_signal_insns(address);
708 ptep = pte_offset_map(pmdp, address);
709 if (pte_present(*ptep)) {
710 unsigned long page = (unsigned long)
711 page_address(pte_page(*ptep));
712
713 wmb();
714 __asm__ __volatile__("flush %0 + %1"
715 : /* no outputs */
716 : "r" (page),
717 "r" (address & (PAGE_SIZE - 1))
718 : "memory");
719 }
720 pte_unmap(ptep);
721 preempt_enable();
722 } 743 }
723 return; 744 return 0;
724 745
725sigill: 746sigill:
726 do_exit(SIGILL); 747 do_exit(SIGILL);
748 return -EINVAL;
749
727sigsegv: 750sigsegv:
728 force_sigsegv(signr, current); 751 force_sigsegv(signr, current);
752 return -EFAULT;
729} 753}
730 754
731static inline void handle_signal32(unsigned long signr, struct k_sigaction *ka, 755static inline int handle_signal32(unsigned long signr, struct k_sigaction *ka,
732 siginfo_t *info, 756 siginfo_t *info,
733 sigset_t *oldset, struct pt_regs *regs) 757 sigset_t *oldset, struct pt_regs *regs)
734{ 758{
759 int err;
760
735 if (ka->sa.sa_flags & SA_SIGINFO) 761 if (ka->sa.sa_flags & SA_SIGINFO)
736 setup_rt_frame32(ka, regs, signr, oldset, info); 762 err = setup_rt_frame32(ka, regs, signr, oldset, info);
737 else 763 else
738 setup_frame32(ka, regs, signr, oldset); 764 err = setup_frame32(ka, regs, signr, oldset);
765
766 if (err)
767 return err;
739 768
740 spin_lock_irq(&current->sighand->siglock); 769 spin_lock_irq(&current->sighand->siglock);
741 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 770 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
@@ -743,6 +772,10 @@ static inline void handle_signal32(unsigned long signr, struct k_sigaction *ka,
743 sigaddset(&current->blocked,signr); 772 sigaddset(&current->blocked,signr);
744 recalc_sigpending(); 773 recalc_sigpending();
745 spin_unlock_irq(&current->sighand->siglock); 774 spin_unlock_irq(&current->sighand->siglock);
775
776 tracehook_signal_handler(signr, info, ka, regs, 0);
777
778 return 0;
746} 779}
747 780
748static inline void syscall_restart32(unsigned long orig_i0, struct pt_regs *regs, 781static inline void syscall_restart32(unsigned long orig_i0, struct pt_regs *regs,
@@ -789,16 +822,14 @@ void do_signal32(sigset_t *oldset, struct pt_regs * regs,
789 if (signr > 0) { 822 if (signr > 0) {
790 if (restart_syscall) 823 if (restart_syscall)
791 syscall_restart32(orig_i0, regs, &ka.sa); 824 syscall_restart32(orig_i0, regs, &ka.sa);
792 handle_signal32(signr, &ka, &info, oldset, regs); 825 if (handle_signal32(signr, &ka, &info, oldset, regs) == 0) {
793 826 /* A signal was successfully delivered; the saved
794 /* A signal was successfully delivered; the saved 827 * sigmask will have been stored in the signal frame,
795 * sigmask will have been stored in the signal frame, 828 * and will be restored by sigreturn, so we can simply
796 * and will be restored by sigreturn, so we can simply 829 * clear the TS_RESTORE_SIGMASK flag.
797 * clear the TS_RESTORE_SIGMASK flag. 830 */
798 */ 831 current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
799 current_thread_info()->status &= ~TS_RESTORE_SIGMASK; 832 }
800
801 tracehook_signal_handler(signr, &info, &ka, regs, 0);
802 return; 833 return;
803 } 834 }
804 if (restart_syscall && 835 if (restart_syscall &&
@@ -809,12 +840,14 @@ void do_signal32(sigset_t *oldset, struct pt_regs * regs,
809 regs->u_regs[UREG_I0] = orig_i0; 840 regs->u_regs[UREG_I0] = orig_i0;
810 regs->tpc -= 4; 841 regs->tpc -= 4;
811 regs->tnpc -= 4; 842 regs->tnpc -= 4;
843 pt_regs_clear_syscall(regs);
812 } 844 }
813 if (restart_syscall && 845 if (restart_syscall &&
814 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) { 846 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) {
815 regs->u_regs[UREG_G1] = __NR_restart_syscall; 847 regs->u_regs[UREG_G1] = __NR_restart_syscall;
816 regs->tpc -= 4; 848 regs->tpc -= 4;
817 regs->tnpc -= 4; 849 regs->tnpc -= 4;
850 pt_regs_clear_syscall(regs);
818 } 851 }
819 852
820 /* If there's no signal to deliver, we just put the saved sigmask 853 /* If there's no signal to deliver, we just put the saved sigmask
diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c
index 9882df92ba0a..5e5c5fd03783 100644
--- a/arch/sparc/kernel/signal_32.c
+++ b/arch/sparc/kernel/signal_32.c
@@ -315,8 +315,8 @@ save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
315 return err; 315 return err;
316} 316}
317 317
318static void setup_frame(struct k_sigaction *ka, struct pt_regs *regs, 318static int setup_frame(struct k_sigaction *ka, struct pt_regs *regs,
319 int signo, sigset_t *oldset) 319 int signo, sigset_t *oldset)
320{ 320{
321 struct signal_frame __user *sf; 321 struct signal_frame __user *sf;
322 int sigframe_size, err; 322 int sigframe_size, err;
@@ -384,16 +384,19 @@ static void setup_frame(struct k_sigaction *ka, struct pt_regs *regs,
384 /* Flush instruction space. */ 384 /* Flush instruction space. */
385 flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0])); 385 flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0]));
386 } 386 }
387 return; 387 return 0;
388 388
389sigill_and_return: 389sigill_and_return:
390 do_exit(SIGILL); 390 do_exit(SIGILL);
391 return -EINVAL;
392
391sigsegv: 393sigsegv:
392 force_sigsegv(signo, current); 394 force_sigsegv(signo, current);
395 return -EFAULT;
393} 396}
394 397
395static void setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, 398static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
396 int signo, sigset_t *oldset, siginfo_t *info) 399 int signo, sigset_t *oldset, siginfo_t *info)
397{ 400{
398 struct rt_signal_frame __user *sf; 401 struct rt_signal_frame __user *sf;
399 int sigframe_size; 402 int sigframe_size;
@@ -466,22 +469,30 @@ static void setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
466 /* Flush instruction space. */ 469 /* Flush instruction space. */
467 flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0])); 470 flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0]));
468 } 471 }
469 return; 472 return 0;
470 473
471sigill: 474sigill:
472 do_exit(SIGILL); 475 do_exit(SIGILL);
476 return -EINVAL;
477
473sigsegv: 478sigsegv:
474 force_sigsegv(signo, current); 479 force_sigsegv(signo, current);
480 return -EFAULT;
475} 481}
476 482
477static inline void 483static inline int
478handle_signal(unsigned long signr, struct k_sigaction *ka, 484handle_signal(unsigned long signr, struct k_sigaction *ka,
479 siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) 485 siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
480{ 486{
487 int err;
488
481 if (ka->sa.sa_flags & SA_SIGINFO) 489 if (ka->sa.sa_flags & SA_SIGINFO)
482 setup_rt_frame(ka, regs, signr, oldset, info); 490 err = setup_rt_frame(ka, regs, signr, oldset, info);
483 else 491 else
484 setup_frame(ka, regs, signr, oldset); 492 err = setup_frame(ka, regs, signr, oldset);
493
494 if (err)
495 return err;
485 496
486 spin_lock_irq(&current->sighand->siglock); 497 spin_lock_irq(&current->sighand->siglock);
487 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 498 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
@@ -489,6 +500,10 @@ handle_signal(unsigned long signr, struct k_sigaction *ka,
489 sigaddset(&current->blocked, signr); 500 sigaddset(&current->blocked, signr);
490 recalc_sigpending(); 501 recalc_sigpending();
491 spin_unlock_irq(&current->sighand->siglock); 502 spin_unlock_irq(&current->sighand->siglock);
503
504 tracehook_signal_handler(signr, info, ka, regs, 0);
505
506 return 0;
492} 507}
493 508
494static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, 509static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
@@ -546,17 +561,15 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
546 if (signr > 0) { 561 if (signr > 0) {
547 if (restart_syscall) 562 if (restart_syscall)
548 syscall_restart(orig_i0, regs, &ka.sa); 563 syscall_restart(orig_i0, regs, &ka.sa);
549 handle_signal(signr, &ka, &info, oldset, regs); 564 if (handle_signal(signr, &ka, &info, oldset, regs) == 0) {
550 565 /* a signal was successfully delivered; the saved
551 /* a signal was successfully delivered; the saved 566 * sigmask will have been stored in the signal frame,
552 * sigmask will have been stored in the signal frame, 567 * and will be restored by sigreturn, so we can simply
553 * and will be restored by sigreturn, so we can simply 568 * clear the TIF_RESTORE_SIGMASK flag.
554 * clear the TIF_RESTORE_SIGMASK flag. 569 */
555 */ 570 if (test_thread_flag(TIF_RESTORE_SIGMASK))
556 if (test_thread_flag(TIF_RESTORE_SIGMASK)) 571 clear_thread_flag(TIF_RESTORE_SIGMASK);
557 clear_thread_flag(TIF_RESTORE_SIGMASK); 572 }
558
559 tracehook_signal_handler(signr, &info, &ka, regs, 0);
560 return; 573 return;
561 } 574 }
562 if (restart_syscall && 575 if (restart_syscall &&
@@ -567,12 +580,14 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
567 regs->u_regs[UREG_I0] = orig_i0; 580 regs->u_regs[UREG_I0] = orig_i0;
568 regs->pc -= 4; 581 regs->pc -= 4;
569 regs->npc -= 4; 582 regs->npc -= 4;
583 pt_regs_clear_syscall(regs);
570 } 584 }
571 if (restart_syscall && 585 if (restart_syscall &&
572 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) { 586 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) {
573 regs->u_regs[UREG_G1] = __NR_restart_syscall; 587 regs->u_regs[UREG_G1] = __NR_restart_syscall;
574 regs->pc -= 4; 588 regs->pc -= 4;
575 regs->npc -= 4; 589 regs->npc -= 4;
590 pt_regs_clear_syscall(regs);
576 } 591 }
577 592
578 /* if there's no signal to deliver, we just put the saved sigmask 593 /* if there's no signal to deliver, we just put the saved sigmask
diff --git a/arch/sparc/kernel/signal_64.c b/arch/sparc/kernel/signal_64.c
index 9fa48c30037e..006fe4515886 100644
--- a/arch/sparc/kernel/signal_64.c
+++ b/arch/sparc/kernel/signal_64.c
@@ -409,7 +409,7 @@ static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *
409 return (void __user *) sp; 409 return (void __user *) sp;
410} 410}
411 411
412static inline void 412static inline int
413setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, 413setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
414 int signo, sigset_t *oldset, siginfo_t *info) 414 int signo, sigset_t *oldset, siginfo_t *info)
415{ 415{
@@ -483,26 +483,37 @@ setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
483 } 483 }
484 /* 4. return to kernel instructions */ 484 /* 4. return to kernel instructions */
485 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer; 485 regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer;
486 return; 486 return 0;
487 487
488sigill: 488sigill:
489 do_exit(SIGILL); 489 do_exit(SIGILL);
490 return -EINVAL;
491
490sigsegv: 492sigsegv:
491 force_sigsegv(signo, current); 493 force_sigsegv(signo, current);
494 return -EFAULT;
492} 495}
493 496
494static inline void handle_signal(unsigned long signr, struct k_sigaction *ka, 497static inline int handle_signal(unsigned long signr, struct k_sigaction *ka,
495 siginfo_t *info, 498 siginfo_t *info,
496 sigset_t *oldset, struct pt_regs *regs) 499 sigset_t *oldset, struct pt_regs *regs)
497{ 500{
498 setup_rt_frame(ka, regs, signr, oldset, 501 int err;
499 (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL); 502
503 err = setup_rt_frame(ka, regs, signr, oldset,
504 (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL);
505 if (err)
506 return err;
500 spin_lock_irq(&current->sighand->siglock); 507 spin_lock_irq(&current->sighand->siglock);
501 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask); 508 sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
502 if (!(ka->sa.sa_flags & SA_NOMASK)) 509 if (!(ka->sa.sa_flags & SA_NOMASK))
503 sigaddset(&current->blocked,signr); 510 sigaddset(&current->blocked,signr);
504 recalc_sigpending(); 511 recalc_sigpending();
505 spin_unlock_irq(&current->sighand->siglock); 512 spin_unlock_irq(&current->sighand->siglock);
513
514 tracehook_signal_handler(signr, info, ka, regs, 0);
515
516 return 0;
506} 517}
507 518
508static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs, 519static inline void syscall_restart(unsigned long orig_i0, struct pt_regs *regs,
@@ -571,16 +582,14 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
571 if (signr > 0) { 582 if (signr > 0) {
572 if (restart_syscall) 583 if (restart_syscall)
573 syscall_restart(orig_i0, regs, &ka.sa); 584 syscall_restart(orig_i0, regs, &ka.sa);
574 handle_signal(signr, &ka, &info, oldset, regs); 585 if (handle_signal(signr, &ka, &info, oldset, regs) == 0) {
575 586 /* A signal was successfully delivered; the saved
576 /* A signal was successfully delivered; the saved 587 * sigmask will have been stored in the signal frame,
577 * sigmask will have been stored in the signal frame, 588 * and will be restored by sigreturn, so we can simply
578 * and will be restored by sigreturn, so we can simply 589 * clear the TS_RESTORE_SIGMASK flag.
579 * clear the TS_RESTORE_SIGMASK flag. 590 */
580 */ 591 current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
581 current_thread_info()->status &= ~TS_RESTORE_SIGMASK; 592 }
582
583 tracehook_signal_handler(signr, &info, &ka, regs, 0);
584 return; 593 return;
585 } 594 }
586 if (restart_syscall && 595 if (restart_syscall &&
@@ -591,12 +600,14 @@ static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
591 regs->u_regs[UREG_I0] = orig_i0; 600 regs->u_regs[UREG_I0] = orig_i0;
592 regs->tpc -= 4; 601 regs->tpc -= 4;
593 regs->tnpc -= 4; 602 regs->tnpc -= 4;
603 pt_regs_clear_syscall(regs);
594 } 604 }
595 if (restart_syscall && 605 if (restart_syscall &&
596 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) { 606 regs->u_regs[UREG_I0] == ERESTART_RESTARTBLOCK) {
597 regs->u_regs[UREG_G1] = __NR_restart_syscall; 607 regs->u_regs[UREG_G1] = __NR_restart_syscall;
598 regs->tpc -= 4; 608 regs->tpc -= 4;
599 regs->tnpc -= 4; 609 regs->tnpc -= 4;
610 pt_regs_clear_syscall(regs);
600 } 611 }
601 612
602 /* If there's no signal to deliver, we just put the saved sigmask 613 /* If there's no signal to deliver, we just put the saved sigmask
diff --git a/arch/sparc/kernel/starfire.c b/arch/sparc/kernel/starfire.c
index 060d0f3a6151..a4446c0fb7a1 100644
--- a/arch/sparc/kernel/starfire.c
+++ b/arch/sparc/kernel/starfire.c
@@ -23,7 +23,7 @@ int this_is_starfire = 0;
23 23
24void check_if_starfire(void) 24void check_if_starfire(void)
25{ 25{
26 int ssnode = prom_finddevice("/ssp-serial"); 26 phandle ssnode = prom_finddevice("/ssp-serial");
27 if (ssnode != 0 && ssnode != -1) 27 if (ssnode != 0 && ssnode != -1)
28 this_is_starfire = 1; 28 this_is_starfire = 1;
29} 29}
diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S
index 46a76ba3fb4b..44e5faf1ad5f 100644
--- a/arch/sparc/kernel/sys32.S
+++ b/arch/sparc/kernel/sys32.S
@@ -330,6 +330,15 @@ do_sys_accept4: /* sys_accept4(int, struct sockaddr *, int *, int) */
330 nop 330 nop
331 nop 331 nop
332 332
333 .globl sys32_fanotify_mark
334sys32_fanotify_mark:
335 sethi %hi(sys_fanotify_mark), %g1
336 sllx %o2, 32, %o2
337 or %o2, %o3, %o2
338 mov %o4, %o3
339 jmpl %g1 + %lo(sys_fanotify_mark), %g0
340 mov %o5, %o4
341
333 .section __ex_table,"a" 342 .section __ex_table,"a"
334 .align 4 343 .align 4
335 .word 1b, __retl_efault, 2b, __retl_efault 344 .word 1b, __retl_efault, 2b, __retl_efault
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c
index c0ca87553e1c..6db18c6927fb 100644
--- a/arch/sparc/kernel/sys_sparc32.c
+++ b/arch/sparc/kernel/sys_sparc32.c
@@ -17,7 +17,6 @@
17#include <linux/resource.h> 17#include <linux/resource.h>
18#include <linux/times.h> 18#include <linux/times.h>
19#include <linux/smp.h> 19#include <linux/smp.h>
20#include <linux/smp_lock.h>
21#include <linux/sem.h> 20#include <linux/sem.h>
22#include <linux/msg.h> 21#include <linux/msg.h>
23#include <linux/shm.h> 22#include <linux/shm.h>
@@ -162,7 +161,7 @@ static int cp_compat_stat64(struct kstat *stat,
162 return err; 161 return err;
163} 162}
164 163
165asmlinkage long compat_sys_stat64(char __user * filename, 164asmlinkage long compat_sys_stat64(const char __user * filename,
166 struct compat_stat64 __user *statbuf) 165 struct compat_stat64 __user *statbuf)
167{ 166{
168 struct kstat stat; 167 struct kstat stat;
@@ -173,7 +172,7 @@ asmlinkage long compat_sys_stat64(char __user * filename,
173 return error; 172 return error;
174} 173}
175 174
176asmlinkage long compat_sys_lstat64(char __user * filename, 175asmlinkage long compat_sys_lstat64(const char __user * filename,
177 struct compat_stat64 __user *statbuf) 176 struct compat_stat64 __user *statbuf)
178{ 177{
179 struct kstat stat; 178 struct kstat stat;
@@ -195,7 +194,8 @@ asmlinkage long compat_sys_fstat64(unsigned int fd,
195 return error; 194 return error;
196} 195}
197 196
198asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, 197asmlinkage long compat_sys_fstatat64(unsigned int dfd,
198 const char __user *filename,
199 struct compat_stat64 __user * statbuf, int flag) 199 struct compat_stat64 __user * statbuf, int flag)
200{ 200{
201 struct kstat stat; 201 struct kstat stat;
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c
index ee995b7dae7e..42b282fa6112 100644
--- a/arch/sparc/kernel/sys_sparc_32.c
+++ b/arch/sparc/kernel/sys_sparc_32.c
@@ -19,7 +19,6 @@
19#include <linux/mman.h> 19#include <linux/mman.h>
20#include <linux/utsname.h> 20#include <linux/utsname.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/smp_lock.h>
23#include <linux/ipc.h> 22#include <linux/ipc.h>
24 23
25#include <asm/uaccess.h> 24#include <asm/uaccess.h>
@@ -166,7 +165,6 @@ sparc_breakpoint (struct pt_regs *regs)
166{ 165{
167 siginfo_t info; 166 siginfo_t info;
168 167
169 lock_kernel();
170#ifdef DEBUG_SPARC_BREAKPOINT 168#ifdef DEBUG_SPARC_BREAKPOINT
171 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc); 169 printk ("TRAP: Entering kernel PC=%x, nPC=%x\n", regs->pc, regs->npc);
172#endif 170#endif
@@ -180,7 +178,6 @@ sparc_breakpoint (struct pt_regs *regs)
180#ifdef DEBUG_SPARC_BREAKPOINT 178#ifdef DEBUG_SPARC_BREAKPOINT
181 printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc); 179 printk ("TRAP: Returning to space: PC=%x nPC=%x\n", regs->pc, regs->npc);
182#endif 180#endif
183 unlock_kernel();
184} 181}
185 182
186asmlinkage int 183asmlinkage int
@@ -282,7 +279,9 @@ out:
282 * Do a system call from kernel instead of calling sys_execve so we 279 * Do a system call from kernel instead of calling sys_execve so we
283 * end up with proper pt_regs. 280 * end up with proper pt_regs.
284 */ 281 */
285int kernel_execve(const char *filename, char *const argv[], char *const envp[]) 282int kernel_execve(const char *filename,
283 const char *const argv[],
284 const char *const envp[])
286{ 285{
287 long __res; 286 long __res;
288 register long __g1 __asm__ ("g1") = __NR_execve; 287 register long __g1 __asm__ ("g1") = __NR_execve;
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index 3d435c42e6db..f836f4e93afe 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -758,7 +758,9 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
758 * Do a system call from kernel instead of calling sys_execve so we 758 * Do a system call from kernel instead of calling sys_execve so we
759 * end up with proper pt_regs. 759 * end up with proper pt_regs.
760 */ 760 */
761int kernel_execve(const char *filename, char *const argv[], char *const envp[]) 761int kernel_execve(const char *filename,
762 const char *const argv[],
763 const char *const envp[])
762{ 764{
763 long __res; 765 long __res;
764 register long __g1 __asm__ ("g1") = __NR_execve; 766 register long __g1 __asm__ ("g1") = __NR_execve;
diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S
index 801fc8e5a0e8..ec396e1916b9 100644
--- a/arch/sparc/kernel/systbls_32.S
+++ b/arch/sparc/kernel/systbls_32.S
@@ -82,5 +82,6 @@ sys_call_table:
82/*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate 82/*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
83/*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 83/*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
84/*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv 84/*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
85/*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg 85/*325*/ .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init
86/*330*/ .long sys_fanotify_mark, sys_prlimit64
86 87
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S
index 9db058dd039e..8cfcaa549580 100644
--- a/arch/sparc/kernel/systbls_64.S
+++ b/arch/sparc/kernel/systbls_64.S
@@ -83,7 +83,8 @@ sys_call_table32:
83/*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate 83/*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate
84 .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1 84 .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
85/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv 85/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
86 .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg 86 .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_event_open, compat_sys_recvmmsg, sys_fanotify_init
87/*330*/ .word sys32_fanotify_mark, sys_prlimit64
87 88
88#endif /* CONFIG_COMPAT */ 89#endif /* CONFIG_COMPAT */
89 90
@@ -158,4 +159,5 @@ sys_call_table:
158/*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate 159/*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
159 .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 160 .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
160/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv 161/*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
161 .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg 162 .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_event_open, sys_recvmmsg, sys_fanotify_init
163/*330*/ .word sys_fanotify_mark, sys_prlimit64
diff --git a/arch/sparc/kernel/tadpole.c b/arch/sparc/kernel/tadpole.c
index f476a5f4af6a..9aba8bd5a78b 100644
--- a/arch/sparc/kernel/tadpole.c
+++ b/arch/sparc/kernel/tadpole.c
@@ -100,7 +100,7 @@ static void swift_clockstop(void)
100 100
101void __init clock_stop_probe(void) 101void __init clock_stop_probe(void)
102{ 102{
103 unsigned int node, clk_nd; 103 phandle node, clk_nd;
104 char name[20]; 104 char name[20];
105 105
106 prom_getstring(prom_root_node, "name", name, sizeof(name)); 106 prom_getstring(prom_root_node, "name", name, sizeof(name));
diff --git a/arch/sparc/kernel/unaligned_32.c b/arch/sparc/kernel/unaligned_32.c
index f8514e291e15..4491f4cb2695 100644
--- a/arch/sparc/kernel/unaligned_32.c
+++ b/arch/sparc/kernel/unaligned_32.c
@@ -16,7 +16,6 @@
16#include <asm/system.h> 16#include <asm/system.h>
17#include <asm/uaccess.h> 17#include <asm/uaccess.h>
18#include <linux/smp.h> 18#include <linux/smp.h>
19#include <linux/smp_lock.h>
20#include <linux/perf_event.h> 19#include <linux/perf_event.h>
21 20
22enum direction { 21enum direction {
@@ -323,7 +322,6 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
323{ 322{
324 enum direction dir; 323 enum direction dir;
325 324
326 lock_kernel();
327 if(!(current->thread.flags & SPARC_FLAG_UNALIGNED) || 325 if(!(current->thread.flags & SPARC_FLAG_UNALIGNED) ||
328 (((insn >> 30) & 3) != 3)) 326 (((insn >> 30) & 3) != 3))
329 goto kill_user; 327 goto kill_user;
@@ -377,5 +375,5 @@ asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn)
377kill_user: 375kill_user:
378 user_mna_trap_fault(regs, insn); 376 user_mna_trap_fault(regs, insn);
379out: 377out:
380 unlock_kernel(); 378 ;
381} 379}
diff --git a/arch/sparc/kernel/windows.c b/arch/sparc/kernel/windows.c
index f24d298bda29..3107381e576d 100644
--- a/arch/sparc/kernel/windows.c
+++ b/arch/sparc/kernel/windows.c
@@ -9,7 +9,6 @@
9#include <linux/string.h> 9#include <linux/string.h>
10#include <linux/mm.h> 10#include <linux/mm.h>
11#include <linux/smp.h> 11#include <linux/smp.h>
12#include <linux/smp_lock.h>
13 12
14#include <asm/uaccess.h> 13#include <asm/uaccess.h>
15 14
@@ -112,7 +111,6 @@ void try_to_clear_window_buffer(struct pt_regs *regs, int who)
112 struct thread_info *tp = current_thread_info(); 111 struct thread_info *tp = current_thread_info();
113 int window; 112 int window;
114 113
115 lock_kernel();
116 flush_user_windows(); 114 flush_user_windows();
117 for(window = 0; window < tp->w_saved; window++) { 115 for(window = 0; window < tp->w_saved; window++) {
118 unsigned long sp = tp->rwbuf_stkptrs[window]; 116 unsigned long sp = tp->rwbuf_stkptrs[window];
@@ -123,5 +121,4 @@ void try_to_clear_window_buffer(struct pt_regs *regs, int who)
123 do_exit(SIGILL); 121 do_exit(SIGILL);
124 } 122 }
125 tp->w_saved = 0; 123 tp->w_saved = 0;
126 unlock_kernel();
127} 124}
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
index c4b5e03af115..846d1c4374ea 100644
--- a/arch/sparc/lib/Makefile
+++ b/arch/sparc/lib/Makefile
@@ -15,7 +15,7 @@ lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o
15lib-$(CONFIG_SPARC32) += copy_user.o locks.o 15lib-$(CONFIG_SPARC32) += copy_user.o locks.o
16lib-y += atomic_$(BITS).o 16lib-y += atomic_$(BITS).o
17lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o 17lib-$(CONFIG_SPARC32) += lshrdi3.o ashldi3.o
18lib-y += rwsem_$(BITS).o 18lib-$(CONFIG_SPARC32) += rwsem_32.o
19lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o 19lib-$(CONFIG_SPARC32) += muldi3.o bitext.o cmpdi2.o
20 20
21lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o 21lib-$(CONFIG_SPARC64) += copy_page.o clear_page.o bzero.o
diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S
index 0268210ca168..59186e0fcf39 100644
--- a/arch/sparc/lib/atomic_64.S
+++ b/arch/sparc/lib/atomic_64.S
@@ -21,7 +21,7 @@ atomic_add: /* %o0 = increment, %o1 = atomic_ptr */
21 add %g1, %o0, %g7 21 add %g1, %o0, %g7
22 cas [%o1], %g1, %g7 22 cas [%o1], %g1, %g7
23 cmp %g1, %g7 23 cmp %g1, %g7
24 bne,pn %icc, 2f 24 bne,pn %icc, BACKOFF_LABEL(2f, 1b)
25 nop 25 nop
26 retl 26 retl
27 nop 27 nop
@@ -36,7 +36,7 @@ atomic_sub: /* %o0 = decrement, %o1 = atomic_ptr */
36 sub %g1, %o0, %g7 36 sub %g1, %o0, %g7
37 cas [%o1], %g1, %g7 37 cas [%o1], %g1, %g7
38 cmp %g1, %g7 38 cmp %g1, %g7
39 bne,pn %icc, 2f 39 bne,pn %icc, BACKOFF_LABEL(2f, 1b)
40 nop 40 nop
41 retl 41 retl
42 nop 42 nop
@@ -51,11 +51,10 @@ atomic_add_ret: /* %o0 = increment, %o1 = atomic_ptr */
51 add %g1, %o0, %g7 51 add %g1, %o0, %g7
52 cas [%o1], %g1, %g7 52 cas [%o1], %g1, %g7
53 cmp %g1, %g7 53 cmp %g1, %g7
54 bne,pn %icc, 2f 54 bne,pn %icc, BACKOFF_LABEL(2f, 1b)
55 add %g7, %o0, %g7 55 add %g1, %o0, %g1
56 sra %g7, 0, %o0
57 retl 56 retl
58 nop 57 sra %g1, 0, %o0
592: BACKOFF_SPIN(%o2, %o3, 1b) 582: BACKOFF_SPIN(%o2, %o3, 1b)
60 .size atomic_add_ret, .-atomic_add_ret 59 .size atomic_add_ret, .-atomic_add_ret
61 60
@@ -67,11 +66,10 @@ atomic_sub_ret: /* %o0 = decrement, %o1 = atomic_ptr */
67 sub %g1, %o0, %g7 66 sub %g1, %o0, %g7
68 cas [%o1], %g1, %g7 67 cas [%o1], %g1, %g7
69 cmp %g1, %g7 68 cmp %g1, %g7
70 bne,pn %icc, 2f 69 bne,pn %icc, BACKOFF_LABEL(2f, 1b)
71 sub %g7, %o0, %g7 70 sub %g1, %o0, %g1
72 sra %g7, 0, %o0
73 retl 71 retl
74 nop 72 sra %g1, 0, %o0
752: BACKOFF_SPIN(%o2, %o3, 1b) 732: BACKOFF_SPIN(%o2, %o3, 1b)
76 .size atomic_sub_ret, .-atomic_sub_ret 74 .size atomic_sub_ret, .-atomic_sub_ret
77 75
@@ -83,7 +81,7 @@ atomic64_add: /* %o0 = increment, %o1 = atomic_ptr */
83 add %g1, %o0, %g7 81 add %g1, %o0, %g7
84 casx [%o1], %g1, %g7 82 casx [%o1], %g1, %g7
85 cmp %g1, %g7 83 cmp %g1, %g7
86 bne,pn %xcc, 2f 84 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
87 nop 85 nop
88 retl 86 retl
89 nop 87 nop
@@ -98,7 +96,7 @@ atomic64_sub: /* %o0 = decrement, %o1 = atomic_ptr */
98 sub %g1, %o0, %g7 96 sub %g1, %o0, %g7
99 casx [%o1], %g1, %g7 97 casx [%o1], %g1, %g7
100 cmp %g1, %g7 98 cmp %g1, %g7
101 bne,pn %xcc, 2f 99 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
102 nop 100 nop
103 retl 101 retl
104 nop 102 nop
@@ -113,11 +111,10 @@ atomic64_add_ret: /* %o0 = increment, %o1 = atomic_ptr */
113 add %g1, %o0, %g7 111 add %g1, %o0, %g7
114 casx [%o1], %g1, %g7 112 casx [%o1], %g1, %g7
115 cmp %g1, %g7 113 cmp %g1, %g7
116 bne,pn %xcc, 2f 114 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
117 add %g7, %o0, %g7
118 mov %g7, %o0
119 retl
120 nop 115 nop
116 retl
117 add %g1, %o0, %o0
1212: BACKOFF_SPIN(%o2, %o3, 1b) 1182: BACKOFF_SPIN(%o2, %o3, 1b)
122 .size atomic64_add_ret, .-atomic64_add_ret 119 .size atomic64_add_ret, .-atomic64_add_ret
123 120
@@ -129,10 +126,9 @@ atomic64_sub_ret: /* %o0 = decrement, %o1 = atomic_ptr */
129 sub %g1, %o0, %g7 126 sub %g1, %o0, %g7
130 casx [%o1], %g1, %g7 127 casx [%o1], %g1, %g7
131 cmp %g1, %g7 128 cmp %g1, %g7
132 bne,pn %xcc, 2f 129 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
133 sub %g7, %o0, %g7
134 mov %g7, %o0
135 retl
136 nop 130 nop
131 retl
132 sub %g1, %o0, %o0
1372: BACKOFF_SPIN(%o2, %o3, 1b) 1332: BACKOFF_SPIN(%o2, %o3, 1b)
138 .size atomic64_sub_ret, .-atomic64_sub_ret 134 .size atomic64_sub_ret, .-atomic64_sub_ret
diff --git a/arch/sparc/lib/bitops.S b/arch/sparc/lib/bitops.S
index 2b7228cb8c22..3dc61d5537c0 100644
--- a/arch/sparc/lib/bitops.S
+++ b/arch/sparc/lib/bitops.S
@@ -22,7 +22,7 @@ test_and_set_bit: /* %o0=nr, %o1=addr */
22 or %g7, %o2, %g1 22 or %g7, %o2, %g1
23 casx [%o1], %g7, %g1 23 casx [%o1], %g7, %g1
24 cmp %g7, %g1 24 cmp %g7, %g1
25 bne,pn %xcc, 2f 25 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
26 and %g7, %o2, %g2 26 and %g7, %o2, %g2
27 clr %o0 27 clr %o0
28 movrne %g2, 1, %o0 28 movrne %g2, 1, %o0
@@ -45,7 +45,7 @@ test_and_clear_bit: /* %o0=nr, %o1=addr */
45 andn %g7, %o2, %g1 45 andn %g7, %o2, %g1
46 casx [%o1], %g7, %g1 46 casx [%o1], %g7, %g1
47 cmp %g7, %g1 47 cmp %g7, %g1
48 bne,pn %xcc, 2f 48 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
49 and %g7, %o2, %g2 49 and %g7, %o2, %g2
50 clr %o0 50 clr %o0
51 movrne %g2, 1, %o0 51 movrne %g2, 1, %o0
@@ -68,7 +68,7 @@ test_and_change_bit: /* %o0=nr, %o1=addr */
68 xor %g7, %o2, %g1 68 xor %g7, %o2, %g1
69 casx [%o1], %g7, %g1 69 casx [%o1], %g7, %g1
70 cmp %g7, %g1 70 cmp %g7, %g1
71 bne,pn %xcc, 2f 71 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
72 and %g7, %o2, %g2 72 and %g7, %o2, %g2
73 clr %o0 73 clr %o0
74 movrne %g2, 1, %o0 74 movrne %g2, 1, %o0
@@ -91,7 +91,7 @@ set_bit: /* %o0=nr, %o1=addr */
91 or %g7, %o2, %g1 91 or %g7, %o2, %g1
92 casx [%o1], %g7, %g1 92 casx [%o1], %g7, %g1
93 cmp %g7, %g1 93 cmp %g7, %g1
94 bne,pn %xcc, 2f 94 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
95 nop 95 nop
96 retl 96 retl
97 nop 97 nop
@@ -112,7 +112,7 @@ clear_bit: /* %o0=nr, %o1=addr */
112 andn %g7, %o2, %g1 112 andn %g7, %o2, %g1
113 casx [%o1], %g7, %g1 113 casx [%o1], %g7, %g1
114 cmp %g7, %g1 114 cmp %g7, %g1
115 bne,pn %xcc, 2f 115 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
116 nop 116 nop
117 retl 117 retl
118 nop 118 nop
@@ -133,7 +133,7 @@ change_bit: /* %o0=nr, %o1=addr */
133 xor %g7, %o2, %g1 133 xor %g7, %o2, %g1
134 casx [%o1], %g7, %g1 134 casx [%o1], %g7, %g1
135 cmp %g7, %g1 135 cmp %g7, %g1
136 bne,pn %xcc, 2f 136 bne,pn %xcc, BACKOFF_LABEL(2f, 1b)
137 nop 137 nop
138 retl 138 retl
139 nop 139 nop
diff --git a/arch/sparc/lib/rwsem_64.S b/arch/sparc/lib/rwsem_64.S
deleted file mode 100644
index 91a7d29a79d5..000000000000
--- a/arch/sparc/lib/rwsem_64.S
+++ /dev/null
@@ -1,163 +0,0 @@
1/* rwsem.S: RW semaphore assembler.
2 *
3 * Written by David S. Miller (davem@redhat.com), 2001.
4 * Derived from asm-i386/rwsem.h
5 */
6
7#include <asm/rwsem-const.h>
8
9 .section .sched.text, "ax"
10
11 .globl __down_read
12__down_read:
131: lduw [%o0], %g1
14 add %g1, 1, %g7
15 cas [%o0], %g1, %g7
16 cmp %g1, %g7
17 bne,pn %icc, 1b
18 add %g7, 1, %g7
19 cmp %g7, 0
20 bl,pn %icc, 3f
21 nop
222:
23 retl
24 nop
253:
26 save %sp, -192, %sp
27 call rwsem_down_read_failed
28 mov %i0, %o0
29 ret
30 restore
31 .size __down_read, .-__down_read
32
33 .globl __down_read_trylock
34__down_read_trylock:
351: lduw [%o0], %g1
36 add %g1, 1, %g7
37 cmp %g7, 0
38 bl,pn %icc, 2f
39 mov 0, %o1
40 cas [%o0], %g1, %g7
41 cmp %g1, %g7
42 bne,pn %icc, 1b
43 mov 1, %o1
442: retl
45 mov %o1, %o0
46 .size __down_read_trylock, .-__down_read_trylock
47
48 .globl __down_write
49__down_write:
50 sethi %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
51 or %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
521:
53 lduw [%o0], %g3
54 add %g3, %g1, %g7
55 cas [%o0], %g3, %g7
56 cmp %g3, %g7
57 bne,pn %icc, 1b
58 cmp %g7, 0
59 bne,pn %icc, 3f
60 nop
612: retl
62 nop
633:
64 save %sp, -192, %sp
65 call rwsem_down_write_failed
66 mov %i0, %o0
67 ret
68 restore
69 .size __down_write, .-__down_write
70
71 .globl __down_write_trylock
72__down_write_trylock:
73 sethi %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
74 or %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
751:
76 lduw [%o0], %g3
77 cmp %g3, 0
78 bne,pn %icc, 2f
79 mov 0, %o1
80 add %g3, %g1, %g7
81 cas [%o0], %g3, %g7
82 cmp %g3, %g7
83 bne,pn %icc, 1b
84 mov 1, %o1
852: retl
86 mov %o1, %o0
87 .size __down_write_trylock, .-__down_write_trylock
88
89 .globl __up_read
90__up_read:
911:
92 lduw [%o0], %g1
93 sub %g1, 1, %g7
94 cas [%o0], %g1, %g7
95 cmp %g1, %g7
96 bne,pn %icc, 1b
97 cmp %g7, 0
98 bl,pn %icc, 3f
99 nop
1002: retl
101 nop
1023: sethi %hi(RWSEM_ACTIVE_MASK), %g1
103 sub %g7, 1, %g7
104 or %g1, %lo(RWSEM_ACTIVE_MASK), %g1
105 andcc %g7, %g1, %g0
106 bne,pn %icc, 2b
107 nop
108 save %sp, -192, %sp
109 call rwsem_wake
110 mov %i0, %o0
111 ret
112 restore
113 .size __up_read, .-__up_read
114
115 .globl __up_write
116__up_write:
117 sethi %hi(RWSEM_ACTIVE_WRITE_BIAS), %g1
118 or %g1, %lo(RWSEM_ACTIVE_WRITE_BIAS), %g1
1191:
120 lduw [%o0], %g3
121 sub %g3, %g1, %g7
122 cas [%o0], %g3, %g7
123 cmp %g3, %g7
124 bne,pn %icc, 1b
125 sub %g7, %g1, %g7
126 cmp %g7, 0
127 bl,pn %icc, 3f
128 nop
1292:
130 retl
131 nop
1323:
133 save %sp, -192, %sp
134 call rwsem_wake
135 mov %i0, %o0
136 ret
137 restore
138 .size __up_write, .-__up_write
139
140 .globl __downgrade_write
141__downgrade_write:
142 sethi %hi(RWSEM_WAITING_BIAS), %g1
143 or %g1, %lo(RWSEM_WAITING_BIAS), %g1
1441:
145 lduw [%o0], %g3
146 sub %g3, %g1, %g7
147 cas [%o0], %g3, %g7
148 cmp %g3, %g7
149 bne,pn %icc, 1b
150 sub %g7, %g1, %g7
151 cmp %g7, 0
152 bl,pn %icc, 3f
153 nop
1542:
155 retl
156 nop
1573:
158 save %sp, -192, %sp
159 call rwsem_downgrade_wake
160 mov %i0, %o0
161 ret
162 restore
163 .size __downgrade_write, .-__downgrade_write
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
index bd8601601afa..5b836f5aea90 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -539,6 +539,12 @@ do_sigbus:
539 __do_fault_siginfo(BUS_ADRERR, SIGBUS, tsk->thread.kregs, address); 539 __do_fault_siginfo(BUS_ADRERR, SIGBUS, tsk->thread.kregs, address);
540} 540}
541 541
542static void check_stack_aligned(unsigned long sp)
543{
544 if (sp & 0x7UL)
545 force_sig(SIGILL, current);
546}
547
542void window_overflow_fault(void) 548void window_overflow_fault(void)
543{ 549{
544 unsigned long sp; 550 unsigned long sp;
@@ -547,6 +553,8 @@ void window_overflow_fault(void)
547 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK)) 553 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK))
548 force_user_fault(sp + 0x38, 1); 554 force_user_fault(sp + 0x38, 1);
549 force_user_fault(sp, 1); 555 force_user_fault(sp, 1);
556
557 check_stack_aligned(sp);
550} 558}
551 559
552void window_underflow_fault(unsigned long sp) 560void window_underflow_fault(unsigned long sp)
@@ -554,6 +562,8 @@ void window_underflow_fault(unsigned long sp)
554 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK)) 562 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK))
555 force_user_fault(sp + 0x38, 0); 563 force_user_fault(sp + 0x38, 0);
556 force_user_fault(sp, 0); 564 force_user_fault(sp, 0);
565
566 check_stack_aligned(sp);
557} 567}
558 568
559void window_ret_fault(struct pt_regs *regs) 569void window_ret_fault(struct pt_regs *regs)
@@ -564,4 +574,6 @@ void window_ret_fault(struct pt_regs *regs)
564 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK)) 574 if(((sp + 0x38) & PAGE_MASK) != (sp & PAGE_MASK))
565 force_user_fault(sp + 0x38, 0); 575 force_user_fault(sp + 0x38, 0);
566 force_user_fault(sp, 0); 576 force_user_fault(sp, 0);
577
578 check_stack_aligned(sp);
567} 579}
diff --git a/arch/sparc/mm/highmem.c b/arch/sparc/mm/highmem.c
index e139e9cbf5f7..4730eac0747b 100644
--- a/arch/sparc/mm/highmem.c
+++ b/arch/sparc/mm/highmem.c
@@ -29,17 +29,17 @@
29#include <asm/tlbflush.h> 29#include <asm/tlbflush.h>
30#include <asm/fixmap.h> 30#include <asm/fixmap.h>
31 31
32void *kmap_atomic(struct page *page, enum km_type type) 32void *__kmap_atomic(struct page *page)
33{ 33{
34 unsigned long idx;
35 unsigned long vaddr; 34 unsigned long vaddr;
35 long idx, type;
36 36
37 /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ 37 /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
38 pagefault_disable(); 38 pagefault_disable();
39 if (!PageHighMem(page)) 39 if (!PageHighMem(page))
40 return page_address(page); 40 return page_address(page);
41 41
42 debug_kmap_atomic(type); 42 type = kmap_atomic_idx_push();
43 idx = type + KM_TYPE_NR*smp_processor_id(); 43 idx = type + KM_TYPE_NR*smp_processor_id();
44 vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); 44 vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
45 45
@@ -63,44 +63,52 @@ void *kmap_atomic(struct page *page, enum km_type type)
63 63
64 return (void*) vaddr; 64 return (void*) vaddr;
65} 65}
66EXPORT_SYMBOL(kmap_atomic); 66EXPORT_SYMBOL(__kmap_atomic);
67 67
68void kunmap_atomic_notypecheck(void *kvaddr, enum km_type type) 68void __kunmap_atomic(void *kvaddr)
69{ 69{
70#ifdef CONFIG_DEBUG_HIGHMEM
71 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; 70 unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
72 unsigned long idx = type + KM_TYPE_NR*smp_processor_id(); 71 int type;
73 72
74 if (vaddr < FIXADDR_START) { // FIXME 73 if (vaddr < FIXADDR_START) { // FIXME
75 pagefault_enable(); 74 pagefault_enable();
76 return; 75 return;
77 } 76 }
78 77
79 BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx)); 78 type = kmap_atomic_idx();
80 79
81/* XXX Fix - Anton */ 80#ifdef CONFIG_DEBUG_HIGHMEM
81 {
82 unsigned long idx;
83
84 idx = type + KM_TYPE_NR * smp_processor_id();
85 BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx));
86
87 /* XXX Fix - Anton */
82#if 0 88#if 0
83 __flush_cache_one(vaddr); 89 __flush_cache_one(vaddr);
84#else 90#else
85 flush_cache_all(); 91 flush_cache_all();
86#endif 92#endif
87 93
88 /* 94 /*
89 * force other mappings to Oops if they'll try to access 95 * force other mappings to Oops if they'll try to access
90 * this pte without first remap it 96 * this pte without first remap it
91 */ 97 */
92 pte_clear(&init_mm, vaddr, kmap_pte-idx); 98 pte_clear(&init_mm, vaddr, kmap_pte-idx);
93/* XXX Fix - Anton */ 99 /* XXX Fix - Anton */
94#if 0 100#if 0
95 __flush_tlb_one(vaddr); 101 __flush_tlb_one(vaddr);
96#else 102#else
97 flush_tlb_all(); 103 flush_tlb_all();
98#endif 104#endif
105 }
99#endif 106#endif
100 107
108 kmap_atomic_idx_pop();
101 pagefault_enable(); 109 pagefault_enable();
102} 110}
103EXPORT_SYMBOL(kunmap_atomic_notypecheck); 111EXPORT_SYMBOL(__kunmap_atomic);
104 112
105/* We may be fed a pagetable here by ptep_to_xxx and others. */ 113/* We may be fed a pagetable here by ptep_to_xxx and others. */
106struct page *kmap_atomic_to_page(void *ptr) 114struct page *kmap_atomic_to_page(void *ptr)
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index f0434513df15..2f6ae1d1fb6b 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -88,7 +88,7 @@ static void __init read_obp_memory(const char *property,
88 struct linux_prom64_registers *regs, 88 struct linux_prom64_registers *regs,
89 int *num_ents) 89 int *num_ents)
90{ 90{
91 int node = prom_finddevice("/memory"); 91 phandle node = prom_finddevice("/memory");
92 int prop_size = prom_getproplen(node, property); 92 int prop_size = prom_getproplen(node, property);
93 int ents, ret, i; 93 int ents, ret, i;
94 94
@@ -785,8 +785,7 @@ static int find_node(unsigned long addr)
785 return -1; 785 return -1;
786} 786}
787 787
788static unsigned long long nid_range(unsigned long long start, 788u64 memblock_nid_range(u64 start, u64 end, int *nid)
789 unsigned long long end, int *nid)
790{ 789{
791 *nid = find_node(start); 790 *nid = find_node(start);
792 start += PAGE_SIZE; 791 start += PAGE_SIZE;
@@ -804,8 +803,7 @@ static unsigned long long nid_range(unsigned long long start,
804 return start; 803 return start;
805} 804}
806#else 805#else
807static unsigned long long nid_range(unsigned long long start, 806u64 memblock_nid_range(u64 start, u64 end, int *nid)
808 unsigned long long end, int *nid)
809{ 807{
810 *nid = 0; 808 *nid = 0;
811 return end; 809 return end;
@@ -822,8 +820,7 @@ static void __init allocate_node_data(int nid)
822 struct pglist_data *p; 820 struct pglist_data *p;
823 821
824#ifdef CONFIG_NEED_MULTIPLE_NODES 822#ifdef CONFIG_NEED_MULTIPLE_NODES
825 paddr = memblock_alloc_nid(sizeof(struct pglist_data), 823 paddr = memblock_alloc_try_nid(sizeof(struct pglist_data), SMP_CACHE_BYTES, nid);
826 SMP_CACHE_BYTES, nid, nid_range);
827 if (!paddr) { 824 if (!paddr) {
828 prom_printf("Cannot allocate pglist_data for nid[%d]\n", nid); 825 prom_printf("Cannot allocate pglist_data for nid[%d]\n", nid);
829 prom_halt(); 826 prom_halt();
@@ -843,8 +840,7 @@ static void __init allocate_node_data(int nid)
843 if (p->node_spanned_pages) { 840 if (p->node_spanned_pages) {
844 num_pages = bootmem_bootmap_pages(p->node_spanned_pages); 841 num_pages = bootmem_bootmap_pages(p->node_spanned_pages);
845 842
846 paddr = memblock_alloc_nid(num_pages << PAGE_SHIFT, PAGE_SIZE, nid, 843 paddr = memblock_alloc_try_nid(num_pages << PAGE_SHIFT, PAGE_SIZE, nid);
847 nid_range);
848 if (!paddr) { 844 if (!paddr) {
849 prom_printf("Cannot allocate bootmap for nid[%d]\n", 845 prom_printf("Cannot allocate bootmap for nid[%d]\n",
850 nid); 846 nid);
@@ -972,19 +968,19 @@ int of_node_to_nid(struct device_node *dp)
972 968
973static void __init add_node_ranges(void) 969static void __init add_node_ranges(void)
974{ 970{
975 int i; 971 struct memblock_region *reg;
976 972
977 for (i = 0; i < memblock.memory.cnt; i++) { 973 for_each_memblock(memory, reg) {
978 unsigned long size = memblock_size_bytes(&memblock.memory, i); 974 unsigned long size = reg->size;
979 unsigned long start, end; 975 unsigned long start, end;
980 976
981 start = memblock.memory.region[i].base; 977 start = reg->base;
982 end = start + size; 978 end = start + size;
983 while (start < end) { 979 while (start < end) {
984 unsigned long this_end; 980 unsigned long this_end;
985 int nid; 981 int nid;
986 982
987 this_end = nid_range(start, end, &nid); 983 this_end = memblock_nid_range(start, end, &nid);
988 984
989 numadbg("Adding active range nid[%d] " 985 numadbg("Adding active range nid[%d] "
990 "start[%lx] end[%lx]\n", 986 "start[%lx] end[%lx]\n",
@@ -1281,7 +1277,7 @@ static void __init bootmem_init_nonnuma(void)
1281{ 1277{
1282 unsigned long top_of_ram = memblock_end_of_DRAM(); 1278 unsigned long top_of_ram = memblock_end_of_DRAM();
1283 unsigned long total_ram = memblock_phys_mem_size(); 1279 unsigned long total_ram = memblock_phys_mem_size();
1284 unsigned int i; 1280 struct memblock_region *reg;
1285 1281
1286 numadbg("bootmem_init_nonnuma()\n"); 1282 numadbg("bootmem_init_nonnuma()\n");
1287 1283
@@ -1292,15 +1288,14 @@ static void __init bootmem_init_nonnuma(void)
1292 1288
1293 init_node_masks_nonnuma(); 1289 init_node_masks_nonnuma();
1294 1290
1295 for (i = 0; i < memblock.memory.cnt; i++) { 1291 for_each_memblock(memory, reg) {
1296 unsigned long size = memblock_size_bytes(&memblock.memory, i);
1297 unsigned long start_pfn, end_pfn; 1292 unsigned long start_pfn, end_pfn;
1298 1293
1299 if (!size) 1294 if (!reg->size)
1300 continue; 1295 continue;
1301 1296
1302 start_pfn = memblock.memory.region[i].base >> PAGE_SHIFT; 1297 start_pfn = memblock_region_memory_base_pfn(reg);
1303 end_pfn = start_pfn + memblock_size_pages(&memblock.memory, i); 1298 end_pfn = memblock_region_memory_end_pfn(reg);
1304 add_active_range(0, start_pfn, end_pfn); 1299 add_active_range(0, start_pfn, end_pfn);
1305 } 1300 }
1306 1301
@@ -1318,7 +1313,7 @@ static void __init reserve_range_in_node(int nid, unsigned long start,
1318 unsigned long this_end; 1313 unsigned long this_end;
1319 int n; 1314 int n;
1320 1315
1321 this_end = nid_range(start, end, &n); 1316 this_end = memblock_nid_range(start, end, &n);
1322 if (n == nid) { 1317 if (n == nid) {
1323 numadbg(" MATCH reserving range [%lx:%lx]\n", 1318 numadbg(" MATCH reserving range [%lx:%lx]\n",
1324 start, this_end); 1319 start, this_end);
@@ -1334,17 +1329,12 @@ static void __init reserve_range_in_node(int nid, unsigned long start,
1334 1329
1335static void __init trim_reserved_in_node(int nid) 1330static void __init trim_reserved_in_node(int nid)
1336{ 1331{
1337 int i; 1332 struct memblock_region *reg;
1338 1333
1339 numadbg(" trim_reserved_in_node(%d)\n", nid); 1334 numadbg(" trim_reserved_in_node(%d)\n", nid);
1340 1335
1341 for (i = 0; i < memblock.reserved.cnt; i++) { 1336 for_each_memblock(reserved, reg)
1342 unsigned long start = memblock.reserved.region[i].base; 1337 reserve_range_in_node(nid, reg->base, reg->base + reg->size);
1343 unsigned long size = memblock_size_bytes(&memblock.reserved, i);
1344 unsigned long end = start + size;
1345
1346 reserve_range_in_node(nid, start, end);
1347 }
1348} 1338}
1349 1339
1350static void __init bootmem_init_one_node(int nid) 1340static void __init bootmem_init_one_node(int nid)
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c
index b0b43aa5e45a..92319aa8b662 100644
--- a/arch/sparc/mm/srmmu.c
+++ b/arch/sparc/mm/srmmu.c
@@ -1262,7 +1262,8 @@ extern unsigned long bootmem_init(unsigned long *pages_avail);
1262 1262
1263void __init srmmu_paging_init(void) 1263void __init srmmu_paging_init(void)
1264{ 1264{
1265 int i, cpunode; 1265 int i;
1266 phandle cpunode;
1266 char node_str[128]; 1267 char node_str[128];
1267 pgd_t *pgd; 1268 pgd_t *pgd;
1268 pmd_t *pmd; 1269 pmd_t *pmd;
@@ -1398,7 +1399,8 @@ static void __init srmmu_is_bad(void)
1398 1399
1399static void __init init_vac_layout(void) 1400static void __init init_vac_layout(void)
1400{ 1401{
1401 int nd, cache_lines; 1402 phandle nd;
1403 int cache_lines;
1402 char node_str[128]; 1404 char node_str[128];
1403#ifdef CONFIG_SMP 1405#ifdef CONFIG_SMP
1404 int cpu = 0; 1406 int cpu = 0;
@@ -2082,7 +2084,7 @@ static void __init get_srmmu_type(void)
2082 2084
2083 /* Next check for Fujitsu Swift. */ 2085 /* Next check for Fujitsu Swift. */
2084 if(psr_typ == 0 && psr_vers == 4) { 2086 if(psr_typ == 0 && psr_vers == 4) {
2085 int cpunode; 2087 phandle cpunode;
2086 char node_str[128]; 2088 char node_str[128];
2087 2089
2088 /* Look if it is not a TurboSparc emulating Swift... */ 2090 /* Look if it is not a TurboSparc emulating Swift... */
diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c
index 4289f90f8697..ddd0d86e508e 100644
--- a/arch/sparc/mm/sun4c.c
+++ b/arch/sparc/mm/sun4c.c
@@ -420,7 +420,7 @@ volatile unsigned long __iomem *sun4c_memerr_reg = NULL;
420 420
421void __init sun4c_probe_memerr_reg(void) 421void __init sun4c_probe_memerr_reg(void)
422{ 422{
423 int node; 423 phandle node;
424 struct linux_prom_registers regs[1]; 424 struct linux_prom_registers regs[1];
425 425
426 node = prom_getchild(prom_root_node); 426 node = prom_getchild(prom_root_node);
diff --git a/arch/sparc/prom/Makefile b/arch/sparc/prom/Makefile
index 1b8c073adb44..816c0fa12dc0 100644
--- a/arch/sparc/prom/Makefile
+++ b/arch/sparc/prom/Makefile
@@ -6,7 +6,6 @@ ccflags := -Werror
6 6
7lib-y := bootstr_$(BITS).o 7lib-y := bootstr_$(BITS).o
8lib-$(CONFIG_SPARC32) += devmap.o 8lib-$(CONFIG_SPARC32) += devmap.o
9lib-y += devops_$(BITS).o
10lib-y += init_$(BITS).o 9lib-y += init_$(BITS).o
11lib-$(CONFIG_SPARC32) += memory.o 10lib-$(CONFIG_SPARC32) += memory.o
12lib-y += misc_$(BITS).o 11lib-y += misc_$(BITS).o
diff --git a/arch/sparc/prom/cif.S b/arch/sparc/prom/cif.S
index 5f27ad779c0c..9c86b4b7d429 100644
--- a/arch/sparc/prom/cif.S
+++ b/arch/sparc/prom/cif.S
@@ -9,18 +9,18 @@
9#include <asm/thread_info.h> 9#include <asm/thread_info.h>
10 10
11 .text 11 .text
12 .globl prom_cif_interface 12 .globl prom_cif_direct
13prom_cif_interface: 13prom_cif_direct:
14 sethi %hi(p1275buf), %o0 14 sethi %hi(p1275buf), %o1
15 or %o0, %lo(p1275buf), %o0 15 or %o1, %lo(p1275buf), %o1
16 ldx [%o0 + 0x010], %o1 ! prom_cif_stack 16 ldx [%o1 + 0x0010], %o2 ! prom_cif_stack
17 save %o1, -192, %sp 17 save %o2, -192, %sp
18 ldx [%i0 + 0x008], %l2 ! prom_cif_handler 18 ldx [%i1 + 0x0008], %l2 ! prom_cif_handler
19 mov %g4, %l0 19 mov %g4, %l0
20 mov %g5, %l1 20 mov %g5, %l1
21 mov %g6, %l3 21 mov %g6, %l3
22 call %l2 22 call %l2
23 add %i0, 0x018, %o0 ! prom_args 23 mov %i0, %o0 ! prom_args
24 mov %l0, %g4 24 mov %l0, %g4
25 mov %l1, %g5 25 mov %l1, %g5
26 mov %l3, %g6 26 mov %l3, %g6
diff --git a/arch/sparc/prom/console_32.c b/arch/sparc/prom/console_32.c
index 5340264b78f5..48863108a44c 100644
--- a/arch/sparc/prom/console_32.c
+++ b/arch/sparc/prom/console_32.c
@@ -16,63 +16,26 @@
16 16
17extern void restore_current(void); 17extern void restore_current(void);
18 18
19/* Non blocking get character from console input device, returns -1
20 * if no input was taken. This can be used for polling.
21 */
22int
23prom_nbgetchar(void)
24{
25 static char inc;
26 int i = -1;
27 unsigned long flags;
28
29 spin_lock_irqsave(&prom_lock, flags);
30 switch(prom_vers) {
31 case PROM_V0:
32 i = (*(romvec->pv_nbgetchar))();
33 break;
34 case PROM_V2:
35 case PROM_V3:
36 if( (*(romvec->pv_v2devops).v2_dev_read)(*romvec->pv_v2bootargs.fd_stdin , &inc, 0x1) == 1) {
37 i = inc;
38 } else {
39 i = -1;
40 }
41 break;
42 default:
43 i = -1;
44 break;
45 };
46 restore_current();
47 spin_unlock_irqrestore(&prom_lock, flags);
48 return i; /* Ugh, we could spin forever on unsupported proms ;( */
49}
50
51/* Non blocking put character to console device, returns -1 if 19/* Non blocking put character to console device, returns -1 if
52 * unsuccessful. 20 * unsuccessful.
53 */ 21 */
54int 22static int prom_nbputchar(const char *buf)
55prom_nbputchar(char c)
56{ 23{
57 static char outc;
58 unsigned long flags; 24 unsigned long flags;
59 int i = -1; 25 int i = -1;
60 26
61 spin_lock_irqsave(&prom_lock, flags); 27 spin_lock_irqsave(&prom_lock, flags);
62 switch(prom_vers) { 28 switch(prom_vers) {
63 case PROM_V0: 29 case PROM_V0:
64 i = (*(romvec->pv_nbputchar))(c); 30 i = (*(romvec->pv_nbputchar))(*buf);
65 break; 31 break;
66 case PROM_V2: 32 case PROM_V2:
67 case PROM_V3: 33 case PROM_V3:
68 outc = c; 34 if ((*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout,
69 if( (*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout, &outc, 0x1) == 1) 35 buf, 0x1) == 1)
70 i = 0; 36 i = 0;
71 else
72 i = -1;
73 break; 37 break;
74 default: 38 default:
75 i = -1;
76 break; 39 break;
77 }; 40 };
78 restore_current(); 41 restore_current();
@@ -80,18 +43,14 @@ prom_nbputchar(char c)
80 return i; /* Ugh, we could spin forever on unsupported proms ;( */ 43 return i; /* Ugh, we could spin forever on unsupported proms ;( */
81} 44}
82 45
83/* Blocking version of get character routine above. */ 46void prom_console_write_buf(const char *buf, int len)
84char
85prom_getchar(void)
86{ 47{
87 int character; 48 while (len) {
88 while((character = prom_nbgetchar()) == -1) ; 49 int n = prom_nbputchar(buf);
89 return (char) character; 50 if (n)
51 continue;
52 len--;
53 buf++;
54 }
90} 55}
91 56
92/* Blocking version of put character routine above. */
93void
94prom_putchar(char c)
95{
96 while(prom_nbputchar(c) == -1) ;
97}
diff --git a/arch/sparc/prom/console_64.c b/arch/sparc/prom/console_64.c
index f55d58a8a156..ed39e75828bd 100644
--- a/arch/sparc/prom/console_64.c
+++ b/arch/sparc/prom/console_64.c
@@ -15,59 +15,34 @@
15 15
16extern int prom_stdin, prom_stdout; 16extern int prom_stdin, prom_stdout;
17 17
18/* Non blocking get character from console input device, returns -1 18static int __prom_console_write_buf(const char *buf, int len)
19 * if no input was taken. This can be used for polling.
20 */
21inline int
22prom_nbgetchar(void)
23{ 19{
24 char inc; 20 unsigned long args[7];
25 21 int ret;
26 if (p1275_cmd("read", P1275_ARG(1,P1275_ARG_OUT_BUF)|
27 P1275_INOUT(3,1),
28 prom_stdin, &inc, P1275_SIZE(1)) == 1)
29 return inc;
30 else
31 return -1;
32}
33 22
34/* Non blocking put character to console device, returns -1 if 23 args[0] = (unsigned long) "write";
35 * unsuccessful. 24 args[1] = 3;
36 */ 25 args[2] = 1;
37inline int 26 args[3] = (unsigned int) prom_stdout;
38prom_nbputchar(char c) 27 args[4] = (unsigned long) buf;
39{ 28 args[5] = (unsigned int) len;
40 char outc; 29 args[6] = (unsigned long) -1;
41
42 outc = c;
43 if (p1275_cmd("write", P1275_ARG(1,P1275_ARG_IN_BUF)|
44 P1275_INOUT(3,1),
45 prom_stdout, &outc, P1275_SIZE(1)) == 1)
46 return 0;
47 else
48 return -1;
49}
50 30
51/* Blocking version of get character routine above. */ 31 p1275_cmd_direct(args);
52char
53prom_getchar(void)
54{
55 int character;
56 while((character = prom_nbgetchar()) == -1) ;
57 return (char) character;
58}
59 32
60/* Blocking version of put character routine above. */ 33 ret = (int) args[6];
61void 34 if (ret < 0)
62prom_putchar(char c) 35 return -1;
63{ 36 return ret;
64 prom_nbputchar(c);
65} 37}
66 38
67void 39void prom_console_write_buf(const char *buf, int len)
68prom_puts(const char *s, int len)
69{ 40{
70 p1275_cmd("write", P1275_ARG(1,P1275_ARG_IN_BUF)| 41 while (len) {
71 P1275_INOUT(3,1), 42 int n = __prom_console_write_buf(buf, len);
72 prom_stdout, s, P1275_SIZE(len)); 43 if (n < 0)
44 continue;
45 len -= n;
46 buf += len;
47 }
73} 48}
diff --git a/arch/sparc/prom/devops_32.c b/arch/sparc/prom/devops_32.c
deleted file mode 100644
index 9c5d4687242a..000000000000
--- a/arch/sparc/prom/devops_32.c
+++ /dev/null
@@ -1,87 +0,0 @@
1/*
2 * devops.c: Device operations using the PROM.
3 *
4 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
5 */
6#include <linux/types.h>
7#include <linux/kernel.h>
8#include <linux/sched.h>
9
10#include <asm/openprom.h>
11#include <asm/oplib.h>
12
13extern void restore_current(void);
14
15/* Open the device described by the string 'dstr'. Returns the handle
16 * to that device used for subsequent operations on that device.
17 * Returns -1 on failure.
18 */
19int
20prom_devopen(char *dstr)
21{
22 int handle;
23 unsigned long flags;
24 spin_lock_irqsave(&prom_lock, flags);
25 switch(prom_vers) {
26 case PROM_V0:
27 handle = (*(romvec->pv_v0devops.v0_devopen))(dstr);
28 if(handle == 0) handle = -1;
29 break;
30 case PROM_V2:
31 case PROM_V3:
32 handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr);
33 break;
34 default:
35 handle = -1;
36 break;
37 };
38 restore_current();
39 spin_unlock_irqrestore(&prom_lock, flags);
40
41 return handle;
42}
43
44/* Close the device described by device handle 'dhandle'. */
45int
46prom_devclose(int dhandle)
47{
48 unsigned long flags;
49 spin_lock_irqsave(&prom_lock, flags);
50 switch(prom_vers) {
51 case PROM_V0:
52 (*(romvec->pv_v0devops.v0_devclose))(dhandle);
53 break;
54 case PROM_V2:
55 case PROM_V3:
56 (*(romvec->pv_v2devops.v2_dev_close))(dhandle);
57 break;
58 default:
59 break;
60 };
61 restore_current();
62 spin_unlock_irqrestore(&prom_lock, flags);
63 return 0;
64}
65
66/* Seek to specified location described by 'seekhi' and 'seeklo'
67 * for device 'dhandle'.
68 */
69void
70prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
71{
72 unsigned long flags;
73 spin_lock_irqsave(&prom_lock, flags);
74 switch(prom_vers) {
75 case PROM_V0:
76 (*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo);
77 break;
78 case PROM_V2:
79 case PROM_V3:
80 (*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo);
81 break;
82 default:
83 break;
84 };
85 restore_current();
86 spin_unlock_irqrestore(&prom_lock, flags);
87}
diff --git a/arch/sparc/prom/devops_64.c b/arch/sparc/prom/devops_64.c
deleted file mode 100644
index 9dbd803e46e1..000000000000
--- a/arch/sparc/prom/devops_64.c
+++ /dev/null
@@ -1,41 +0,0 @@
1/*
2 * devops.c: Device operations using the PROM.
3 *
4 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
5 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
6 */
7#include <linux/types.h>
8#include <linux/kernel.h>
9#include <linux/sched.h>
10
11#include <asm/openprom.h>
12#include <asm/oplib.h>
13
14/* Open the device described by the string 'dstr'. Returns the handle
15 * to that device used for subsequent operations on that device.
16 * Returns 0 on failure.
17 */
18int
19prom_devopen(const char *dstr)
20{
21 return p1275_cmd ("open", P1275_ARG(0,P1275_ARG_IN_STRING)|
22 P1275_INOUT(1,1),
23 dstr);
24}
25
26/* Close the device described by device handle 'dhandle'. */
27int
28prom_devclose(int dhandle)
29{
30 p1275_cmd ("close", P1275_INOUT(1,0), dhandle);
31 return 0;
32}
33
34/* Seek to specified location described by 'seekhi' and 'seeklo'
35 * for device 'dhandle'.
36 */
37void
38prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
39{
40 p1275_cmd ("seek", P1275_INOUT(3,1), dhandle, seekhi, seeklo);
41}
diff --git a/arch/sparc/prom/init_32.c b/arch/sparc/prom/init_32.c
index ccb36c7f9b8c..d342dba4dd54 100644
--- a/arch/sparc/prom/init_32.c
+++ b/arch/sparc/prom/init_32.c
@@ -20,7 +20,7 @@ enum prom_major_version prom_vers;
20unsigned int prom_rev, prom_prev; 20unsigned int prom_rev, prom_prev;
21 21
22/* The root node of the prom device tree. */ 22/* The root node of the prom device tree. */
23int prom_root_node; 23phandle prom_root_node;
24EXPORT_SYMBOL(prom_root_node); 24EXPORT_SYMBOL(prom_root_node);
25 25
26/* Pointer to the device tree operations structure. */ 26/* Pointer to the device tree operations structure. */
diff --git a/arch/sparc/prom/init_64.c b/arch/sparc/prom/init_64.c
index 7b00f89490a4..3ff911e7d25b 100644
--- a/arch/sparc/prom/init_64.c
+++ b/arch/sparc/prom/init_64.c
@@ -19,7 +19,7 @@ char prom_version[80];
19 19
20/* The root node of the prom device tree. */ 20/* The root node of the prom device tree. */
21int prom_stdin, prom_stdout; 21int prom_stdin, prom_stdout;
22int prom_chosen_node; 22phandle prom_chosen_node;
23 23
24/* You must call prom_init() before you attempt to use any of the 24/* You must call prom_init() before you attempt to use any of the
25 * routines in the prom library. It returns 0 on success, 1 on 25 * routines in the prom library. It returns 0 on success, 1 on
@@ -30,7 +30,7 @@ extern void prom_cif_init(void *, void *);
30 30
31void __init prom_init(void *cif_handler, void *cif_stack) 31void __init prom_init(void *cif_handler, void *cif_stack)
32{ 32{
33 int node; 33 phandle node;
34 34
35 prom_cif_init(cif_handler, cif_stack); 35 prom_cif_init(cif_handler, cif_stack);
36 36
diff --git a/arch/sparc/prom/memory.c b/arch/sparc/prom/memory.c
index fac7899a29c3..3f263a64857d 100644
--- a/arch/sparc/prom/memory.c
+++ b/arch/sparc/prom/memory.c
@@ -31,7 +31,8 @@ static int __init prom_meminit_v0(void)
31static int __init prom_meminit_v2(void) 31static int __init prom_meminit_v2(void)
32{ 32{
33 struct linux_prom_registers reg[64]; 33 struct linux_prom_registers reg[64];
34 int node, size, num_ents, i; 34 phandle node;
35 int size, num_ents, i;
35 36
36 node = prom_searchsiblings(prom_getchild(prom_root_node), "memory"); 37 node = prom_searchsiblings(prom_getchild(prom_root_node), "memory");
37 size = prom_getproperty(node, "available", (char *) reg, sizeof(reg)); 38 size = prom_getproperty(node, "available", (char *) reg, sizeof(reg));
diff --git a/arch/sparc/prom/misc_64.c b/arch/sparc/prom/misc_64.c
index 39fc6af21b7c..e4f31d4d3715 100644
--- a/arch/sparc/prom/misc_64.c
+++ b/arch/sparc/prom/misc_64.c
@@ -18,12 +18,19 @@
18#include <asm/system.h> 18#include <asm/system.h>
19#include <asm/ldc.h> 19#include <asm/ldc.h>
20 20
21int prom_service_exists(const char *service_name) 21static int prom_service_exists(const char *service_name)
22{ 22{
23 int err = p1275_cmd("test", P1275_ARG(0, P1275_ARG_IN_STRING) | 23 unsigned long args[5];
24 P1275_INOUT(1, 1), service_name);
25 24
26 if (err) 25 args[0] = (unsigned long) "test";
26 args[1] = 1;
27 args[2] = 1;
28 args[3] = (unsigned long) service_name;
29 args[4] = (unsigned long) -1;
30
31 p1275_cmd_direct(args);
32
33 if (args[4])
27 return 0; 34 return 0;
28 return 1; 35 return 1;
29} 36}
@@ -31,30 +38,47 @@ int prom_service_exists(const char *service_name)
31void prom_sun4v_guest_soft_state(void) 38void prom_sun4v_guest_soft_state(void)
32{ 39{
33 const char *svc = "SUNW,soft-state-supported"; 40 const char *svc = "SUNW,soft-state-supported";
41 unsigned long args[3];
34 42
35 if (!prom_service_exists(svc)) 43 if (!prom_service_exists(svc))
36 return; 44 return;
37 p1275_cmd(svc, P1275_INOUT(0, 0)); 45 args[0] = (unsigned long) svc;
46 args[1] = 0;
47 args[2] = 0;
48 p1275_cmd_direct(args);
38} 49}
39 50
40/* Reset and reboot the machine with the command 'bcommand'. */ 51/* Reset and reboot the machine with the command 'bcommand'. */
41void prom_reboot(const char *bcommand) 52void prom_reboot(const char *bcommand)
42{ 53{
54 unsigned long args[4];
55
43#ifdef CONFIG_SUN_LDOMS 56#ifdef CONFIG_SUN_LDOMS
44 if (ldom_domaining_enabled) 57 if (ldom_domaining_enabled)
45 ldom_reboot(bcommand); 58 ldom_reboot(bcommand);
46#endif 59#endif
47 p1275_cmd("boot", P1275_ARG(0, P1275_ARG_IN_STRING) | 60 args[0] = (unsigned long) "boot";
48 P1275_INOUT(1, 0), bcommand); 61 args[1] = 1;
62 args[2] = 0;
63 args[3] = (unsigned long) bcommand;
64
65 p1275_cmd_direct(args);
49} 66}
50 67
51/* Forth evaluate the expression contained in 'fstring'. */ 68/* Forth evaluate the expression contained in 'fstring'. */
52void prom_feval(const char *fstring) 69void prom_feval(const char *fstring)
53{ 70{
71 unsigned long args[5];
72
54 if (!fstring || fstring[0] == 0) 73 if (!fstring || fstring[0] == 0)
55 return; 74 return;
56 p1275_cmd("interpret", P1275_ARG(0, P1275_ARG_IN_STRING) | 75 args[0] = (unsigned long) "interpret";
57 P1275_INOUT(1, 1), fstring); 76 args[1] = 1;
77 args[2] = 1;
78 args[3] = (unsigned long) fstring;
79 args[4] = (unsigned long) -1;
80
81 p1275_cmd_direct(args);
58} 82}
59EXPORT_SYMBOL(prom_feval); 83EXPORT_SYMBOL(prom_feval);
60 84
@@ -68,6 +92,7 @@ extern void smp_release(void);
68 */ 92 */
69void prom_cmdline(void) 93void prom_cmdline(void)
70{ 94{
95 unsigned long args[3];
71 unsigned long flags; 96 unsigned long flags;
72 97
73 local_irq_save(flags); 98 local_irq_save(flags);
@@ -76,7 +101,11 @@ void prom_cmdline(void)
76 smp_capture(); 101 smp_capture();
77#endif 102#endif
78 103
79 p1275_cmd("enter", P1275_INOUT(0, 0)); 104 args[0] = (unsigned long) "enter";
105 args[1] = 0;
106 args[2] = 0;
107
108 p1275_cmd_direct(args);
80 109
81#ifdef CONFIG_SMP 110#ifdef CONFIG_SMP
82 smp_release(); 111 smp_release();
@@ -90,36 +119,37 @@ void prom_cmdline(void)
90 */ 119 */
91void notrace prom_halt(void) 120void notrace prom_halt(void)
92{ 121{
122 unsigned long args[3];
123
93#ifdef CONFIG_SUN_LDOMS 124#ifdef CONFIG_SUN_LDOMS
94 if (ldom_domaining_enabled) 125 if (ldom_domaining_enabled)
95 ldom_power_off(); 126 ldom_power_off();
96#endif 127#endif
97again: 128again:
98 p1275_cmd("exit", P1275_INOUT(0, 0)); 129 args[0] = (unsigned long) "exit";
130 args[1] = 0;
131 args[2] = 0;
132 p1275_cmd_direct(args);
99 goto again; /* PROM is out to get me -DaveM */ 133 goto again; /* PROM is out to get me -DaveM */
100} 134}
101 135
102void prom_halt_power_off(void) 136void prom_halt_power_off(void)
103{ 137{
138 unsigned long args[3];
139
104#ifdef CONFIG_SUN_LDOMS 140#ifdef CONFIG_SUN_LDOMS
105 if (ldom_domaining_enabled) 141 if (ldom_domaining_enabled)
106 ldom_power_off(); 142 ldom_power_off();
107#endif 143#endif
108 p1275_cmd("SUNW,power-off", P1275_INOUT(0, 0)); 144 args[0] = (unsigned long) "SUNW,power-off";
145 args[1] = 0;
146 args[2] = 0;
147 p1275_cmd_direct(args);
109 148
110 /* if nothing else helps, we just halt */ 149 /* if nothing else helps, we just halt */
111 prom_halt(); 150 prom_halt();
112} 151}
113 152
114/* Set prom sync handler to call function 'funcp'. */
115void prom_setcallback(callback_func_t funcp)
116{
117 if (!funcp)
118 return;
119 p1275_cmd("set-callback", P1275_ARG(0, P1275_ARG_IN_FUNCTION) |
120 P1275_INOUT(1, 1), funcp);
121}
122
123/* Get the idprom and stuff it into buffer 'idbuf'. Returns the 153/* Get the idprom and stuff it into buffer 'idbuf'. Returns the
124 * format type. 'num_bytes' is the number of bytes that your idbuf 154 * format type. 'num_bytes' is the number of bytes that your idbuf
125 * has space for. Returns 0xff on error. 155 * has space for. Returns 0xff on error.
@@ -139,7 +169,8 @@ unsigned char prom_get_idprom(char *idbuf, int num_bytes)
139 169
140int prom_get_mmu_ihandle(void) 170int prom_get_mmu_ihandle(void)
141{ 171{
142 int node, ret; 172 phandle node;
173 int ret;
143 174
144 if (prom_mmu_ihandle_cache != 0) 175 if (prom_mmu_ihandle_cache != 0)
145 return prom_mmu_ihandle_cache; 176 return prom_mmu_ihandle_cache;
@@ -157,7 +188,8 @@ int prom_get_mmu_ihandle(void)
157static int prom_get_memory_ihandle(void) 188static int prom_get_memory_ihandle(void)
158{ 189{
159 static int memory_ihandle_cache; 190 static int memory_ihandle_cache;
160 int node, ret; 191 phandle node;
192 int ret;
161 193
162 if (memory_ihandle_cache != 0) 194 if (memory_ihandle_cache != 0)
163 return memory_ihandle_cache; 195 return memory_ihandle_cache;
@@ -173,57 +205,61 @@ static int prom_get_memory_ihandle(void)
173} 205}
174 206
175/* Load explicit I/D TLB entries. */ 207/* Load explicit I/D TLB entries. */
208static long tlb_load(const char *type, unsigned long index,
209 unsigned long tte_data, unsigned long vaddr)
210{
211 unsigned long args[9];
212
213 args[0] = (unsigned long) prom_callmethod_name;
214 args[1] = 5;
215 args[2] = 1;
216 args[3] = (unsigned long) type;
217 args[4] = (unsigned int) prom_get_mmu_ihandle();
218 args[5] = vaddr;
219 args[6] = tte_data;
220 args[7] = index;
221 args[8] = (unsigned long) -1;
222
223 p1275_cmd_direct(args);
224
225 return (long) args[8];
226}
227
176long prom_itlb_load(unsigned long index, 228long prom_itlb_load(unsigned long index,
177 unsigned long tte_data, 229 unsigned long tte_data,
178 unsigned long vaddr) 230 unsigned long vaddr)
179{ 231{
180 return p1275_cmd(prom_callmethod_name, 232 return tlb_load("SUNW,itlb-load", index, tte_data, vaddr);
181 (P1275_ARG(0, P1275_ARG_IN_STRING) |
182 P1275_ARG(2, P1275_ARG_IN_64B) |
183 P1275_ARG(3, P1275_ARG_IN_64B) |
184 P1275_INOUT(5, 1)),
185 "SUNW,itlb-load",
186 prom_get_mmu_ihandle(),
187 /* And then our actual args are pushed backwards. */
188 vaddr,
189 tte_data,
190 index);
191} 233}
192 234
193long prom_dtlb_load(unsigned long index, 235long prom_dtlb_load(unsigned long index,
194 unsigned long tte_data, 236 unsigned long tte_data,
195 unsigned long vaddr) 237 unsigned long vaddr)
196{ 238{
197 return p1275_cmd(prom_callmethod_name, 239 return tlb_load("SUNW,dtlb-load", index, tte_data, vaddr);
198 (P1275_ARG(0, P1275_ARG_IN_STRING) |
199 P1275_ARG(2, P1275_ARG_IN_64B) |
200 P1275_ARG(3, P1275_ARG_IN_64B) |
201 P1275_INOUT(5, 1)),
202 "SUNW,dtlb-load",
203 prom_get_mmu_ihandle(),
204 /* And then our actual args are pushed backwards. */
205 vaddr,
206 tte_data,
207 index);
208} 240}
209 241
210int prom_map(int mode, unsigned long size, 242int prom_map(int mode, unsigned long size,
211 unsigned long vaddr, unsigned long paddr) 243 unsigned long vaddr, unsigned long paddr)
212{ 244{
213 int ret = p1275_cmd(prom_callmethod_name, 245 unsigned long args[11];
214 (P1275_ARG(0, P1275_ARG_IN_STRING) | 246 int ret;
215 P1275_ARG(3, P1275_ARG_IN_64B) | 247
216 P1275_ARG(4, P1275_ARG_IN_64B) | 248 args[0] = (unsigned long) prom_callmethod_name;
217 P1275_ARG(6, P1275_ARG_IN_64B) | 249 args[1] = 7;
218 P1275_INOUT(7, 1)), 250 args[2] = 1;
219 prom_map_name, 251 args[3] = (unsigned long) prom_map_name;
220 prom_get_mmu_ihandle(), 252 args[4] = (unsigned int) prom_get_mmu_ihandle();
221 mode, 253 args[5] = (unsigned int) mode;
222 size, 254 args[6] = size;
223 vaddr, 255 args[7] = vaddr;
224 0, 256 args[8] = 0;
225 paddr); 257 args[9] = paddr;
226 258 args[10] = (unsigned long) -1;
259
260 p1275_cmd_direct(args);
261
262 ret = (int) args[10];
227 if (ret == 0) 263 if (ret == 0)
228 ret = -1; 264 ret = -1;
229 return ret; 265 return ret;
@@ -231,40 +267,51 @@ int prom_map(int mode, unsigned long size,
231 267
232void prom_unmap(unsigned long size, unsigned long vaddr) 268void prom_unmap(unsigned long size, unsigned long vaddr)
233{ 269{
234 p1275_cmd(prom_callmethod_name, 270 unsigned long args[7];
235 (P1275_ARG(0, P1275_ARG_IN_STRING) | 271
236 P1275_ARG(2, P1275_ARG_IN_64B) | 272 args[0] = (unsigned long) prom_callmethod_name;
237 P1275_ARG(3, P1275_ARG_IN_64B) | 273 args[1] = 4;
238 P1275_INOUT(4, 0)), 274 args[2] = 0;
239 prom_unmap_name, 275 args[3] = (unsigned long) prom_unmap_name;
240 prom_get_mmu_ihandle(), 276 args[4] = (unsigned int) prom_get_mmu_ihandle();
241 size, 277 args[5] = size;
242 vaddr); 278 args[6] = vaddr;
279
280 p1275_cmd_direct(args);
243} 281}
244 282
245/* Set aside physical memory which is not touched or modified 283/* Set aside physical memory which is not touched or modified
246 * across soft resets. 284 * across soft resets.
247 */ 285 */
248unsigned long prom_retain(const char *name, 286int prom_retain(const char *name, unsigned long size,
249 unsigned long pa_low, unsigned long pa_high, 287 unsigned long align, unsigned long *paddr)
250 long size, long align)
251{ 288{
252 /* XXX I don't think we return multiple values correctly. 289 unsigned long args[11];
253 * XXX OBP supposedly returns pa_low/pa_high here, how does 290
254 * XXX it work? 291 args[0] = (unsigned long) prom_callmethod_name;
292 args[1] = 5;
293 args[2] = 3;
294 args[3] = (unsigned long) "SUNW,retain";
295 args[4] = (unsigned int) prom_get_memory_ihandle();
296 args[5] = align;
297 args[6] = size;
298 args[7] = (unsigned long) name;
299 args[8] = (unsigned long) -1;
300 args[9] = (unsigned long) -1;
301 args[10] = (unsigned long) -1;
302
303 p1275_cmd_direct(args);
304
305 if (args[8])
306 return (int) args[8];
307
308 /* Next we get "phys_high" then "phys_low". On 64-bit
309 * the phys_high cell is don't care since the phys_low
310 * cell has the full value.
255 */ 311 */
312 *paddr = args[10];
256 313
257 /* If align is zero, the pa_low/pa_high args are passed, 314 return 0;
258 * else they are not.
259 */
260 if (align == 0)
261 return p1275_cmd("SUNW,retain",
262 (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(5, 2)),
263 name, pa_low, pa_high, size, align);
264 else
265 return p1275_cmd("SUNW,retain",
266 (P1275_ARG(0, P1275_ARG_IN_BUF) | P1275_INOUT(3, 2)),
267 name, size, align);
268} 315}
269 316
270/* Get "Unumber" string for the SIMM at the given 317/* Get "Unumber" string for the SIMM at the given
@@ -277,62 +324,129 @@ int prom_getunumber(int syndrome_code,
277 unsigned long phys_addr, 324 unsigned long phys_addr,
278 char *buf, int buflen) 325 char *buf, int buflen)
279{ 326{
280 return p1275_cmd(prom_callmethod_name, 327 unsigned long args[12];
281 (P1275_ARG(0, P1275_ARG_IN_STRING) | 328
282 P1275_ARG(3, P1275_ARG_OUT_BUF) | 329 args[0] = (unsigned long) prom_callmethod_name;
283 P1275_ARG(6, P1275_ARG_IN_64B) | 330 args[1] = 7;
284 P1275_INOUT(8, 2)), 331 args[2] = 2;
285 "SUNW,get-unumber", prom_get_memory_ihandle(), 332 args[3] = (unsigned long) "SUNW,get-unumber";
286 buflen, buf, P1275_SIZE(buflen), 333 args[4] = (unsigned int) prom_get_memory_ihandle();
287 0, phys_addr, syndrome_code); 334 args[5] = buflen;
335 args[6] = (unsigned long) buf;
336 args[7] = 0;
337 args[8] = phys_addr;
338 args[9] = (unsigned int) syndrome_code;
339 args[10] = (unsigned long) -1;
340 args[11] = (unsigned long) -1;
341
342 p1275_cmd_direct(args);
343
344 return (int) args[10];
288} 345}
289 346
290/* Power management extensions. */ 347/* Power management extensions. */
291void prom_sleepself(void) 348void prom_sleepself(void)
292{ 349{
293 p1275_cmd("SUNW,sleep-self", P1275_INOUT(0, 0)); 350 unsigned long args[3];
351
352 args[0] = (unsigned long) "SUNW,sleep-self";
353 args[1] = 0;
354 args[2] = 0;
355 p1275_cmd_direct(args);
294} 356}
295 357
296int prom_sleepsystem(void) 358int prom_sleepsystem(void)
297{ 359{
298 return p1275_cmd("SUNW,sleep-system", P1275_INOUT(0, 1)); 360 unsigned long args[4];
361
362 args[0] = (unsigned long) "SUNW,sleep-system";
363 args[1] = 0;
364 args[2] = 1;
365 args[3] = (unsigned long) -1;
366 p1275_cmd_direct(args);
367
368 return (int) args[3];
299} 369}
300 370
301int prom_wakeupsystem(void) 371int prom_wakeupsystem(void)
302{ 372{
303 return p1275_cmd("SUNW,wakeup-system", P1275_INOUT(0, 1)); 373 unsigned long args[4];
374
375 args[0] = (unsigned long) "SUNW,wakeup-system";
376 args[1] = 0;
377 args[2] = 1;
378 args[3] = (unsigned long) -1;
379 p1275_cmd_direct(args);
380
381 return (int) args[3];
304} 382}
305 383
306#ifdef CONFIG_SMP 384#ifdef CONFIG_SMP
307void prom_startcpu(int cpunode, unsigned long pc, unsigned long arg) 385void prom_startcpu(int cpunode, unsigned long pc, unsigned long arg)
308{ 386{
309 p1275_cmd("SUNW,start-cpu", P1275_INOUT(3, 0), cpunode, pc, arg); 387 unsigned long args[6];
388
389 args[0] = (unsigned long) "SUNW,start-cpu";
390 args[1] = 3;
391 args[2] = 0;
392 args[3] = (unsigned int) cpunode;
393 args[4] = pc;
394 args[5] = arg;
395 p1275_cmd_direct(args);
310} 396}
311 397
312void prom_startcpu_cpuid(int cpuid, unsigned long pc, unsigned long arg) 398void prom_startcpu_cpuid(int cpuid, unsigned long pc, unsigned long arg)
313{ 399{
314 p1275_cmd("SUNW,start-cpu-by-cpuid", P1275_INOUT(3, 0), 400 unsigned long args[6];
315 cpuid, pc, arg); 401
402 args[0] = (unsigned long) "SUNW,start-cpu-by-cpuid";
403 args[1] = 3;
404 args[2] = 0;
405 args[3] = (unsigned int) cpuid;
406 args[4] = pc;
407 args[5] = arg;
408 p1275_cmd_direct(args);
316} 409}
317 410
318void prom_stopcpu_cpuid(int cpuid) 411void prom_stopcpu_cpuid(int cpuid)
319{ 412{
320 p1275_cmd("SUNW,stop-cpu-by-cpuid", P1275_INOUT(1, 0), 413 unsigned long args[4];
321 cpuid); 414
415 args[0] = (unsigned long) "SUNW,stop-cpu-by-cpuid";
416 args[1] = 1;
417 args[2] = 0;
418 args[3] = (unsigned int) cpuid;
419 p1275_cmd_direct(args);
322} 420}
323 421
324void prom_stopself(void) 422void prom_stopself(void)
325{ 423{
326 p1275_cmd("SUNW,stop-self", P1275_INOUT(0, 0)); 424 unsigned long args[3];
425
426 args[0] = (unsigned long) "SUNW,stop-self";
427 args[1] = 0;
428 args[2] = 0;
429 p1275_cmd_direct(args);
327} 430}
328 431
329void prom_idleself(void) 432void prom_idleself(void)
330{ 433{
331 p1275_cmd("SUNW,idle-self", P1275_INOUT(0, 0)); 434 unsigned long args[3];
435
436 args[0] = (unsigned long) "SUNW,idle-self";
437 args[1] = 0;
438 args[2] = 0;
439 p1275_cmd_direct(args);
332} 440}
333 441
334void prom_resumecpu(int cpunode) 442void prom_resumecpu(int cpunode)
335{ 443{
336 p1275_cmd("SUNW,resume-cpu", P1275_INOUT(1, 0), cpunode); 444 unsigned long args[4];
445
446 args[0] = (unsigned long) "SUNW,resume-cpu";
447 args[1] = 1;
448 args[2] = 0;
449 args[3] = (unsigned int) cpunode;
450 p1275_cmd_direct(args);
337} 451}
338#endif 452#endif
diff --git a/arch/sparc/prom/p1275.c b/arch/sparc/prom/p1275.c
index 2d8b70d397f1..d9850c2b9bf2 100644
--- a/arch/sparc/prom/p1275.c
+++ b/arch/sparc/prom/p1275.c
@@ -22,13 +22,11 @@ struct {
22 long prom_callback; /* 0x00 */ 22 long prom_callback; /* 0x00 */
23 void (*prom_cif_handler)(long *); /* 0x08 */ 23 void (*prom_cif_handler)(long *); /* 0x08 */
24 unsigned long prom_cif_stack; /* 0x10 */ 24 unsigned long prom_cif_stack; /* 0x10 */
25 unsigned long prom_args [23]; /* 0x18 */
26 char prom_buffer [3000];
27} p1275buf; 25} p1275buf;
28 26
29extern void prom_world(int); 27extern void prom_world(int);
30 28
31extern void prom_cif_interface(void); 29extern void prom_cif_direct(unsigned long *args);
32extern void prom_cif_callback(void); 30extern void prom_cif_callback(void);
33 31
34/* 32/*
@@ -36,114 +34,20 @@ extern void prom_cif_callback(void);
36 */ 34 */
37DEFINE_RAW_SPINLOCK(prom_entry_lock); 35DEFINE_RAW_SPINLOCK(prom_entry_lock);
38 36
39long p1275_cmd(const char *service, long fmt, ...) 37void p1275_cmd_direct(unsigned long *args)
40{ 38{
41 char *p, *q;
42 unsigned long flags; 39 unsigned long flags;
43 int nargs, nrets, i;
44 va_list list;
45 long attrs, x;
46
47 p = p1275buf.prom_buffer;
48 40
49 raw_local_save_flags(flags); 41 raw_local_save_flags(flags);
50 raw_local_irq_restore(PIL_NMI); 42 raw_local_irq_restore((unsigned long)PIL_NMI);
51 raw_spin_lock(&prom_entry_lock); 43 raw_spin_lock(&prom_entry_lock);
52 44
53 p1275buf.prom_args[0] = (unsigned long)p; /* service */
54 strcpy (p, service);
55 p = (char *)(((long)(strchr (p, 0) + 8)) & ~7);
56 p1275buf.prom_args[1] = nargs = (fmt & 0x0f); /* nargs */
57 p1275buf.prom_args[2] = nrets = ((fmt & 0xf0) >> 4); /* nrets */
58 attrs = fmt >> 8;
59 va_start(list, fmt);
60 for (i = 0; i < nargs; i++, attrs >>= 3) {
61 switch (attrs & 0x7) {
62 case P1275_ARG_NUMBER:
63 p1275buf.prom_args[i + 3] =
64 (unsigned)va_arg(list, long);
65 break;
66 case P1275_ARG_IN_64B:
67 p1275buf.prom_args[i + 3] =
68 va_arg(list, unsigned long);
69 break;
70 case P1275_ARG_IN_STRING:
71 strcpy (p, va_arg(list, char *));
72 p1275buf.prom_args[i + 3] = (unsigned long)p;
73 p = (char *)(((long)(strchr (p, 0) + 8)) & ~7);
74 break;
75 case P1275_ARG_OUT_BUF:
76 (void) va_arg(list, char *);
77 p1275buf.prom_args[i + 3] = (unsigned long)p;
78 x = va_arg(list, long);
79 i++; attrs >>= 3;
80 p = (char *)(((long)(p + (int)x + 7)) & ~7);
81 p1275buf.prom_args[i + 3] = x;
82 break;
83 case P1275_ARG_IN_BUF:
84 q = va_arg(list, char *);
85 p1275buf.prom_args[i + 3] = (unsigned long)p;
86 x = va_arg(list, long);
87 i++; attrs >>= 3;
88 memcpy (p, q, (int)x);
89 p = (char *)(((long)(p + (int)x + 7)) & ~7);
90 p1275buf.prom_args[i + 3] = x;
91 break;
92 case P1275_ARG_OUT_32B:
93 (void) va_arg(list, char *);
94 p1275buf.prom_args[i + 3] = (unsigned long)p;
95 p += 32;
96 break;
97 case P1275_ARG_IN_FUNCTION:
98 p1275buf.prom_args[i + 3] =
99 (unsigned long)prom_cif_callback;
100 p1275buf.prom_callback = va_arg(list, long);
101 break;
102 }
103 }
104 va_end(list);
105
106 prom_world(1); 45 prom_world(1);
107 prom_cif_interface(); 46 prom_cif_direct(args);
108 prom_world(0); 47 prom_world(0);
109 48
110 attrs = fmt >> 8;
111 va_start(list, fmt);
112 for (i = 0; i < nargs; i++, attrs >>= 3) {
113 switch (attrs & 0x7) {
114 case P1275_ARG_NUMBER:
115 (void) va_arg(list, long);
116 break;
117 case P1275_ARG_IN_STRING:
118 (void) va_arg(list, char *);
119 break;
120 case P1275_ARG_IN_FUNCTION:
121 (void) va_arg(list, long);
122 break;
123 case P1275_ARG_IN_BUF:
124 (void) va_arg(list, char *);
125 (void) va_arg(list, long);
126 i++; attrs >>= 3;
127 break;
128 case P1275_ARG_OUT_BUF:
129 p = va_arg(list, char *);
130 x = va_arg(list, long);
131 memcpy (p, (char *)(p1275buf.prom_args[i + 3]), (int)x);
132 i++; attrs >>= 3;
133 break;
134 case P1275_ARG_OUT_32B:
135 p = va_arg(list, char *);
136 memcpy (p, (char *)(p1275buf.prom_args[i + 3]), 32);
137 break;
138 }
139 }
140 va_end(list);
141 x = p1275buf.prom_args [nargs + 3];
142
143 raw_spin_unlock(&prom_entry_lock); 49 raw_spin_unlock(&prom_entry_lock);
144 raw_local_irq_restore(flags); 50 raw_local_irq_restore(flags);
145
146 return x;
147} 51}
148 52
149void prom_cif_init(void *cif_handler, void *cif_stack) 53void prom_cif_init(void *cif_handler, void *cif_stack)
diff --git a/arch/sparc/prom/printf.c b/arch/sparc/prom/printf.c
index ca869266b9f3..d9682f06b3b0 100644
--- a/arch/sparc/prom/printf.c
+++ b/arch/sparc/prom/printf.c
@@ -15,22 +15,45 @@
15 15
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/compiler.h> 17#include <linux/compiler.h>
18#include <linux/spinlock.h>
18 19
19#include <asm/openprom.h> 20#include <asm/openprom.h>
20#include <asm/oplib.h> 21#include <asm/oplib.h>
21 22
23#define CONSOLE_WRITE_BUF_SIZE 1024
24
22static char ppbuf[1024]; 25static char ppbuf[1024];
26static char console_write_buf[CONSOLE_WRITE_BUF_SIZE];
27static DEFINE_RAW_SPINLOCK(console_write_lock);
23 28
24void notrace prom_write(const char *buf, unsigned int n) 29void notrace prom_write(const char *buf, unsigned int n)
25{ 30{
26 char ch; 31 unsigned int dest_len;
32 unsigned long flags;
33 char *dest;
34
35 dest = console_write_buf;
36 raw_spin_lock_irqsave(&console_write_lock, flags);
27 37
28 while (n != 0) { 38 dest_len = 0;
29 --n; 39 while (n-- != 0) {
30 if ((ch = *buf++) == '\n') 40 char ch = *buf++;
31 prom_putchar('\r'); 41 if (ch == '\n') {
32 prom_putchar(ch); 42 *dest++ = '\r';
43 dest_len++;
44 }
45 *dest++ = ch;
46 dest_len++;
47 if (dest_len >= CONSOLE_WRITE_BUF_SIZE - 1) {
48 prom_console_write_buf(console_write_buf, dest_len);
49 dest = console_write_buf;
50 dest_len = 0;
51 }
33 } 52 }
53 if (dest_len)
54 prom_console_write_buf(console_write_buf, dest_len);
55
56 raw_spin_unlock_irqrestore(&console_write_lock, flags);
34} 57}
35 58
36void notrace prom_printf(const char *fmt, ...) 59void notrace prom_printf(const char *fmt, ...)
diff --git a/arch/sparc/prom/ranges.c b/arch/sparc/prom/ranges.c
index aeff43e44e45..541fc829c207 100644
--- a/arch/sparc/prom/ranges.c
+++ b/arch/sparc/prom/ranges.c
@@ -68,7 +68,7 @@ EXPORT_SYMBOL(prom_apply_obio_ranges);
68 68
69void __init prom_ranges_init(void) 69void __init prom_ranges_init(void)
70{ 70{
71 int node, obio_node; 71 phandle node, obio_node;
72 int success; 72 int success;
73 73
74 num_obio_ranges = 0; 74 num_obio_ranges = 0;
@@ -89,8 +89,8 @@ void __init prom_ranges_init(void)
89 prom_printf("PROMLIB: obio_ranges %d\n", num_obio_ranges); 89 prom_printf("PROMLIB: obio_ranges %d\n", num_obio_ranges);
90} 90}
91 91
92void 92void prom_apply_generic_ranges(phandle node, phandle parent,
93prom_apply_generic_ranges (int node, int parent, struct linux_prom_registers *regs, int nregs) 93 struct linux_prom_registers *regs, int nregs)
94{ 94{
95 int success; 95 int success;
96 int num_ranges; 96 int num_ranges;
diff --git a/arch/sparc/prom/tree_32.c b/arch/sparc/prom/tree_32.c
index b21592f8e3fe..535e2e69ac1d 100644
--- a/arch/sparc/prom/tree_32.c
+++ b/arch/sparc/prom/tree_32.c
@@ -20,10 +20,10 @@ extern void restore_current(void);
20static char promlib_buf[128]; 20static char promlib_buf[128];
21 21
22/* Internal version of prom_getchild that does not alter return values. */ 22/* Internal version of prom_getchild that does not alter return values. */
23int __prom_getchild(int node) 23phandle __prom_getchild(phandle node)
24{ 24{
25 unsigned long flags; 25 unsigned long flags;
26 int cnode; 26 phandle cnode;
27 27
28 spin_lock_irqsave(&prom_lock, flags); 28 spin_lock_irqsave(&prom_lock, flags);
29 cnode = prom_nodeops->no_child(node); 29 cnode = prom_nodeops->no_child(node);
@@ -36,9 +36,9 @@ int __prom_getchild(int node)
36/* Return the child of node 'node' or zero if no this node has no 36/* Return the child of node 'node' or zero if no this node has no
37 * direct descendent. 37 * direct descendent.
38 */ 38 */
39int prom_getchild(int node) 39phandle prom_getchild(phandle node)
40{ 40{
41 int cnode; 41 phandle cnode;
42 42
43 if (node == -1) 43 if (node == -1)
44 return 0; 44 return 0;
@@ -52,10 +52,10 @@ int prom_getchild(int node)
52EXPORT_SYMBOL(prom_getchild); 52EXPORT_SYMBOL(prom_getchild);
53 53
54/* Internal version of prom_getsibling that does not alter return values. */ 54/* Internal version of prom_getsibling that does not alter return values. */
55int __prom_getsibling(int node) 55phandle __prom_getsibling(phandle node)
56{ 56{
57 unsigned long flags; 57 unsigned long flags;
58 int cnode; 58 phandle cnode;
59 59
60 spin_lock_irqsave(&prom_lock, flags); 60 spin_lock_irqsave(&prom_lock, flags);
61 cnode = prom_nodeops->no_nextnode(node); 61 cnode = prom_nodeops->no_nextnode(node);
@@ -68,9 +68,9 @@ int __prom_getsibling(int node)
68/* Return the next sibling of node 'node' or zero if no more siblings 68/* Return the next sibling of node 'node' or zero if no more siblings
69 * at this level of depth in the tree. 69 * at this level of depth in the tree.
70 */ 70 */
71int prom_getsibling(int node) 71phandle prom_getsibling(phandle node)
72{ 72{
73 int sibnode; 73 phandle sibnode;
74 74
75 if (node == -1) 75 if (node == -1)
76 return 0; 76 return 0;
@@ -86,7 +86,7 @@ EXPORT_SYMBOL(prom_getsibling);
86/* Return the length in bytes of property 'prop' at node 'node'. 86/* Return the length in bytes of property 'prop' at node 'node'.
87 * Return -1 on error. 87 * Return -1 on error.
88 */ 88 */
89int prom_getproplen(int node, const char *prop) 89int prom_getproplen(phandle node, const char *prop)
90{ 90{
91 int ret; 91 int ret;
92 unsigned long flags; 92 unsigned long flags;
@@ -106,7 +106,7 @@ EXPORT_SYMBOL(prom_getproplen);
106 * 'buffer' which has a size of 'bufsize'. If the acquisition 106 * 'buffer' which has a size of 'bufsize'. If the acquisition
107 * was successful the length will be returned, else -1 is returned. 107 * was successful the length will be returned, else -1 is returned.
108 */ 108 */
109int prom_getproperty(int node, const char *prop, char *buffer, int bufsize) 109int prom_getproperty(phandle node, const char *prop, char *buffer, int bufsize)
110{ 110{
111 int plen, ret; 111 int plen, ret;
112 unsigned long flags; 112 unsigned long flags;
@@ -126,7 +126,7 @@ EXPORT_SYMBOL(prom_getproperty);
126/* Acquire an integer property and return its value. Returns -1 126/* Acquire an integer property and return its value. Returns -1
127 * on failure. 127 * on failure.
128 */ 128 */
129int prom_getint(int node, char *prop) 129int prom_getint(phandle node, char *prop)
130{ 130{
131 static int intprop; 131 static int intprop;
132 132
@@ -140,7 +140,7 @@ EXPORT_SYMBOL(prom_getint);
140/* Acquire an integer property, upon error return the passed default 140/* Acquire an integer property, upon error return the passed default
141 * integer. 141 * integer.
142 */ 142 */
143int prom_getintdefault(int node, char *property, int deflt) 143int prom_getintdefault(phandle node, char *property, int deflt)
144{ 144{
145 int retval; 145 int retval;
146 146
@@ -152,7 +152,7 @@ int prom_getintdefault(int node, char *property, int deflt)
152EXPORT_SYMBOL(prom_getintdefault); 152EXPORT_SYMBOL(prom_getintdefault);
153 153
154/* Acquire a boolean property, 1=TRUE 0=FALSE. */ 154/* Acquire a boolean property, 1=TRUE 0=FALSE. */
155int prom_getbool(int node, char *prop) 155int prom_getbool(phandle node, char *prop)
156{ 156{
157 int retval; 157 int retval;
158 158
@@ -166,7 +166,7 @@ EXPORT_SYMBOL(prom_getbool);
166 * string on error. The char pointer is the user supplied string 166 * string on error. The char pointer is the user supplied string
167 * buffer. 167 * buffer.
168 */ 168 */
169void prom_getstring(int node, char *prop, char *user_buf, int ubuf_size) 169void prom_getstring(phandle node, char *prop, char *user_buf, int ubuf_size)
170{ 170{
171 int len; 171 int len;
172 172
@@ -180,7 +180,7 @@ EXPORT_SYMBOL(prom_getstring);
180/* Does the device at node 'node' have name 'name'? 180/* Does the device at node 'node' have name 'name'?
181 * YES = 1 NO = 0 181 * YES = 1 NO = 0
182 */ 182 */
183int prom_nodematch(int node, char *name) 183int prom_nodematch(phandle node, char *name)
184{ 184{
185 int error; 185 int error;
186 186
@@ -194,10 +194,11 @@ int prom_nodematch(int node, char *name)
194/* Search siblings at 'node_start' for a node with name 194/* Search siblings at 'node_start' for a node with name
195 * 'nodename'. Return node if successful, zero if not. 195 * 'nodename'. Return node if successful, zero if not.
196 */ 196 */
197int prom_searchsiblings(int node_start, char *nodename) 197phandle prom_searchsiblings(phandle node_start, char *nodename)
198{ 198{
199 199
200 int thisnode, error; 200 phandle thisnode;
201 int error;
201 202
202 for(thisnode = node_start; thisnode; 203 for(thisnode = node_start; thisnode;
203 thisnode=prom_getsibling(thisnode)) { 204 thisnode=prom_getsibling(thisnode)) {
@@ -213,7 +214,7 @@ int prom_searchsiblings(int node_start, char *nodename)
213EXPORT_SYMBOL(prom_searchsiblings); 214EXPORT_SYMBOL(prom_searchsiblings);
214 215
215/* Interal version of nextprop that does not alter return values. */ 216/* Interal version of nextprop that does not alter return values. */
216char * __prom_nextprop(int node, char * oprop) 217char *__prom_nextprop(phandle node, char * oprop)
217{ 218{
218 unsigned long flags; 219 unsigned long flags;
219 char *prop; 220 char *prop;
@@ -228,7 +229,7 @@ char * __prom_nextprop(int node, char * oprop)
228 229
229/* Return the first property name for node 'node'. */ 230/* Return the first property name for node 'node'. */
230/* buffer is unused argument, but as v9 uses it, we need to have the same interface */ 231/* buffer is unused argument, but as v9 uses it, we need to have the same interface */
231char * prom_firstprop(int node, char *bufer) 232char *prom_firstprop(phandle node, char *bufer)
232{ 233{
233 if (node == 0 || node == -1) 234 if (node == 0 || node == -1)
234 return ""; 235 return "";
@@ -241,7 +242,7 @@ EXPORT_SYMBOL(prom_firstprop);
241 * at node 'node' . Returns empty string if no more 242 * at node 'node' . Returns empty string if no more
242 * property types for this node. 243 * property types for this node.
243 */ 244 */
244char * prom_nextprop(int node, char *oprop, char *buffer) 245char *prom_nextprop(phandle node, char *oprop, char *buffer)
245{ 246{
246 if (node == 0 || node == -1) 247 if (node == 0 || node == -1)
247 return ""; 248 return "";
@@ -250,11 +251,11 @@ char * prom_nextprop(int node, char *oprop, char *buffer)
250} 251}
251EXPORT_SYMBOL(prom_nextprop); 252EXPORT_SYMBOL(prom_nextprop);
252 253
253int prom_finddevice(char *name) 254phandle prom_finddevice(char *name)
254{ 255{
255 char nbuf[128]; 256 char nbuf[128];
256 char *s = name, *d; 257 char *s = name, *d;
257 int node = prom_root_node, node2; 258 phandle node = prom_root_node, node2;
258 unsigned int which_io, phys_addr; 259 unsigned int which_io, phys_addr;
259 struct linux_prom_registers reg[PROMREG_MAX]; 260 struct linux_prom_registers reg[PROMREG_MAX];
260 261
@@ -298,7 +299,7 @@ int prom_finddevice(char *name)
298} 299}
299EXPORT_SYMBOL(prom_finddevice); 300EXPORT_SYMBOL(prom_finddevice);
300 301
301int prom_node_has_property(int node, char *prop) 302int prom_node_has_property(phandle node, char *prop)
302{ 303{
303 char *current_property = ""; 304 char *current_property = "";
304 305
@@ -314,7 +315,7 @@ EXPORT_SYMBOL(prom_node_has_property);
314/* Set property 'pname' at node 'node' to value 'value' which has a length 315/* Set property 'pname' at node 'node' to value 'value' which has a length
315 * of 'size' bytes. Return the number of bytes the prom accepted. 316 * of 'size' bytes. Return the number of bytes the prom accepted.
316 */ 317 */
317int prom_setprop(int node, const char *pname, char *value, int size) 318int prom_setprop(phandle node, const char *pname, char *value, int size)
318{ 319{
319 unsigned long flags; 320 unsigned long flags;
320 int ret; 321 int ret;
@@ -329,9 +330,9 @@ int prom_setprop(int node, const char *pname, char *value, int size)
329} 330}
330EXPORT_SYMBOL(prom_setprop); 331EXPORT_SYMBOL(prom_setprop);
331 332
332int prom_inst2pkg(int inst) 333phandle prom_inst2pkg(int inst)
333{ 334{
334 int node; 335 phandle node;
335 unsigned long flags; 336 unsigned long flags;
336 337
337 spin_lock_irqsave(&prom_lock, flags); 338 spin_lock_irqsave(&prom_lock, flags);
@@ -341,18 +342,3 @@ int prom_inst2pkg(int inst)
341 if (node == -1) return 0; 342 if (node == -1) return 0;
342 return node; 343 return node;
343} 344}
344
345/* Return 'node' assigned to a particular prom 'path'
346 * FIXME: Should work for v0 as well
347 */
348int prom_pathtoinode(char *path)
349{
350 int node, inst;
351
352 inst = prom_devopen (path);
353 if (inst == -1) return 0;
354 node = prom_inst2pkg (inst);
355 prom_devclose (inst);
356 if (node == -1) return 0;
357 return node;
358}
diff --git a/arch/sparc/prom/tree_64.c b/arch/sparc/prom/tree_64.c
index 3c0d2dd9f693..d93660048376 100644
--- a/arch/sparc/prom/tree_64.c
+++ b/arch/sparc/prom/tree_64.c
@@ -16,46 +16,65 @@
16#include <asm/oplib.h> 16#include <asm/oplib.h>
17#include <asm/ldc.h> 17#include <asm/ldc.h>
18 18
19static phandle prom_node_to_node(const char *type, phandle node)
20{
21 unsigned long args[5];
22
23 args[0] = (unsigned long) type;
24 args[1] = 1;
25 args[2] = 1;
26 args[3] = (unsigned int) node;
27 args[4] = (unsigned long) -1;
28
29 p1275_cmd_direct(args);
30
31 return (phandle) args[4];
32}
33
19/* Return the child of node 'node' or zero if no this node has no 34/* Return the child of node 'node' or zero if no this node has no
20 * direct descendent. 35 * direct descendent.
21 */ 36 */
22inline int __prom_getchild(int node) 37inline phandle __prom_getchild(phandle node)
23{ 38{
24 return p1275_cmd ("child", P1275_INOUT(1, 1), node); 39 return prom_node_to_node("child", node);
25} 40}
26 41
27inline int prom_getchild(int node) 42inline phandle prom_getchild(phandle node)
28{ 43{
29 int cnode; 44 phandle cnode;
30 45
31 if(node == -1) return 0; 46 if (node == -1)
47 return 0;
32 cnode = __prom_getchild(node); 48 cnode = __prom_getchild(node);
33 if(cnode == -1) return 0; 49 if (cnode == -1)
34 return (int)cnode; 50 return 0;
51 return cnode;
35} 52}
36EXPORT_SYMBOL(prom_getchild); 53EXPORT_SYMBOL(prom_getchild);
37 54
38inline int prom_getparent(int node) 55inline phandle prom_getparent(phandle node)
39{ 56{
40 int cnode; 57 phandle cnode;
41 58
42 if(node == -1) return 0; 59 if (node == -1)
43 cnode = p1275_cmd ("parent", P1275_INOUT(1, 1), node); 60 return 0;
44 if(cnode == -1) return 0; 61 cnode = prom_node_to_node("parent", node);
45 return (int)cnode; 62 if (cnode == -1)
63 return 0;
64 return cnode;
46} 65}
47 66
48/* Return the next sibling of node 'node' or zero if no more siblings 67/* Return the next sibling of node 'node' or zero if no more siblings
49 * at this level of depth in the tree. 68 * at this level of depth in the tree.
50 */ 69 */
51inline int __prom_getsibling(int node) 70inline phandle __prom_getsibling(phandle node)
52{ 71{
53 return p1275_cmd(prom_peer_name, P1275_INOUT(1, 1), node); 72 return prom_node_to_node(prom_peer_name, node);
54} 73}
55 74
56inline int prom_getsibling(int node) 75inline phandle prom_getsibling(phandle node)
57{ 76{
58 int sibnode; 77 phandle sibnode;
59 78
60 if (node == -1) 79 if (node == -1)
61 return 0; 80 return 0;
@@ -70,13 +89,23 @@ EXPORT_SYMBOL(prom_getsibling);
70/* Return the length in bytes of property 'prop' at node 'node'. 89/* Return the length in bytes of property 'prop' at node 'node'.
71 * Return -1 on error. 90 * Return -1 on error.
72 */ 91 */
73inline int prom_getproplen(int node, const char *prop) 92inline int prom_getproplen(phandle node, const char *prop)
74{ 93{
75 if((!node) || (!prop)) return -1; 94 unsigned long args[6];
76 return p1275_cmd ("getproplen", 95
77 P1275_ARG(1,P1275_ARG_IN_STRING)| 96 if (!node || !prop)
78 P1275_INOUT(2, 1), 97 return -1;
79 node, prop); 98
99 args[0] = (unsigned long) "getproplen";
100 args[1] = 2;
101 args[2] = 1;
102 args[3] = (unsigned int) node;
103 args[4] = (unsigned long) prop;
104 args[5] = (unsigned long) -1;
105
106 p1275_cmd_direct(args);
107
108 return (int) args[5];
80} 109}
81EXPORT_SYMBOL(prom_getproplen); 110EXPORT_SYMBOL(prom_getproplen);
82 111
@@ -84,33 +113,39 @@ EXPORT_SYMBOL(prom_getproplen);
84 * 'buffer' which has a size of 'bufsize'. If the acquisition 113 * 'buffer' which has a size of 'bufsize'. If the acquisition
85 * was successful the length will be returned, else -1 is returned. 114 * was successful the length will be returned, else -1 is returned.
86 */ 115 */
87inline int prom_getproperty(int node, const char *prop, 116inline int prom_getproperty(phandle node, const char *prop,
88 char *buffer, int bufsize) 117 char *buffer, int bufsize)
89{ 118{
119 unsigned long args[8];
90 int plen; 120 int plen;
91 121
92 plen = prom_getproplen(node, prop); 122 plen = prom_getproplen(node, prop);
93 if ((plen > bufsize) || (plen == 0) || (plen == -1)) { 123 if ((plen > bufsize) || (plen == 0) || (plen == -1))
94 return -1; 124 return -1;
95 } else { 125
96 /* Ok, things seem all right. */ 126 args[0] = (unsigned long) prom_getprop_name;
97 return p1275_cmd(prom_getprop_name, 127 args[1] = 4;
98 P1275_ARG(1,P1275_ARG_IN_STRING)| 128 args[2] = 1;
99 P1275_ARG(2,P1275_ARG_OUT_BUF)| 129 args[3] = (unsigned int) node;
100 P1275_INOUT(4, 1), 130 args[4] = (unsigned long) prop;
101 node, prop, buffer, P1275_SIZE(plen)); 131 args[5] = (unsigned long) buffer;
102 } 132 args[6] = bufsize;
133 args[7] = (unsigned long) -1;
134
135 p1275_cmd_direct(args);
136
137 return (int) args[7];
103} 138}
104EXPORT_SYMBOL(prom_getproperty); 139EXPORT_SYMBOL(prom_getproperty);
105 140
106/* Acquire an integer property and return its value. Returns -1 141/* Acquire an integer property and return its value. Returns -1
107 * on failure. 142 * on failure.
108 */ 143 */
109inline int prom_getint(int node, const char *prop) 144inline int prom_getint(phandle node, const char *prop)
110{ 145{
111 int intprop; 146 int intprop;
112 147
113 if(prom_getproperty(node, prop, (char *) &intprop, sizeof(int)) != -1) 148 if (prom_getproperty(node, prop, (char *) &intprop, sizeof(int)) != -1)
114 return intprop; 149 return intprop;
115 150
116 return -1; 151 return -1;
@@ -121,24 +156,26 @@ EXPORT_SYMBOL(prom_getint);
121 * integer. 156 * integer.
122 */ 157 */
123 158
124int prom_getintdefault(int node, const char *property, int deflt) 159int prom_getintdefault(phandle node, const char *property, int deflt)
125{ 160{
126 int retval; 161 int retval;
127 162
128 retval = prom_getint(node, property); 163 retval = prom_getint(node, property);
129 if(retval == -1) return deflt; 164 if (retval == -1)
165 return deflt;
130 166
131 return retval; 167 return retval;
132} 168}
133EXPORT_SYMBOL(prom_getintdefault); 169EXPORT_SYMBOL(prom_getintdefault);
134 170
135/* Acquire a boolean property, 1=TRUE 0=FALSE. */ 171/* Acquire a boolean property, 1=TRUE 0=FALSE. */
136int prom_getbool(int node, const char *prop) 172int prom_getbool(phandle node, const char *prop)
137{ 173{
138 int retval; 174 int retval;
139 175
140 retval = prom_getproplen(node, prop); 176 retval = prom_getproplen(node, prop);
141 if(retval == -1) return 0; 177 if (retval == -1)
178 return 0;
142 return 1; 179 return 1;
143} 180}
144EXPORT_SYMBOL(prom_getbool); 181EXPORT_SYMBOL(prom_getbool);
@@ -147,12 +184,14 @@ EXPORT_SYMBOL(prom_getbool);
147 * string on error. The char pointer is the user supplied string 184 * string on error. The char pointer is the user supplied string
148 * buffer. 185 * buffer.
149 */ 186 */
150void prom_getstring(int node, const char *prop, char *user_buf, int ubuf_size) 187void prom_getstring(phandle node, const char *prop, char *user_buf,
188 int ubuf_size)
151{ 189{
152 int len; 190 int len;
153 191
154 len = prom_getproperty(node, prop, user_buf, ubuf_size); 192 len = prom_getproperty(node, prop, user_buf, ubuf_size);
155 if(len != -1) return; 193 if (len != -1)
194 return;
156 user_buf[0] = 0; 195 user_buf[0] = 0;
157} 196}
158EXPORT_SYMBOL(prom_getstring); 197EXPORT_SYMBOL(prom_getstring);
@@ -160,21 +199,22 @@ EXPORT_SYMBOL(prom_getstring);
160/* Does the device at node 'node' have name 'name'? 199/* Does the device at node 'node' have name 'name'?
161 * YES = 1 NO = 0 200 * YES = 1 NO = 0
162 */ 201 */
163int prom_nodematch(int node, const char *name) 202int prom_nodematch(phandle node, const char *name)
164{ 203{
165 char namebuf[128]; 204 char namebuf[128];
166 prom_getproperty(node, "name", namebuf, sizeof(namebuf)); 205 prom_getproperty(node, "name", namebuf, sizeof(namebuf));
167 if(strcmp(namebuf, name) == 0) return 1; 206 if (strcmp(namebuf, name) == 0)
207 return 1;
168 return 0; 208 return 0;
169} 209}
170 210
171/* Search siblings at 'node_start' for a node with name 211/* Search siblings at 'node_start' for a node with name
172 * 'nodename'. Return node if successful, zero if not. 212 * 'nodename'. Return node if successful, zero if not.
173 */ 213 */
174int prom_searchsiblings(int node_start, const char *nodename) 214phandle prom_searchsiblings(phandle node_start, const char *nodename)
175{ 215{
176 216 phandle thisnode;
177 int thisnode, error; 217 int error;
178 char promlib_buf[128]; 218 char promlib_buf[128];
179 219
180 for(thisnode = node_start; thisnode; 220 for(thisnode = node_start; thisnode;
@@ -190,16 +230,29 @@ int prom_searchsiblings(int node_start, const char *nodename)
190} 230}
191EXPORT_SYMBOL(prom_searchsiblings); 231EXPORT_SYMBOL(prom_searchsiblings);
192 232
233static const char *prom_nextprop_name = "nextprop";
234
193/* Return the first property type for node 'node'. 235/* Return the first property type for node 'node'.
194 * buffer should be at least 32B in length 236 * buffer should be at least 32B in length
195 */ 237 */
196inline char *prom_firstprop(int node, char *buffer) 238inline char *prom_firstprop(phandle node, char *buffer)
197{ 239{
240 unsigned long args[7];
241
198 *buffer = 0; 242 *buffer = 0;
199 if(node == -1) return buffer; 243 if (node == -1)
200 p1275_cmd ("nextprop", P1275_ARG(2,P1275_ARG_OUT_32B)| 244 return buffer;
201 P1275_INOUT(3, 0), 245
202 node, (char *) 0x0, buffer); 246 args[0] = (unsigned long) prom_nextprop_name;
247 args[1] = 3;
248 args[2] = 1;
249 args[3] = (unsigned int) node;
250 args[4] = 0;
251 args[5] = (unsigned long) buffer;
252 args[6] = (unsigned long) -1;
253
254 p1275_cmd_direct(args);
255
203 return buffer; 256 return buffer;
204} 257}
205EXPORT_SYMBOL(prom_firstprop); 258EXPORT_SYMBOL(prom_firstprop);
@@ -208,11 +261,12 @@ EXPORT_SYMBOL(prom_firstprop);
208 * at node 'node' . Returns NULL string if no more 261 * at node 'node' . Returns NULL string if no more
209 * property types for this node. 262 * property types for this node.
210 */ 263 */
211inline char *prom_nextprop(int node, const char *oprop, char *buffer) 264inline char *prom_nextprop(phandle node, const char *oprop, char *buffer)
212{ 265{
266 unsigned long args[7];
213 char buf[32]; 267 char buf[32];
214 268
215 if(node == -1) { 269 if (node == -1) {
216 *buffer = 0; 270 *buffer = 0;
217 return buffer; 271 return buffer;
218 } 272 }
@@ -220,34 +274,47 @@ inline char *prom_nextprop(int node, const char *oprop, char *buffer)
220 strcpy (buf, oprop); 274 strcpy (buf, oprop);
221 oprop = buf; 275 oprop = buf;
222 } 276 }
223 p1275_cmd ("nextprop", P1275_ARG(1,P1275_ARG_IN_STRING)| 277
224 P1275_ARG(2,P1275_ARG_OUT_32B)| 278 args[0] = (unsigned long) prom_nextprop_name;
225 P1275_INOUT(3, 0), 279 args[1] = 3;
226 node, oprop, buffer); 280 args[2] = 1;
281 args[3] = (unsigned int) node;
282 args[4] = (unsigned long) oprop;
283 args[5] = (unsigned long) buffer;
284 args[6] = (unsigned long) -1;
285
286 p1275_cmd_direct(args);
287
227 return buffer; 288 return buffer;
228} 289}
229EXPORT_SYMBOL(prom_nextprop); 290EXPORT_SYMBOL(prom_nextprop);
230 291
231int 292phandle prom_finddevice(const char *name)
232prom_finddevice(const char *name)
233{ 293{
294 unsigned long args[5];
295
234 if (!name) 296 if (!name)
235 return 0; 297 return 0;
236 return p1275_cmd(prom_finddev_name, 298 args[0] = (unsigned long) "finddevice";
237 P1275_ARG(0,P1275_ARG_IN_STRING)| 299 args[1] = 1;
238 P1275_INOUT(1, 1), 300 args[2] = 1;
239 name); 301 args[3] = (unsigned long) name;
302 args[4] = (unsigned long) -1;
303
304 p1275_cmd_direct(args);
305
306 return (int) args[4];
240} 307}
241EXPORT_SYMBOL(prom_finddevice); 308EXPORT_SYMBOL(prom_finddevice);
242 309
243int prom_node_has_property(int node, const char *prop) 310int prom_node_has_property(phandle node, const char *prop)
244{ 311{
245 char buf [32]; 312 char buf [32];
246 313
247 *buf = 0; 314 *buf = 0;
248 do { 315 do {
249 prom_nextprop(node, buf, buf); 316 prom_nextprop(node, buf, buf);
250 if(!strcmp(buf, prop)) 317 if (!strcmp(buf, prop))
251 return 1; 318 return 1;
252 } while (*buf); 319 } while (*buf);
253 return 0; 320 return 0;
@@ -258,8 +325,10 @@ EXPORT_SYMBOL(prom_node_has_property);
258 * of 'size' bytes. Return the number of bytes the prom accepted. 325 * of 'size' bytes. Return the number of bytes the prom accepted.
259 */ 326 */
260int 327int
261prom_setprop(int node, const char *pname, char *value, int size) 328prom_setprop(phandle node, const char *pname, char *value, int size)
262{ 329{
330 unsigned long args[8];
331
263 if (size == 0) 332 if (size == 0)
264 return 0; 333 return 0;
265 if ((pname == 0) || (value == 0)) 334 if ((pname == 0) || (value == 0))
@@ -271,42 +340,53 @@ prom_setprop(int node, const char *pname, char *value, int size)
271 return 0; 340 return 0;
272 } 341 }
273#endif 342#endif
274 return p1275_cmd ("setprop", P1275_ARG(1,P1275_ARG_IN_STRING)| 343 args[0] = (unsigned long) "setprop";
275 P1275_ARG(2,P1275_ARG_IN_BUF)| 344 args[1] = 4;
276 P1275_INOUT(4, 1), 345 args[2] = 1;
277 node, pname, value, P1275_SIZE(size)); 346 args[3] = (unsigned int) node;
347 args[4] = (unsigned long) pname;
348 args[5] = (unsigned long) value;
349 args[6] = size;
350 args[7] = (unsigned long) -1;
351
352 p1275_cmd_direct(args);
353
354 return (int) args[7];
278} 355}
279EXPORT_SYMBOL(prom_setprop); 356EXPORT_SYMBOL(prom_setprop);
280 357
281inline int prom_inst2pkg(int inst) 358inline phandle prom_inst2pkg(int inst)
282{ 359{
283 int node; 360 unsigned long args[5];
361 phandle node;
284 362
285 node = p1275_cmd ("instance-to-package", P1275_INOUT(1, 1), inst); 363 args[0] = (unsigned long) "instance-to-package";
286 if (node == -1) return 0; 364 args[1] = 1;
287 return node; 365 args[2] = 1;
288} 366 args[3] = (unsigned int) inst;
367 args[4] = (unsigned long) -1;
289 368
290/* Return 'node' assigned to a particular prom 'path' 369 p1275_cmd_direct(args);
291 * FIXME: Should work for v0 as well
292 */
293int
294prom_pathtoinode(const char *path)
295{
296 int node, inst;
297 370
298 inst = prom_devopen (path); 371 node = (int) args[4];
299 if (inst == 0) return 0; 372 if (node == -1)
300 node = prom_inst2pkg (inst); 373 return 0;
301 prom_devclose (inst);
302 if (node == -1) return 0;
303 return node; 374 return node;
304} 375}
305 376
306int prom_ihandle2path(int handle, char *buffer, int bufsize) 377int prom_ihandle2path(int handle, char *buffer, int bufsize)
307{ 378{
308 return p1275_cmd("instance-to-path", 379 unsigned long args[7];
309 P1275_ARG(1,P1275_ARG_OUT_BUF)| 380
310 P1275_INOUT(3, 1), 381 args[0] = (unsigned long) "instance-to-path";
311 handle, buffer, P1275_SIZE(bufsize)); 382 args[1] = 3;
383 args[2] = 1;
384 args[3] = (unsigned int) handle;
385 args[4] = (unsigned long) buffer;
386 args[5] = bufsize;
387 args[6] = (unsigned long) -1;
388
389 p1275_cmd_direct(args);
390
391 return (int) args[6];
312} 392}