aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2005-11-04 19:27:50 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-04 19:27:50 -0500
commit602d4a7e2f4b843d1a67375d4d7104073495b758 (patch)
tree0b9f184e54fa693c27bd5986c114bdcf6949f788 /arch/powerpc
parent0bbacc402e67abca8794a8401c1621dc0c0202e9 (diff)
parentc51e3a417bb0f295e13a5bad86302b5212eafdf3 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc-merge
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/Kconfig29
-rw-r--r--arch/powerpc/Makefile5
-rw-r--r--arch/powerpc/configs/cell_defconfig1024
-rw-r--r--arch/powerpc/configs/g5_defconfig1392
-rw-r--r--arch/powerpc/configs/iseries_defconfig998
-rw-r--r--arch/powerpc/configs/maple_defconfig1062
-rw-r--r--arch/powerpc/configs/pseries_defconfig1371
-rw-r--r--arch/powerpc/kernel/Makefile9
-rw-r--r--arch/powerpc/kernel/asm-offsets.c2
-rw-r--r--arch/powerpc/kernel/head_64.S20
-rw-r--r--arch/powerpc/kernel/lparmap.c2
-rw-r--r--arch/powerpc/kernel/ppc32.h138
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c9
-rw-r--r--arch/powerpc/kernel/process.c22
-rw-r--r--arch/powerpc/kernel/prom.c2
-rw-r--r--arch/powerpc/kernel/prom_init.c2
-rw-r--r--arch/powerpc/kernel/rtas-proc.c808
-rw-r--r--arch/powerpc/kernel/rtas.c19
-rw-r--r--arch/powerpc/kernel/rtas_flash.c834
-rw-r--r--arch/powerpc/kernel/setup-common.c123
-rw-r--r--arch/powerpc/kernel/setup_32.c2
-rw-r--r--arch/powerpc/kernel/setup_64.c168
-rw-r--r--arch/powerpc/kernel/signal_32.c2
-rw-r--r--arch/powerpc/kernel/signal_64.c581
-rw-r--r--arch/powerpc/kernel/smp-tbsync.c171
-rw-r--r--arch/powerpc/kernel/smp.c565
-rw-r--r--arch/powerpc/kernel/time.c4
-rw-r--r--arch/powerpc/kernel/traps.c12
-rw-r--r--arch/powerpc/kernel/vmlinux.lds.S29
-rw-r--r--arch/powerpc/lib/Makefile9
-rw-r--r--arch/powerpc/lib/bitops.c150
-rw-r--r--arch/powerpc/lib/locks.c2
-rw-r--r--arch/powerpc/platforms/Makefile1
-rw-r--r--arch/powerpc/platforms/cell/Makefile2
-rw-r--r--arch/powerpc/platforms/cell/interrupt.c284
-rw-r--r--arch/powerpc/platforms/cell/interrupt.h62
-rw-r--r--arch/powerpc/platforms/cell/iommu.c381
-rw-r--r--arch/powerpc/platforms/cell/iommu.h65
-rw-r--r--arch/powerpc/platforms/cell/setup.c141
-rw-r--r--arch/powerpc/platforms/cell/smp.c230
-rw-r--r--arch/powerpc/platforms/cell/spider-pic.c191
-rw-r--r--arch/powerpc/platforms/chrp/nvram.c13
-rw-r--r--arch/powerpc/platforms/chrp/pegasos_eth.c1
-rw-r--r--arch/powerpc/platforms/chrp/smp.c39
-rw-r--r--arch/powerpc/platforms/iseries/call_hpt.h4
-rw-r--r--arch/powerpc/platforms/iseries/call_pci.h4
-rw-r--r--arch/powerpc/platforms/iseries/call_sm.h4
-rw-r--r--arch/powerpc/platforms/iseries/hvlog.c6
-rw-r--r--arch/powerpc/platforms/iseries/hvlpconfig.c2
-rw-r--r--arch/powerpc/platforms/iseries/iommu.c2
-rw-r--r--arch/powerpc/platforms/iseries/irq.c6
-rw-r--r--arch/powerpc/platforms/iseries/ksyms.c2
-rw-r--r--arch/powerpc/platforms/iseries/lpardata.c12
-rw-r--r--arch/powerpc/platforms/iseries/lpevents.c8
-rw-r--r--arch/powerpc/platforms/iseries/mf.c8
-rw-r--r--arch/powerpc/platforms/iseries/naca.h24
-rw-r--r--arch/powerpc/platforms/iseries/pci.c4
-rw-r--r--arch/powerpc/platforms/iseries/proc.c4
-rw-r--r--arch/powerpc/platforms/iseries/release_data.h2
-rw-r--r--arch/powerpc/platforms/iseries/setup.c60
-rw-r--r--arch/powerpc/platforms/iseries/smp.c2
-rw-r--r--arch/powerpc/platforms/iseries/vio.c8
-rw-r--r--arch/powerpc/platforms/iseries/viopath.c12
-rw-r--r--arch/powerpc/platforms/iseries/vpdinfo.c2
-rw-r--r--arch/powerpc/platforms/powermac/pic.c8
-rw-r--r--arch/powerpc/platforms/powermac/setup.c3
-rw-r--r--arch/powerpc/platforms/pseries/Kconfig9
-rw-r--r--arch/powerpc/platforms/pseries/Makefile2
-rw-r--r--arch/powerpc/platforms/pseries/iommu.c5
-rw-r--r--arch/powerpc/platforms/pseries/lpar.c13
-rw-r--r--arch/powerpc/platforms/pseries/plpar_wrappers.h120
-rw-r--r--arch/powerpc/platforms/pseries/rtas-fw.c138
-rw-r--r--arch/powerpc/platforms/pseries/rtas-fw.h3
-rw-r--r--arch/powerpc/platforms/pseries/rtasd.c527
-rw-r--r--arch/powerpc/platforms/pseries/setup.c21
-rw-r--r--arch/powerpc/platforms/pseries/smp.c3
-rw-r--r--arch/powerpc/sysdev/Makefile1
-rw-r--r--arch/powerpc/sysdev/dart.h59
-rw-r--r--arch/powerpc/sysdev/mmio_nvram.c118
-rw-r--r--arch/powerpc/sysdev/u3_iommu.c5
80 files changed, 11657 insertions, 530 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 967ecf92d6a7..f4e25c648fbb 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -300,6 +300,7 @@ config PPC_PMAC64
300 bool 300 bool
301 depends on PPC_PMAC && POWER4 301 depends on PPC_PMAC && POWER4
302 select U3_DART 302 select U3_DART
303 select GENERIC_TBSYNC
303 default y 304 default y
304 305
305config PPC_PREP 306config PPC_PREP
@@ -314,15 +315,17 @@ config PPC_MAPLE
314 bool " Maple 970FX Evaluation Board" 315 bool " Maple 970FX Evaluation Board"
315 select U3_DART 316 select U3_DART
316 select MPIC_BROKEN_U3 317 select MPIC_BROKEN_U3
318 select GENERIC_TBSYNC
317 default n 319 default n
318 help 320 help
319 This option enables support for the Maple 970FX Evaluation Board. 321 This option enables support for the Maple 970FX Evaluation Board.
320 For more informations, refer to <http://www.970eval.com> 322 For more informations, refer to <http://www.970eval.com>
321 323
322config PPC_BPA 324config PPC_CELL
323 bool " Broadband Processor Architecture" 325 bool " Cell Broadband Processor Architecture"
324 depends on PPC_MULTIPLATFORM && PPC64 326 depends on PPC_MULTIPLATFORM && PPC64
325 select PPC_RTAS 327 select PPC_RTAS
328 select MMIO_NVRAM
326 329
327config PPC_OF 330config PPC_OF
328 bool 331 bool
@@ -353,13 +356,26 @@ config RTAS_ERROR_LOGGING
353 depends on PPC_RTAS 356 depends on PPC_RTAS
354 default n 357 default n
355 358
359config RTAS_PROC
360 bool "Proc interface to RTAS"
361 depends on PPC_RTAS
362 default y
363
364config RTAS_FLASH
365 tristate "Firmware flash interface"
366 depends on PPC64 && RTAS_PROC
367
368config MMIO_NVRAM
369 bool
370 default n
371
356config MPIC_BROKEN_U3 372config MPIC_BROKEN_U3
357 bool 373 bool
358 depends on PPC_MAPLE 374 depends on PPC_MAPLE
359 default y 375 default y
360 376
361config BPA_IIC 377config CELL_IIC
362 depends on PPC_BPA 378 depends on PPC_CELL
363 bool 379 bool
364 default y 380 default y
365 381
@@ -372,6 +388,11 @@ config PPC_MPC106
372 bool 388 bool
373 default n 389 default n
374 390
391config GENERIC_TBSYNC
392 bool
393 default y if CONFIG_PPC32 && CONFIG_SMP
394 default n
395
375source "drivers/cpufreq/Kconfig" 396source "drivers/cpufreq/Kconfig"
376 397
377config CPU_FREQ_PMAC 398config CPU_FREQ_PMAC
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 2f4cce06a7e5..5bc11bd36c1f 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -12,9 +12,6 @@
12# Rewritten by Cort Dougan and Paul Mackerras 12# Rewritten by Cort Dougan and Paul Mackerras
13# 13#
14 14
15# This must match PAGE_OFFSET in include/asm-powerpc/page.h.
16KERNELLOAD := $(CONFIG_KERNEL_START)
17
18HAS_BIARCH := $(call cc-option-yn, -m32) 15HAS_BIARCH := $(call cc-option-yn, -m32)
19 16
20ifeq ($(CONFIG_PPC64),y) 17ifeq ($(CONFIG_PPC64),y)
@@ -59,7 +56,7 @@ override LD += -m elf$(SZ)ppc
59override CC += -m$(SZ) 56override CC += -m$(SZ)
60endif 57endif
61 58
62LDFLAGS_vmlinux := -Ttext $(KERNELLOAD) -Bstatic -e $(KERNELLOAD) 59LDFLAGS_vmlinux := -Bstatic
63 60
64# The -Iarch/$(ARCH)/include is temporary while we are merging 61# The -Iarch/$(ARCH)/include is temporary while we are merging
65CPPFLAGS += -Iarch/$(ARCH) -Iarch/$(ARCH)/include 62CPPFLAGS += -Iarch/$(ARCH) -Iarch/$(ARCH)/include
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig
new file mode 100644
index 000000000000..67ffecbc05cb
--- /dev/null
+++ b/arch/powerpc/configs/cell_defconfig
@@ -0,0 +1,1024 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc4
4# Thu Oct 20 08:29:10 2005
5#
6CONFIG_64BIT=y
7CONFIG_MMU=y
8CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9CONFIG_GENERIC_CALIBRATE_DELAY=y
10CONFIG_GENERIC_ISA_DMA=y
11CONFIG_EARLY_PRINTK=y
12CONFIG_COMPAT=y
13CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
14CONFIG_ARCH_MAY_HAVE_PC_FDC=y
15CONFIG_FORCE_MAX_ZONEORDER=13
16
17#
18# Code maturity level options
19#
20CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_LOCK_KERNEL=y
23CONFIG_INIT_ENV_ARG_LIMIT=32
24
25#
26# General setup
27#
28CONFIG_LOCALVERSION=""
29CONFIG_LOCALVERSION_AUTO=y
30CONFIG_SWAP=y
31CONFIG_SYSVIPC=y
32# CONFIG_POSIX_MQUEUE is not set
33# CONFIG_BSD_PROCESS_ACCT is not set
34CONFIG_SYSCTL=y
35# CONFIG_AUDIT is not set
36CONFIG_HOTPLUG=y
37CONFIG_KOBJECT_UEVENT=y
38# CONFIG_IKCONFIG is not set
39# CONFIG_CPUSETS is not set
40CONFIG_INITRAMFS_SOURCE=""
41# CONFIG_EMBEDDED is not set
42CONFIG_KALLSYMS=y
43# CONFIG_KALLSYMS_ALL is not set
44# CONFIG_KALLSYMS_EXTRA_PASS is not set
45CONFIG_PRINTK=y
46CONFIG_BUG=y
47CONFIG_BASE_FULL=y
48CONFIG_FUTEX=y
49CONFIG_EPOLL=y
50CONFIG_SHMEM=y
51CONFIG_CC_ALIGN_FUNCTIONS=0
52CONFIG_CC_ALIGN_LABELS=0
53CONFIG_CC_ALIGN_LOOPS=0
54CONFIG_CC_ALIGN_JUMPS=0
55# CONFIG_TINY_SHMEM is not set
56CONFIG_BASE_SMALL=0
57
58#
59# Loadable module support
60#
61CONFIG_MODULES=y
62CONFIG_MODULE_UNLOAD=y
63# CONFIG_MODULE_FORCE_UNLOAD is not set
64CONFIG_OBSOLETE_MODPARM=y
65# CONFIG_MODVERSIONS is not set
66# CONFIG_MODULE_SRCVERSION_ALL is not set
67# CONFIG_KMOD is not set
68CONFIG_STOP_MACHINE=y
69CONFIG_SYSVIPC_COMPAT=y
70
71#
72# Platform support
73#
74# CONFIG_PPC_ISERIES is not set
75CONFIG_PPC_MULTIPLATFORM=y
76# CONFIG_PPC_PSERIES is not set
77CONFIG_PPC_BPA=y
78# CONFIG_PPC_PMAC is not set
79# CONFIG_PPC_MAPLE is not set
80CONFIG_PPC=y
81CONFIG_PPC64=y
82CONFIG_PPC_OF=y
83CONFIG_BPA_IIC=y
84CONFIG_ALTIVEC=y
85CONFIG_KEXEC=y
86# CONFIG_U3_DART is not set
87# CONFIG_BOOTX_TEXT is not set
88# CONFIG_POWER4_ONLY is not set
89# CONFIG_IOMMU_VMERGE is not set
90CONFIG_SMP=y
91CONFIG_NR_CPUS=4
92CONFIG_ARCH_SELECT_MEMORY_MODEL=y
93CONFIG_ARCH_FLATMEM_ENABLE=y
94CONFIG_SELECT_MEMORY_MODEL=y
95CONFIG_FLATMEM_MANUAL=y
96# CONFIG_DISCONTIGMEM_MANUAL is not set
97# CONFIG_SPARSEMEM_MANUAL is not set
98CONFIG_FLATMEM=y
99CONFIG_FLAT_NODE_MEM_MAP=y
100# CONFIG_SPARSEMEM_STATIC is not set
101# CONFIG_NUMA is not set
102CONFIG_SCHED_SMT=y
103CONFIG_PREEMPT_NONE=y
104# CONFIG_PREEMPT_VOLUNTARY is not set
105# CONFIG_PREEMPT is not set
106CONFIG_PREEMPT_BKL=y
107# CONFIG_HZ_100 is not set
108CONFIG_HZ_250=y
109# CONFIG_HZ_1000 is not set
110CONFIG_HZ=250
111CONFIG_GENERIC_HARDIRQS=y
112CONFIG_PPC_RTAS=y
113CONFIG_RTAS_PROC=y
114CONFIG_RTAS_FLASH=y
115CONFIG_SECCOMP=y
116CONFIG_BINFMT_ELF=y
117# CONFIG_BINFMT_MISC is not set
118CONFIG_PROC_DEVICETREE=y
119# CONFIG_CMDLINE_BOOL is not set
120CONFIG_ISA_DMA_API=y
121
122#
123# Bus Options
124#
125CONFIG_PCI=y
126CONFIG_PCI_DOMAINS=y
127CONFIG_PCI_LEGACY_PROC=y
128# CONFIG_PCI_DEBUG is not set
129
130#
131# PCCARD (PCMCIA/CardBus) support
132#
133# CONFIG_PCCARD is not set
134
135#
136# PCI Hotplug Support
137#
138# CONFIG_HOTPLUG_PCI is not set
139
140#
141# Networking
142#
143CONFIG_NET=y
144
145#
146# Networking options
147#
148CONFIG_PACKET=y
149# CONFIG_PACKET_MMAP is not set
150CONFIG_UNIX=y
151CONFIG_XFRM=y
152# CONFIG_XFRM_USER is not set
153# CONFIG_NET_KEY is not set
154CONFIG_INET=y
155CONFIG_IP_MULTICAST=y
156# CONFIG_IP_ADVANCED_ROUTER is not set
157CONFIG_IP_FIB_HASH=y
158# CONFIG_IP_PNP is not set
159CONFIG_NET_IPIP=y
160# CONFIG_NET_IPGRE is not set
161# CONFIG_IP_MROUTE is not set
162# CONFIG_ARPD is not set
163CONFIG_SYN_COOKIES=y
164# CONFIG_INET_AH is not set
165# CONFIG_INET_ESP is not set
166# CONFIG_INET_IPCOMP is not set
167CONFIG_INET_TUNNEL=y
168CONFIG_INET_DIAG=y
169CONFIG_INET_TCP_DIAG=y
170# CONFIG_TCP_CONG_ADVANCED is not set
171CONFIG_TCP_CONG_BIC=y
172
173#
174# IP: Virtual Server Configuration
175#
176# CONFIG_IP_VS is not set
177CONFIG_IPV6=y
178# CONFIG_IPV6_PRIVACY is not set
179CONFIG_INET6_AH=m
180CONFIG_INET6_ESP=m
181CONFIG_INET6_IPCOMP=m
182CONFIG_INET6_TUNNEL=m
183CONFIG_IPV6_TUNNEL=m
184CONFIG_NETFILTER=y
185# CONFIG_NETFILTER_DEBUG is not set
186# CONFIG_NETFILTER_NETLINK is not set
187
188#
189# IP: Netfilter Configuration
190#
191CONFIG_IP_NF_CONNTRACK=y
192# CONFIG_IP_NF_CT_ACCT is not set
193# CONFIG_IP_NF_CONNTRACK_MARK is not set
194# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
195CONFIG_IP_NF_CT_PROTO_SCTP=y
196CONFIG_IP_NF_FTP=m
197CONFIG_IP_NF_IRC=m
198# CONFIG_IP_NF_NETBIOS_NS is not set
199CONFIG_IP_NF_TFTP=m
200CONFIG_IP_NF_AMANDA=m
201# CONFIG_IP_NF_PPTP is not set
202CONFIG_IP_NF_QUEUE=m
203CONFIG_IP_NF_IPTABLES=m
204CONFIG_IP_NF_MATCH_LIMIT=m
205CONFIG_IP_NF_MATCH_IPRANGE=m
206CONFIG_IP_NF_MATCH_MAC=m
207CONFIG_IP_NF_MATCH_PKTTYPE=m
208CONFIG_IP_NF_MATCH_MARK=m
209CONFIG_IP_NF_MATCH_MULTIPORT=m
210CONFIG_IP_NF_MATCH_TOS=m
211CONFIG_IP_NF_MATCH_RECENT=m
212CONFIG_IP_NF_MATCH_ECN=m
213CONFIG_IP_NF_MATCH_DSCP=m
214CONFIG_IP_NF_MATCH_AH_ESP=m
215CONFIG_IP_NF_MATCH_LENGTH=m
216CONFIG_IP_NF_MATCH_TTL=m
217CONFIG_IP_NF_MATCH_TCPMSS=m
218CONFIG_IP_NF_MATCH_HELPER=m
219CONFIG_IP_NF_MATCH_STATE=m
220CONFIG_IP_NF_MATCH_CONNTRACK=m
221CONFIG_IP_NF_MATCH_OWNER=m
222CONFIG_IP_NF_MATCH_ADDRTYPE=m
223CONFIG_IP_NF_MATCH_REALM=m
224CONFIG_IP_NF_MATCH_SCTP=m
225# CONFIG_IP_NF_MATCH_DCCP is not set
226CONFIG_IP_NF_MATCH_COMMENT=m
227CONFIG_IP_NF_MATCH_HASHLIMIT=m
228CONFIG_IP_NF_MATCH_STRING=m
229CONFIG_IP_NF_FILTER=m
230CONFIG_IP_NF_TARGET_REJECT=m
231CONFIG_IP_NF_TARGET_LOG=m
232CONFIG_IP_NF_TARGET_ULOG=m
233CONFIG_IP_NF_TARGET_TCPMSS=m
234CONFIG_IP_NF_TARGET_NFQUEUE=m
235CONFIG_IP_NF_NAT=m
236CONFIG_IP_NF_NAT_NEEDED=y
237CONFIG_IP_NF_TARGET_MASQUERADE=m
238CONFIG_IP_NF_TARGET_REDIRECT=m
239CONFIG_IP_NF_TARGET_NETMAP=m
240CONFIG_IP_NF_TARGET_SAME=m
241CONFIG_IP_NF_NAT_SNMP_BASIC=m
242CONFIG_IP_NF_NAT_IRC=m
243CONFIG_IP_NF_NAT_FTP=m
244CONFIG_IP_NF_NAT_TFTP=m
245CONFIG_IP_NF_NAT_AMANDA=m
246CONFIG_IP_NF_MANGLE=m
247CONFIG_IP_NF_TARGET_TOS=m
248CONFIG_IP_NF_TARGET_ECN=m
249CONFIG_IP_NF_TARGET_DSCP=m
250CONFIG_IP_NF_TARGET_MARK=m
251CONFIG_IP_NF_TARGET_CLASSIFY=m
252CONFIG_IP_NF_TARGET_TTL=m
253CONFIG_IP_NF_RAW=m
254CONFIG_IP_NF_TARGET_NOTRACK=m
255CONFIG_IP_NF_ARPTABLES=m
256CONFIG_IP_NF_ARPFILTER=m
257CONFIG_IP_NF_ARP_MANGLE=m
258
259#
260# IPv6: Netfilter Configuration (EXPERIMENTAL)
261#
262# CONFIG_IP6_NF_QUEUE is not set
263# CONFIG_IP6_NF_IPTABLES is not set
264# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
265
266#
267# DCCP Configuration (EXPERIMENTAL)
268#
269# CONFIG_IP_DCCP is not set
270
271#
272# SCTP Configuration (EXPERIMENTAL)
273#
274# CONFIG_IP_SCTP is not set
275# CONFIG_ATM is not set
276# CONFIG_BRIDGE is not set
277# CONFIG_VLAN_8021Q is not set
278# CONFIG_DECNET is not set
279# CONFIG_LLC2 is not set
280# CONFIG_IPX is not set
281# CONFIG_ATALK is not set
282# CONFIG_X25 is not set
283# CONFIG_LAPB is not set
284# CONFIG_NET_DIVERT is not set
285# CONFIG_ECONET is not set
286# CONFIG_WAN_ROUTER is not set
287# CONFIG_NET_SCHED is not set
288CONFIG_NET_CLS_ROUTE=y
289
290#
291# Network testing
292#
293# CONFIG_NET_PKTGEN is not set
294# CONFIG_HAMRADIO is not set
295# CONFIG_IRDA is not set
296# CONFIG_BT is not set
297# CONFIG_IEEE80211 is not set
298
299#
300# Device Drivers
301#
302
303#
304# Generic Driver Options
305#
306CONFIG_STANDALONE=y
307CONFIG_PREVENT_FIRMWARE_BUILD=y
308CONFIG_FW_LOADER=y
309# CONFIG_DEBUG_DRIVER is not set
310
311#
312# Connector - unified userspace <-> kernelspace linker
313#
314# CONFIG_CONNECTOR is not set
315
316#
317# Memory Technology Devices (MTD)
318#
319# CONFIG_MTD is not set
320
321#
322# Parallel port support
323#
324# CONFIG_PARPORT is not set
325
326#
327# Plug and Play support
328#
329
330#
331# Block devices
332#
333# CONFIG_BLK_DEV_FD is not set
334# CONFIG_BLK_CPQ_DA is not set
335# CONFIG_BLK_CPQ_CISS_DA is not set
336# CONFIG_BLK_DEV_DAC960 is not set
337# CONFIG_BLK_DEV_UMEM is not set
338# CONFIG_BLK_DEV_COW_COMMON is not set
339CONFIG_BLK_DEV_LOOP=y
340# CONFIG_BLK_DEV_CRYPTOLOOP is not set
341CONFIG_BLK_DEV_NBD=y
342# CONFIG_BLK_DEV_SX8 is not set
343CONFIG_BLK_DEV_RAM=y
344CONFIG_BLK_DEV_RAM_COUNT=16
345CONFIG_BLK_DEV_RAM_SIZE=131072
346CONFIG_BLK_DEV_INITRD=y
347# CONFIG_CDROM_PKTCDVD is not set
348
349#
350# IO Schedulers
351#
352CONFIG_IOSCHED_NOOP=y
353CONFIG_IOSCHED_AS=y
354CONFIG_IOSCHED_DEADLINE=y
355CONFIG_IOSCHED_CFQ=y
356# CONFIG_ATA_OVER_ETH is not set
357
358#
359# ATA/ATAPI/MFM/RLL support
360#
361CONFIG_IDE=y
362CONFIG_BLK_DEV_IDE=y
363
364#
365# Please see Documentation/ide.txt for help/info on IDE drives
366#
367# CONFIG_BLK_DEV_IDE_SATA is not set
368CONFIG_BLK_DEV_IDEDISK=y
369CONFIG_IDEDISK_MULTI_MODE=y
370# CONFIG_BLK_DEV_IDECD is not set
371# CONFIG_BLK_DEV_IDETAPE is not set
372# CONFIG_BLK_DEV_IDEFLOPPY is not set
373# CONFIG_IDE_TASK_IOCTL is not set
374
375#
376# IDE chipset support/bugfixes
377#
378CONFIG_IDE_GENERIC=y
379CONFIG_BLK_DEV_IDEPCI=y
380CONFIG_IDEPCI_SHARE_IRQ=y
381# CONFIG_BLK_DEV_OFFBOARD is not set
382CONFIG_BLK_DEV_GENERIC=y
383# CONFIG_BLK_DEV_OPTI621 is not set
384# CONFIG_BLK_DEV_SL82C105 is not set
385CONFIG_BLK_DEV_IDEDMA_PCI=y
386# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
387CONFIG_IDEDMA_PCI_AUTO=y
388# CONFIG_IDEDMA_ONLYDISK is not set
389CONFIG_BLK_DEV_AEC62XX=y
390# CONFIG_BLK_DEV_ALI15X3 is not set
391# CONFIG_BLK_DEV_AMD74XX is not set
392# CONFIG_BLK_DEV_CMD64X is not set
393# CONFIG_BLK_DEV_TRIFLEX is not set
394# CONFIG_BLK_DEV_CY82C693 is not set
395# CONFIG_BLK_DEV_CS5520 is not set
396# CONFIG_BLK_DEV_CS5530 is not set
397# CONFIG_BLK_DEV_HPT34X is not set
398# CONFIG_BLK_DEV_HPT366 is not set
399# CONFIG_BLK_DEV_SC1200 is not set
400# CONFIG_BLK_DEV_PIIX is not set
401# CONFIG_BLK_DEV_IT821X is not set
402# CONFIG_BLK_DEV_NS87415 is not set
403# CONFIG_BLK_DEV_PDC202XX_OLD is not set
404# CONFIG_BLK_DEV_PDC202XX_NEW is not set
405# CONFIG_BLK_DEV_SVWKS is not set
406CONFIG_BLK_DEV_SIIMAGE=y
407# CONFIG_BLK_DEV_SLC90E66 is not set
408# CONFIG_BLK_DEV_TRM290 is not set
409# CONFIG_BLK_DEV_VIA82CXXX is not set
410# CONFIG_IDE_ARM is not set
411CONFIG_BLK_DEV_IDEDMA=y
412# CONFIG_IDEDMA_IVB is not set
413CONFIG_IDEDMA_AUTO=y
414# CONFIG_BLK_DEV_HD is not set
415
416#
417# SCSI device support
418#
419# CONFIG_RAID_ATTRS is not set
420# CONFIG_SCSI is not set
421
422#
423# Multi-device support (RAID and LVM)
424#
425# CONFIG_MD is not set
426
427#
428# Fusion MPT device support
429#
430# CONFIG_FUSION is not set
431
432#
433# IEEE 1394 (FireWire) support
434#
435# CONFIG_IEEE1394 is not set
436
437#
438# I2O device support
439#
440# CONFIG_I2O is not set
441
442#
443# Macintosh device drivers
444#
445
446#
447# Network device support
448#
449CONFIG_NETDEVICES=y
450# CONFIG_DUMMY is not set
451# CONFIG_BONDING is not set
452# CONFIG_EQUALIZER is not set
453# CONFIG_TUN is not set
454
455#
456# ARCnet devices
457#
458# CONFIG_ARCNET is not set
459
460#
461# PHY device support
462#
463# CONFIG_PHYLIB is not set
464
465#
466# Ethernet (10 or 100Mbit)
467#
468CONFIG_NET_ETHERNET=y
469CONFIG_MII=y
470# CONFIG_HAPPYMEAL is not set
471# CONFIG_SUNGEM is not set
472# CONFIG_CASSINI is not set
473# CONFIG_NET_VENDOR_3COM is not set
474
475#
476# Tulip family network device support
477#
478# CONFIG_NET_TULIP is not set
479# CONFIG_HP100 is not set
480# CONFIG_NET_PCI is not set
481
482#
483# Ethernet (1000 Mbit)
484#
485# CONFIG_ACENIC is not set
486# CONFIG_DL2K is not set
487CONFIG_E1000=m
488# CONFIG_E1000_NAPI is not set
489# CONFIG_NS83820 is not set
490# CONFIG_HAMACHI is not set
491# CONFIG_YELLOWFIN is not set
492# CONFIG_R8169 is not set
493# CONFIG_SIS190 is not set
494CONFIG_SKGE=m
495# CONFIG_SK98LIN is not set
496# CONFIG_TIGON3 is not set
497# CONFIG_BNX2 is not set
498# CONFIG_SPIDER_NET is not set
499# CONFIG_MV643XX_ETH is not set
500
501#
502# Ethernet (10000 Mbit)
503#
504# CONFIG_CHELSIO_T1 is not set
505# CONFIG_IXGB is not set
506# CONFIG_S2IO is not set
507
508#
509# Token Ring devices
510#
511# CONFIG_TR is not set
512
513#
514# Wireless LAN (non-hamradio)
515#
516# CONFIG_NET_RADIO is not set
517
518#
519# Wan interfaces
520#
521# CONFIG_WAN is not set
522# CONFIG_FDDI is not set
523# CONFIG_HIPPI is not set
524# CONFIG_PPP is not set
525# CONFIG_SLIP is not set
526# CONFIG_SHAPER is not set
527# CONFIG_NETCONSOLE is not set
528# CONFIG_NETPOLL is not set
529# CONFIG_NET_POLL_CONTROLLER is not set
530
531#
532# ISDN subsystem
533#
534# CONFIG_ISDN is not set
535
536#
537# Telephony Support
538#
539# CONFIG_PHONE is not set
540
541#
542# Input device support
543#
544CONFIG_INPUT=y
545
546#
547# Userland interfaces
548#
549CONFIG_INPUT_MOUSEDEV=y
550# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
551CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
552CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
553# CONFIG_INPUT_JOYDEV is not set
554# CONFIG_INPUT_TSDEV is not set
555# CONFIG_INPUT_EVDEV is not set
556# CONFIG_INPUT_EVBUG is not set
557
558#
559# Input Device Drivers
560#
561# CONFIG_INPUT_KEYBOARD is not set
562# CONFIG_INPUT_MOUSE is not set
563# CONFIG_INPUT_JOYSTICK is not set
564# CONFIG_INPUT_TOUCHSCREEN is not set
565# CONFIG_INPUT_MISC is not set
566
567#
568# Hardware I/O ports
569#
570CONFIG_SERIO=y
571# CONFIG_SERIO_I8042 is not set
572CONFIG_SERIO_SERPORT=y
573# CONFIG_SERIO_PCIPS2 is not set
574# CONFIG_SERIO_RAW is not set
575# CONFIG_GAMEPORT is not set
576
577#
578# Character devices
579#
580CONFIG_VT=y
581CONFIG_VT_CONSOLE=y
582CONFIG_HW_CONSOLE=y
583CONFIG_SERIAL_NONSTANDARD=y
584# CONFIG_ROCKETPORT is not set
585# CONFIG_CYCLADES is not set
586# CONFIG_DIGIEPCA is not set
587# CONFIG_MOXA_SMARTIO is not set
588# CONFIG_ISI is not set
589# CONFIG_SYNCLINK is not set
590# CONFIG_SYNCLINKMP is not set
591# CONFIG_N_HDLC is not set
592# CONFIG_SPECIALIX is not set
593# CONFIG_SX is not set
594# CONFIG_STALDRV is not set
595
596#
597# Serial drivers
598#
599CONFIG_SERIAL_8250=y
600CONFIG_SERIAL_8250_CONSOLE=y
601CONFIG_SERIAL_8250_NR_UARTS=4
602# CONFIG_SERIAL_8250_EXTENDED is not set
603
604#
605# Non-8250 serial port support
606#
607CONFIG_SERIAL_CORE=y
608CONFIG_SERIAL_CORE_CONSOLE=y
609# CONFIG_SERIAL_JSM is not set
610CONFIG_UNIX98_PTYS=y
611# CONFIG_LEGACY_PTYS is not set
612
613#
614# IPMI
615#
616# CONFIG_IPMI_HANDLER is not set
617
618#
619# Watchdog Cards
620#
621CONFIG_WATCHDOG=y
622# CONFIG_WATCHDOG_NOWAYOUT is not set
623
624#
625# Watchdog Device Drivers
626#
627# CONFIG_SOFT_WATCHDOG is not set
628CONFIG_WATCHDOG_RTAS=y
629
630#
631# PCI-based Watchdog Cards
632#
633# CONFIG_PCIPCWATCHDOG is not set
634# CONFIG_WDTPCI is not set
635# CONFIG_RTC is not set
636# CONFIG_DTLK is not set
637# CONFIG_R3964 is not set
638# CONFIG_APPLICOM is not set
639
640#
641# Ftape, the floppy tape device driver
642#
643# CONFIG_AGP is not set
644# CONFIG_DRM is not set
645# CONFIG_RAW_DRIVER is not set
646# CONFIG_HANGCHECK_TIMER is not set
647
648#
649# TPM devices
650#
651# CONFIG_TCG_TPM is not set
652
653#
654# I2C support
655#
656CONFIG_I2C=y
657# CONFIG_I2C_CHARDEV is not set
658
659#
660# I2C Algorithms
661#
662CONFIG_I2C_ALGOBIT=y
663# CONFIG_I2C_ALGOPCF is not set
664# CONFIG_I2C_ALGOPCA is not set
665
666#
667# I2C Hardware Bus support
668#
669# CONFIG_I2C_ALI1535 is not set
670# CONFIG_I2C_ALI1563 is not set
671# CONFIG_I2C_ALI15X3 is not set
672# CONFIG_I2C_AMD756 is not set
673# CONFIG_I2C_AMD8111 is not set
674# CONFIG_I2C_I801 is not set
675# CONFIG_I2C_I810 is not set
676# CONFIG_I2C_PIIX4 is not set
677# CONFIG_I2C_NFORCE2 is not set
678# CONFIG_I2C_PARPORT_LIGHT is not set
679# CONFIG_I2C_PROSAVAGE is not set
680# CONFIG_I2C_SAVAGE4 is not set
681# CONFIG_SCx200_ACB is not set
682# CONFIG_I2C_SIS5595 is not set
683# CONFIG_I2C_SIS630 is not set
684# CONFIG_I2C_SIS96X is not set
685# CONFIG_I2C_STUB is not set
686# CONFIG_I2C_VIA is not set
687# CONFIG_I2C_VIAPRO is not set
688# CONFIG_I2C_VOODOO3 is not set
689# CONFIG_I2C_PCA_ISA is not set
690
691#
692# Miscellaneous I2C Chip support
693#
694# CONFIG_SENSORS_DS1337 is not set
695# CONFIG_SENSORS_DS1374 is not set
696# CONFIG_SENSORS_EEPROM is not set
697# CONFIG_SENSORS_PCF8574 is not set
698# CONFIG_SENSORS_PCA9539 is not set
699# CONFIG_SENSORS_PCF8591 is not set
700# CONFIG_SENSORS_RTC8564 is not set
701# CONFIG_SENSORS_MAX6875 is not set
702# CONFIG_I2C_DEBUG_CORE is not set
703# CONFIG_I2C_DEBUG_ALGO is not set
704# CONFIG_I2C_DEBUG_BUS is not set
705# CONFIG_I2C_DEBUG_CHIP is not set
706
707#
708# Dallas's 1-wire bus
709#
710# CONFIG_W1 is not set
711
712#
713# Hardware Monitoring support
714#
715# CONFIG_HWMON is not set
716# CONFIG_HWMON_VID is not set
717
718#
719# Misc devices
720#
721
722#
723# Multimedia Capabilities Port drivers
724#
725
726#
727# Multimedia devices
728#
729# CONFIG_VIDEO_DEV is not set
730
731#
732# Digital Video Broadcasting Devices
733#
734# CONFIG_DVB is not set
735
736#
737# Graphics support
738#
739# CONFIG_FB is not set
740
741#
742# Console display driver support
743#
744# CONFIG_VGA_CONSOLE is not set
745CONFIG_DUMMY_CONSOLE=y
746
747#
748# Sound
749#
750# CONFIG_SOUND is not set
751
752#
753# USB support
754#
755CONFIG_USB_ARCH_HAS_HCD=y
756CONFIG_USB_ARCH_HAS_OHCI=y
757# CONFIG_USB is not set
758
759#
760# USB Gadget Support
761#
762# CONFIG_USB_GADGET is not set
763
764#
765# MMC/SD Card support
766#
767# CONFIG_MMC is not set
768
769#
770# InfiniBand support
771#
772# CONFIG_INFINIBAND is not set
773
774#
775# SN Devices
776#
777
778#
779# File systems
780#
781CONFIG_EXT2_FS=y
782# CONFIG_EXT2_FS_XATTR is not set
783# CONFIG_EXT2_FS_XIP is not set
784CONFIG_EXT3_FS=y
785CONFIG_EXT3_FS_XATTR=y
786# CONFIG_EXT3_FS_POSIX_ACL is not set
787# CONFIG_EXT3_FS_SECURITY is not set
788CONFIG_JBD=y
789# CONFIG_JBD_DEBUG is not set
790CONFIG_FS_MBCACHE=y
791# CONFIG_REISERFS_FS is not set
792# CONFIG_JFS_FS is not set
793CONFIG_FS_POSIX_ACL=y
794# CONFIG_XFS_FS is not set
795# CONFIG_MINIX_FS is not set
796# CONFIG_ROMFS_FS is not set
797CONFIG_INOTIFY=y
798# CONFIG_QUOTA is not set
799CONFIG_DNOTIFY=y
800# CONFIG_AUTOFS_FS is not set
801# CONFIG_AUTOFS4_FS is not set
802# CONFIG_FUSE_FS is not set
803
804#
805# CD-ROM/DVD Filesystems
806#
807CONFIG_ISO9660_FS=m
808CONFIG_JOLIET=y
809# CONFIG_ZISOFS is not set
810CONFIG_UDF_FS=m
811CONFIG_UDF_NLS=y
812
813#
814# DOS/FAT/NT Filesystems
815#
816CONFIG_FAT_FS=m
817CONFIG_MSDOS_FS=m
818CONFIG_VFAT_FS=m
819CONFIG_FAT_DEFAULT_CODEPAGE=437
820CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
821# CONFIG_NTFS_FS is not set
822
823#
824# Pseudo filesystems
825#
826CONFIG_PROC_FS=y
827CONFIG_PROC_KCORE=y
828CONFIG_SYSFS=y
829CONFIG_TMPFS=y
830CONFIG_HUGETLBFS=y
831CONFIG_HUGETLB_PAGE=y
832CONFIG_RAMFS=y
833# CONFIG_RELAYFS_FS is not set
834
835#
836# Miscellaneous filesystems
837#
838# CONFIG_ADFS_FS is not set
839# CONFIG_AFFS_FS is not set
840# CONFIG_HFS_FS is not set
841# CONFIG_HFSPLUS_FS is not set
842# CONFIG_BEFS_FS is not set
843# CONFIG_BFS_FS is not set
844# CONFIG_EFS_FS is not set
845# CONFIG_CRAMFS is not set
846# CONFIG_VXFS_FS is not set
847# CONFIG_HPFS_FS is not set
848# CONFIG_QNX4FS_FS is not set
849# CONFIG_SYSV_FS is not set
850# CONFIG_UFS_FS is not set
851
852#
853# Network File Systems
854#
855CONFIG_NFS_FS=m
856CONFIG_NFS_V3=y
857CONFIG_NFS_V3_ACL=y
858# CONFIG_NFS_V4 is not set
859# CONFIG_NFS_DIRECTIO is not set
860CONFIG_NFSD=m
861CONFIG_NFSD_V2_ACL=y
862CONFIG_NFSD_V3=y
863CONFIG_NFSD_V3_ACL=y
864# CONFIG_NFSD_V4 is not set
865CONFIG_NFSD_TCP=y
866CONFIG_LOCKD=m
867CONFIG_LOCKD_V4=y
868CONFIG_EXPORTFS=m
869CONFIG_NFS_ACL_SUPPORT=m
870CONFIG_NFS_COMMON=y
871CONFIG_SUNRPC=m
872# CONFIG_RPCSEC_GSS_KRB5 is not set
873# CONFIG_RPCSEC_GSS_SPKM3 is not set
874# CONFIG_SMB_FS is not set
875# CONFIG_CIFS is not set
876# CONFIG_NCP_FS is not set
877# CONFIG_CODA_FS is not set
878# CONFIG_AFS_FS is not set
879# CONFIG_9P_FS is not set
880
881#
882# Partition Types
883#
884CONFIG_PARTITION_ADVANCED=y
885# CONFIG_ACORN_PARTITION is not set
886# CONFIG_OSF_PARTITION is not set
887# CONFIG_AMIGA_PARTITION is not set
888# CONFIG_ATARI_PARTITION is not set
889# CONFIG_MAC_PARTITION is not set
890CONFIG_MSDOS_PARTITION=y
891# CONFIG_BSD_DISKLABEL is not set
892# CONFIG_MINIX_SUBPARTITION is not set
893# CONFIG_SOLARIS_X86_PARTITION is not set
894# CONFIG_UNIXWARE_DISKLABEL is not set
895# CONFIG_LDM_PARTITION is not set
896# CONFIG_SGI_PARTITION is not set
897# CONFIG_ULTRIX_PARTITION is not set
898# CONFIG_SUN_PARTITION is not set
899CONFIG_EFI_PARTITION=y
900
901#
902# Native Language Support
903#
904CONFIG_NLS=m
905CONFIG_NLS_DEFAULT="iso8859-1"
906# CONFIG_NLS_CODEPAGE_437 is not set
907# CONFIG_NLS_CODEPAGE_737 is not set
908# CONFIG_NLS_CODEPAGE_775 is not set
909# CONFIG_NLS_CODEPAGE_850 is not set
910# CONFIG_NLS_CODEPAGE_852 is not set
911# CONFIG_NLS_CODEPAGE_855 is not set
912# CONFIG_NLS_CODEPAGE_857 is not set
913# CONFIG_NLS_CODEPAGE_860 is not set
914# CONFIG_NLS_CODEPAGE_861 is not set
915# CONFIG_NLS_CODEPAGE_862 is not set
916# CONFIG_NLS_CODEPAGE_863 is not set
917# CONFIG_NLS_CODEPAGE_864 is not set
918# CONFIG_NLS_CODEPAGE_865 is not set
919# CONFIG_NLS_CODEPAGE_866 is not set
920# CONFIG_NLS_CODEPAGE_869 is not set
921# CONFIG_NLS_CODEPAGE_936 is not set
922# CONFIG_NLS_CODEPAGE_950 is not set
923# CONFIG_NLS_CODEPAGE_932 is not set
924# CONFIG_NLS_CODEPAGE_949 is not set
925# CONFIG_NLS_CODEPAGE_874 is not set
926# CONFIG_NLS_ISO8859_8 is not set
927# CONFIG_NLS_CODEPAGE_1250 is not set
928# CONFIG_NLS_CODEPAGE_1251 is not set
929# CONFIG_NLS_ASCII is not set
930CONFIG_NLS_ISO8859_1=m
931CONFIG_NLS_ISO8859_2=m
932CONFIG_NLS_ISO8859_3=m
933CONFIG_NLS_ISO8859_4=m
934CONFIG_NLS_ISO8859_5=m
935CONFIG_NLS_ISO8859_6=m
936CONFIG_NLS_ISO8859_7=m
937CONFIG_NLS_ISO8859_9=m
938CONFIG_NLS_ISO8859_13=m
939CONFIG_NLS_ISO8859_14=m
940CONFIG_NLS_ISO8859_15=m
941# CONFIG_NLS_KOI8_R is not set
942# CONFIG_NLS_KOI8_U is not set
943# CONFIG_NLS_UTF8 is not set
944
945#
946# Profiling support
947#
948# CONFIG_PROFILING is not set
949
950#
951# Kernel hacking
952#
953# CONFIG_PRINTK_TIME is not set
954CONFIG_DEBUG_KERNEL=y
955CONFIG_MAGIC_SYSRQ=y
956CONFIG_LOG_BUF_SHIFT=15
957CONFIG_DETECT_SOFTLOCKUP=y
958# CONFIG_SCHEDSTATS is not set
959# CONFIG_DEBUG_SLAB is not set
960# CONFIG_DEBUG_SPINLOCK is not set
961CONFIG_DEBUG_SPINLOCK_SLEEP=y
962# CONFIG_DEBUG_KOBJECT is not set
963# CONFIG_DEBUG_INFO is not set
964CONFIG_DEBUG_FS=y
965# CONFIG_DEBUG_STACKOVERFLOW is not set
966# CONFIG_KPROBES is not set
967# CONFIG_DEBUG_STACK_USAGE is not set
968CONFIG_DEBUGGER=y
969# CONFIG_XMON is not set
970# CONFIG_PPCDBG is not set
971CONFIG_IRQSTACKS=y
972
973#
974# Security options
975#
976# CONFIG_KEYS is not set
977# CONFIG_SECURITY is not set
978
979#
980# Cryptographic options
981#
982CONFIG_CRYPTO=y
983CONFIG_CRYPTO_HMAC=y
984# CONFIG_CRYPTO_NULL is not set
985# CONFIG_CRYPTO_MD4 is not set
986CONFIG_CRYPTO_MD5=m
987CONFIG_CRYPTO_SHA1=m
988# CONFIG_CRYPTO_SHA256 is not set
989# CONFIG_CRYPTO_SHA512 is not set
990# CONFIG_CRYPTO_WP512 is not set
991# CONFIG_CRYPTO_TGR192 is not set
992CONFIG_CRYPTO_DES=m
993# CONFIG_CRYPTO_BLOWFISH is not set
994# CONFIG_CRYPTO_TWOFISH is not set
995# CONFIG_CRYPTO_SERPENT is not set
996# CONFIG_CRYPTO_AES is not set
997# CONFIG_CRYPTO_CAST5 is not set
998# CONFIG_CRYPTO_CAST6 is not set
999# CONFIG_CRYPTO_TEA is not set
1000# CONFIG_CRYPTO_ARC4 is not set
1001# CONFIG_CRYPTO_KHAZAD is not set
1002# CONFIG_CRYPTO_ANUBIS is not set
1003CONFIG_CRYPTO_DEFLATE=m
1004# CONFIG_CRYPTO_MICHAEL_MIC is not set
1005# CONFIG_CRYPTO_CRC32C is not set
1006# CONFIG_CRYPTO_TEST is not set
1007
1008#
1009# Hardware crypto devices
1010#
1011
1012#
1013# Library routines
1014#
1015# CONFIG_CRC_CCITT is not set
1016# CONFIG_CRC16 is not set
1017CONFIG_CRC32=y
1018# CONFIG_LIBCRC32C is not set
1019CONFIG_ZLIB_INFLATE=m
1020CONFIG_ZLIB_DEFLATE=m
1021CONFIG_TEXTSEARCH=y
1022CONFIG_TEXTSEARCH_KMP=m
1023CONFIG_TEXTSEARCH_BM=m
1024CONFIG_TEXTSEARCH_FSM=m
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
new file mode 100644
index 000000000000..6323065fbf2c
--- /dev/null
+++ b/arch/powerpc/configs/g5_defconfig
@@ -0,0 +1,1392 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc4
4# Thu Oct 20 08:30:23 2005
5#
6CONFIG_64BIT=y
7CONFIG_MMU=y
8CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9CONFIG_GENERIC_CALIBRATE_DELAY=y
10CONFIG_GENERIC_ISA_DMA=y
11CONFIG_EARLY_PRINTK=y
12CONFIG_COMPAT=y
13CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
14CONFIG_ARCH_MAY_HAVE_PC_FDC=y
15CONFIG_FORCE_MAX_ZONEORDER=13
16
17#
18# Code maturity level options
19#
20CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_LOCK_KERNEL=y
23CONFIG_INIT_ENV_ARG_LIMIT=32
24
25#
26# General setup
27#
28CONFIG_LOCALVERSION=""
29CONFIG_LOCALVERSION_AUTO=y
30CONFIG_SWAP=y
31CONFIG_SYSVIPC=y
32CONFIG_POSIX_MQUEUE=y
33# CONFIG_BSD_PROCESS_ACCT is not set
34CONFIG_SYSCTL=y
35# CONFIG_AUDIT is not set
36CONFIG_HOTPLUG=y
37CONFIG_KOBJECT_UEVENT=y
38CONFIG_IKCONFIG=y
39CONFIG_IKCONFIG_PROC=y
40# CONFIG_CPUSETS is not set
41CONFIG_INITRAMFS_SOURCE=""
42# CONFIG_EMBEDDED is not set
43CONFIG_KALLSYMS=y
44# CONFIG_KALLSYMS_ALL is not set
45# CONFIG_KALLSYMS_EXTRA_PASS is not set
46CONFIG_PRINTK=y
47CONFIG_BUG=y
48CONFIG_BASE_FULL=y
49CONFIG_FUTEX=y
50CONFIG_EPOLL=y
51CONFIG_SHMEM=y
52CONFIG_CC_ALIGN_FUNCTIONS=0
53CONFIG_CC_ALIGN_LABELS=0
54CONFIG_CC_ALIGN_LOOPS=0
55CONFIG_CC_ALIGN_JUMPS=0
56# CONFIG_TINY_SHMEM is not set
57CONFIG_BASE_SMALL=0
58
59#
60# Loadable module support
61#
62CONFIG_MODULES=y
63CONFIG_MODULE_UNLOAD=y
64# CONFIG_MODULE_FORCE_UNLOAD is not set
65CONFIG_OBSOLETE_MODPARM=y
66CONFIG_MODVERSIONS=y
67CONFIG_MODULE_SRCVERSION_ALL=y
68CONFIG_KMOD=y
69CONFIG_STOP_MACHINE=y
70CONFIG_SYSVIPC_COMPAT=y
71
72#
73# Platform support
74#
75# CONFIG_PPC_ISERIES is not set
76CONFIG_PPC_MULTIPLATFORM=y
77# CONFIG_PPC_PSERIES is not set
78# CONFIG_PPC_BPA is not set
79CONFIG_PPC_PMAC=y
80# CONFIG_PPC_MAPLE is not set
81CONFIG_PPC=y
82CONFIG_PPC64=y
83CONFIG_PPC_OF=y
84CONFIG_MPIC=y
85CONFIG_ALTIVEC=y
86CONFIG_KEXEC=y
87CONFIG_U3_DART=y
88CONFIG_PPC_PMAC64=y
89CONFIG_BOOTX_TEXT=y
90CONFIG_POWER4_ONLY=y
91CONFIG_IOMMU_VMERGE=y
92CONFIG_SMP=y
93CONFIG_NR_CPUS=2
94CONFIG_ARCH_SELECT_MEMORY_MODEL=y
95CONFIG_ARCH_FLATMEM_ENABLE=y
96CONFIG_SELECT_MEMORY_MODEL=y
97CONFIG_FLATMEM_MANUAL=y
98# CONFIG_DISCONTIGMEM_MANUAL is not set
99# CONFIG_SPARSEMEM_MANUAL is not set
100CONFIG_FLATMEM=y
101CONFIG_FLAT_NODE_MEM_MAP=y
102# CONFIG_SPARSEMEM_STATIC is not set
103# CONFIG_NUMA is not set
104# CONFIG_SCHED_SMT is not set
105CONFIG_PREEMPT_NONE=y
106# CONFIG_PREEMPT_VOLUNTARY is not set
107# CONFIG_PREEMPT is not set
108# CONFIG_PREEMPT_BKL is not set
109# CONFIG_HZ_100 is not set
110CONFIG_HZ_250=y
111# CONFIG_HZ_1000 is not set
112CONFIG_HZ=250
113CONFIG_GENERIC_HARDIRQS=y
114CONFIG_SECCOMP=y
115CONFIG_BINFMT_ELF=y
116# CONFIG_BINFMT_MISC is not set
117# CONFIG_HOTPLUG_CPU is not set
118CONFIG_PROC_DEVICETREE=y
119# CONFIG_CMDLINE_BOOL is not set
120CONFIG_ISA_DMA_API=y
121
122#
123# Bus Options
124#
125CONFIG_PCI=y
126CONFIG_PCI_DOMAINS=y
127CONFIG_PCI_LEGACY_PROC=y
128# CONFIG_PCI_DEBUG is not set
129
130#
131# PCCARD (PCMCIA/CardBus) support
132#
133# CONFIG_PCCARD is not set
134
135#
136# PCI Hotplug Support
137#
138# CONFIG_HOTPLUG_PCI is not set
139
140#
141# Networking
142#
143CONFIG_NET=y
144
145#
146# Networking options
147#
148CONFIG_PACKET=y
149# CONFIG_PACKET_MMAP is not set
150CONFIG_UNIX=y
151CONFIG_XFRM=y
152CONFIG_XFRM_USER=m
153CONFIG_NET_KEY=m
154CONFIG_INET=y
155CONFIG_IP_MULTICAST=y
156# CONFIG_IP_ADVANCED_ROUTER is not set
157CONFIG_IP_FIB_HASH=y
158# CONFIG_IP_PNP is not set
159CONFIG_NET_IPIP=y
160# CONFIG_NET_IPGRE is not set
161# CONFIG_IP_MROUTE is not set
162# CONFIG_ARPD is not set
163CONFIG_SYN_COOKIES=y
164CONFIG_INET_AH=m
165CONFIG_INET_ESP=m
166CONFIG_INET_IPCOMP=m
167CONFIG_INET_TUNNEL=y
168CONFIG_INET_DIAG=y
169CONFIG_INET_TCP_DIAG=y
170# CONFIG_TCP_CONG_ADVANCED is not set
171CONFIG_TCP_CONG_BIC=y
172
173#
174# IP: Virtual Server Configuration
175#
176# CONFIG_IP_VS is not set
177# CONFIG_IPV6 is not set
178CONFIG_NETFILTER=y
179# CONFIG_NETFILTER_DEBUG is not set
180# CONFIG_NETFILTER_NETLINK is not set
181
182#
183# IP: Netfilter Configuration
184#
185CONFIG_IP_NF_CONNTRACK=m
186CONFIG_IP_NF_CT_ACCT=y
187CONFIG_IP_NF_CONNTRACK_MARK=y
188CONFIG_IP_NF_CONNTRACK_EVENTS=y
189CONFIG_IP_NF_CT_PROTO_SCTP=m
190CONFIG_IP_NF_FTP=m
191CONFIG_IP_NF_IRC=m
192# CONFIG_IP_NF_NETBIOS_NS is not set
193CONFIG_IP_NF_TFTP=m
194CONFIG_IP_NF_AMANDA=m
195# CONFIG_IP_NF_PPTP is not set
196CONFIG_IP_NF_QUEUE=m
197CONFIG_IP_NF_IPTABLES=m
198CONFIG_IP_NF_MATCH_LIMIT=m
199CONFIG_IP_NF_MATCH_IPRANGE=m
200CONFIG_IP_NF_MATCH_MAC=m
201CONFIG_IP_NF_MATCH_PKTTYPE=m
202CONFIG_IP_NF_MATCH_MARK=m
203CONFIG_IP_NF_MATCH_MULTIPORT=m
204CONFIG_IP_NF_MATCH_TOS=m
205CONFIG_IP_NF_MATCH_RECENT=m
206CONFIG_IP_NF_MATCH_ECN=m
207CONFIG_IP_NF_MATCH_DSCP=m
208CONFIG_IP_NF_MATCH_AH_ESP=m
209CONFIG_IP_NF_MATCH_LENGTH=m
210CONFIG_IP_NF_MATCH_TTL=m
211CONFIG_IP_NF_MATCH_TCPMSS=m
212CONFIG_IP_NF_MATCH_HELPER=m
213CONFIG_IP_NF_MATCH_STATE=m
214CONFIG_IP_NF_MATCH_CONNTRACK=m
215CONFIG_IP_NF_MATCH_OWNER=m
216CONFIG_IP_NF_MATCH_ADDRTYPE=m
217CONFIG_IP_NF_MATCH_REALM=m
218CONFIG_IP_NF_MATCH_SCTP=m
219# CONFIG_IP_NF_MATCH_DCCP is not set
220CONFIG_IP_NF_MATCH_COMMENT=m
221CONFIG_IP_NF_MATCH_CONNMARK=m
222CONFIG_IP_NF_MATCH_CONNBYTES=m
223CONFIG_IP_NF_MATCH_HASHLIMIT=m
224CONFIG_IP_NF_MATCH_STRING=m
225CONFIG_IP_NF_FILTER=m
226CONFIG_IP_NF_TARGET_REJECT=m
227CONFIG_IP_NF_TARGET_LOG=m
228CONFIG_IP_NF_TARGET_ULOG=m
229CONFIG_IP_NF_TARGET_TCPMSS=m
230CONFIG_IP_NF_TARGET_NFQUEUE=m
231CONFIG_IP_NF_NAT=m
232CONFIG_IP_NF_NAT_NEEDED=y
233CONFIG_IP_NF_TARGET_MASQUERADE=m
234CONFIG_IP_NF_TARGET_REDIRECT=m
235CONFIG_IP_NF_TARGET_NETMAP=m
236CONFIG_IP_NF_TARGET_SAME=m
237CONFIG_IP_NF_NAT_SNMP_BASIC=m
238CONFIG_IP_NF_NAT_IRC=m
239CONFIG_IP_NF_NAT_FTP=m
240CONFIG_IP_NF_NAT_TFTP=m
241CONFIG_IP_NF_NAT_AMANDA=m
242CONFIG_IP_NF_MANGLE=m
243CONFIG_IP_NF_TARGET_TOS=m
244CONFIG_IP_NF_TARGET_ECN=m
245CONFIG_IP_NF_TARGET_DSCP=m
246CONFIG_IP_NF_TARGET_MARK=m
247CONFIG_IP_NF_TARGET_CLASSIFY=m
248CONFIG_IP_NF_TARGET_TTL=m
249CONFIG_IP_NF_TARGET_CONNMARK=m
250CONFIG_IP_NF_TARGET_CLUSTERIP=m
251CONFIG_IP_NF_RAW=m
252CONFIG_IP_NF_TARGET_NOTRACK=m
253CONFIG_IP_NF_ARPTABLES=m
254CONFIG_IP_NF_ARPFILTER=m
255CONFIG_IP_NF_ARP_MANGLE=m
256
257#
258# DCCP Configuration (EXPERIMENTAL)
259#
260# CONFIG_IP_DCCP is not set
261
262#
263# SCTP Configuration (EXPERIMENTAL)
264#
265# CONFIG_IP_SCTP is not set
266# CONFIG_ATM is not set
267# CONFIG_BRIDGE is not set
268# CONFIG_VLAN_8021Q is not set
269# CONFIG_DECNET is not set
270CONFIG_LLC=y
271# CONFIG_LLC2 is not set
272# CONFIG_IPX is not set
273# CONFIG_ATALK is not set
274# CONFIG_X25 is not set
275# CONFIG_LAPB is not set
276# CONFIG_NET_DIVERT is not set
277# CONFIG_ECONET is not set
278# CONFIG_WAN_ROUTER is not set
279# CONFIG_NET_SCHED is not set
280CONFIG_NET_CLS_ROUTE=y
281
282#
283# Network testing
284#
285# CONFIG_NET_PKTGEN is not set
286# CONFIG_HAMRADIO is not set
287# CONFIG_IRDA is not set
288# CONFIG_BT is not set
289# CONFIG_IEEE80211 is not set
290
291#
292# Device Drivers
293#
294
295#
296# Generic Driver Options
297#
298CONFIG_STANDALONE=y
299CONFIG_PREVENT_FIRMWARE_BUILD=y
300CONFIG_FW_LOADER=y
301# CONFIG_DEBUG_DRIVER is not set
302
303#
304# Connector - unified userspace <-> kernelspace linker
305#
306# CONFIG_CONNECTOR is not set
307
308#
309# Memory Technology Devices (MTD)
310#
311# CONFIG_MTD is not set
312
313#
314# Parallel port support
315#
316# CONFIG_PARPORT is not set
317
318#
319# Plug and Play support
320#
321
322#
323# Block devices
324#
325# CONFIG_BLK_DEV_FD is not set
326# CONFIG_BLK_CPQ_DA is not set
327# CONFIG_BLK_CPQ_CISS_DA is not set
328# CONFIG_BLK_DEV_DAC960 is not set
329# CONFIG_BLK_DEV_UMEM is not set
330# CONFIG_BLK_DEV_COW_COMMON is not set
331CONFIG_BLK_DEV_LOOP=y
332# CONFIG_BLK_DEV_CRYPTOLOOP is not set
333CONFIG_BLK_DEV_NBD=m
334# CONFIG_BLK_DEV_SX8 is not set
335# CONFIG_BLK_DEV_UB is not set
336CONFIG_BLK_DEV_RAM=y
337CONFIG_BLK_DEV_RAM_COUNT=16
338CONFIG_BLK_DEV_RAM_SIZE=65536
339CONFIG_BLK_DEV_INITRD=y
340CONFIG_CDROM_PKTCDVD=m
341CONFIG_CDROM_PKTCDVD_BUFFERS=8
342# CONFIG_CDROM_PKTCDVD_WCACHE is not set
343
344#
345# IO Schedulers
346#
347CONFIG_IOSCHED_NOOP=y
348CONFIG_IOSCHED_AS=y
349CONFIG_IOSCHED_DEADLINE=y
350CONFIG_IOSCHED_CFQ=y
351# CONFIG_ATA_OVER_ETH is not set
352
353#
354# ATA/ATAPI/MFM/RLL support
355#
356CONFIG_IDE=y
357CONFIG_BLK_DEV_IDE=y
358
359#
360# Please see Documentation/ide.txt for help/info on IDE drives
361#
362# CONFIG_BLK_DEV_IDE_SATA is not set
363CONFIG_BLK_DEV_IDEDISK=y
364# CONFIG_IDEDISK_MULTI_MODE is not set
365CONFIG_BLK_DEV_IDECD=y
366# CONFIG_BLK_DEV_IDETAPE is not set
367# CONFIG_BLK_DEV_IDEFLOPPY is not set
368# CONFIG_BLK_DEV_IDESCSI is not set
369# CONFIG_IDE_TASK_IOCTL is not set
370
371#
372# IDE chipset support/bugfixes
373#
374CONFIG_IDE_GENERIC=y
375CONFIG_BLK_DEV_IDEPCI=y
376# CONFIG_IDEPCI_SHARE_IRQ is not set
377# CONFIG_BLK_DEV_OFFBOARD is not set
378# CONFIG_BLK_DEV_GENERIC is not set
379# CONFIG_BLK_DEV_OPTI621 is not set
380# CONFIG_BLK_DEV_SL82C105 is not set
381CONFIG_BLK_DEV_IDEDMA_PCI=y
382# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
383CONFIG_IDEDMA_PCI_AUTO=y
384# CONFIG_IDEDMA_ONLYDISK is not set
385# CONFIG_BLK_DEV_AEC62XX is not set
386# CONFIG_BLK_DEV_ALI15X3 is not set
387# CONFIG_BLK_DEV_AMD74XX is not set
388# CONFIG_BLK_DEV_CMD64X is not set
389# CONFIG_BLK_DEV_TRIFLEX is not set
390# CONFIG_BLK_DEV_CY82C693 is not set
391# CONFIG_BLK_DEV_CS5520 is not set
392# CONFIG_BLK_DEV_CS5530 is not set
393# CONFIG_BLK_DEV_HPT34X is not set
394# CONFIG_BLK_DEV_HPT366 is not set
395# CONFIG_BLK_DEV_SC1200 is not set
396# CONFIG_BLK_DEV_PIIX is not set
397# CONFIG_BLK_DEV_IT821X is not set
398# CONFIG_BLK_DEV_NS87415 is not set
399# CONFIG_BLK_DEV_PDC202XX_OLD is not set
400# CONFIG_BLK_DEV_PDC202XX_NEW is not set
401# CONFIG_BLK_DEV_SVWKS is not set
402# CONFIG_BLK_DEV_SIIMAGE is not set
403# CONFIG_BLK_DEV_SLC90E66 is not set
404# CONFIG_BLK_DEV_TRM290 is not set
405# CONFIG_BLK_DEV_VIA82CXXX is not set
406CONFIG_BLK_DEV_IDE_PMAC=y
407CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
408CONFIG_BLK_DEV_IDEDMA_PMAC=y
409# CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set
410# CONFIG_IDE_ARM is not set
411CONFIG_BLK_DEV_IDEDMA=y
412# CONFIG_IDEDMA_IVB is not set
413CONFIG_IDEDMA_AUTO=y
414# CONFIG_BLK_DEV_HD is not set
415
416#
417# SCSI device support
418#
419# CONFIG_RAID_ATTRS is not set
420CONFIG_SCSI=y
421CONFIG_SCSI_PROC_FS=y
422
423#
424# SCSI support type (disk, tape, CD-ROM)
425#
426CONFIG_BLK_DEV_SD=y
427CONFIG_CHR_DEV_ST=y
428# CONFIG_CHR_DEV_OSST is not set
429CONFIG_BLK_DEV_SR=y
430CONFIG_BLK_DEV_SR_VENDOR=y
431CONFIG_CHR_DEV_SG=y
432# CONFIG_CHR_DEV_SCH is not set
433
434#
435# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
436#
437CONFIG_SCSI_MULTI_LUN=y
438CONFIG_SCSI_CONSTANTS=y
439# CONFIG_SCSI_LOGGING is not set
440
441#
442# SCSI Transport Attributes
443#
444CONFIG_SCSI_SPI_ATTRS=y
445# CONFIG_SCSI_FC_ATTRS is not set
446# CONFIG_SCSI_ISCSI_ATTRS is not set
447# CONFIG_SCSI_SAS_ATTRS is not set
448
449#
450# SCSI low-level drivers
451#
452# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
453# CONFIG_SCSI_3W_9XXX is not set
454# CONFIG_SCSI_ACARD is not set
455# CONFIG_SCSI_AACRAID is not set
456# CONFIG_SCSI_AIC7XXX is not set
457# CONFIG_SCSI_AIC7XXX_OLD is not set
458# CONFIG_SCSI_AIC79XX is not set
459# CONFIG_MEGARAID_NEWGEN is not set
460# CONFIG_MEGARAID_LEGACY is not set
461# CONFIG_MEGARAID_SAS is not set
462CONFIG_SCSI_SATA=y
463# CONFIG_SCSI_SATA_AHCI is not set
464CONFIG_SCSI_SATA_SVW=y
465# CONFIG_SCSI_ATA_PIIX is not set
466# CONFIG_SCSI_SATA_MV is not set
467# CONFIG_SCSI_SATA_NV is not set
468# CONFIG_SCSI_SATA_PROMISE is not set
469# CONFIG_SCSI_SATA_QSTOR is not set
470# CONFIG_SCSI_SATA_SX4 is not set
471# CONFIG_SCSI_SATA_SIL is not set
472# CONFIG_SCSI_SATA_SIS is not set
473# CONFIG_SCSI_SATA_ULI is not set
474# CONFIG_SCSI_SATA_VIA is not set
475# CONFIG_SCSI_SATA_VITESSE is not set
476# CONFIG_SCSI_BUSLOGIC is not set
477# CONFIG_SCSI_DMX3191D is not set
478# CONFIG_SCSI_EATA is not set
479# CONFIG_SCSI_FUTURE_DOMAIN is not set
480# CONFIG_SCSI_GDTH is not set
481# CONFIG_SCSI_IPS is not set
482# CONFIG_SCSI_INITIO is not set
483# CONFIG_SCSI_INIA100 is not set
484# CONFIG_SCSI_SYM53C8XX_2 is not set
485# CONFIG_SCSI_IPR is not set
486# CONFIG_SCSI_QLOGIC_FC is not set
487# CONFIG_SCSI_QLOGIC_1280 is not set
488CONFIG_SCSI_QLA2XXX=y
489# CONFIG_SCSI_QLA21XX is not set
490# CONFIG_SCSI_QLA22XX is not set
491# CONFIG_SCSI_QLA2300 is not set
492# CONFIG_SCSI_QLA2322 is not set
493# CONFIG_SCSI_QLA6312 is not set
494# CONFIG_SCSI_QLA24XX is not set
495# CONFIG_SCSI_LPFC is not set
496# CONFIG_SCSI_DC395x is not set
497# CONFIG_SCSI_DC390T is not set
498# CONFIG_SCSI_DEBUG is not set
499
500#
501# Multi-device support (RAID and LVM)
502#
503CONFIG_MD=y
504CONFIG_BLK_DEV_MD=y
505CONFIG_MD_LINEAR=y
506CONFIG_MD_RAID0=y
507CONFIG_MD_RAID1=y
508CONFIG_MD_RAID10=m
509CONFIG_MD_RAID5=y
510CONFIG_MD_RAID6=m
511CONFIG_MD_MULTIPATH=m
512CONFIG_MD_FAULTY=m
513CONFIG_BLK_DEV_DM=y
514CONFIG_DM_CRYPT=m
515CONFIG_DM_SNAPSHOT=m
516CONFIG_DM_MIRROR=m
517CONFIG_DM_ZERO=m
518# CONFIG_DM_MULTIPATH is not set
519
520#
521# Fusion MPT device support
522#
523# CONFIG_FUSION is not set
524# CONFIG_FUSION_SPI is not set
525# CONFIG_FUSION_FC is not set
526# CONFIG_FUSION_SAS is not set
527
528#
529# IEEE 1394 (FireWire) support
530#
531CONFIG_IEEE1394=y
532
533#
534# Subsystem Options
535#
536# CONFIG_IEEE1394_VERBOSEDEBUG is not set
537CONFIG_IEEE1394_OUI_DB=y
538CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
539CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
540# CONFIG_IEEE1394_EXPORT_FULL_API is not set
541
542#
543# Device Drivers
544#
545# CONFIG_IEEE1394_PCILYNX is not set
546CONFIG_IEEE1394_OHCI1394=y
547
548#
549# Protocol Drivers
550#
551CONFIG_IEEE1394_VIDEO1394=m
552CONFIG_IEEE1394_SBP2=m
553# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
554CONFIG_IEEE1394_ETH1394=m
555CONFIG_IEEE1394_DV1394=m
556CONFIG_IEEE1394_RAWIO=y
557# CONFIG_IEEE1394_CMP is not set
558
559#
560# I2O device support
561#
562# CONFIG_I2O is not set
563
564#
565# Macintosh device drivers
566#
567CONFIG_ADB_PMU=y
568CONFIG_PMAC_SMU=y
569CONFIG_THERM_PM72=y
570
571#
572# Network device support
573#
574CONFIG_NETDEVICES=y
575CONFIG_DUMMY=m
576CONFIG_BONDING=m
577# CONFIG_EQUALIZER is not set
578CONFIG_TUN=m
579
580#
581# ARCnet devices
582#
583# CONFIG_ARCNET is not set
584
585#
586# PHY device support
587#
588# CONFIG_PHYLIB is not set
589
590#
591# Ethernet (10 or 100Mbit)
592#
593CONFIG_NET_ETHERNET=y
594CONFIG_MII=y
595# CONFIG_HAPPYMEAL is not set
596CONFIG_SUNGEM=y
597# CONFIG_CASSINI is not set
598# CONFIG_NET_VENDOR_3COM is not set
599
600#
601# Tulip family network device support
602#
603# CONFIG_NET_TULIP is not set
604# CONFIG_HP100 is not set
605# CONFIG_NET_PCI is not set
606
607#
608# Ethernet (1000 Mbit)
609#
610CONFIG_ACENIC=y
611CONFIG_ACENIC_OMIT_TIGON_I=y
612# CONFIG_DL2K is not set
613CONFIG_E1000=y
614# CONFIG_E1000_NAPI is not set
615# CONFIG_NS83820 is not set
616# CONFIG_HAMACHI is not set
617# CONFIG_YELLOWFIN is not set
618# CONFIG_R8169 is not set
619# CONFIG_SIS190 is not set
620# CONFIG_SKGE is not set
621# CONFIG_SK98LIN is not set
622CONFIG_TIGON3=m
623# CONFIG_BNX2 is not set
624# CONFIG_MV643XX_ETH is not set
625
626#
627# Ethernet (10000 Mbit)
628#
629# CONFIG_CHELSIO_T1 is not set
630# CONFIG_IXGB is not set
631# CONFIG_S2IO is not set
632
633#
634# Token Ring devices
635#
636CONFIG_TR=y
637CONFIG_IBMOL=y
638# CONFIG_3C359 is not set
639# CONFIG_TMS380TR is not set
640
641#
642# Wireless LAN (non-hamradio)
643#
644# CONFIG_NET_RADIO is not set
645
646#
647# Wan interfaces
648#
649# CONFIG_WAN is not set
650# CONFIG_FDDI is not set
651# CONFIG_HIPPI is not set
652CONFIG_PPP=m
653# CONFIG_PPP_MULTILINK is not set
654# CONFIG_PPP_FILTER is not set
655CONFIG_PPP_ASYNC=m
656CONFIG_PPP_SYNC_TTY=m
657CONFIG_PPP_DEFLATE=m
658CONFIG_PPP_BSDCOMP=m
659CONFIG_PPPOE=m
660# CONFIG_SLIP is not set
661# CONFIG_NET_FC is not set
662# CONFIG_SHAPER is not set
663# CONFIG_NETCONSOLE is not set
664# CONFIG_NETPOLL is not set
665# CONFIG_NET_POLL_CONTROLLER is not set
666
667#
668# ISDN subsystem
669#
670# CONFIG_ISDN is not set
671
672#
673# Telephony Support
674#
675# CONFIG_PHONE is not set
676
677#
678# Input device support
679#
680CONFIG_INPUT=y
681
682#
683# Userland interfaces
684#
685CONFIG_INPUT_MOUSEDEV=y
686# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
687CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
688CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
689CONFIG_INPUT_JOYDEV=m
690# CONFIG_INPUT_TSDEV is not set
691CONFIG_INPUT_EVDEV=y
692# CONFIG_INPUT_EVBUG is not set
693
694#
695# Input Device Drivers
696#
697CONFIG_INPUT_KEYBOARD=y
698# CONFIG_KEYBOARD_ATKBD is not set
699# CONFIG_KEYBOARD_SUNKBD is not set
700# CONFIG_KEYBOARD_LKKBD is not set
701# CONFIG_KEYBOARD_XTKBD is not set
702# CONFIG_KEYBOARD_NEWTON is not set
703CONFIG_INPUT_MOUSE=y
704# CONFIG_MOUSE_PS2 is not set
705# CONFIG_MOUSE_SERIAL is not set
706# CONFIG_MOUSE_VSXXXAA is not set
707# CONFIG_INPUT_JOYSTICK is not set
708# CONFIG_INPUT_TOUCHSCREEN is not set
709# CONFIG_INPUT_MISC is not set
710
711#
712# Hardware I/O ports
713#
714CONFIG_SERIO=y
715# CONFIG_SERIO_I8042 is not set
716# CONFIG_SERIO_SERPORT is not set
717# CONFIG_SERIO_PCIPS2 is not set
718# CONFIG_SERIO_RAW is not set
719# CONFIG_GAMEPORT is not set
720
721#
722# Character devices
723#
724CONFIG_VT=y
725CONFIG_VT_CONSOLE=y
726CONFIG_HW_CONSOLE=y
727# CONFIG_SERIAL_NONSTANDARD is not set
728
729#
730# Serial drivers
731#
732# CONFIG_SERIAL_8250 is not set
733
734#
735# Non-8250 serial port support
736#
737# CONFIG_SERIAL_PMACZILOG is not set
738# CONFIG_SERIAL_JSM is not set
739CONFIG_UNIX98_PTYS=y
740CONFIG_LEGACY_PTYS=y
741CONFIG_LEGACY_PTY_COUNT=256
742
743#
744# IPMI
745#
746# CONFIG_IPMI_HANDLER is not set
747
748#
749# Watchdog Cards
750#
751# CONFIG_WATCHDOG is not set
752# CONFIG_RTC is not set
753# CONFIG_DTLK is not set
754# CONFIG_R3964 is not set
755# CONFIG_APPLICOM is not set
756
757#
758# Ftape, the floppy tape device driver
759#
760CONFIG_AGP=m
761CONFIG_AGP_UNINORTH=m
762# CONFIG_DRM is not set
763CONFIG_RAW_DRIVER=y
764CONFIG_MAX_RAW_DEVS=256
765# CONFIG_HANGCHECK_TIMER is not set
766
767#
768# TPM devices
769#
770# CONFIG_TCG_TPM is not set
771
772#
773# I2C support
774#
775CONFIG_I2C=y
776CONFIG_I2C_CHARDEV=y
777
778#
779# I2C Algorithms
780#
781CONFIG_I2C_ALGOBIT=y
782# CONFIG_I2C_ALGOPCF is not set
783# CONFIG_I2C_ALGOPCA is not set
784
785#
786# I2C Hardware Bus support
787#
788# CONFIG_I2C_ALI1535 is not set
789# CONFIG_I2C_ALI1563 is not set
790# CONFIG_I2C_ALI15X3 is not set
791# CONFIG_I2C_AMD756 is not set
792# CONFIG_I2C_AMD8111 is not set
793# CONFIG_I2C_I801 is not set
794# CONFIG_I2C_I810 is not set
795# CONFIG_I2C_PIIX4 is not set
796CONFIG_I2C_KEYWEST=y
797CONFIG_I2C_PMAC_SMU=y
798# CONFIG_I2C_NFORCE2 is not set
799# CONFIG_I2C_PARPORT_LIGHT is not set
800# CONFIG_I2C_PROSAVAGE is not set
801# CONFIG_I2C_SAVAGE4 is not set
802# CONFIG_SCx200_ACB is not set
803# CONFIG_I2C_SIS5595 is not set
804# CONFIG_I2C_SIS630 is not set
805# CONFIG_I2C_SIS96X is not set
806# CONFIG_I2C_STUB is not set
807# CONFIG_I2C_VIA is not set
808# CONFIG_I2C_VIAPRO is not set
809# CONFIG_I2C_VOODOO3 is not set
810# CONFIG_I2C_PCA_ISA is not set
811
812#
813# Miscellaneous I2C Chip support
814#
815# CONFIG_SENSORS_DS1337 is not set
816# CONFIG_SENSORS_DS1374 is not set
817# CONFIG_SENSORS_EEPROM is not set
818# CONFIG_SENSORS_PCF8574 is not set
819# CONFIG_SENSORS_PCA9539 is not set
820# CONFIG_SENSORS_PCF8591 is not set
821# CONFIG_SENSORS_RTC8564 is not set
822# CONFIG_SENSORS_MAX6875 is not set
823# CONFIG_I2C_DEBUG_CORE is not set
824# CONFIG_I2C_DEBUG_ALGO is not set
825# CONFIG_I2C_DEBUG_BUS is not set
826# CONFIG_I2C_DEBUG_CHIP is not set
827
828#
829# Dallas's 1-wire bus
830#
831# CONFIG_W1 is not set
832
833#
834# Hardware Monitoring support
835#
836# CONFIG_HWMON is not set
837# CONFIG_HWMON_VID is not set
838
839#
840# Misc devices
841#
842
843#
844# Multimedia Capabilities Port drivers
845#
846
847#
848# Multimedia devices
849#
850# CONFIG_VIDEO_DEV is not set
851
852#
853# Digital Video Broadcasting Devices
854#
855# CONFIG_DVB is not set
856
857#
858# Graphics support
859#
860CONFIG_FB=y
861CONFIG_FB_CFB_FILLRECT=y
862CONFIG_FB_CFB_COPYAREA=y
863CONFIG_FB_CFB_IMAGEBLIT=y
864CONFIG_FB_SOFT_CURSOR=y
865CONFIG_FB_MACMODES=y
866CONFIG_FB_MODE_HELPERS=y
867CONFIG_FB_TILEBLITTING=y
868# CONFIG_FB_CIRRUS is not set
869# CONFIG_FB_PM2 is not set
870# CONFIG_FB_CYBER2000 is not set
871CONFIG_FB_OF=y
872# CONFIG_FB_CONTROL is not set
873# CONFIG_FB_PLATINUM is not set
874# CONFIG_FB_VALKYRIE is not set
875# CONFIG_FB_CT65550 is not set
876# CONFIG_FB_ASILIANT is not set
877# CONFIG_FB_IMSTT is not set
878# CONFIG_FB_VGA16 is not set
879# CONFIG_FB_NVIDIA is not set
880CONFIG_FB_RIVA=y
881# CONFIG_FB_RIVA_I2C is not set
882# CONFIG_FB_RIVA_DEBUG is not set
883# CONFIG_FB_MATROX is not set
884# CONFIG_FB_RADEON_OLD is not set
885CONFIG_FB_RADEON=y
886CONFIG_FB_RADEON_I2C=y
887# CONFIG_FB_RADEON_DEBUG is not set
888# CONFIG_FB_ATY128 is not set
889# CONFIG_FB_ATY is not set
890# CONFIG_FB_SAVAGE is not set
891# CONFIG_FB_SIS is not set
892# CONFIG_FB_NEOMAGIC is not set
893# CONFIG_FB_KYRO is not set
894# CONFIG_FB_3DFX is not set
895# CONFIG_FB_VOODOO1 is not set
896# CONFIG_FB_CYBLA is not set
897# CONFIG_FB_TRIDENT is not set
898# CONFIG_FB_S1D13XXX is not set
899# CONFIG_FB_VIRTUAL is not set
900
901#
902# Console display driver support
903#
904# CONFIG_VGA_CONSOLE is not set
905CONFIG_DUMMY_CONSOLE=y
906CONFIG_FRAMEBUFFER_CONSOLE=y
907# CONFIG_FONTS is not set
908CONFIG_FONT_8x8=y
909CONFIG_FONT_8x16=y
910
911#
912# Logo configuration
913#
914CONFIG_LOGO=y
915CONFIG_LOGO_LINUX_MONO=y
916CONFIG_LOGO_LINUX_VGA16=y
917CONFIG_LOGO_LINUX_CLUT224=y
918CONFIG_BACKLIGHT_LCD_SUPPORT=y
919CONFIG_BACKLIGHT_CLASS_DEVICE=m
920CONFIG_BACKLIGHT_DEVICE=y
921CONFIG_LCD_CLASS_DEVICE=m
922CONFIG_LCD_DEVICE=y
923
924#
925# Sound
926#
927# CONFIG_SOUND is not set
928
929#
930# USB support
931#
932CONFIG_USB_ARCH_HAS_HCD=y
933CONFIG_USB_ARCH_HAS_OHCI=y
934CONFIG_USB=y
935# CONFIG_USB_DEBUG is not set
936
937#
938# Miscellaneous USB options
939#
940CONFIG_USB_DEVICEFS=y
941# CONFIG_USB_BANDWIDTH is not set
942# CONFIG_USB_DYNAMIC_MINORS is not set
943# CONFIG_USB_OTG is not set
944
945#
946# USB Host Controller Drivers
947#
948CONFIG_USB_EHCI_HCD=y
949# CONFIG_USB_EHCI_SPLIT_ISO is not set
950# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
951# CONFIG_USB_ISP116X_HCD is not set
952CONFIG_USB_OHCI_HCD=y
953# CONFIG_USB_OHCI_BIG_ENDIAN is not set
954CONFIG_USB_OHCI_LITTLE_ENDIAN=y
955# CONFIG_USB_UHCI_HCD is not set
956# CONFIG_USB_SL811_HCD is not set
957
958#
959# USB Device Class drivers
960#
961# CONFIG_USB_BLUETOOTH_TTY is not set
962CONFIG_USB_ACM=m
963CONFIG_USB_PRINTER=y
964
965#
966# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
967#
968CONFIG_USB_STORAGE=y
969# CONFIG_USB_STORAGE_DEBUG is not set
970CONFIG_USB_STORAGE_DATAFAB=y
971CONFIG_USB_STORAGE_FREECOM=y
972CONFIG_USB_STORAGE_ISD200=y
973CONFIG_USB_STORAGE_DPCM=y
974# CONFIG_USB_STORAGE_USBAT is not set
975CONFIG_USB_STORAGE_SDDR09=y
976CONFIG_USB_STORAGE_SDDR55=y
977CONFIG_USB_STORAGE_JUMPSHOT=y
978# CONFIG_USB_STORAGE_ONETOUCH is not set
979
980#
981# USB Input Devices
982#
983CONFIG_USB_HID=y
984CONFIG_USB_HIDINPUT=y
985CONFIG_HID_FF=y
986CONFIG_HID_PID=y
987CONFIG_LOGITECH_FF=y
988CONFIG_THRUSTMASTER_FF=y
989CONFIG_USB_HIDDEV=y
990# CONFIG_USB_AIPTEK is not set
991# CONFIG_USB_WACOM is not set
992# CONFIG_USB_ACECAD is not set
993# CONFIG_USB_KBTAB is not set
994# CONFIG_USB_POWERMATE is not set
995# CONFIG_USB_MTOUCH is not set
996# CONFIG_USB_ITMTOUCH is not set
997# CONFIG_USB_EGALAX is not set
998# CONFIG_USB_YEALINK is not set
999# CONFIG_USB_XPAD is not set
1000# CONFIG_USB_ATI_REMOTE is not set
1001# CONFIG_USB_KEYSPAN_REMOTE is not set
1002# CONFIG_USB_APPLETOUCH is not set
1003
1004#
1005# USB Imaging devices
1006#
1007# CONFIG_USB_MDC800 is not set
1008# CONFIG_USB_MICROTEK is not set
1009
1010#
1011# USB Multimedia devices
1012#
1013# CONFIG_USB_DABUSB is not set
1014
1015#
1016# Video4Linux support is needed for USB Multimedia device support
1017#
1018
1019#
1020# USB Network Adapters
1021#
1022CONFIG_USB_CATC=m
1023CONFIG_USB_KAWETH=m
1024CONFIG_USB_PEGASUS=m
1025CONFIG_USB_RTL8150=m
1026CONFIG_USB_USBNET=m
1027# CONFIG_USB_NET_AX8817X is not set
1028CONFIG_USB_NET_CDCETHER=m
1029# CONFIG_USB_NET_GL620A is not set
1030# CONFIG_USB_NET_NET1080 is not set
1031# CONFIG_USB_NET_PLUSB is not set
1032# CONFIG_USB_NET_RNDIS_HOST is not set
1033# CONFIG_USB_NET_CDC_SUBSET is not set
1034# CONFIG_USB_NET_ZAURUS is not set
1035CONFIG_USB_MON=y
1036
1037#
1038# USB port drivers
1039#
1040
1041#
1042# USB Serial Converter support
1043#
1044CONFIG_USB_SERIAL=m
1045CONFIG_USB_SERIAL_GENERIC=y
1046# CONFIG_USB_SERIAL_AIRPRIME is not set
1047CONFIG_USB_SERIAL_BELKIN=m
1048CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
1049# CONFIG_USB_SERIAL_CP2101 is not set
1050CONFIG_USB_SERIAL_CYPRESS_M8=m
1051CONFIG_USB_SERIAL_EMPEG=m
1052CONFIG_USB_SERIAL_FTDI_SIO=m
1053CONFIG_USB_SERIAL_VISOR=m
1054CONFIG_USB_SERIAL_IPAQ=m
1055CONFIG_USB_SERIAL_IR=m
1056CONFIG_USB_SERIAL_EDGEPORT=m
1057CONFIG_USB_SERIAL_EDGEPORT_TI=m
1058CONFIG_USB_SERIAL_GARMIN=m
1059CONFIG_USB_SERIAL_IPW=m
1060CONFIG_USB_SERIAL_KEYSPAN_PDA=m
1061CONFIG_USB_SERIAL_KEYSPAN=m
1062CONFIG_USB_SERIAL_KEYSPAN_MPR=y
1063CONFIG_USB_SERIAL_KEYSPAN_USA28=y
1064CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
1065CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
1066CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
1067CONFIG_USB_SERIAL_KEYSPAN_USA19=y
1068CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
1069CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
1070CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
1071CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
1072CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
1073CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
1074CONFIG_USB_SERIAL_KLSI=m
1075CONFIG_USB_SERIAL_KOBIL_SCT=m
1076CONFIG_USB_SERIAL_MCT_U232=m
1077CONFIG_USB_SERIAL_PL2303=m
1078# CONFIG_USB_SERIAL_HP4X is not set
1079CONFIG_USB_SERIAL_SAFE=m
1080CONFIG_USB_SERIAL_SAFE_PADDED=y
1081CONFIG_USB_SERIAL_TI=m
1082CONFIG_USB_SERIAL_CYBERJACK=m
1083CONFIG_USB_SERIAL_XIRCOM=m
1084CONFIG_USB_SERIAL_OMNINET=m
1085CONFIG_USB_EZUSB=y
1086
1087#
1088# USB Miscellaneous drivers
1089#
1090# CONFIG_USB_EMI62 is not set
1091# CONFIG_USB_EMI26 is not set
1092# CONFIG_USB_AUERSWALD is not set
1093# CONFIG_USB_RIO500 is not set
1094# CONFIG_USB_LEGOTOWER is not set
1095# CONFIG_USB_LCD is not set
1096# CONFIG_USB_LED is not set
1097# CONFIG_USB_CYTHERM is not set
1098# CONFIG_USB_PHIDGETKIT is not set
1099# CONFIG_USB_PHIDGETSERVO is not set
1100# CONFIG_USB_IDMOUSE is not set
1101# CONFIG_USB_SISUSBVGA is not set
1102# CONFIG_USB_LD is not set
1103# CONFIG_USB_TEST is not set
1104
1105#
1106# USB DSL modem support
1107#
1108
1109#
1110# USB Gadget Support
1111#
1112# CONFIG_USB_GADGET is not set
1113
1114#
1115# MMC/SD Card support
1116#
1117# CONFIG_MMC is not set
1118
1119#
1120# InfiniBand support
1121#
1122# CONFIG_INFINIBAND is not set
1123
1124#
1125# SN Devices
1126#
1127
1128#
1129# File systems
1130#
1131CONFIG_EXT2_FS=y
1132CONFIG_EXT2_FS_XATTR=y
1133CONFIG_EXT2_FS_POSIX_ACL=y
1134CONFIG_EXT2_FS_SECURITY=y
1135CONFIG_EXT2_FS_XIP=y
1136CONFIG_FS_XIP=y
1137CONFIG_EXT3_FS=y
1138CONFIG_EXT3_FS_XATTR=y
1139CONFIG_EXT3_FS_POSIX_ACL=y
1140CONFIG_EXT3_FS_SECURITY=y
1141CONFIG_JBD=y
1142# CONFIG_JBD_DEBUG is not set
1143CONFIG_FS_MBCACHE=y
1144CONFIG_REISERFS_FS=y
1145# CONFIG_REISERFS_CHECK is not set
1146# CONFIG_REISERFS_PROC_INFO is not set
1147CONFIG_REISERFS_FS_XATTR=y
1148CONFIG_REISERFS_FS_POSIX_ACL=y
1149CONFIG_REISERFS_FS_SECURITY=y
1150# CONFIG_JFS_FS is not set
1151CONFIG_FS_POSIX_ACL=y
1152CONFIG_XFS_FS=m
1153CONFIG_XFS_EXPORT=y
1154# CONFIG_XFS_QUOTA is not set
1155CONFIG_XFS_SECURITY=y
1156CONFIG_XFS_POSIX_ACL=y
1157# CONFIG_XFS_RT is not set
1158# CONFIG_MINIX_FS is not set
1159# CONFIG_ROMFS_FS is not set
1160CONFIG_INOTIFY=y
1161# CONFIG_QUOTA is not set
1162CONFIG_DNOTIFY=y
1163CONFIG_AUTOFS_FS=m
1164# CONFIG_AUTOFS4_FS is not set
1165# CONFIG_FUSE_FS is not set
1166
1167#
1168# CD-ROM/DVD Filesystems
1169#
1170CONFIG_ISO9660_FS=y
1171CONFIG_JOLIET=y
1172CONFIG_ZISOFS=y
1173CONFIG_ZISOFS_FS=y
1174CONFIG_UDF_FS=m
1175CONFIG_UDF_NLS=y
1176
1177#
1178# DOS/FAT/NT Filesystems
1179#
1180CONFIG_FAT_FS=y
1181CONFIG_MSDOS_FS=y
1182CONFIG_VFAT_FS=y
1183CONFIG_FAT_DEFAULT_CODEPAGE=437
1184CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1185# CONFIG_NTFS_FS is not set
1186
1187#
1188# Pseudo filesystems
1189#
1190CONFIG_PROC_FS=y
1191CONFIG_PROC_KCORE=y
1192CONFIG_SYSFS=y
1193CONFIG_TMPFS=y
1194CONFIG_HUGETLBFS=y
1195CONFIG_HUGETLB_PAGE=y
1196CONFIG_RAMFS=y
1197# CONFIG_RELAYFS_FS is not set
1198
1199#
1200# Miscellaneous filesystems
1201#
1202# CONFIG_ADFS_FS is not set
1203# CONFIG_AFFS_FS is not set
1204CONFIG_HFS_FS=m
1205CONFIG_HFSPLUS_FS=m
1206# CONFIG_BEFS_FS is not set
1207# CONFIG_BFS_FS is not set
1208# CONFIG_EFS_FS is not set
1209CONFIG_CRAMFS=y
1210# CONFIG_VXFS_FS is not set
1211# CONFIG_HPFS_FS is not set
1212# CONFIG_QNX4FS_FS is not set
1213# CONFIG_SYSV_FS is not set
1214# CONFIG_UFS_FS is not set
1215
1216#
1217# Network File Systems
1218#
1219CONFIG_NFS_FS=y
1220CONFIG_NFS_V3=y
1221CONFIG_NFS_V3_ACL=y
1222CONFIG_NFS_V4=y
1223# CONFIG_NFS_DIRECTIO is not set
1224CONFIG_NFSD=y
1225CONFIG_NFSD_V2_ACL=y
1226CONFIG_NFSD_V3=y
1227CONFIG_NFSD_V3_ACL=y
1228CONFIG_NFSD_V4=y
1229CONFIG_NFSD_TCP=y
1230CONFIG_LOCKD=y
1231CONFIG_LOCKD_V4=y
1232CONFIG_EXPORTFS=y
1233CONFIG_NFS_ACL_SUPPORT=y
1234CONFIG_NFS_COMMON=y
1235CONFIG_SUNRPC=y
1236CONFIG_SUNRPC_GSS=y
1237CONFIG_RPCSEC_GSS_KRB5=y
1238# CONFIG_RPCSEC_GSS_SPKM3 is not set
1239# CONFIG_SMB_FS is not set
1240CONFIG_CIFS=m
1241# CONFIG_CIFS_STATS is not set
1242# CONFIG_CIFS_XATTR is not set
1243# CONFIG_CIFS_EXPERIMENTAL is not set
1244# CONFIG_NCP_FS is not set
1245# CONFIG_CODA_FS is not set
1246# CONFIG_AFS_FS is not set
1247# CONFIG_9P_FS is not set
1248
1249#
1250# Partition Types
1251#
1252CONFIG_PARTITION_ADVANCED=y
1253# CONFIG_ACORN_PARTITION is not set
1254# CONFIG_OSF_PARTITION is not set
1255# CONFIG_AMIGA_PARTITION is not set
1256# CONFIG_ATARI_PARTITION is not set
1257CONFIG_MAC_PARTITION=y
1258CONFIG_MSDOS_PARTITION=y
1259# CONFIG_BSD_DISKLABEL is not set
1260# CONFIG_MINIX_SUBPARTITION is not set
1261# CONFIG_SOLARIS_X86_PARTITION is not set
1262# CONFIG_UNIXWARE_DISKLABEL is not set
1263# CONFIG_LDM_PARTITION is not set
1264# CONFIG_SGI_PARTITION is not set
1265# CONFIG_ULTRIX_PARTITION is not set
1266# CONFIG_SUN_PARTITION is not set
1267# CONFIG_EFI_PARTITION is not set
1268
1269#
1270# Native Language Support
1271#
1272CONFIG_NLS=y
1273CONFIG_NLS_DEFAULT="iso8859-1"
1274CONFIG_NLS_CODEPAGE_437=y
1275# CONFIG_NLS_CODEPAGE_737 is not set
1276# CONFIG_NLS_CODEPAGE_775 is not set
1277# CONFIG_NLS_CODEPAGE_850 is not set
1278# CONFIG_NLS_CODEPAGE_852 is not set
1279# CONFIG_NLS_CODEPAGE_855 is not set
1280# CONFIG_NLS_CODEPAGE_857 is not set
1281# CONFIG_NLS_CODEPAGE_860 is not set
1282# CONFIG_NLS_CODEPAGE_861 is not set
1283# CONFIG_NLS_CODEPAGE_862 is not set
1284# CONFIG_NLS_CODEPAGE_863 is not set
1285# CONFIG_NLS_CODEPAGE_864 is not set
1286# CONFIG_NLS_CODEPAGE_865 is not set
1287# CONFIG_NLS_CODEPAGE_866 is not set
1288# CONFIG_NLS_CODEPAGE_869 is not set
1289# CONFIG_NLS_CODEPAGE_936 is not set
1290# CONFIG_NLS_CODEPAGE_950 is not set
1291# CONFIG_NLS_CODEPAGE_932 is not set
1292# CONFIG_NLS_CODEPAGE_949 is not set
1293# CONFIG_NLS_CODEPAGE_874 is not set
1294# CONFIG_NLS_ISO8859_8 is not set
1295CONFIG_NLS_CODEPAGE_1250=y
1296CONFIG_NLS_CODEPAGE_1251=y
1297CONFIG_NLS_ASCII=y
1298CONFIG_NLS_ISO8859_1=y
1299# CONFIG_NLS_ISO8859_2 is not set
1300# CONFIG_NLS_ISO8859_3 is not set
1301# CONFIG_NLS_ISO8859_4 is not set
1302# CONFIG_NLS_ISO8859_5 is not set
1303# CONFIG_NLS_ISO8859_6 is not set
1304# CONFIG_NLS_ISO8859_7 is not set
1305# CONFIG_NLS_ISO8859_9 is not set
1306# CONFIG_NLS_ISO8859_13 is not set
1307# CONFIG_NLS_ISO8859_14 is not set
1308CONFIG_NLS_ISO8859_15=y
1309# CONFIG_NLS_KOI8_R is not set
1310# CONFIG_NLS_KOI8_U is not set
1311CONFIG_NLS_UTF8=y
1312
1313#
1314# Profiling support
1315#
1316CONFIG_PROFILING=y
1317CONFIG_OPROFILE=y
1318
1319#
1320# Kernel hacking
1321#
1322# CONFIG_PRINTK_TIME is not set
1323CONFIG_DEBUG_KERNEL=y
1324CONFIG_MAGIC_SYSRQ=y
1325CONFIG_LOG_BUF_SHIFT=17
1326CONFIG_DETECT_SOFTLOCKUP=y
1327# CONFIG_SCHEDSTATS is not set
1328# CONFIG_DEBUG_SLAB is not set
1329# CONFIG_DEBUG_SPINLOCK is not set
1330# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1331# CONFIG_DEBUG_KOBJECT is not set
1332# CONFIG_DEBUG_INFO is not set
1333CONFIG_DEBUG_FS=y
1334# CONFIG_DEBUG_STACKOVERFLOW is not set
1335# CONFIG_KPROBES is not set
1336# CONFIG_DEBUG_STACK_USAGE is not set
1337# CONFIG_DEBUGGER is not set
1338# CONFIG_PPCDBG is not set
1339CONFIG_IRQSTACKS=y
1340
1341#
1342# Security options
1343#
1344# CONFIG_KEYS is not set
1345# CONFIG_SECURITY is not set
1346
1347#
1348# Cryptographic options
1349#
1350CONFIG_CRYPTO=y
1351CONFIG_CRYPTO_HMAC=y
1352CONFIG_CRYPTO_NULL=m
1353CONFIG_CRYPTO_MD4=m
1354CONFIG_CRYPTO_MD5=y
1355CONFIG_CRYPTO_SHA1=m
1356CONFIG_CRYPTO_SHA256=m
1357CONFIG_CRYPTO_SHA512=m
1358CONFIG_CRYPTO_WP512=m
1359# CONFIG_CRYPTO_TGR192 is not set
1360CONFIG_CRYPTO_DES=y
1361CONFIG_CRYPTO_BLOWFISH=m
1362CONFIG_CRYPTO_TWOFISH=m
1363CONFIG_CRYPTO_SERPENT=m
1364CONFIG_CRYPTO_AES=m
1365CONFIG_CRYPTO_CAST5=m
1366CONFIG_CRYPTO_CAST6=m
1367CONFIG_CRYPTO_TEA=m
1368CONFIG_CRYPTO_ARC4=m
1369CONFIG_CRYPTO_KHAZAD=m
1370CONFIG_CRYPTO_ANUBIS=m
1371CONFIG_CRYPTO_DEFLATE=m
1372CONFIG_CRYPTO_MICHAEL_MIC=m
1373CONFIG_CRYPTO_CRC32C=m
1374CONFIG_CRYPTO_TEST=m
1375
1376#
1377# Hardware crypto devices
1378#
1379
1380#
1381# Library routines
1382#
1383CONFIG_CRC_CCITT=m
1384# CONFIG_CRC16 is not set
1385CONFIG_CRC32=y
1386CONFIG_LIBCRC32C=m
1387CONFIG_ZLIB_INFLATE=y
1388CONFIG_ZLIB_DEFLATE=m
1389CONFIG_TEXTSEARCH=y
1390CONFIG_TEXTSEARCH_KMP=m
1391CONFIG_TEXTSEARCH_BM=m
1392CONFIG_TEXTSEARCH_FSM=m
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig
new file mode 100644
index 000000000000..62e92c7e9e27
--- /dev/null
+++ b/arch/powerpc/configs/iseries_defconfig
@@ -0,0 +1,998 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc4
4# Thu Oct 20 08:30:56 2005
5#
6CONFIG_64BIT=y
7CONFIG_MMU=y
8CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9CONFIG_GENERIC_CALIBRATE_DELAY=y
10CONFIG_GENERIC_ISA_DMA=y
11CONFIG_EARLY_PRINTK=y
12CONFIG_COMPAT=y
13CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
14CONFIG_ARCH_MAY_HAVE_PC_FDC=y
15CONFIG_FORCE_MAX_ZONEORDER=13
16
17#
18# Code maturity level options
19#
20CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_LOCK_KERNEL=y
23CONFIG_INIT_ENV_ARG_LIMIT=32
24
25#
26# General setup
27#
28CONFIG_LOCALVERSION=""
29CONFIG_LOCALVERSION_AUTO=y
30CONFIG_SWAP=y
31CONFIG_SYSVIPC=y
32CONFIG_POSIX_MQUEUE=y
33# CONFIG_BSD_PROCESS_ACCT is not set
34CONFIG_SYSCTL=y
35CONFIG_AUDIT=y
36CONFIG_AUDITSYSCALL=y
37CONFIG_HOTPLUG=y
38CONFIG_KOBJECT_UEVENT=y
39CONFIG_IKCONFIG=y
40CONFIG_IKCONFIG_PROC=y
41# CONFIG_CPUSETS is not set
42CONFIG_INITRAMFS_SOURCE=""
43# CONFIG_EMBEDDED is not set
44CONFIG_KALLSYMS=y
45# CONFIG_KALLSYMS_ALL is not set
46# CONFIG_KALLSYMS_EXTRA_PASS is not set
47CONFIG_PRINTK=y
48CONFIG_BUG=y
49CONFIG_BASE_FULL=y
50CONFIG_FUTEX=y
51CONFIG_EPOLL=y
52CONFIG_SHMEM=y
53CONFIG_CC_ALIGN_FUNCTIONS=0
54CONFIG_CC_ALIGN_LABELS=0
55CONFIG_CC_ALIGN_LOOPS=0
56CONFIG_CC_ALIGN_JUMPS=0
57# CONFIG_TINY_SHMEM is not set
58CONFIG_BASE_SMALL=0
59
60#
61# Loadable module support
62#
63CONFIG_MODULES=y
64CONFIG_MODULE_UNLOAD=y
65# CONFIG_MODULE_FORCE_UNLOAD is not set
66CONFIG_OBSOLETE_MODPARM=y
67CONFIG_MODVERSIONS=y
68CONFIG_MODULE_SRCVERSION_ALL=y
69CONFIG_KMOD=y
70CONFIG_STOP_MACHINE=y
71CONFIG_SYSVIPC_COMPAT=y
72
73#
74# Platform support
75#
76CONFIG_PPC_ISERIES=y
77# CONFIG_PPC_MULTIPLATFORM is not set
78CONFIG_PPC=y
79CONFIG_PPC64=y
80CONFIG_IBMVIO=y
81# CONFIG_POWER4_ONLY is not set
82CONFIG_IOMMU_VMERGE=y
83CONFIG_SMP=y
84CONFIG_NR_CPUS=32
85CONFIG_ARCH_SELECT_MEMORY_MODEL=y
86CONFIG_ARCH_FLATMEM_ENABLE=y
87CONFIG_SELECT_MEMORY_MODEL=y
88CONFIG_FLATMEM_MANUAL=y
89# CONFIG_DISCONTIGMEM_MANUAL is not set
90# CONFIG_SPARSEMEM_MANUAL is not set
91CONFIG_FLATMEM=y
92CONFIG_FLAT_NODE_MEM_MAP=y
93# CONFIG_SPARSEMEM_STATIC is not set
94# CONFIG_NUMA is not set
95# CONFIG_SCHED_SMT is not set
96CONFIG_PREEMPT_NONE=y
97# CONFIG_PREEMPT_VOLUNTARY is not set
98# CONFIG_PREEMPT is not set
99# CONFIG_PREEMPT_BKL is not set
100# CONFIG_HZ_100 is not set
101CONFIG_HZ_250=y
102# CONFIG_HZ_1000 is not set
103CONFIG_HZ=250
104CONFIG_GENERIC_HARDIRQS=y
105CONFIG_LPARCFG=y
106CONFIG_SECCOMP=y
107CONFIG_BINFMT_ELF=y
108# CONFIG_BINFMT_MISC is not set
109CONFIG_ISA_DMA_API=y
110
111#
112# Bus Options
113#
114CONFIG_PCI=y
115CONFIG_PCI_DOMAINS=y
116CONFIG_PCI_LEGACY_PROC=y
117# CONFIG_PCI_DEBUG is not set
118
119#
120# PCCARD (PCMCIA/CardBus) support
121#
122# CONFIG_PCCARD is not set
123
124#
125# PCI Hotplug Support
126#
127# CONFIG_HOTPLUG_PCI is not set
128
129#
130# Networking
131#
132CONFIG_NET=y
133
134#
135# Networking options
136#
137CONFIG_PACKET=y
138# CONFIG_PACKET_MMAP is not set
139CONFIG_UNIX=y
140CONFIG_XFRM=y
141CONFIG_XFRM_USER=m
142CONFIG_NET_KEY=m
143CONFIG_INET=y
144CONFIG_IP_MULTICAST=y
145# CONFIG_IP_ADVANCED_ROUTER is not set
146CONFIG_IP_FIB_HASH=y
147# CONFIG_IP_PNP is not set
148CONFIG_NET_IPIP=y
149# CONFIG_NET_IPGRE is not set
150# CONFIG_IP_MROUTE is not set
151# CONFIG_ARPD is not set
152CONFIG_SYN_COOKIES=y
153CONFIG_INET_AH=m
154CONFIG_INET_ESP=m
155CONFIG_INET_IPCOMP=m
156CONFIG_INET_TUNNEL=y
157CONFIG_INET_DIAG=y
158CONFIG_INET_TCP_DIAG=y
159# CONFIG_TCP_CONG_ADVANCED is not set
160CONFIG_TCP_CONG_BIC=y
161
162#
163# IP: Virtual Server Configuration
164#
165# CONFIG_IP_VS is not set
166# CONFIG_IPV6 is not set
167CONFIG_NETFILTER=y
168# CONFIG_NETFILTER_DEBUG is not set
169# CONFIG_NETFILTER_NETLINK is not set
170
171#
172# IP: Netfilter Configuration
173#
174CONFIG_IP_NF_CONNTRACK=m
175CONFIG_IP_NF_CT_ACCT=y
176CONFIG_IP_NF_CONNTRACK_MARK=y
177CONFIG_IP_NF_CONNTRACK_EVENTS=y
178CONFIG_IP_NF_CT_PROTO_SCTP=m
179CONFIG_IP_NF_FTP=m
180CONFIG_IP_NF_IRC=m
181# CONFIG_IP_NF_NETBIOS_NS is not set
182CONFIG_IP_NF_TFTP=m
183CONFIG_IP_NF_AMANDA=m
184# CONFIG_IP_NF_PPTP is not set
185CONFIG_IP_NF_QUEUE=m
186CONFIG_IP_NF_IPTABLES=m
187CONFIG_IP_NF_MATCH_LIMIT=m
188CONFIG_IP_NF_MATCH_IPRANGE=m
189CONFIG_IP_NF_MATCH_MAC=m
190CONFIG_IP_NF_MATCH_PKTTYPE=m
191CONFIG_IP_NF_MATCH_MARK=m
192CONFIG_IP_NF_MATCH_MULTIPORT=m
193CONFIG_IP_NF_MATCH_TOS=m
194CONFIG_IP_NF_MATCH_RECENT=m
195CONFIG_IP_NF_MATCH_ECN=m
196CONFIG_IP_NF_MATCH_DSCP=m
197CONFIG_IP_NF_MATCH_AH_ESP=m
198CONFIG_IP_NF_MATCH_LENGTH=m
199CONFIG_IP_NF_MATCH_TTL=m
200CONFIG_IP_NF_MATCH_TCPMSS=m
201CONFIG_IP_NF_MATCH_HELPER=m
202CONFIG_IP_NF_MATCH_STATE=m
203CONFIG_IP_NF_MATCH_CONNTRACK=m
204CONFIG_IP_NF_MATCH_OWNER=m
205CONFIG_IP_NF_MATCH_ADDRTYPE=m
206CONFIG_IP_NF_MATCH_REALM=m
207CONFIG_IP_NF_MATCH_SCTP=m
208# CONFIG_IP_NF_MATCH_DCCP is not set
209CONFIG_IP_NF_MATCH_COMMENT=m
210CONFIG_IP_NF_MATCH_CONNMARK=m
211CONFIG_IP_NF_MATCH_CONNBYTES=m
212CONFIG_IP_NF_MATCH_HASHLIMIT=m
213CONFIG_IP_NF_MATCH_STRING=m
214CONFIG_IP_NF_FILTER=m
215CONFIG_IP_NF_TARGET_REJECT=m
216CONFIG_IP_NF_TARGET_LOG=m
217CONFIG_IP_NF_TARGET_ULOG=m
218CONFIG_IP_NF_TARGET_TCPMSS=m
219CONFIG_IP_NF_TARGET_NFQUEUE=m
220CONFIG_IP_NF_NAT=m
221CONFIG_IP_NF_NAT_NEEDED=y
222CONFIG_IP_NF_TARGET_MASQUERADE=m
223CONFIG_IP_NF_TARGET_REDIRECT=m
224CONFIG_IP_NF_TARGET_NETMAP=m
225CONFIG_IP_NF_TARGET_SAME=m
226CONFIG_IP_NF_NAT_SNMP_BASIC=m
227CONFIG_IP_NF_NAT_IRC=m
228CONFIG_IP_NF_NAT_FTP=m
229CONFIG_IP_NF_NAT_TFTP=m
230CONFIG_IP_NF_NAT_AMANDA=m
231CONFIG_IP_NF_MANGLE=m
232CONFIG_IP_NF_TARGET_TOS=m
233CONFIG_IP_NF_TARGET_ECN=m
234CONFIG_IP_NF_TARGET_DSCP=m
235CONFIG_IP_NF_TARGET_MARK=m
236CONFIG_IP_NF_TARGET_CLASSIFY=m
237CONFIG_IP_NF_TARGET_TTL=m
238CONFIG_IP_NF_TARGET_CONNMARK=m
239CONFIG_IP_NF_TARGET_CLUSTERIP=m
240CONFIG_IP_NF_RAW=m
241CONFIG_IP_NF_TARGET_NOTRACK=m
242CONFIG_IP_NF_ARPTABLES=m
243CONFIG_IP_NF_ARPFILTER=m
244CONFIG_IP_NF_ARP_MANGLE=m
245
246#
247# DCCP Configuration (EXPERIMENTAL)
248#
249# CONFIG_IP_DCCP is not set
250
251#
252# SCTP Configuration (EXPERIMENTAL)
253#
254# CONFIG_IP_SCTP is not set
255# CONFIG_ATM is not set
256# CONFIG_BRIDGE is not set
257# CONFIG_VLAN_8021Q is not set
258# CONFIG_DECNET is not set
259CONFIG_LLC=y
260# CONFIG_LLC2 is not set
261# CONFIG_IPX is not set
262# CONFIG_ATALK is not set
263# CONFIG_X25 is not set
264# CONFIG_LAPB is not set
265# CONFIG_NET_DIVERT is not set
266# CONFIG_ECONET is not set
267# CONFIG_WAN_ROUTER is not set
268# CONFIG_NET_SCHED is not set
269CONFIG_NET_CLS_ROUTE=y
270
271#
272# Network testing
273#
274# CONFIG_NET_PKTGEN is not set
275# CONFIG_HAMRADIO is not set
276# CONFIG_IRDA is not set
277# CONFIG_BT is not set
278# CONFIG_IEEE80211 is not set
279
280#
281# Device Drivers
282#
283
284#
285# Generic Driver Options
286#
287CONFIG_STANDALONE=y
288CONFIG_PREVENT_FIRMWARE_BUILD=y
289CONFIG_FW_LOADER=m
290# CONFIG_DEBUG_DRIVER is not set
291
292#
293# Connector - unified userspace <-> kernelspace linker
294#
295# CONFIG_CONNECTOR is not set
296
297#
298# Memory Technology Devices (MTD)
299#
300# CONFIG_MTD is not set
301
302#
303# Parallel port support
304#
305# CONFIG_PARPORT is not set
306
307#
308# Plug and Play support
309#
310
311#
312# Block devices
313#
314# CONFIG_BLK_DEV_FD is not set
315# CONFIG_BLK_CPQ_DA is not set
316# CONFIG_BLK_CPQ_CISS_DA is not set
317# CONFIG_BLK_DEV_DAC960 is not set
318# CONFIG_BLK_DEV_UMEM is not set
319# CONFIG_BLK_DEV_COW_COMMON is not set
320CONFIG_BLK_DEV_LOOP=y
321# CONFIG_BLK_DEV_CRYPTOLOOP is not set
322CONFIG_BLK_DEV_NBD=m
323# CONFIG_BLK_DEV_SX8 is not set
324CONFIG_BLK_DEV_RAM=y
325CONFIG_BLK_DEV_RAM_COUNT=16
326CONFIG_BLK_DEV_RAM_SIZE=65536
327CONFIG_BLK_DEV_INITRD=y
328# CONFIG_CDROM_PKTCDVD is not set
329
330#
331# IO Schedulers
332#
333CONFIG_IOSCHED_NOOP=y
334CONFIG_IOSCHED_AS=y
335CONFIG_IOSCHED_DEADLINE=y
336CONFIG_IOSCHED_CFQ=y
337# CONFIG_ATA_OVER_ETH is not set
338
339#
340# ATA/ATAPI/MFM/RLL support
341#
342# CONFIG_IDE is not set
343
344#
345# SCSI device support
346#
347# CONFIG_RAID_ATTRS is not set
348CONFIG_SCSI=y
349CONFIG_SCSI_PROC_FS=y
350
351#
352# SCSI support type (disk, tape, CD-ROM)
353#
354CONFIG_BLK_DEV_SD=y
355CONFIG_CHR_DEV_ST=y
356# CONFIG_CHR_DEV_OSST is not set
357CONFIG_BLK_DEV_SR=y
358CONFIG_BLK_DEV_SR_VENDOR=y
359CONFIG_CHR_DEV_SG=y
360# CONFIG_CHR_DEV_SCH is not set
361
362#
363# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
364#
365CONFIG_SCSI_MULTI_LUN=y
366CONFIG_SCSI_CONSTANTS=y
367# CONFIG_SCSI_LOGGING is not set
368
369#
370# SCSI Transport Attributes
371#
372CONFIG_SCSI_SPI_ATTRS=y
373CONFIG_SCSI_FC_ATTRS=y
374# CONFIG_SCSI_ISCSI_ATTRS is not set
375# CONFIG_SCSI_SAS_ATTRS is not set
376
377#
378# SCSI low-level drivers
379#
380# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
381# CONFIG_SCSI_3W_9XXX is not set
382# CONFIG_SCSI_ACARD is not set
383# CONFIG_SCSI_AACRAID is not set
384# CONFIG_SCSI_AIC7XXX is not set
385# CONFIG_SCSI_AIC7XXX_OLD is not set
386# CONFIG_SCSI_AIC79XX is not set
387# CONFIG_MEGARAID_NEWGEN is not set
388# CONFIG_MEGARAID_LEGACY is not set
389# CONFIG_MEGARAID_SAS is not set
390# CONFIG_SCSI_SATA is not set
391# CONFIG_SCSI_BUSLOGIC is not set
392# CONFIG_SCSI_DMX3191D is not set
393# CONFIG_SCSI_EATA is not set
394# CONFIG_SCSI_FUTURE_DOMAIN is not set
395# CONFIG_SCSI_GDTH is not set
396# CONFIG_SCSI_IPS is not set
397CONFIG_SCSI_IBMVSCSI=m
398# CONFIG_SCSI_INITIO is not set
399# CONFIG_SCSI_INIA100 is not set
400# CONFIG_SCSI_SYM53C8XX_2 is not set
401# CONFIG_SCSI_IPR is not set
402# CONFIG_SCSI_QLOGIC_FC is not set
403# CONFIG_SCSI_QLOGIC_1280 is not set
404CONFIG_SCSI_QLA2XXX=y
405# CONFIG_SCSI_QLA21XX is not set
406# CONFIG_SCSI_QLA22XX is not set
407# CONFIG_SCSI_QLA2300 is not set
408# CONFIG_SCSI_QLA2322 is not set
409# CONFIG_SCSI_QLA6312 is not set
410# CONFIG_SCSI_QLA24XX is not set
411# CONFIG_SCSI_LPFC is not set
412# CONFIG_SCSI_DC395x is not set
413# CONFIG_SCSI_DC390T is not set
414# CONFIG_SCSI_DEBUG is not set
415
416#
417# Multi-device support (RAID and LVM)
418#
419CONFIG_MD=y
420CONFIG_BLK_DEV_MD=y
421CONFIG_MD_LINEAR=y
422CONFIG_MD_RAID0=y
423CONFIG_MD_RAID1=y
424CONFIG_MD_RAID10=m
425CONFIG_MD_RAID5=y
426CONFIG_MD_RAID6=m
427CONFIG_MD_MULTIPATH=m
428CONFIG_MD_FAULTY=m
429CONFIG_BLK_DEV_DM=y
430CONFIG_DM_CRYPT=m
431CONFIG_DM_SNAPSHOT=m
432CONFIG_DM_MIRROR=m
433CONFIG_DM_ZERO=m
434# CONFIG_DM_MULTIPATH is not set
435
436#
437# Fusion MPT device support
438#
439# CONFIG_FUSION is not set
440# CONFIG_FUSION_SPI is not set
441# CONFIG_FUSION_FC is not set
442# CONFIG_FUSION_SAS is not set
443
444#
445# IEEE 1394 (FireWire) support
446#
447# CONFIG_IEEE1394 is not set
448
449#
450# I2O device support
451#
452# CONFIG_I2O is not set
453
454#
455# Macintosh device drivers
456#
457
458#
459# Network device support
460#
461CONFIG_NETDEVICES=y
462CONFIG_DUMMY=m
463CONFIG_BONDING=m
464# CONFIG_EQUALIZER is not set
465CONFIG_TUN=m
466
467#
468# ARCnet devices
469#
470# CONFIG_ARCNET is not set
471
472#
473# PHY device support
474#
475# CONFIG_PHYLIB is not set
476
477#
478# Ethernet (10 or 100Mbit)
479#
480CONFIG_NET_ETHERNET=y
481CONFIG_MII=y
482# CONFIG_HAPPYMEAL is not set
483# CONFIG_SUNGEM is not set
484# CONFIG_CASSINI is not set
485# CONFIG_NET_VENDOR_3COM is not set
486
487#
488# Tulip family network device support
489#
490# CONFIG_NET_TULIP is not set
491# CONFIG_HP100 is not set
492CONFIG_NET_PCI=y
493CONFIG_PCNET32=y
494# CONFIG_AMD8111_ETH is not set
495# CONFIG_ADAPTEC_STARFIRE is not set
496# CONFIG_B44 is not set
497# CONFIG_FORCEDETH is not set
498# CONFIG_DGRS is not set
499# CONFIG_EEPRO100 is not set
500CONFIG_E100=y
501# CONFIG_FEALNX is not set
502# CONFIG_NATSEMI is not set
503# CONFIG_NE2K_PCI is not set
504# CONFIG_8139CP is not set
505# CONFIG_8139TOO is not set
506# CONFIG_SIS900 is not set
507# CONFIG_EPIC100 is not set
508# CONFIG_SUNDANCE is not set
509# CONFIG_VIA_RHINE is not set
510
511#
512# Ethernet (1000 Mbit)
513#
514CONFIG_ACENIC=m
515# CONFIG_ACENIC_OMIT_TIGON_I is not set
516# CONFIG_DL2K is not set
517CONFIG_E1000=m
518# CONFIG_E1000_NAPI is not set
519# CONFIG_NS83820 is not set
520# CONFIG_HAMACHI is not set
521# CONFIG_YELLOWFIN is not set
522# CONFIG_R8169 is not set
523# CONFIG_SIS190 is not set
524# CONFIG_SKGE is not set
525# CONFIG_SK98LIN is not set
526# CONFIG_VIA_VELOCITY is not set
527# CONFIG_TIGON3 is not set
528# CONFIG_BNX2 is not set
529
530#
531# Ethernet (10000 Mbit)
532#
533# CONFIG_CHELSIO_T1 is not set
534# CONFIG_IXGB is not set
535# CONFIG_S2IO is not set
536
537#
538# Token Ring devices
539#
540CONFIG_TR=y
541CONFIG_IBMOL=y
542# CONFIG_3C359 is not set
543# CONFIG_TMS380TR is not set
544
545#
546# Wireless LAN (non-hamradio)
547#
548# CONFIG_NET_RADIO is not set
549
550#
551# Wan interfaces
552#
553# CONFIG_WAN is not set
554CONFIG_ISERIES_VETH=y
555# CONFIG_FDDI is not set
556# CONFIG_HIPPI is not set
557CONFIG_PPP=m
558# CONFIG_PPP_MULTILINK is not set
559# CONFIG_PPP_FILTER is not set
560CONFIG_PPP_ASYNC=m
561CONFIG_PPP_SYNC_TTY=m
562CONFIG_PPP_DEFLATE=m
563CONFIG_PPP_BSDCOMP=m
564CONFIG_PPPOE=m
565# CONFIG_SLIP is not set
566# CONFIG_NET_FC is not set
567# CONFIG_SHAPER is not set
568CONFIG_NETCONSOLE=y
569CONFIG_NETPOLL=y
570CONFIG_NETPOLL_RX=y
571CONFIG_NETPOLL_TRAP=y
572CONFIG_NET_POLL_CONTROLLER=y
573
574#
575# ISDN subsystem
576#
577# CONFIG_ISDN is not set
578
579#
580# Telephony Support
581#
582# CONFIG_PHONE is not set
583
584#
585# Input device support
586#
587CONFIG_INPUT=y
588
589#
590# Userland interfaces
591#
592CONFIG_INPUT_MOUSEDEV=y
593# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
594CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
595CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
596# CONFIG_INPUT_JOYDEV is not set
597# CONFIG_INPUT_TSDEV is not set
598# CONFIG_INPUT_EVDEV is not set
599# CONFIG_INPUT_EVBUG is not set
600
601#
602# Input Device Drivers
603#
604# CONFIG_INPUT_KEYBOARD is not set
605# CONFIG_INPUT_MOUSE is not set
606# CONFIG_INPUT_JOYSTICK is not set
607# CONFIG_INPUT_TOUCHSCREEN is not set
608# CONFIG_INPUT_MISC is not set
609
610#
611# Hardware I/O ports
612#
613# CONFIG_SERIO is not set
614# CONFIG_GAMEPORT is not set
615
616#
617# Character devices
618#
619# CONFIG_SERIAL_NONSTANDARD is not set
620
621#
622# Serial drivers
623#
624# CONFIG_SERIAL_8250 is not set
625
626#
627# Non-8250 serial port support
628#
629CONFIG_SERIAL_CORE=m
630CONFIG_SERIAL_ICOM=m
631# CONFIG_SERIAL_JSM is not set
632CONFIG_UNIX98_PTYS=y
633CONFIG_LEGACY_PTYS=y
634CONFIG_LEGACY_PTY_COUNT=256
635
636#
637# IPMI
638#
639# CONFIG_IPMI_HANDLER is not set
640
641#
642# Watchdog Cards
643#
644# CONFIG_WATCHDOG is not set
645# CONFIG_RTC is not set
646# CONFIG_DTLK is not set
647# CONFIG_R3964 is not set
648# CONFIG_APPLICOM is not set
649
650#
651# Ftape, the floppy tape device driver
652#
653# CONFIG_AGP is not set
654# CONFIG_DRM is not set
655CONFIG_RAW_DRIVER=y
656CONFIG_MAX_RAW_DEVS=256
657# CONFIG_HANGCHECK_TIMER is not set
658
659#
660# TPM devices
661#
662# CONFIG_TCG_TPM is not set
663
664#
665# I2C support
666#
667# CONFIG_I2C is not set
668
669#
670# Dallas's 1-wire bus
671#
672# CONFIG_W1 is not set
673
674#
675# Hardware Monitoring support
676#
677# CONFIG_HWMON is not set
678# CONFIG_HWMON_VID is not set
679
680#
681# Misc devices
682#
683
684#
685# Multimedia Capabilities Port drivers
686#
687
688#
689# Multimedia devices
690#
691# CONFIG_VIDEO_DEV is not set
692
693#
694# Digital Video Broadcasting Devices
695#
696# CONFIG_DVB is not set
697
698#
699# Graphics support
700#
701# CONFIG_FB is not set
702
703#
704# Sound
705#
706# CONFIG_SOUND is not set
707
708#
709# USB support
710#
711CONFIG_USB_ARCH_HAS_HCD=y
712CONFIG_USB_ARCH_HAS_OHCI=y
713# CONFIG_USB is not set
714
715#
716# USB Gadget Support
717#
718# CONFIG_USB_GADGET is not set
719
720#
721# MMC/SD Card support
722#
723# CONFIG_MMC is not set
724
725#
726# InfiniBand support
727#
728# CONFIG_INFINIBAND is not set
729
730#
731# SN Devices
732#
733
734#
735# File systems
736#
737CONFIG_EXT2_FS=y
738CONFIG_EXT2_FS_XATTR=y
739CONFIG_EXT2_FS_POSIX_ACL=y
740CONFIG_EXT2_FS_SECURITY=y
741CONFIG_EXT2_FS_XIP=y
742CONFIG_FS_XIP=y
743CONFIG_EXT3_FS=y
744CONFIG_EXT3_FS_XATTR=y
745CONFIG_EXT3_FS_POSIX_ACL=y
746CONFIG_EXT3_FS_SECURITY=y
747CONFIG_JBD=y
748# CONFIG_JBD_DEBUG is not set
749CONFIG_FS_MBCACHE=y
750CONFIG_REISERFS_FS=y
751# CONFIG_REISERFS_CHECK is not set
752# CONFIG_REISERFS_PROC_INFO is not set
753CONFIG_REISERFS_FS_XATTR=y
754CONFIG_REISERFS_FS_POSIX_ACL=y
755CONFIG_REISERFS_FS_SECURITY=y
756CONFIG_JFS_FS=m
757CONFIG_JFS_POSIX_ACL=y
758CONFIG_JFS_SECURITY=y
759# CONFIG_JFS_DEBUG is not set
760# CONFIG_JFS_STATISTICS is not set
761CONFIG_FS_POSIX_ACL=y
762CONFIG_XFS_FS=m
763CONFIG_XFS_EXPORT=y
764# CONFIG_XFS_QUOTA is not set
765CONFIG_XFS_SECURITY=y
766CONFIG_XFS_POSIX_ACL=y
767# CONFIG_XFS_RT is not set
768# CONFIG_MINIX_FS is not set
769# CONFIG_ROMFS_FS is not set
770CONFIG_INOTIFY=y
771# CONFIG_QUOTA is not set
772CONFIG_DNOTIFY=y
773CONFIG_AUTOFS_FS=m
774# CONFIG_AUTOFS4_FS is not set
775# CONFIG_FUSE_FS is not set
776
777#
778# CD-ROM/DVD Filesystems
779#
780CONFIG_ISO9660_FS=y
781CONFIG_JOLIET=y
782CONFIG_ZISOFS=y
783CONFIG_ZISOFS_FS=y
784CONFIG_UDF_FS=m
785CONFIG_UDF_NLS=y
786
787#
788# DOS/FAT/NT Filesystems
789#
790CONFIG_FAT_FS=y
791CONFIG_MSDOS_FS=y
792CONFIG_VFAT_FS=y
793CONFIG_FAT_DEFAULT_CODEPAGE=437
794CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
795# CONFIG_NTFS_FS is not set
796
797#
798# Pseudo filesystems
799#
800CONFIG_PROC_FS=y
801CONFIG_PROC_KCORE=y
802CONFIG_SYSFS=y
803CONFIG_TMPFS=y
804# CONFIG_HUGETLBFS is not set
805# CONFIG_HUGETLB_PAGE is not set
806CONFIG_RAMFS=y
807# CONFIG_RELAYFS_FS is not set
808
809#
810# Miscellaneous filesystems
811#
812# CONFIG_ADFS_FS is not set
813# CONFIG_AFFS_FS is not set
814# CONFIG_HFS_FS is not set
815# CONFIG_HFSPLUS_FS is not set
816# CONFIG_BEFS_FS is not set
817# CONFIG_BFS_FS is not set
818# CONFIG_EFS_FS is not set
819CONFIG_CRAMFS=y
820# CONFIG_VXFS_FS is not set
821# CONFIG_HPFS_FS is not set
822# CONFIG_QNX4FS_FS is not set
823# CONFIG_SYSV_FS is not set
824# CONFIG_UFS_FS is not set
825
826#
827# Network File Systems
828#
829CONFIG_NFS_FS=y
830CONFIG_NFS_V3=y
831CONFIG_NFS_V3_ACL=y
832CONFIG_NFS_V4=y
833# CONFIG_NFS_DIRECTIO is not set
834CONFIG_NFSD=m
835CONFIG_NFSD_V2_ACL=y
836CONFIG_NFSD_V3=y
837CONFIG_NFSD_V3_ACL=y
838CONFIG_NFSD_V4=y
839CONFIG_NFSD_TCP=y
840CONFIG_LOCKD=y
841CONFIG_LOCKD_V4=y
842CONFIG_EXPORTFS=m
843CONFIG_NFS_ACL_SUPPORT=y
844CONFIG_NFS_COMMON=y
845CONFIG_SUNRPC=y
846CONFIG_SUNRPC_GSS=y
847CONFIG_RPCSEC_GSS_KRB5=y
848CONFIG_RPCSEC_GSS_SPKM3=m
849# CONFIG_SMB_FS is not set
850CONFIG_CIFS=m
851# CONFIG_CIFS_STATS is not set
852CONFIG_CIFS_XATTR=y
853CONFIG_CIFS_POSIX=y
854# CONFIG_CIFS_EXPERIMENTAL is not set
855# CONFIG_NCP_FS is not set
856# CONFIG_CODA_FS is not set
857# CONFIG_AFS_FS is not set
858# CONFIG_9P_FS is not set
859
860#
861# Partition Types
862#
863# CONFIG_PARTITION_ADVANCED is not set
864CONFIG_MSDOS_PARTITION=y
865
866#
867# Native Language Support
868#
869CONFIG_NLS=y
870CONFIG_NLS_DEFAULT="iso8859-1"
871CONFIG_NLS_CODEPAGE_437=y
872# CONFIG_NLS_CODEPAGE_737 is not set
873# CONFIG_NLS_CODEPAGE_775 is not set
874# CONFIG_NLS_CODEPAGE_850 is not set
875# CONFIG_NLS_CODEPAGE_852 is not set
876# CONFIG_NLS_CODEPAGE_855 is not set
877# CONFIG_NLS_CODEPAGE_857 is not set
878# CONFIG_NLS_CODEPAGE_860 is not set
879# CONFIG_NLS_CODEPAGE_861 is not set
880# CONFIG_NLS_CODEPAGE_862 is not set
881# CONFIG_NLS_CODEPAGE_863 is not set
882# CONFIG_NLS_CODEPAGE_864 is not set
883# CONFIG_NLS_CODEPAGE_865 is not set
884# CONFIG_NLS_CODEPAGE_866 is not set
885# CONFIG_NLS_CODEPAGE_869 is not set
886# CONFIG_NLS_CODEPAGE_936 is not set
887# CONFIG_NLS_CODEPAGE_950 is not set
888# CONFIG_NLS_CODEPAGE_932 is not set
889# CONFIG_NLS_CODEPAGE_949 is not set
890# CONFIG_NLS_CODEPAGE_874 is not set
891# CONFIG_NLS_ISO8859_8 is not set
892# CONFIG_NLS_CODEPAGE_1250 is not set
893# CONFIG_NLS_CODEPAGE_1251 is not set
894CONFIG_NLS_ASCII=y
895CONFIG_NLS_ISO8859_1=y
896# CONFIG_NLS_ISO8859_2 is not set
897# CONFIG_NLS_ISO8859_3 is not set
898# CONFIG_NLS_ISO8859_4 is not set
899# CONFIG_NLS_ISO8859_5 is not set
900# CONFIG_NLS_ISO8859_6 is not set
901# CONFIG_NLS_ISO8859_7 is not set
902# CONFIG_NLS_ISO8859_9 is not set
903# CONFIG_NLS_ISO8859_13 is not set
904# CONFIG_NLS_ISO8859_14 is not set
905# CONFIG_NLS_ISO8859_15 is not set
906# CONFIG_NLS_KOI8_R is not set
907# CONFIG_NLS_KOI8_U is not set
908# CONFIG_NLS_UTF8 is not set
909
910#
911# iSeries device drivers
912#
913CONFIG_VIOCONS=y
914CONFIG_VIODASD=y
915CONFIG_VIOCD=m
916CONFIG_VIOTAPE=m
917CONFIG_VIOPATH=y
918
919#
920# Profiling support
921#
922CONFIG_PROFILING=y
923CONFIG_OPROFILE=y
924
925#
926# Kernel hacking
927#
928# CONFIG_PRINTK_TIME is not set
929CONFIG_DEBUG_KERNEL=y
930CONFIG_MAGIC_SYSRQ=y
931CONFIG_LOG_BUF_SHIFT=17
932CONFIG_DETECT_SOFTLOCKUP=y
933# CONFIG_SCHEDSTATS is not set
934# CONFIG_DEBUG_SLAB is not set
935# CONFIG_DEBUG_SPINLOCK is not set
936# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
937# CONFIG_DEBUG_KOBJECT is not set
938# CONFIG_DEBUG_INFO is not set
939CONFIG_DEBUG_FS=y
940CONFIG_DEBUG_STACKOVERFLOW=y
941# CONFIG_KPROBES is not set
942CONFIG_DEBUG_STACK_USAGE=y
943# CONFIG_DEBUGGER is not set
944# CONFIG_PPCDBG is not set
945CONFIG_IRQSTACKS=y
946
947#
948# Security options
949#
950# CONFIG_KEYS is not set
951# CONFIG_SECURITY is not set
952
953#
954# Cryptographic options
955#
956CONFIG_CRYPTO=y
957CONFIG_CRYPTO_HMAC=y
958CONFIG_CRYPTO_NULL=m
959CONFIG_CRYPTO_MD4=m
960CONFIG_CRYPTO_MD5=y
961CONFIG_CRYPTO_SHA1=m
962CONFIG_CRYPTO_SHA256=m
963CONFIG_CRYPTO_SHA512=m
964CONFIG_CRYPTO_WP512=m
965CONFIG_CRYPTO_TGR192=m
966CONFIG_CRYPTO_DES=y
967CONFIG_CRYPTO_BLOWFISH=m
968CONFIG_CRYPTO_TWOFISH=m
969CONFIG_CRYPTO_SERPENT=m
970CONFIG_CRYPTO_AES=m
971CONFIG_CRYPTO_CAST5=m
972CONFIG_CRYPTO_CAST6=m
973CONFIG_CRYPTO_TEA=m
974CONFIG_CRYPTO_ARC4=m
975CONFIG_CRYPTO_KHAZAD=m
976CONFIG_CRYPTO_ANUBIS=m
977CONFIG_CRYPTO_DEFLATE=m
978CONFIG_CRYPTO_MICHAEL_MIC=m
979CONFIG_CRYPTO_CRC32C=m
980CONFIG_CRYPTO_TEST=m
981
982#
983# Hardware crypto devices
984#
985
986#
987# Library routines
988#
989CONFIG_CRC_CCITT=m
990# CONFIG_CRC16 is not set
991CONFIG_CRC32=y
992CONFIG_LIBCRC32C=m
993CONFIG_ZLIB_INFLATE=y
994CONFIG_ZLIB_DEFLATE=m
995CONFIG_TEXTSEARCH=y
996CONFIG_TEXTSEARCH_KMP=m
997CONFIG_TEXTSEARCH_BM=m
998CONFIG_TEXTSEARCH_FSM=m
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig
new file mode 100644
index 000000000000..7b480f3d1406
--- /dev/null
+++ b/arch/powerpc/configs/maple_defconfig
@@ -0,0 +1,1062 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc4
4# Thu Oct 20 08:31:24 2005
5#
6CONFIG_64BIT=y
7CONFIG_MMU=y
8CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9CONFIG_GENERIC_CALIBRATE_DELAY=y
10CONFIG_GENERIC_ISA_DMA=y
11CONFIG_EARLY_PRINTK=y
12CONFIG_COMPAT=y
13CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
14CONFIG_ARCH_MAY_HAVE_PC_FDC=y
15CONFIG_FORCE_MAX_ZONEORDER=13
16
17#
18# Code maturity level options
19#
20CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_LOCK_KERNEL=y
23CONFIG_INIT_ENV_ARG_LIMIT=32
24
25#
26# General setup
27#
28CONFIG_LOCALVERSION=""
29CONFIG_LOCALVERSION_AUTO=y
30CONFIG_SWAP=y
31CONFIG_SYSVIPC=y
32CONFIG_POSIX_MQUEUE=y
33# CONFIG_BSD_PROCESS_ACCT is not set
34CONFIG_SYSCTL=y
35# CONFIG_AUDIT is not set
36# CONFIG_HOTPLUG is not set
37CONFIG_KOBJECT_UEVENT=y
38CONFIG_IKCONFIG=y
39CONFIG_IKCONFIG_PROC=y
40# CONFIG_CPUSETS is not set
41CONFIG_INITRAMFS_SOURCE=""
42# CONFIG_EMBEDDED is not set
43CONFIG_KALLSYMS=y
44CONFIG_KALLSYMS_ALL=y
45# CONFIG_KALLSYMS_EXTRA_PASS is not set
46CONFIG_PRINTK=y
47CONFIG_BUG=y
48CONFIG_BASE_FULL=y
49CONFIG_FUTEX=y
50CONFIG_EPOLL=y
51CONFIG_SHMEM=y
52CONFIG_CC_ALIGN_FUNCTIONS=0
53CONFIG_CC_ALIGN_LABELS=0
54CONFIG_CC_ALIGN_LOOPS=0
55CONFIG_CC_ALIGN_JUMPS=0
56# CONFIG_TINY_SHMEM is not set
57CONFIG_BASE_SMALL=0
58
59#
60# Loadable module support
61#
62CONFIG_MODULES=y
63CONFIG_MODULE_UNLOAD=y
64# CONFIG_MODULE_FORCE_UNLOAD is not set
65CONFIG_OBSOLETE_MODPARM=y
66CONFIG_MODVERSIONS=y
67CONFIG_MODULE_SRCVERSION_ALL=y
68CONFIG_KMOD=y
69CONFIG_STOP_MACHINE=y
70CONFIG_SYSVIPC_COMPAT=y
71
72#
73# Platform support
74#
75# CONFIG_PPC_ISERIES is not set
76CONFIG_PPC_MULTIPLATFORM=y
77# CONFIG_PPC_PSERIES is not set
78# CONFIG_PPC_BPA is not set
79# CONFIG_PPC_PMAC is not set
80CONFIG_PPC_MAPLE=y
81CONFIG_PPC=y
82CONFIG_PPC64=y
83CONFIG_PPC_OF=y
84CONFIG_MPIC=y
85# CONFIG_ALTIVEC is not set
86CONFIG_KEXEC=y
87CONFIG_U3_DART=y
88CONFIG_MPIC_BROKEN_U3=y
89CONFIG_BOOTX_TEXT=y
90CONFIG_POWER4_ONLY=y
91CONFIG_IOMMU_VMERGE=y
92CONFIG_SMP=y
93CONFIG_NR_CPUS=2
94CONFIG_ARCH_SELECT_MEMORY_MODEL=y
95CONFIG_ARCH_FLATMEM_ENABLE=y
96CONFIG_SELECT_MEMORY_MODEL=y
97CONFIG_FLATMEM_MANUAL=y
98# CONFIG_DISCONTIGMEM_MANUAL is not set
99# CONFIG_SPARSEMEM_MANUAL is not set
100CONFIG_FLATMEM=y
101CONFIG_FLAT_NODE_MEM_MAP=y
102# CONFIG_SPARSEMEM_STATIC is not set
103# CONFIG_NUMA is not set
104# CONFIG_SCHED_SMT is not set
105CONFIG_PREEMPT_NONE=y
106# CONFIG_PREEMPT_VOLUNTARY is not set
107# CONFIG_PREEMPT is not set
108# CONFIG_PREEMPT_BKL is not set
109# CONFIG_HZ_100 is not set
110CONFIG_HZ_250=y
111# CONFIG_HZ_1000 is not set
112CONFIG_HZ=250
113CONFIG_GENERIC_HARDIRQS=y
114CONFIG_SECCOMP=y
115CONFIG_BINFMT_ELF=y
116# CONFIG_BINFMT_MISC is not set
117CONFIG_PROC_DEVICETREE=y
118# CONFIG_CMDLINE_BOOL is not set
119CONFIG_ISA_DMA_API=y
120
121#
122# Bus Options
123#
124CONFIG_PCI=y
125CONFIG_PCI_DOMAINS=y
126CONFIG_PCI_LEGACY_PROC=y
127# CONFIG_PCI_DEBUG is not set
128
129#
130# PCCARD (PCMCIA/CardBus) support
131#
132# CONFIG_PCCARD is not set
133
134#
135# PCI Hotplug Support
136#
137# CONFIG_HOTPLUG_PCI is not set
138
139#
140# Networking
141#
142CONFIG_NET=y
143
144#
145# Networking options
146#
147CONFIG_PACKET=y
148CONFIG_PACKET_MMAP=y
149CONFIG_UNIX=y
150# CONFIG_NET_KEY is not set
151CONFIG_INET=y
152CONFIG_IP_MULTICAST=y
153# CONFIG_IP_ADVANCED_ROUTER is not set
154CONFIG_IP_FIB_HASH=y
155CONFIG_IP_PNP=y
156CONFIG_IP_PNP_DHCP=y
157# CONFIG_IP_PNP_BOOTP is not set
158# CONFIG_IP_PNP_RARP is not set
159# CONFIG_NET_IPIP is not set
160# CONFIG_NET_IPGRE is not set
161# CONFIG_IP_MROUTE is not set
162# CONFIG_ARPD is not set
163# CONFIG_SYN_COOKIES is not set
164# CONFIG_INET_AH is not set
165# CONFIG_INET_ESP is not set
166# CONFIG_INET_IPCOMP is not set
167# CONFIG_INET_TUNNEL is not set
168CONFIG_INET_DIAG=y
169CONFIG_INET_TCP_DIAG=y
170# CONFIG_TCP_CONG_ADVANCED is not set
171CONFIG_TCP_CONG_BIC=y
172# CONFIG_IPV6 is not set
173# CONFIG_NETFILTER is not set
174
175#
176# DCCP Configuration (EXPERIMENTAL)
177#
178# CONFIG_IP_DCCP is not set
179
180#
181# SCTP Configuration (EXPERIMENTAL)
182#
183# CONFIG_IP_SCTP is not set
184# CONFIG_ATM is not set
185# CONFIG_BRIDGE is not set
186# CONFIG_VLAN_8021Q is not set
187# CONFIG_DECNET is not set
188# CONFIG_LLC2 is not set
189# CONFIG_IPX is not set
190# CONFIG_ATALK is not set
191# CONFIG_X25 is not set
192# CONFIG_LAPB is not set
193# CONFIG_NET_DIVERT is not set
194# CONFIG_ECONET is not set
195# CONFIG_WAN_ROUTER is not set
196# CONFIG_NET_SCHED is not set
197# CONFIG_NET_CLS_ROUTE is not set
198
199#
200# Network testing
201#
202# CONFIG_NET_PKTGEN is not set
203# CONFIG_HAMRADIO is not set
204# CONFIG_IRDA is not set
205# CONFIG_BT is not set
206# CONFIG_IEEE80211 is not set
207
208#
209# Device Drivers
210#
211
212#
213# Generic Driver Options
214#
215CONFIG_STANDALONE=y
216CONFIG_PREVENT_FIRMWARE_BUILD=y
217# CONFIG_FW_LOADER is not set
218# CONFIG_DEBUG_DRIVER is not set
219
220#
221# Connector - unified userspace <-> kernelspace linker
222#
223# CONFIG_CONNECTOR is not set
224
225#
226# Memory Technology Devices (MTD)
227#
228# CONFIG_MTD is not set
229
230#
231# Parallel port support
232#
233# CONFIG_PARPORT is not set
234
235#
236# Plug and Play support
237#
238
239#
240# Block devices
241#
242# CONFIG_BLK_DEV_FD is not set
243# CONFIG_BLK_CPQ_DA is not set
244# CONFIG_BLK_CPQ_CISS_DA is not set
245# CONFIG_BLK_DEV_DAC960 is not set
246# CONFIG_BLK_DEV_UMEM is not set
247# CONFIG_BLK_DEV_COW_COMMON is not set
248# CONFIG_BLK_DEV_LOOP is not set
249# CONFIG_BLK_DEV_NBD is not set
250# CONFIG_BLK_DEV_SX8 is not set
251# CONFIG_BLK_DEV_UB is not set
252CONFIG_BLK_DEV_RAM=y
253CONFIG_BLK_DEV_RAM_COUNT=16
254CONFIG_BLK_DEV_RAM_SIZE=8192
255# CONFIG_BLK_DEV_INITRD is not set
256# CONFIG_CDROM_PKTCDVD is not set
257
258#
259# IO Schedulers
260#
261CONFIG_IOSCHED_NOOP=y
262CONFIG_IOSCHED_AS=y
263CONFIG_IOSCHED_DEADLINE=y
264CONFIG_IOSCHED_CFQ=y
265# CONFIG_ATA_OVER_ETH is not set
266
267#
268# ATA/ATAPI/MFM/RLL support
269#
270CONFIG_IDE=y
271CONFIG_BLK_DEV_IDE=y
272
273#
274# Please see Documentation/ide.txt for help/info on IDE drives
275#
276# CONFIG_BLK_DEV_IDE_SATA is not set
277CONFIG_BLK_DEV_IDEDISK=y
278# CONFIG_IDEDISK_MULTI_MODE is not set
279CONFIG_BLK_DEV_IDECD=y
280# CONFIG_BLK_DEV_IDETAPE is not set
281# CONFIG_BLK_DEV_IDEFLOPPY is not set
282CONFIG_IDE_TASK_IOCTL=y
283
284#
285# IDE chipset support/bugfixes
286#
287CONFIG_IDE_GENERIC=y
288CONFIG_BLK_DEV_IDEPCI=y
289CONFIG_IDEPCI_SHARE_IRQ=y
290# CONFIG_BLK_DEV_OFFBOARD is not set
291CONFIG_BLK_DEV_GENERIC=y
292# CONFIG_BLK_DEV_OPTI621 is not set
293# CONFIG_BLK_DEV_SL82C105 is not set
294CONFIG_BLK_DEV_IDEDMA_PCI=y
295# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
296CONFIG_IDEDMA_PCI_AUTO=y
297# CONFIG_IDEDMA_ONLYDISK is not set
298# CONFIG_BLK_DEV_AEC62XX is not set
299# CONFIG_BLK_DEV_ALI15X3 is not set
300CONFIG_BLK_DEV_AMD74XX=y
301# CONFIG_BLK_DEV_CMD64X is not set
302# CONFIG_BLK_DEV_TRIFLEX is not set
303# CONFIG_BLK_DEV_CY82C693 is not set
304# CONFIG_BLK_DEV_CS5520 is not set
305# CONFIG_BLK_DEV_CS5530 is not set
306# CONFIG_BLK_DEV_HPT34X is not set
307# CONFIG_BLK_DEV_HPT366 is not set
308# CONFIG_BLK_DEV_SC1200 is not set
309# CONFIG_BLK_DEV_PIIX is not set
310# CONFIG_BLK_DEV_IT821X is not set
311# CONFIG_BLK_DEV_NS87415 is not set
312# CONFIG_BLK_DEV_PDC202XX_OLD is not set
313# CONFIG_BLK_DEV_PDC202XX_NEW is not set
314# CONFIG_BLK_DEV_SVWKS is not set
315# CONFIG_BLK_DEV_SIIMAGE is not set
316# CONFIG_BLK_DEV_SLC90E66 is not set
317# CONFIG_BLK_DEV_TRM290 is not set
318# CONFIG_BLK_DEV_VIA82CXXX is not set
319# CONFIG_IDE_ARM is not set
320CONFIG_BLK_DEV_IDEDMA=y
321# CONFIG_IDEDMA_IVB is not set
322CONFIG_IDEDMA_AUTO=y
323# CONFIG_BLK_DEV_HD is not set
324
325#
326# SCSI device support
327#
328# CONFIG_RAID_ATTRS is not set
329# CONFIG_SCSI is not set
330
331#
332# Multi-device support (RAID and LVM)
333#
334# CONFIG_MD is not set
335
336#
337# Fusion MPT device support
338#
339# CONFIG_FUSION is not set
340
341#
342# IEEE 1394 (FireWire) support
343#
344# CONFIG_IEEE1394 is not set
345
346#
347# I2O device support
348#
349# CONFIG_I2O is not set
350
351#
352# Macintosh device drivers
353#
354
355#
356# Network device support
357#
358CONFIG_NETDEVICES=y
359# CONFIG_DUMMY is not set
360# CONFIG_BONDING is not set
361# CONFIG_EQUALIZER is not set
362# CONFIG_TUN is not set
363
364#
365# ARCnet devices
366#
367# CONFIG_ARCNET is not set
368
369#
370# PHY device support
371#
372# CONFIG_PHYLIB is not set
373
374#
375# Ethernet (10 or 100Mbit)
376#
377CONFIG_NET_ETHERNET=y
378CONFIG_MII=y
379# CONFIG_HAPPYMEAL is not set
380# CONFIG_SUNGEM is not set
381# CONFIG_CASSINI is not set
382# CONFIG_NET_VENDOR_3COM is not set
383
384#
385# Tulip family network device support
386#
387# CONFIG_NET_TULIP is not set
388# CONFIG_HP100 is not set
389CONFIG_NET_PCI=y
390# CONFIG_PCNET32 is not set
391CONFIG_AMD8111_ETH=y
392# CONFIG_AMD8111E_NAPI is not set
393# CONFIG_ADAPTEC_STARFIRE is not set
394# CONFIG_B44 is not set
395# CONFIG_FORCEDETH is not set
396# CONFIG_DGRS is not set
397# CONFIG_EEPRO100 is not set
398# CONFIG_E100 is not set
399# CONFIG_FEALNX is not set
400# CONFIG_NATSEMI is not set
401# CONFIG_NE2K_PCI is not set
402# CONFIG_8139CP is not set
403# CONFIG_8139TOO is not set
404# CONFIG_SIS900 is not set
405# CONFIG_EPIC100 is not set
406# CONFIG_SUNDANCE is not set
407# CONFIG_VIA_RHINE is not set
408
409#
410# Ethernet (1000 Mbit)
411#
412# CONFIG_ACENIC is not set
413# CONFIG_DL2K is not set
414CONFIG_E1000=y
415# CONFIG_E1000_NAPI is not set
416# CONFIG_NS83820 is not set
417# CONFIG_HAMACHI is not set
418# CONFIG_YELLOWFIN is not set
419# CONFIG_R8169 is not set
420# CONFIG_SIS190 is not set
421# CONFIG_SKGE is not set
422# CONFIG_SK98LIN is not set
423# CONFIG_VIA_VELOCITY is not set
424# CONFIG_TIGON3 is not set
425# CONFIG_BNX2 is not set
426# CONFIG_MV643XX_ETH is not set
427
428#
429# Ethernet (10000 Mbit)
430#
431# CONFIG_CHELSIO_T1 is not set
432# CONFIG_IXGB is not set
433# CONFIG_S2IO is not set
434
435#
436# Token Ring devices
437#
438# CONFIG_TR is not set
439
440#
441# Wireless LAN (non-hamradio)
442#
443# CONFIG_NET_RADIO is not set
444
445#
446# Wan interfaces
447#
448# CONFIG_WAN is not set
449# CONFIG_FDDI is not set
450# CONFIG_HIPPI is not set
451# CONFIG_PPP is not set
452# CONFIG_SLIP is not set
453# CONFIG_SHAPER is not set
454# CONFIG_NETCONSOLE is not set
455# CONFIG_NETPOLL is not set
456# CONFIG_NET_POLL_CONTROLLER is not set
457
458#
459# ISDN subsystem
460#
461# CONFIG_ISDN is not set
462
463#
464# Telephony Support
465#
466# CONFIG_PHONE is not set
467
468#
469# Input device support
470#
471CONFIG_INPUT=y
472
473#
474# Userland interfaces
475#
476CONFIG_INPUT_MOUSEDEV=y
477# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
478CONFIG_INPUT_MOUSEDEV_SCREEN_X=1600
479CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1200
480# CONFIG_INPUT_JOYDEV is not set
481# CONFIG_INPUT_TSDEV is not set
482# CONFIG_INPUT_EVDEV is not set
483# CONFIG_INPUT_EVBUG is not set
484
485#
486# Input Device Drivers
487#
488# CONFIG_INPUT_KEYBOARD is not set
489# CONFIG_INPUT_MOUSE is not set
490# CONFIG_INPUT_JOYSTICK is not set
491# CONFIG_INPUT_TOUCHSCREEN is not set
492# CONFIG_INPUT_MISC is not set
493
494#
495# Hardware I/O ports
496#
497# CONFIG_SERIO is not set
498# CONFIG_GAMEPORT is not set
499
500#
501# Character devices
502#
503CONFIG_VT=y
504CONFIG_VT_CONSOLE=y
505CONFIG_HW_CONSOLE=y
506# CONFIG_SERIAL_NONSTANDARD is not set
507
508#
509# Serial drivers
510#
511CONFIG_SERIAL_8250=y
512CONFIG_SERIAL_8250_CONSOLE=y
513CONFIG_SERIAL_8250_NR_UARTS=4
514# CONFIG_SERIAL_8250_EXTENDED is not set
515
516#
517# Non-8250 serial port support
518#
519CONFIG_SERIAL_CORE=y
520CONFIG_SERIAL_CORE_CONSOLE=y
521# CONFIG_SERIAL_JSM is not set
522CONFIG_UNIX98_PTYS=y
523CONFIG_LEGACY_PTYS=y
524CONFIG_LEGACY_PTY_COUNT=256
525
526#
527# IPMI
528#
529# CONFIG_IPMI_HANDLER is not set
530
531#
532# Watchdog Cards
533#
534# CONFIG_WATCHDOG is not set
535# CONFIG_RTC is not set
536# CONFIG_DTLK is not set
537# CONFIG_R3964 is not set
538# CONFIG_APPLICOM is not set
539
540#
541# Ftape, the floppy tape device driver
542#
543# CONFIG_AGP is not set
544# CONFIG_DRM is not set
545# CONFIG_RAW_DRIVER is not set
546# CONFIG_HANGCHECK_TIMER is not set
547
548#
549# TPM devices
550#
551# CONFIG_TCG_TPM is not set
552
553#
554# I2C support
555#
556CONFIG_I2C=y
557CONFIG_I2C_CHARDEV=y
558
559#
560# I2C Algorithms
561#
562CONFIG_I2C_ALGOBIT=y
563# CONFIG_I2C_ALGOPCF is not set
564# CONFIG_I2C_ALGOPCA is not set
565
566#
567# I2C Hardware Bus support
568#
569# CONFIG_I2C_ALI1535 is not set
570# CONFIG_I2C_ALI1563 is not set
571# CONFIG_I2C_ALI15X3 is not set
572# CONFIG_I2C_AMD756 is not set
573CONFIG_I2C_AMD8111=y
574# CONFIG_I2C_I801 is not set
575# CONFIG_I2C_I810 is not set
576# CONFIG_I2C_PIIX4 is not set
577# CONFIG_I2C_NFORCE2 is not set
578# CONFIG_I2C_PARPORT_LIGHT is not set
579# CONFIG_I2C_PROSAVAGE is not set
580# CONFIG_I2C_SAVAGE4 is not set
581# CONFIG_SCx200_ACB is not set
582# CONFIG_I2C_SIS5595 is not set
583# CONFIG_I2C_SIS630 is not set
584# CONFIG_I2C_SIS96X is not set
585# CONFIG_I2C_STUB is not set
586# CONFIG_I2C_VIA is not set
587# CONFIG_I2C_VIAPRO is not set
588# CONFIG_I2C_VOODOO3 is not set
589# CONFIG_I2C_PCA_ISA is not set
590
591#
592# Miscellaneous I2C Chip support
593#
594# CONFIG_SENSORS_DS1337 is not set
595# CONFIG_SENSORS_DS1374 is not set
596# CONFIG_SENSORS_EEPROM is not set
597# CONFIG_SENSORS_PCF8574 is not set
598# CONFIG_SENSORS_PCA9539 is not set
599# CONFIG_SENSORS_PCF8591 is not set
600# CONFIG_SENSORS_RTC8564 is not set
601# CONFIG_SENSORS_MAX6875 is not set
602# CONFIG_I2C_DEBUG_CORE is not set
603# CONFIG_I2C_DEBUG_ALGO is not set
604# CONFIG_I2C_DEBUG_BUS is not set
605# CONFIG_I2C_DEBUG_CHIP is not set
606
607#
608# Dallas's 1-wire bus
609#
610# CONFIG_W1 is not set
611
612#
613# Hardware Monitoring support
614#
615# CONFIG_HWMON is not set
616# CONFIG_HWMON_VID is not set
617
618#
619# Misc devices
620#
621
622#
623# Multimedia Capabilities Port drivers
624#
625
626#
627# Multimedia devices
628#
629# CONFIG_VIDEO_DEV is not set
630
631#
632# Digital Video Broadcasting Devices
633#
634# CONFIG_DVB is not set
635
636#
637# Graphics support
638#
639# CONFIG_FB is not set
640
641#
642# Console display driver support
643#
644# CONFIG_VGA_CONSOLE is not set
645CONFIG_DUMMY_CONSOLE=y
646
647#
648# Sound
649#
650# CONFIG_SOUND is not set
651
652#
653# USB support
654#
655CONFIG_USB_ARCH_HAS_HCD=y
656CONFIG_USB_ARCH_HAS_OHCI=y
657CONFIG_USB=y
658# CONFIG_USB_DEBUG is not set
659
660#
661# Miscellaneous USB options
662#
663CONFIG_USB_DEVICEFS=y
664# CONFIG_USB_BANDWIDTH is not set
665# CONFIG_USB_DYNAMIC_MINORS is not set
666# CONFIG_USB_OTG is not set
667
668#
669# USB Host Controller Drivers
670#
671CONFIG_USB_EHCI_HCD=y
672CONFIG_USB_EHCI_SPLIT_ISO=y
673CONFIG_USB_EHCI_ROOT_HUB_TT=y
674# CONFIG_USB_ISP116X_HCD is not set
675CONFIG_USB_OHCI_HCD=y
676# CONFIG_USB_OHCI_BIG_ENDIAN is not set
677CONFIG_USB_OHCI_LITTLE_ENDIAN=y
678CONFIG_USB_UHCI_HCD=y
679# CONFIG_USB_SL811_HCD is not set
680
681#
682# USB Device Class drivers
683#
684# CONFIG_USB_BLUETOOTH_TTY is not set
685# CONFIG_USB_ACM is not set
686# CONFIG_USB_PRINTER is not set
687
688#
689# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
690#
691# CONFIG_USB_STORAGE is not set
692
693#
694# USB Input Devices
695#
696CONFIG_USB_HID=y
697CONFIG_USB_HIDINPUT=y
698# CONFIG_HID_FF is not set
699# CONFIG_USB_HIDDEV is not set
700# CONFIG_USB_AIPTEK is not set
701# CONFIG_USB_WACOM is not set
702# CONFIG_USB_ACECAD is not set
703# CONFIG_USB_KBTAB is not set
704# CONFIG_USB_POWERMATE is not set
705# CONFIG_USB_MTOUCH is not set
706# CONFIG_USB_ITMTOUCH is not set
707# CONFIG_USB_EGALAX is not set
708# CONFIG_USB_YEALINK is not set
709# CONFIG_USB_XPAD is not set
710# CONFIG_USB_ATI_REMOTE is not set
711# CONFIG_USB_KEYSPAN_REMOTE is not set
712# CONFIG_USB_APPLETOUCH is not set
713
714#
715# USB Imaging devices
716#
717# CONFIG_USB_MDC800 is not set
718
719#
720# USB Multimedia devices
721#
722# CONFIG_USB_DABUSB is not set
723
724#
725# Video4Linux support is needed for USB Multimedia device support
726#
727
728#
729# USB Network Adapters
730#
731# CONFIG_USB_CATC is not set
732# CONFIG_USB_KAWETH is not set
733CONFIG_USB_PEGASUS=y
734# CONFIG_USB_RTL8150 is not set
735# CONFIG_USB_USBNET is not set
736CONFIG_USB_MON=y
737
738#
739# USB port drivers
740#
741
742#
743# USB Serial Converter support
744#
745CONFIG_USB_SERIAL=y
746# CONFIG_USB_SERIAL_CONSOLE is not set
747CONFIG_USB_SERIAL_GENERIC=y
748# CONFIG_USB_SERIAL_AIRPRIME is not set
749# CONFIG_USB_SERIAL_BELKIN is not set
750# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
751# CONFIG_USB_SERIAL_CP2101 is not set
752CONFIG_USB_SERIAL_CYPRESS_M8=m
753# CONFIG_USB_SERIAL_EMPEG is not set
754# CONFIG_USB_SERIAL_FTDI_SIO is not set
755# CONFIG_USB_SERIAL_VISOR is not set
756# CONFIG_USB_SERIAL_IPAQ is not set
757# CONFIG_USB_SERIAL_IR is not set
758# CONFIG_USB_SERIAL_EDGEPORT is not set
759# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
760CONFIG_USB_SERIAL_GARMIN=m
761CONFIG_USB_SERIAL_IPW=m
762# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
763CONFIG_USB_SERIAL_KEYSPAN=y
764CONFIG_USB_SERIAL_KEYSPAN_MPR=y
765CONFIG_USB_SERIAL_KEYSPAN_USA28=y
766CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
767CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
768CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
769CONFIG_USB_SERIAL_KEYSPAN_USA19=y
770CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
771CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
772CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
773CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
774CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
775CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
776# CONFIG_USB_SERIAL_KLSI is not set
777# CONFIG_USB_SERIAL_KOBIL_SCT is not set
778# CONFIG_USB_SERIAL_MCT_U232 is not set
779# CONFIG_USB_SERIAL_PL2303 is not set
780# CONFIG_USB_SERIAL_HP4X is not set
781# CONFIG_USB_SERIAL_SAFE is not set
782CONFIG_USB_SERIAL_TI=m
783# CONFIG_USB_SERIAL_CYBERJACK is not set
784# CONFIG_USB_SERIAL_XIRCOM is not set
785# CONFIG_USB_SERIAL_OMNINET is not set
786CONFIG_USB_EZUSB=y
787
788#
789# USB Miscellaneous drivers
790#
791# CONFIG_USB_EMI62 is not set
792# CONFIG_USB_EMI26 is not set
793# CONFIG_USB_AUERSWALD is not set
794# CONFIG_USB_RIO500 is not set
795# CONFIG_USB_LEGOTOWER is not set
796# CONFIG_USB_LCD is not set
797# CONFIG_USB_LED is not set
798# CONFIG_USB_CYTHERM is not set
799# CONFIG_USB_PHIDGETKIT is not set
800# CONFIG_USB_PHIDGETSERVO is not set
801# CONFIG_USB_IDMOUSE is not set
802# CONFIG_USB_SISUSBVGA is not set
803# CONFIG_USB_LD is not set
804# CONFIG_USB_TEST is not set
805
806#
807# USB DSL modem support
808#
809
810#
811# USB Gadget Support
812#
813# CONFIG_USB_GADGET is not set
814
815#
816# MMC/SD Card support
817#
818# CONFIG_MMC is not set
819
820#
821# InfiniBand support
822#
823# CONFIG_INFINIBAND is not set
824
825#
826# SN Devices
827#
828
829#
830# File systems
831#
832CONFIG_EXT2_FS=y
833# CONFIG_EXT2_FS_XATTR is not set
834CONFIG_EXT2_FS_XIP=y
835CONFIG_FS_XIP=y
836CONFIG_EXT3_FS=y
837# CONFIG_EXT3_FS_XATTR is not set
838CONFIG_JBD=y
839# CONFIG_JBD_DEBUG is not set
840# CONFIG_REISERFS_FS is not set
841# CONFIG_JFS_FS is not set
842CONFIG_FS_POSIX_ACL=y
843# CONFIG_XFS_FS is not set
844# CONFIG_MINIX_FS is not set
845# CONFIG_ROMFS_FS is not set
846CONFIG_INOTIFY=y
847# CONFIG_QUOTA is not set
848CONFIG_DNOTIFY=y
849# CONFIG_AUTOFS_FS is not set
850# CONFIG_AUTOFS4_FS is not set
851# CONFIG_FUSE_FS is not set
852
853#
854# CD-ROM/DVD Filesystems
855#
856# CONFIG_ISO9660_FS is not set
857# CONFIG_UDF_FS is not set
858
859#
860# DOS/FAT/NT Filesystems
861#
862CONFIG_FAT_FS=y
863CONFIG_MSDOS_FS=y
864CONFIG_VFAT_FS=y
865CONFIG_FAT_DEFAULT_CODEPAGE=437
866CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
867# CONFIG_NTFS_FS is not set
868
869#
870# Pseudo filesystems
871#
872CONFIG_PROC_FS=y
873CONFIG_PROC_KCORE=y
874CONFIG_SYSFS=y
875CONFIG_TMPFS=y
876CONFIG_HUGETLBFS=y
877CONFIG_HUGETLB_PAGE=y
878CONFIG_RAMFS=y
879# CONFIG_RELAYFS_FS is not set
880
881#
882# Miscellaneous filesystems
883#
884# CONFIG_ADFS_FS is not set
885# CONFIG_AFFS_FS is not set
886# CONFIG_HFS_FS is not set
887# CONFIG_HFSPLUS_FS is not set
888# CONFIG_BEFS_FS is not set
889# CONFIG_BFS_FS is not set
890# CONFIG_EFS_FS is not set
891CONFIG_CRAMFS=y
892# CONFIG_VXFS_FS is not set
893# CONFIG_HPFS_FS is not set
894# CONFIG_QNX4FS_FS is not set
895# CONFIG_SYSV_FS is not set
896# CONFIG_UFS_FS is not set
897
898#
899# Network File Systems
900#
901CONFIG_NFS_FS=y
902CONFIG_NFS_V3=y
903CONFIG_NFS_V3_ACL=y
904CONFIG_NFS_V4=y
905# CONFIG_NFS_DIRECTIO is not set
906# CONFIG_NFSD is not set
907CONFIG_ROOT_NFS=y
908CONFIG_LOCKD=y
909CONFIG_LOCKD_V4=y
910CONFIG_NFS_ACL_SUPPORT=y
911CONFIG_NFS_COMMON=y
912CONFIG_SUNRPC=y
913CONFIG_SUNRPC_GSS=y
914CONFIG_RPCSEC_GSS_KRB5=y
915# CONFIG_RPCSEC_GSS_SPKM3 is not set
916# CONFIG_SMB_FS is not set
917# CONFIG_CIFS is not set
918# CONFIG_NCP_FS is not set
919# CONFIG_CODA_FS is not set
920# CONFIG_AFS_FS is not set
921# CONFIG_9P_FS is not set
922
923#
924# Partition Types
925#
926CONFIG_PARTITION_ADVANCED=y
927# CONFIG_ACORN_PARTITION is not set
928# CONFIG_OSF_PARTITION is not set
929# CONFIG_AMIGA_PARTITION is not set
930# CONFIG_ATARI_PARTITION is not set
931CONFIG_MAC_PARTITION=y
932CONFIG_MSDOS_PARTITION=y
933# CONFIG_BSD_DISKLABEL is not set
934# CONFIG_MINIX_SUBPARTITION is not set
935# CONFIG_SOLARIS_X86_PARTITION is not set
936# CONFIG_UNIXWARE_DISKLABEL is not set
937# CONFIG_LDM_PARTITION is not set
938# CONFIG_SGI_PARTITION is not set
939# CONFIG_ULTRIX_PARTITION is not set
940# CONFIG_SUN_PARTITION is not set
941# CONFIG_EFI_PARTITION is not set
942
943#
944# Native Language Support
945#
946CONFIG_NLS=y
947CONFIG_NLS_DEFAULT="utf-8"
948# CONFIG_NLS_CODEPAGE_437 is not set
949# CONFIG_NLS_CODEPAGE_737 is not set
950# CONFIG_NLS_CODEPAGE_775 is not set
951# CONFIG_NLS_CODEPAGE_850 is not set
952# CONFIG_NLS_CODEPAGE_852 is not set
953# CONFIG_NLS_CODEPAGE_855 is not set
954# CONFIG_NLS_CODEPAGE_857 is not set
955# CONFIG_NLS_CODEPAGE_860 is not set
956# CONFIG_NLS_CODEPAGE_861 is not set
957# CONFIG_NLS_CODEPAGE_862 is not set
958# CONFIG_NLS_CODEPAGE_863 is not set
959# CONFIG_NLS_CODEPAGE_864 is not set
960# CONFIG_NLS_CODEPAGE_865 is not set
961# CONFIG_NLS_CODEPAGE_866 is not set
962# CONFIG_NLS_CODEPAGE_869 is not set
963# CONFIG_NLS_CODEPAGE_936 is not set
964# CONFIG_NLS_CODEPAGE_950 is not set
965# CONFIG_NLS_CODEPAGE_932 is not set
966# CONFIG_NLS_CODEPAGE_949 is not set
967# CONFIG_NLS_CODEPAGE_874 is not set
968# CONFIG_NLS_ISO8859_8 is not set
969# CONFIG_NLS_CODEPAGE_1250 is not set
970# CONFIG_NLS_CODEPAGE_1251 is not set
971# CONFIG_NLS_ASCII is not set
972# CONFIG_NLS_ISO8859_1 is not set
973# CONFIG_NLS_ISO8859_2 is not set
974# CONFIG_NLS_ISO8859_3 is not set
975# CONFIG_NLS_ISO8859_4 is not set
976# CONFIG_NLS_ISO8859_5 is not set
977# CONFIG_NLS_ISO8859_6 is not set
978# CONFIG_NLS_ISO8859_7 is not set
979# CONFIG_NLS_ISO8859_9 is not set
980# CONFIG_NLS_ISO8859_13 is not set
981# CONFIG_NLS_ISO8859_14 is not set
982# CONFIG_NLS_ISO8859_15 is not set
983# CONFIG_NLS_KOI8_R is not set
984# CONFIG_NLS_KOI8_U is not set
985CONFIG_NLS_UTF8=y
986
987#
988# Profiling support
989#
990# CONFIG_PROFILING is not set
991
992#
993# Kernel hacking
994#
995# CONFIG_PRINTK_TIME is not set
996CONFIG_DEBUG_KERNEL=y
997CONFIG_MAGIC_SYSRQ=y
998CONFIG_LOG_BUF_SHIFT=17
999CONFIG_DETECT_SOFTLOCKUP=y
1000# CONFIG_SCHEDSTATS is not set
1001CONFIG_DEBUG_SLAB=y
1002# CONFIG_DEBUG_SPINLOCK is not set
1003CONFIG_DEBUG_SPINLOCK_SLEEP=y
1004# CONFIG_DEBUG_KOBJECT is not set
1005# CONFIG_DEBUG_INFO is not set
1006CONFIG_DEBUG_FS=y
1007CONFIG_DEBUG_STACKOVERFLOW=y
1008# CONFIG_KPROBES is not set
1009CONFIG_DEBUG_STACK_USAGE=y
1010CONFIG_DEBUGGER=y
1011CONFIG_XMON=y
1012CONFIG_XMON_DEFAULT=y
1013# CONFIG_PPCDBG is not set
1014# CONFIG_IRQSTACKS is not set
1015
1016#
1017# Security options
1018#
1019# CONFIG_KEYS is not set
1020# CONFIG_SECURITY is not set
1021
1022#
1023# Cryptographic options
1024#
1025CONFIG_CRYPTO=y
1026# CONFIG_CRYPTO_HMAC is not set
1027# CONFIG_CRYPTO_NULL is not set
1028# CONFIG_CRYPTO_MD4 is not set
1029CONFIG_CRYPTO_MD5=y
1030# CONFIG_CRYPTO_SHA1 is not set
1031# CONFIG_CRYPTO_SHA256 is not set
1032# CONFIG_CRYPTO_SHA512 is not set
1033# CONFIG_CRYPTO_WP512 is not set
1034# CONFIG_CRYPTO_TGR192 is not set
1035CONFIG_CRYPTO_DES=y
1036# CONFIG_CRYPTO_BLOWFISH is not set
1037# CONFIG_CRYPTO_TWOFISH is not set
1038# CONFIG_CRYPTO_SERPENT is not set
1039# CONFIG_CRYPTO_AES is not set
1040# CONFIG_CRYPTO_CAST5 is not set
1041# CONFIG_CRYPTO_CAST6 is not set
1042# CONFIG_CRYPTO_TEA is not set
1043# CONFIG_CRYPTO_ARC4 is not set
1044# CONFIG_CRYPTO_KHAZAD is not set
1045# CONFIG_CRYPTO_ANUBIS is not set
1046# CONFIG_CRYPTO_DEFLATE is not set
1047# CONFIG_CRYPTO_MICHAEL_MIC is not set
1048# CONFIG_CRYPTO_CRC32C is not set
1049# CONFIG_CRYPTO_TEST is not set
1050
1051#
1052# Hardware crypto devices
1053#
1054
1055#
1056# Library routines
1057#
1058CONFIG_CRC_CCITT=y
1059# CONFIG_CRC16 is not set
1060CONFIG_CRC32=y
1061# CONFIG_LIBCRC32C is not set
1062CONFIG_ZLIB_INFLATE=y
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
new file mode 100644
index 000000000000..9f09dff9e11a
--- /dev/null
+++ b/arch/powerpc/configs/pseries_defconfig
@@ -0,0 +1,1371 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.14-rc4
4# Thu Oct 20 08:32:17 2005
5#
6CONFIG_64BIT=y
7CONFIG_MMU=y
8CONFIG_RWSEM_XCHGADD_ALGORITHM=y
9CONFIG_GENERIC_CALIBRATE_DELAY=y
10CONFIG_GENERIC_ISA_DMA=y
11CONFIG_EARLY_PRINTK=y
12CONFIG_COMPAT=y
13CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
14CONFIG_ARCH_MAY_HAVE_PC_FDC=y
15CONFIG_FORCE_MAX_ZONEORDER=13
16
17#
18# Code maturity level options
19#
20CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_LOCK_KERNEL=y
23CONFIG_INIT_ENV_ARG_LIMIT=32
24
25#
26# General setup
27#
28CONFIG_LOCALVERSION=""
29CONFIG_LOCALVERSION_AUTO=y
30CONFIG_SWAP=y
31CONFIG_SYSVIPC=y
32CONFIG_POSIX_MQUEUE=y
33# CONFIG_BSD_PROCESS_ACCT is not set
34CONFIG_SYSCTL=y
35CONFIG_AUDIT=y
36CONFIG_AUDITSYSCALL=y
37CONFIG_HOTPLUG=y
38CONFIG_KOBJECT_UEVENT=y
39CONFIG_IKCONFIG=y
40CONFIG_IKCONFIG_PROC=y
41CONFIG_CPUSETS=y
42CONFIG_INITRAMFS_SOURCE=""
43# CONFIG_EMBEDDED is not set
44CONFIG_KALLSYMS=y
45CONFIG_KALLSYMS_ALL=y
46# CONFIG_KALLSYMS_EXTRA_PASS is not set
47CONFIG_PRINTK=y
48CONFIG_BUG=y
49CONFIG_BASE_FULL=y
50CONFIG_FUTEX=y
51CONFIG_EPOLL=y
52CONFIG_SHMEM=y
53CONFIG_CC_ALIGN_FUNCTIONS=0
54CONFIG_CC_ALIGN_LABELS=0
55CONFIG_CC_ALIGN_LOOPS=0
56CONFIG_CC_ALIGN_JUMPS=0
57# CONFIG_TINY_SHMEM is not set
58CONFIG_BASE_SMALL=0
59
60#
61# Loadable module support
62#
63CONFIG_MODULES=y
64CONFIG_MODULE_UNLOAD=y
65# CONFIG_MODULE_FORCE_UNLOAD is not set
66CONFIG_OBSOLETE_MODPARM=y
67CONFIG_MODVERSIONS=y
68CONFIG_MODULE_SRCVERSION_ALL=y
69CONFIG_KMOD=y
70CONFIG_STOP_MACHINE=y
71CONFIG_SYSVIPC_COMPAT=y
72
73#
74# Platform support
75#
76# CONFIG_PPC_ISERIES is not set
77CONFIG_PPC_MULTIPLATFORM=y
78CONFIG_PPC_PSERIES=y
79# CONFIG_PPC_BPA is not set
80# CONFIG_PPC_PMAC is not set
81# CONFIG_PPC_MAPLE is not set
82CONFIG_PPC=y
83CONFIG_PPC64=y
84CONFIG_PPC_OF=y
85CONFIG_XICS=y
86CONFIG_MPIC=y
87CONFIG_ALTIVEC=y
88CONFIG_PPC_SPLPAR=y
89CONFIG_KEXEC=y
90CONFIG_IBMVIO=y
91# CONFIG_U3_DART is not set
92# CONFIG_BOOTX_TEXT is not set
93# CONFIG_POWER4_ONLY is not set
94CONFIG_IOMMU_VMERGE=y
95CONFIG_SMP=y
96CONFIG_NR_CPUS=128
97CONFIG_ARCH_SELECT_MEMORY_MODEL=y
98CONFIG_ARCH_FLATMEM_ENABLE=y
99CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
100CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
101CONFIG_ARCH_SPARSEMEM_ENABLE=y
102CONFIG_SELECT_MEMORY_MODEL=y
103# CONFIG_FLATMEM_MANUAL is not set
104CONFIG_DISCONTIGMEM_MANUAL=y
105# CONFIG_SPARSEMEM_MANUAL is not set
106CONFIG_DISCONTIGMEM=y
107CONFIG_FLAT_NODE_MEM_MAP=y
108CONFIG_NEED_MULTIPLE_NODES=y
109# CONFIG_SPARSEMEM_STATIC is not set
110CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
111CONFIG_NODES_SPAN_OTHER_NODES=y
112CONFIG_NUMA=y
113CONFIG_SCHED_SMT=y
114CONFIG_PREEMPT_NONE=y
115# CONFIG_PREEMPT_VOLUNTARY is not set
116# CONFIG_PREEMPT is not set
117# CONFIG_PREEMPT_BKL is not set
118# CONFIG_HZ_100 is not set
119CONFIG_HZ_250=y
120# CONFIG_HZ_1000 is not set
121CONFIG_HZ=250
122CONFIG_EEH=y
123CONFIG_GENERIC_HARDIRQS=y
124CONFIG_PPC_RTAS=y
125CONFIG_RTAS_PROC=y
126CONFIG_RTAS_FLASH=m
127CONFIG_SCANLOG=m
128CONFIG_LPARCFG=y
129CONFIG_SECCOMP=y
130CONFIG_BINFMT_ELF=y
131# CONFIG_BINFMT_MISC is not set
132CONFIG_HOTPLUG_CPU=y
133CONFIG_PROC_DEVICETREE=y
134# CONFIG_CMDLINE_BOOL is not set
135CONFIG_ISA_DMA_API=y
136
137#
138# Bus Options
139#
140CONFIG_PCI=y
141CONFIG_PCI_DOMAINS=y
142CONFIG_PCI_LEGACY_PROC=y
143# CONFIG_PCI_DEBUG is not set
144
145#
146# PCCARD (PCMCIA/CardBus) support
147#
148# CONFIG_PCCARD is not set
149
150#
151# PCI Hotplug Support
152#
153CONFIG_HOTPLUG_PCI=m
154# CONFIG_HOTPLUG_PCI_FAKE is not set
155# CONFIG_HOTPLUG_PCI_CPCI is not set
156# CONFIG_HOTPLUG_PCI_SHPC is not set
157CONFIG_HOTPLUG_PCI_RPA=m
158CONFIG_HOTPLUG_PCI_RPA_DLPAR=m
159
160#
161# Networking
162#
163CONFIG_NET=y
164
165#
166# Networking options
167#
168CONFIG_PACKET=y
169# CONFIG_PACKET_MMAP is not set
170CONFIG_UNIX=y
171CONFIG_XFRM=y
172CONFIG_XFRM_USER=m
173CONFIG_NET_KEY=m
174CONFIG_INET=y
175CONFIG_IP_MULTICAST=y
176# CONFIG_IP_ADVANCED_ROUTER is not set
177CONFIG_IP_FIB_HASH=y
178# CONFIG_IP_PNP is not set
179CONFIG_NET_IPIP=y
180# CONFIG_NET_IPGRE is not set
181# CONFIG_IP_MROUTE is not set
182# CONFIG_ARPD is not set
183CONFIG_SYN_COOKIES=y
184CONFIG_INET_AH=m
185CONFIG_INET_ESP=m
186CONFIG_INET_IPCOMP=m
187CONFIG_INET_TUNNEL=y
188CONFIG_INET_DIAG=y
189CONFIG_INET_TCP_DIAG=y
190# CONFIG_TCP_CONG_ADVANCED is not set
191CONFIG_TCP_CONG_BIC=y
192
193#
194# IP: Virtual Server Configuration
195#
196# CONFIG_IP_VS is not set
197# CONFIG_IPV6 is not set
198CONFIG_NETFILTER=y
199# CONFIG_NETFILTER_DEBUG is not set
200CONFIG_NETFILTER_NETLINK=y
201CONFIG_NETFILTER_NETLINK_QUEUE=m
202CONFIG_NETFILTER_NETLINK_LOG=m
203
204#
205# IP: Netfilter Configuration
206#
207CONFIG_IP_NF_CONNTRACK=m
208CONFIG_IP_NF_CT_ACCT=y
209CONFIG_IP_NF_CONNTRACK_MARK=y
210CONFIG_IP_NF_CONNTRACK_EVENTS=y
211CONFIG_IP_NF_CONNTRACK_NETLINK=m
212CONFIG_IP_NF_CT_PROTO_SCTP=m
213CONFIG_IP_NF_FTP=m
214CONFIG_IP_NF_IRC=m
215# CONFIG_IP_NF_NETBIOS_NS is not set
216CONFIG_IP_NF_TFTP=m
217CONFIG_IP_NF_AMANDA=m
218# CONFIG_IP_NF_PPTP is not set
219CONFIG_IP_NF_QUEUE=m
220CONFIG_IP_NF_IPTABLES=m
221CONFIG_IP_NF_MATCH_LIMIT=m
222CONFIG_IP_NF_MATCH_IPRANGE=m
223CONFIG_IP_NF_MATCH_MAC=m
224CONFIG_IP_NF_MATCH_PKTTYPE=m
225CONFIG_IP_NF_MATCH_MARK=m
226CONFIG_IP_NF_MATCH_MULTIPORT=m
227CONFIG_IP_NF_MATCH_TOS=m
228CONFIG_IP_NF_MATCH_RECENT=m
229CONFIG_IP_NF_MATCH_ECN=m
230CONFIG_IP_NF_MATCH_DSCP=m
231CONFIG_IP_NF_MATCH_AH_ESP=m
232CONFIG_IP_NF_MATCH_LENGTH=m
233CONFIG_IP_NF_MATCH_TTL=m
234CONFIG_IP_NF_MATCH_TCPMSS=m
235CONFIG_IP_NF_MATCH_HELPER=m
236CONFIG_IP_NF_MATCH_STATE=m
237CONFIG_IP_NF_MATCH_CONNTRACK=m
238CONFIG_IP_NF_MATCH_OWNER=m
239CONFIG_IP_NF_MATCH_ADDRTYPE=m
240CONFIG_IP_NF_MATCH_REALM=m
241CONFIG_IP_NF_MATCH_SCTP=m
242# CONFIG_IP_NF_MATCH_DCCP is not set
243CONFIG_IP_NF_MATCH_COMMENT=m
244CONFIG_IP_NF_MATCH_CONNMARK=m
245CONFIG_IP_NF_MATCH_CONNBYTES=m
246CONFIG_IP_NF_MATCH_HASHLIMIT=m
247CONFIG_IP_NF_MATCH_STRING=m
248CONFIG_IP_NF_FILTER=m
249CONFIG_IP_NF_TARGET_REJECT=m
250CONFIG_IP_NF_TARGET_LOG=m
251CONFIG_IP_NF_TARGET_ULOG=m
252CONFIG_IP_NF_TARGET_TCPMSS=m
253CONFIG_IP_NF_TARGET_NFQUEUE=m
254CONFIG_IP_NF_NAT=m
255CONFIG_IP_NF_NAT_NEEDED=y
256CONFIG_IP_NF_TARGET_MASQUERADE=m
257CONFIG_IP_NF_TARGET_REDIRECT=m
258CONFIG_IP_NF_TARGET_NETMAP=m
259CONFIG_IP_NF_TARGET_SAME=m
260CONFIG_IP_NF_NAT_SNMP_BASIC=m
261CONFIG_IP_NF_NAT_IRC=m
262CONFIG_IP_NF_NAT_FTP=m
263CONFIG_IP_NF_NAT_TFTP=m
264CONFIG_IP_NF_NAT_AMANDA=m
265CONFIG_IP_NF_MANGLE=m
266CONFIG_IP_NF_TARGET_TOS=m
267CONFIG_IP_NF_TARGET_ECN=m
268CONFIG_IP_NF_TARGET_DSCP=m
269CONFIG_IP_NF_TARGET_MARK=m
270CONFIG_IP_NF_TARGET_CLASSIFY=m
271CONFIG_IP_NF_TARGET_TTL=m
272CONFIG_IP_NF_TARGET_CONNMARK=m
273CONFIG_IP_NF_TARGET_CLUSTERIP=m
274CONFIG_IP_NF_RAW=m
275CONFIG_IP_NF_TARGET_NOTRACK=m
276CONFIG_IP_NF_ARPTABLES=m
277CONFIG_IP_NF_ARPFILTER=m
278CONFIG_IP_NF_ARP_MANGLE=m
279
280#
281# DCCP Configuration (EXPERIMENTAL)
282#
283# CONFIG_IP_DCCP is not set
284
285#
286# SCTP Configuration (EXPERIMENTAL)
287#
288# CONFIG_IP_SCTP is not set
289# CONFIG_ATM is not set
290# CONFIG_BRIDGE is not set
291# CONFIG_VLAN_8021Q is not set
292# CONFIG_DECNET is not set
293CONFIG_LLC=y
294# CONFIG_LLC2 is not set
295# CONFIG_IPX is not set
296# CONFIG_ATALK is not set
297# CONFIG_X25 is not set
298# CONFIG_LAPB is not set
299# CONFIG_NET_DIVERT is not set
300# CONFIG_ECONET is not set
301# CONFIG_WAN_ROUTER is not set
302# CONFIG_NET_SCHED is not set
303CONFIG_NET_CLS_ROUTE=y
304
305#
306# Network testing
307#
308# CONFIG_NET_PKTGEN is not set
309# CONFIG_HAMRADIO is not set
310# CONFIG_IRDA is not set
311# CONFIG_BT is not set
312# CONFIG_IEEE80211 is not set
313
314#
315# Device Drivers
316#
317
318#
319# Generic Driver Options
320#
321CONFIG_STANDALONE=y
322CONFIG_PREVENT_FIRMWARE_BUILD=y
323CONFIG_FW_LOADER=y
324# CONFIG_DEBUG_DRIVER is not set
325
326#
327# Connector - unified userspace <-> kernelspace linker
328#
329# CONFIG_CONNECTOR is not set
330
331#
332# Memory Technology Devices (MTD)
333#
334# CONFIG_MTD is not set
335
336#
337# Parallel port support
338#
339CONFIG_PARPORT=m
340CONFIG_PARPORT_PC=m
341# CONFIG_PARPORT_SERIAL is not set
342# CONFIG_PARPORT_PC_FIFO is not set
343# CONFIG_PARPORT_PC_SUPERIO is not set
344# CONFIG_PARPORT_GSC is not set
345# CONFIG_PARPORT_1284 is not set
346
347#
348# Plug and Play support
349#
350
351#
352# Block devices
353#
354CONFIG_BLK_DEV_FD=m
355# CONFIG_PARIDE is not set
356# CONFIG_BLK_CPQ_DA is not set
357# CONFIG_BLK_CPQ_CISS_DA is not set
358# CONFIG_BLK_DEV_DAC960 is not set
359# CONFIG_BLK_DEV_UMEM is not set
360# CONFIG_BLK_DEV_COW_COMMON is not set
361CONFIG_BLK_DEV_LOOP=y
362# CONFIG_BLK_DEV_CRYPTOLOOP is not set
363CONFIG_BLK_DEV_NBD=m
364# CONFIG_BLK_DEV_SX8 is not set
365# CONFIG_BLK_DEV_UB is not set
366CONFIG_BLK_DEV_RAM=y
367CONFIG_BLK_DEV_RAM_COUNT=16
368CONFIG_BLK_DEV_RAM_SIZE=65536
369CONFIG_BLK_DEV_INITRD=y
370# CONFIG_CDROM_PKTCDVD is not set
371
372#
373# IO Schedulers
374#
375CONFIG_IOSCHED_NOOP=y
376CONFIG_IOSCHED_AS=y
377CONFIG_IOSCHED_DEADLINE=y
378CONFIG_IOSCHED_CFQ=y
379# CONFIG_ATA_OVER_ETH is not set
380
381#
382# ATA/ATAPI/MFM/RLL support
383#
384CONFIG_IDE=y
385CONFIG_BLK_DEV_IDE=y
386
387#
388# Please see Documentation/ide.txt for help/info on IDE drives
389#
390# CONFIG_BLK_DEV_IDE_SATA is not set
391CONFIG_BLK_DEV_IDEDISK=y
392# CONFIG_IDEDISK_MULTI_MODE is not set
393CONFIG_BLK_DEV_IDECD=y
394# CONFIG_BLK_DEV_IDETAPE is not set
395# CONFIG_BLK_DEV_IDEFLOPPY is not set
396# CONFIG_BLK_DEV_IDESCSI is not set
397# CONFIG_IDE_TASK_IOCTL is not set
398
399#
400# IDE chipset support/bugfixes
401#
402CONFIG_IDE_GENERIC=y
403CONFIG_BLK_DEV_IDEPCI=y
404CONFIG_IDEPCI_SHARE_IRQ=y
405# CONFIG_BLK_DEV_OFFBOARD is not set
406CONFIG_BLK_DEV_GENERIC=y
407# CONFIG_BLK_DEV_OPTI621 is not set
408CONFIG_BLK_DEV_SL82C105=y
409CONFIG_BLK_DEV_IDEDMA_PCI=y
410# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
411CONFIG_IDEDMA_PCI_AUTO=y
412# CONFIG_IDEDMA_ONLYDISK is not set
413# CONFIG_BLK_DEV_AEC62XX is not set
414# CONFIG_BLK_DEV_ALI15X3 is not set
415CONFIG_BLK_DEV_AMD74XX=y
416# CONFIG_BLK_DEV_CMD64X is not set
417# CONFIG_BLK_DEV_TRIFLEX is not set
418# CONFIG_BLK_DEV_CY82C693 is not set
419# CONFIG_BLK_DEV_CS5520 is not set
420# CONFIG_BLK_DEV_CS5530 is not set
421# CONFIG_BLK_DEV_HPT34X is not set
422# CONFIG_BLK_DEV_HPT366 is not set
423# CONFIG_BLK_DEV_SC1200 is not set
424# CONFIG_BLK_DEV_PIIX is not set
425# CONFIG_BLK_DEV_IT821X is not set
426# CONFIG_BLK_DEV_NS87415 is not set
427# CONFIG_BLK_DEV_PDC202XX_OLD is not set
428# CONFIG_BLK_DEV_PDC202XX_NEW is not set
429# CONFIG_BLK_DEV_SVWKS is not set
430# CONFIG_BLK_DEV_SIIMAGE is not set
431# CONFIG_BLK_DEV_SLC90E66 is not set
432# CONFIG_BLK_DEV_TRM290 is not set
433# CONFIG_BLK_DEV_VIA82CXXX is not set
434# CONFIG_IDE_ARM is not set
435CONFIG_BLK_DEV_IDEDMA=y
436# CONFIG_IDEDMA_IVB is not set
437CONFIG_IDEDMA_AUTO=y
438# CONFIG_BLK_DEV_HD is not set
439
440#
441# SCSI device support
442#
443# CONFIG_RAID_ATTRS is not set
444CONFIG_SCSI=y
445CONFIG_SCSI_PROC_FS=y
446
447#
448# SCSI support type (disk, tape, CD-ROM)
449#
450CONFIG_BLK_DEV_SD=y
451CONFIG_CHR_DEV_ST=y
452# CONFIG_CHR_DEV_OSST is not set
453CONFIG_BLK_DEV_SR=y
454CONFIG_BLK_DEV_SR_VENDOR=y
455CONFIG_CHR_DEV_SG=y
456# CONFIG_CHR_DEV_SCH is not set
457
458#
459# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
460#
461CONFIG_SCSI_MULTI_LUN=y
462CONFIG_SCSI_CONSTANTS=y
463# CONFIG_SCSI_LOGGING is not set
464
465#
466# SCSI Transport Attributes
467#
468CONFIG_SCSI_SPI_ATTRS=y
469CONFIG_SCSI_FC_ATTRS=y
470CONFIG_SCSI_ISCSI_ATTRS=m
471# CONFIG_SCSI_SAS_ATTRS is not set
472
473#
474# SCSI low-level drivers
475#
476# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
477# CONFIG_SCSI_3W_9XXX is not set
478# CONFIG_SCSI_ACARD is not set
479# CONFIG_SCSI_AACRAID is not set
480# CONFIG_SCSI_AIC7XXX is not set
481# CONFIG_SCSI_AIC7XXX_OLD is not set
482# CONFIG_SCSI_AIC79XX is not set
483# CONFIG_MEGARAID_NEWGEN is not set
484# CONFIG_MEGARAID_LEGACY is not set
485# CONFIG_MEGARAID_SAS is not set
486# CONFIG_SCSI_SATA is not set
487# CONFIG_SCSI_BUSLOGIC is not set
488# CONFIG_SCSI_DMX3191D is not set
489# CONFIG_SCSI_EATA is not set
490# CONFIG_SCSI_FUTURE_DOMAIN is not set
491# CONFIG_SCSI_GDTH is not set
492# CONFIG_SCSI_IPS is not set
493CONFIG_SCSI_IBMVSCSI=y
494# CONFIG_SCSI_INITIO is not set
495# CONFIG_SCSI_INIA100 is not set
496# CONFIG_SCSI_PPA is not set
497# CONFIG_SCSI_IMM is not set
498CONFIG_SCSI_SYM53C8XX_2=y
499CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
500CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
501CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
502# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
503CONFIG_SCSI_IPR=y
504CONFIG_SCSI_IPR_TRACE=y
505CONFIG_SCSI_IPR_DUMP=y
506# CONFIG_SCSI_QLOGIC_FC is not set
507# CONFIG_SCSI_QLOGIC_1280 is not set
508CONFIG_SCSI_QLA2XXX=y
509CONFIG_SCSI_QLA21XX=m
510CONFIG_SCSI_QLA22XX=m
511CONFIG_SCSI_QLA2300=m
512CONFIG_SCSI_QLA2322=m
513CONFIG_SCSI_QLA6312=m
514CONFIG_SCSI_QLA24XX=m
515CONFIG_SCSI_LPFC=m
516# CONFIG_SCSI_DC395x is not set
517# CONFIG_SCSI_DC390T is not set
518# CONFIG_SCSI_DEBUG is not set
519
520#
521# Multi-device support (RAID and LVM)
522#
523CONFIG_MD=y
524CONFIG_BLK_DEV_MD=y
525CONFIG_MD_LINEAR=y
526CONFIG_MD_RAID0=y
527CONFIG_MD_RAID1=y
528CONFIG_MD_RAID10=m
529CONFIG_MD_RAID5=y
530CONFIG_MD_RAID6=m
531CONFIG_MD_MULTIPATH=m
532CONFIG_MD_FAULTY=m
533CONFIG_BLK_DEV_DM=y
534CONFIG_DM_CRYPT=m
535CONFIG_DM_SNAPSHOT=m
536CONFIG_DM_MIRROR=m
537CONFIG_DM_ZERO=m
538CONFIG_DM_MULTIPATH=m
539CONFIG_DM_MULTIPATH_EMC=m
540
541#
542# Fusion MPT device support
543#
544# CONFIG_FUSION is not set
545# CONFIG_FUSION_SPI is not set
546# CONFIG_FUSION_FC is not set
547# CONFIG_FUSION_SAS is not set
548
549#
550# IEEE 1394 (FireWire) support
551#
552# CONFIG_IEEE1394 is not set
553
554#
555# I2O device support
556#
557# CONFIG_I2O is not set
558
559#
560# Macintosh device drivers
561#
562
563#
564# Network device support
565#
566CONFIG_NETDEVICES=y
567CONFIG_DUMMY=m
568CONFIG_BONDING=m
569# CONFIG_EQUALIZER is not set
570CONFIG_TUN=m
571
572#
573# ARCnet devices
574#
575# CONFIG_ARCNET is not set
576
577#
578# PHY device support
579#
580# CONFIG_PHYLIB is not set
581
582#
583# Ethernet (10 or 100Mbit)
584#
585CONFIG_NET_ETHERNET=y
586CONFIG_MII=y
587# CONFIG_HAPPYMEAL is not set
588# CONFIG_SUNGEM is not set
589# CONFIG_CASSINI is not set
590CONFIG_NET_VENDOR_3COM=y
591CONFIG_VORTEX=y
592# CONFIG_TYPHOON is not set
593
594#
595# Tulip family network device support
596#
597# CONFIG_NET_TULIP is not set
598# CONFIG_HP100 is not set
599CONFIG_IBMVETH=y
600CONFIG_NET_PCI=y
601CONFIG_PCNET32=y
602# CONFIG_AMD8111_ETH is not set
603# CONFIG_ADAPTEC_STARFIRE is not set
604# CONFIG_B44 is not set
605# CONFIG_FORCEDETH is not set
606# CONFIG_DGRS is not set
607# CONFIG_EEPRO100 is not set
608CONFIG_E100=y
609# CONFIG_FEALNX is not set
610# CONFIG_NATSEMI is not set
611# CONFIG_NE2K_PCI is not set
612# CONFIG_8139CP is not set
613# CONFIG_8139TOO is not set
614# CONFIG_SIS900 is not set
615# CONFIG_EPIC100 is not set
616# CONFIG_SUNDANCE is not set
617# CONFIG_VIA_RHINE is not set
618# CONFIG_NET_POCKET is not set
619
620#
621# Ethernet (1000 Mbit)
622#
623CONFIG_ACENIC=y
624CONFIG_ACENIC_OMIT_TIGON_I=y
625# CONFIG_DL2K is not set
626CONFIG_E1000=y
627# CONFIG_E1000_NAPI is not set
628# CONFIG_NS83820 is not set
629# CONFIG_HAMACHI is not set
630# CONFIG_YELLOWFIN is not set
631# CONFIG_R8169 is not set
632# CONFIG_SIS190 is not set
633# CONFIG_SKGE is not set
634# CONFIG_SK98LIN is not set
635# CONFIG_VIA_VELOCITY is not set
636CONFIG_TIGON3=y
637# CONFIG_BNX2 is not set
638# CONFIG_MV643XX_ETH is not set
639
640#
641# Ethernet (10000 Mbit)
642#
643# CONFIG_CHELSIO_T1 is not set
644CONFIG_IXGB=m
645# CONFIG_IXGB_NAPI is not set
646CONFIG_S2IO=m
647# CONFIG_S2IO_NAPI is not set
648# CONFIG_2BUFF_MODE is not set
649
650#
651# Token Ring devices
652#
653CONFIG_TR=y
654CONFIG_IBMOL=y
655# CONFIG_3C359 is not set
656# CONFIG_TMS380TR is not set
657
658#
659# Wireless LAN (non-hamradio)
660#
661# CONFIG_NET_RADIO is not set
662
663#
664# Wan interfaces
665#
666# CONFIG_WAN is not set
667# CONFIG_FDDI is not set
668# CONFIG_HIPPI is not set
669# CONFIG_PLIP is not set
670CONFIG_PPP=m
671# CONFIG_PPP_MULTILINK is not set
672# CONFIG_PPP_FILTER is not set
673CONFIG_PPP_ASYNC=m
674CONFIG_PPP_SYNC_TTY=m
675CONFIG_PPP_DEFLATE=m
676CONFIG_PPP_BSDCOMP=m
677CONFIG_PPPOE=m
678# CONFIG_SLIP is not set
679# CONFIG_NET_FC is not set
680# CONFIG_SHAPER is not set
681CONFIG_NETCONSOLE=y
682CONFIG_NETPOLL=y
683CONFIG_NETPOLL_RX=y
684CONFIG_NETPOLL_TRAP=y
685CONFIG_NET_POLL_CONTROLLER=y
686
687#
688# ISDN subsystem
689#
690# CONFIG_ISDN is not set
691
692#
693# Telephony Support
694#
695# CONFIG_PHONE is not set
696
697#
698# Input device support
699#
700CONFIG_INPUT=y
701
702#
703# Userland interfaces
704#
705CONFIG_INPUT_MOUSEDEV=y
706# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
707CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
708CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
709# CONFIG_INPUT_JOYDEV is not set
710# CONFIG_INPUT_TSDEV is not set
711# CONFIG_INPUT_EVDEV is not set
712# CONFIG_INPUT_EVBUG is not set
713
714#
715# Input Device Drivers
716#
717CONFIG_INPUT_KEYBOARD=y
718CONFIG_KEYBOARD_ATKBD=y
719# CONFIG_KEYBOARD_SUNKBD is not set
720# CONFIG_KEYBOARD_LKKBD is not set
721# CONFIG_KEYBOARD_XTKBD is not set
722# CONFIG_KEYBOARD_NEWTON is not set
723CONFIG_INPUT_MOUSE=y
724CONFIG_MOUSE_PS2=y
725# CONFIG_MOUSE_SERIAL is not set
726# CONFIG_MOUSE_VSXXXAA is not set
727# CONFIG_INPUT_JOYSTICK is not set
728# CONFIG_INPUT_TOUCHSCREEN is not set
729CONFIG_INPUT_MISC=y
730CONFIG_INPUT_PCSPKR=m
731# CONFIG_INPUT_UINPUT is not set
732
733#
734# Hardware I/O ports
735#
736CONFIG_SERIO=y
737CONFIG_SERIO_I8042=y
738# CONFIG_SERIO_SERPORT is not set
739# CONFIG_SERIO_PARKBD is not set
740# CONFIG_SERIO_PCIPS2 is not set
741CONFIG_SERIO_LIBPS2=y
742# CONFIG_SERIO_RAW is not set
743# CONFIG_GAMEPORT is not set
744
745#
746# Character devices
747#
748CONFIG_VT=y
749CONFIG_VT_CONSOLE=y
750CONFIG_HW_CONSOLE=y
751# CONFIG_SERIAL_NONSTANDARD is not set
752
753#
754# Serial drivers
755#
756CONFIG_SERIAL_8250=y
757CONFIG_SERIAL_8250_CONSOLE=y
758CONFIG_SERIAL_8250_NR_UARTS=4
759# CONFIG_SERIAL_8250_EXTENDED is not set
760
761#
762# Non-8250 serial port support
763#
764CONFIG_SERIAL_CORE=y
765CONFIG_SERIAL_CORE_CONSOLE=y
766CONFIG_SERIAL_ICOM=m
767# CONFIG_SERIAL_JSM is not set
768CONFIG_UNIX98_PTYS=y
769CONFIG_LEGACY_PTYS=y
770CONFIG_LEGACY_PTY_COUNT=256
771# CONFIG_PRINTER is not set
772# CONFIG_PPDEV is not set
773# CONFIG_TIPAR is not set
774CONFIG_HVC_CONSOLE=y
775CONFIG_HVCS=m
776
777#
778# IPMI
779#
780# CONFIG_IPMI_HANDLER is not set
781
782#
783# Watchdog Cards
784#
785# CONFIG_WATCHDOG is not set
786# CONFIG_RTC is not set
787# CONFIG_DTLK is not set
788# CONFIG_R3964 is not set
789# CONFIG_APPLICOM is not set
790
791#
792# Ftape, the floppy tape device driver
793#
794# CONFIG_AGP is not set
795# CONFIG_DRM is not set
796CONFIG_RAW_DRIVER=y
797CONFIG_MAX_RAW_DEVS=1024
798# CONFIG_HANGCHECK_TIMER is not set
799
800#
801# TPM devices
802#
803# CONFIG_TCG_TPM is not set
804
805#
806# I2C support
807#
808CONFIG_I2C=y
809# CONFIG_I2C_CHARDEV is not set
810
811#
812# I2C Algorithms
813#
814CONFIG_I2C_ALGOBIT=y
815# CONFIG_I2C_ALGOPCF is not set
816# CONFIG_I2C_ALGOPCA is not set
817
818#
819# I2C Hardware Bus support
820#
821# CONFIG_I2C_ALI1535 is not set
822# CONFIG_I2C_ALI1563 is not set
823# CONFIG_I2C_ALI15X3 is not set
824# CONFIG_I2C_AMD756 is not set
825# CONFIG_I2C_AMD8111 is not set
826# CONFIG_I2C_I801 is not set
827# CONFIG_I2C_I810 is not set
828# CONFIG_I2C_PIIX4 is not set
829# CONFIG_I2C_NFORCE2 is not set
830# CONFIG_I2C_PARPORT is not set
831# CONFIG_I2C_PARPORT_LIGHT is not set
832# CONFIG_I2C_PROSAVAGE is not set
833# CONFIG_I2C_SAVAGE4 is not set
834# CONFIG_SCx200_ACB is not set
835# CONFIG_I2C_SIS5595 is not set
836# CONFIG_I2C_SIS630 is not set
837# CONFIG_I2C_SIS96X is not set
838# CONFIG_I2C_STUB is not set
839# CONFIG_I2C_VIA is not set
840# CONFIG_I2C_VIAPRO is not set
841# CONFIG_I2C_VOODOO3 is not set
842# CONFIG_I2C_PCA_ISA is not set
843
844#
845# Miscellaneous I2C Chip support
846#
847# CONFIG_SENSORS_DS1337 is not set
848# CONFIG_SENSORS_DS1374 is not set
849# CONFIG_SENSORS_EEPROM is not set
850# CONFIG_SENSORS_PCF8574 is not set
851# CONFIG_SENSORS_PCA9539 is not set
852# CONFIG_SENSORS_PCF8591 is not set
853# CONFIG_SENSORS_RTC8564 is not set
854# CONFIG_SENSORS_MAX6875 is not set
855# CONFIG_I2C_DEBUG_CORE is not set
856# CONFIG_I2C_DEBUG_ALGO is not set
857# CONFIG_I2C_DEBUG_BUS is not set
858# CONFIG_I2C_DEBUG_CHIP is not set
859
860#
861# Dallas's 1-wire bus
862#
863# CONFIG_W1 is not set
864
865#
866# Hardware Monitoring support
867#
868# CONFIG_HWMON is not set
869# CONFIG_HWMON_VID is not set
870
871#
872# Misc devices
873#
874
875#
876# Multimedia Capabilities Port drivers
877#
878
879#
880# Multimedia devices
881#
882# CONFIG_VIDEO_DEV is not set
883
884#
885# Digital Video Broadcasting Devices
886#
887# CONFIG_DVB is not set
888
889#
890# Graphics support
891#
892CONFIG_FB=y
893CONFIG_FB_CFB_FILLRECT=y
894CONFIG_FB_CFB_COPYAREA=y
895CONFIG_FB_CFB_IMAGEBLIT=y
896CONFIG_FB_SOFT_CURSOR=y
897CONFIG_FB_MACMODES=y
898CONFIG_FB_MODE_HELPERS=y
899CONFIG_FB_TILEBLITTING=y
900# CONFIG_FB_CIRRUS is not set
901# CONFIG_FB_PM2 is not set
902# CONFIG_FB_CYBER2000 is not set
903CONFIG_FB_OF=y
904# CONFIG_FB_CT65550 is not set
905# CONFIG_FB_ASILIANT is not set
906# CONFIG_FB_IMSTT is not set
907# CONFIG_FB_VGA16 is not set
908# CONFIG_FB_NVIDIA is not set
909# CONFIG_FB_RIVA is not set
910CONFIG_FB_MATROX=y
911CONFIG_FB_MATROX_MILLENIUM=y
912CONFIG_FB_MATROX_MYSTIQUE=y
913CONFIG_FB_MATROX_G=y
914# CONFIG_FB_MATROX_I2C is not set
915CONFIG_FB_MATROX_MULTIHEAD=y
916# CONFIG_FB_RADEON_OLD is not set
917CONFIG_FB_RADEON=y
918CONFIG_FB_RADEON_I2C=y
919# CONFIG_FB_RADEON_DEBUG is not set
920# CONFIG_FB_ATY128 is not set
921# CONFIG_FB_ATY is not set
922# CONFIG_FB_SAVAGE is not set
923# CONFIG_FB_SIS is not set
924# CONFIG_FB_NEOMAGIC is not set
925# CONFIG_FB_KYRO is not set
926# CONFIG_FB_3DFX is not set
927# CONFIG_FB_VOODOO1 is not set
928# CONFIG_FB_CYBLA is not set
929# CONFIG_FB_TRIDENT is not set
930# CONFIG_FB_S1D13XXX is not set
931# CONFIG_FB_VIRTUAL is not set
932
933#
934# Console display driver support
935#
936# CONFIG_VGA_CONSOLE is not set
937CONFIG_DUMMY_CONSOLE=y
938CONFIG_FRAMEBUFFER_CONSOLE=y
939# CONFIG_FONTS is not set
940CONFIG_FONT_8x8=y
941CONFIG_FONT_8x16=y
942
943#
944# Logo configuration
945#
946CONFIG_LOGO=y
947CONFIG_LOGO_LINUX_MONO=y
948CONFIG_LOGO_LINUX_VGA16=y
949CONFIG_LOGO_LINUX_CLUT224=y
950CONFIG_BACKLIGHT_LCD_SUPPORT=y
951CONFIG_BACKLIGHT_CLASS_DEVICE=m
952CONFIG_BACKLIGHT_DEVICE=y
953CONFIG_LCD_CLASS_DEVICE=m
954CONFIG_LCD_DEVICE=y
955
956#
957# Sound
958#
959# CONFIG_SOUND is not set
960
961#
962# USB support
963#
964CONFIG_USB_ARCH_HAS_HCD=y
965CONFIG_USB_ARCH_HAS_OHCI=y
966CONFIG_USB=y
967# CONFIG_USB_DEBUG is not set
968
969#
970# Miscellaneous USB options
971#
972CONFIG_USB_DEVICEFS=y
973# CONFIG_USB_BANDWIDTH is not set
974# CONFIG_USB_DYNAMIC_MINORS is not set
975# CONFIG_USB_OTG is not set
976
977#
978# USB Host Controller Drivers
979#
980CONFIG_USB_EHCI_HCD=y
981# CONFIG_USB_EHCI_SPLIT_ISO is not set
982# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
983# CONFIG_USB_ISP116X_HCD is not set
984CONFIG_USB_OHCI_HCD=y
985# CONFIG_USB_OHCI_BIG_ENDIAN is not set
986CONFIG_USB_OHCI_LITTLE_ENDIAN=y
987# CONFIG_USB_UHCI_HCD is not set
988# CONFIG_USB_SL811_HCD is not set
989
990#
991# USB Device Class drivers
992#
993# CONFIG_USB_BLUETOOTH_TTY is not set
994# CONFIG_USB_ACM is not set
995# CONFIG_USB_PRINTER is not set
996
997#
998# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
999#
1000CONFIG_USB_STORAGE=y
1001# CONFIG_USB_STORAGE_DEBUG is not set
1002# CONFIG_USB_STORAGE_DATAFAB is not set
1003# CONFIG_USB_STORAGE_FREECOM is not set
1004# CONFIG_USB_STORAGE_ISD200 is not set
1005# CONFIG_USB_STORAGE_DPCM is not set
1006# CONFIG_USB_STORAGE_USBAT is not set
1007# CONFIG_USB_STORAGE_SDDR09 is not set
1008# CONFIG_USB_STORAGE_SDDR55 is not set
1009# CONFIG_USB_STORAGE_JUMPSHOT is not set
1010
1011#
1012# USB Input Devices
1013#
1014CONFIG_USB_HID=y
1015CONFIG_USB_HIDINPUT=y
1016# CONFIG_HID_FF is not set
1017CONFIG_USB_HIDDEV=y
1018# CONFIG_USB_AIPTEK is not set
1019# CONFIG_USB_WACOM is not set
1020# CONFIG_USB_ACECAD is not set
1021# CONFIG_USB_KBTAB is not set
1022# CONFIG_USB_POWERMATE is not set
1023# CONFIG_USB_MTOUCH is not set
1024# CONFIG_USB_ITMTOUCH is not set
1025# CONFIG_USB_EGALAX is not set
1026# CONFIG_USB_YEALINK is not set
1027# CONFIG_USB_XPAD is not set
1028# CONFIG_USB_ATI_REMOTE is not set
1029# CONFIG_USB_KEYSPAN_REMOTE is not set
1030# CONFIG_USB_APPLETOUCH is not set
1031
1032#
1033# USB Imaging devices
1034#
1035# CONFIG_USB_MDC800 is not set
1036# CONFIG_USB_MICROTEK is not set
1037
1038#
1039# USB Multimedia devices
1040#
1041# CONFIG_USB_DABUSB is not set
1042
1043#
1044# Video4Linux support is needed for USB Multimedia device support
1045#
1046
1047#
1048# USB Network Adapters
1049#
1050# CONFIG_USB_CATC is not set
1051# CONFIG_USB_KAWETH is not set
1052# CONFIG_USB_PEGASUS is not set
1053# CONFIG_USB_RTL8150 is not set
1054# CONFIG_USB_USBNET is not set
1055CONFIG_USB_MON=y
1056
1057#
1058# USB port drivers
1059#
1060# CONFIG_USB_USS720 is not set
1061
1062#
1063# USB Serial Converter support
1064#
1065# CONFIG_USB_SERIAL is not set
1066
1067#
1068# USB Miscellaneous drivers
1069#
1070# CONFIG_USB_EMI62 is not set
1071# CONFIG_USB_EMI26 is not set
1072# CONFIG_USB_AUERSWALD is not set
1073# CONFIG_USB_RIO500 is not set
1074# CONFIG_USB_LEGOTOWER is not set
1075# CONFIG_USB_LCD is not set
1076# CONFIG_USB_LED is not set
1077# CONFIG_USB_CYTHERM is not set
1078# CONFIG_USB_PHIDGETKIT is not set
1079# CONFIG_USB_PHIDGETSERVO is not set
1080# CONFIG_USB_IDMOUSE is not set
1081# CONFIG_USB_SISUSBVGA is not set
1082# CONFIG_USB_LD is not set
1083# CONFIG_USB_TEST is not set
1084
1085#
1086# USB DSL modem support
1087#
1088
1089#
1090# USB Gadget Support
1091#
1092# CONFIG_USB_GADGET is not set
1093
1094#
1095# MMC/SD Card support
1096#
1097# CONFIG_MMC is not set
1098
1099#
1100# InfiniBand support
1101#
1102CONFIG_INFINIBAND=m
1103# CONFIG_INFINIBAND_USER_MAD is not set
1104# CONFIG_INFINIBAND_USER_ACCESS is not set
1105CONFIG_INFINIBAND_MTHCA=m
1106# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
1107CONFIG_INFINIBAND_IPOIB=m
1108# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
1109
1110#
1111# SN Devices
1112#
1113
1114#
1115# File systems
1116#
1117CONFIG_EXT2_FS=y
1118CONFIG_EXT2_FS_XATTR=y
1119CONFIG_EXT2_FS_POSIX_ACL=y
1120CONFIG_EXT2_FS_SECURITY=y
1121CONFIG_EXT2_FS_XIP=y
1122CONFIG_FS_XIP=y
1123CONFIG_EXT3_FS=y
1124CONFIG_EXT3_FS_XATTR=y
1125CONFIG_EXT3_FS_POSIX_ACL=y
1126CONFIG_EXT3_FS_SECURITY=y
1127CONFIG_JBD=y
1128# CONFIG_JBD_DEBUG is not set
1129CONFIG_FS_MBCACHE=y
1130CONFIG_REISERFS_FS=y
1131# CONFIG_REISERFS_CHECK is not set
1132# CONFIG_REISERFS_PROC_INFO is not set
1133CONFIG_REISERFS_FS_XATTR=y
1134CONFIG_REISERFS_FS_POSIX_ACL=y
1135CONFIG_REISERFS_FS_SECURITY=y
1136CONFIG_JFS_FS=m
1137CONFIG_JFS_POSIX_ACL=y
1138CONFIG_JFS_SECURITY=y
1139# CONFIG_JFS_DEBUG is not set
1140# CONFIG_JFS_STATISTICS is not set
1141CONFIG_FS_POSIX_ACL=y
1142CONFIG_XFS_FS=m
1143CONFIG_XFS_EXPORT=y
1144# CONFIG_XFS_QUOTA is not set
1145CONFIG_XFS_SECURITY=y
1146CONFIG_XFS_POSIX_ACL=y
1147# CONFIG_XFS_RT is not set
1148# CONFIG_MINIX_FS is not set
1149# CONFIG_ROMFS_FS is not set
1150CONFIG_INOTIFY=y
1151# CONFIG_QUOTA is not set
1152CONFIG_DNOTIFY=y
1153CONFIG_AUTOFS_FS=m
1154# CONFIG_AUTOFS4_FS is not set
1155# CONFIG_FUSE_FS is not set
1156
1157#
1158# CD-ROM/DVD Filesystems
1159#
1160CONFIG_ISO9660_FS=y
1161CONFIG_JOLIET=y
1162CONFIG_ZISOFS=y
1163CONFIG_ZISOFS_FS=y
1164CONFIG_UDF_FS=m
1165CONFIG_UDF_NLS=y
1166
1167#
1168# DOS/FAT/NT Filesystems
1169#
1170CONFIG_FAT_FS=y
1171CONFIG_MSDOS_FS=y
1172CONFIG_VFAT_FS=y
1173CONFIG_FAT_DEFAULT_CODEPAGE=437
1174CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1175# CONFIG_NTFS_FS is not set
1176
1177#
1178# Pseudo filesystems
1179#
1180CONFIG_PROC_FS=y
1181CONFIG_PROC_KCORE=y
1182CONFIG_SYSFS=y
1183CONFIG_TMPFS=y
1184CONFIG_HUGETLBFS=y
1185CONFIG_HUGETLB_PAGE=y
1186CONFIG_RAMFS=y
1187# CONFIG_RELAYFS_FS is not set
1188
1189#
1190# Miscellaneous filesystems
1191#
1192# CONFIG_ADFS_FS is not set
1193# CONFIG_AFFS_FS is not set
1194# CONFIG_HFS_FS is not set
1195# CONFIG_HFSPLUS_FS is not set
1196# CONFIG_BEFS_FS is not set
1197# CONFIG_BFS_FS is not set
1198# CONFIG_EFS_FS is not set
1199CONFIG_CRAMFS=y
1200# CONFIG_VXFS_FS is not set
1201# CONFIG_HPFS_FS is not set
1202# CONFIG_QNX4FS_FS is not set
1203# CONFIG_SYSV_FS is not set
1204# CONFIG_UFS_FS is not set
1205
1206#
1207# Network File Systems
1208#
1209CONFIG_NFS_FS=y
1210CONFIG_NFS_V3=y
1211CONFIG_NFS_V3_ACL=y
1212CONFIG_NFS_V4=y
1213# CONFIG_NFS_DIRECTIO is not set
1214CONFIG_NFSD=y
1215CONFIG_NFSD_V2_ACL=y
1216CONFIG_NFSD_V3=y
1217CONFIG_NFSD_V3_ACL=y
1218CONFIG_NFSD_V4=y
1219CONFIG_NFSD_TCP=y
1220CONFIG_LOCKD=y
1221CONFIG_LOCKD_V4=y
1222CONFIG_EXPORTFS=y
1223CONFIG_NFS_ACL_SUPPORT=y
1224CONFIG_NFS_COMMON=y
1225CONFIG_SUNRPC=y
1226CONFIG_SUNRPC_GSS=y
1227CONFIG_RPCSEC_GSS_KRB5=y
1228CONFIG_RPCSEC_GSS_SPKM3=m
1229# CONFIG_SMB_FS is not set
1230CONFIG_CIFS=m
1231# CONFIG_CIFS_STATS is not set
1232CONFIG_CIFS_XATTR=y
1233CONFIG_CIFS_POSIX=y
1234# CONFIG_CIFS_EXPERIMENTAL is not set
1235# CONFIG_NCP_FS is not set
1236# CONFIG_CODA_FS is not set
1237# CONFIG_AFS_FS is not set
1238# CONFIG_9P_FS is not set
1239
1240#
1241# Partition Types
1242#
1243# CONFIG_PARTITION_ADVANCED is not set
1244CONFIG_MSDOS_PARTITION=y
1245
1246#
1247# Native Language Support
1248#
1249CONFIG_NLS=y
1250CONFIG_NLS_DEFAULT="iso8859-1"
1251CONFIG_NLS_CODEPAGE_437=y
1252# CONFIG_NLS_CODEPAGE_737 is not set
1253# CONFIG_NLS_CODEPAGE_775 is not set
1254# CONFIG_NLS_CODEPAGE_850 is not set
1255# CONFIG_NLS_CODEPAGE_852 is not set
1256# CONFIG_NLS_CODEPAGE_855 is not set
1257# CONFIG_NLS_CODEPAGE_857 is not set
1258# CONFIG_NLS_CODEPAGE_860 is not set
1259# CONFIG_NLS_CODEPAGE_861 is not set
1260# CONFIG_NLS_CODEPAGE_862 is not set
1261# CONFIG_NLS_CODEPAGE_863 is not set
1262# CONFIG_NLS_CODEPAGE_864 is not set
1263# CONFIG_NLS_CODEPAGE_865 is not set
1264# CONFIG_NLS_CODEPAGE_866 is not set
1265# CONFIG_NLS_CODEPAGE_869 is not set
1266# CONFIG_NLS_CODEPAGE_936 is not set
1267# CONFIG_NLS_CODEPAGE_950 is not set
1268# CONFIG_NLS_CODEPAGE_932 is not set
1269# CONFIG_NLS_CODEPAGE_949 is not set
1270# CONFIG_NLS_CODEPAGE_874 is not set
1271# CONFIG_NLS_ISO8859_8 is not set
1272# CONFIG_NLS_CODEPAGE_1250 is not set
1273# CONFIG_NLS_CODEPAGE_1251 is not set
1274CONFIG_NLS_ASCII=y
1275CONFIG_NLS_ISO8859_1=y
1276# CONFIG_NLS_ISO8859_2 is not set
1277# CONFIG_NLS_ISO8859_3 is not set
1278# CONFIG_NLS_ISO8859_4 is not set
1279# CONFIG_NLS_ISO8859_5 is not set
1280# CONFIG_NLS_ISO8859_6 is not set
1281# CONFIG_NLS_ISO8859_7 is not set
1282# CONFIG_NLS_ISO8859_9 is not set
1283# CONFIG_NLS_ISO8859_13 is not set
1284# CONFIG_NLS_ISO8859_14 is not set
1285# CONFIG_NLS_ISO8859_15 is not set
1286# CONFIG_NLS_KOI8_R is not set
1287# CONFIG_NLS_KOI8_U is not set
1288# CONFIG_NLS_UTF8 is not set
1289
1290#
1291# Profiling support
1292#
1293CONFIG_PROFILING=y
1294CONFIG_OPROFILE=y
1295
1296#
1297# Kernel hacking
1298#
1299# CONFIG_PRINTK_TIME is not set
1300CONFIG_DEBUG_KERNEL=y
1301CONFIG_MAGIC_SYSRQ=y
1302CONFIG_LOG_BUF_SHIFT=17
1303CONFIG_DETECT_SOFTLOCKUP=y
1304# CONFIG_SCHEDSTATS is not set
1305# CONFIG_DEBUG_SLAB is not set
1306# CONFIG_DEBUG_SPINLOCK is not set
1307# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
1308# CONFIG_DEBUG_KOBJECT is not set
1309# CONFIG_DEBUG_INFO is not set
1310CONFIG_DEBUG_FS=y
1311CONFIG_DEBUG_STACKOVERFLOW=y
1312# CONFIG_KPROBES is not set
1313CONFIG_DEBUG_STACK_USAGE=y
1314CONFIG_DEBUGGER=y
1315CONFIG_XMON=y
1316CONFIG_XMON_DEFAULT=y
1317# CONFIG_PPCDBG is not set
1318CONFIG_IRQSTACKS=y
1319
1320#
1321# Security options
1322#
1323# CONFIG_KEYS is not set
1324# CONFIG_SECURITY is not set
1325
1326#
1327# Cryptographic options
1328#
1329CONFIG_CRYPTO=y
1330CONFIG_CRYPTO_HMAC=y
1331CONFIG_CRYPTO_NULL=m
1332CONFIG_CRYPTO_MD4=m
1333CONFIG_CRYPTO_MD5=y
1334CONFIG_CRYPTO_SHA1=m
1335CONFIG_CRYPTO_SHA256=m
1336CONFIG_CRYPTO_SHA512=m
1337CONFIG_CRYPTO_WP512=m
1338CONFIG_CRYPTO_TGR192=m
1339CONFIG_CRYPTO_DES=y
1340CONFIG_CRYPTO_BLOWFISH=m
1341CONFIG_CRYPTO_TWOFISH=m
1342CONFIG_CRYPTO_SERPENT=m
1343CONFIG_CRYPTO_AES=m
1344CONFIG_CRYPTO_CAST5=m
1345CONFIG_CRYPTO_CAST6=m
1346CONFIG_CRYPTO_TEA=m
1347CONFIG_CRYPTO_ARC4=m
1348CONFIG_CRYPTO_KHAZAD=m
1349CONFIG_CRYPTO_ANUBIS=m
1350CONFIG_CRYPTO_DEFLATE=m
1351CONFIG_CRYPTO_MICHAEL_MIC=m
1352CONFIG_CRYPTO_CRC32C=m
1353CONFIG_CRYPTO_TEST=m
1354
1355#
1356# Hardware crypto devices
1357#
1358
1359#
1360# Library routines
1361#
1362CONFIG_CRC_CCITT=m
1363# CONFIG_CRC16 is not set
1364CONFIG_CRC32=y
1365CONFIG_LIBCRC32C=m
1366CONFIG_ZLIB_INFLATE=y
1367CONFIG_ZLIB_DEFLATE=m
1368CONFIG_TEXTSEARCH=y
1369CONFIG_TEXTSEARCH_KMP=m
1370CONFIG_TEXTSEARCH_BM=m
1371CONFIG_TEXTSEARCH_FSM=m
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 572d4f5eaacb..b3ae2993efb8 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -13,12 +13,15 @@ endif
13obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ 13obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
14 signal_32.o pmc.o 14 signal_32.o pmc.o
15obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ 15obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
16 ptrace32.o systbl.o 16 signal_64.o ptrace32.o systbl.o
17obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o 17obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o
18obj-$(CONFIG_POWER4) += idle_power4.o 18obj-$(CONFIG_POWER4) += idle_power4.o
19obj-$(CONFIG_PPC_OF) += of_device.o 19obj-$(CONFIG_PPC_OF) += of_device.o
20obj-$(CONFIG_PPC_RTAS) += rtas.o 20obj-$(CONFIG_PPC_RTAS) += rtas.o
21obj-$(CONFIG_RTAS_FLASH) += rtas_flash.o
22obj-$(CONFIG_RTAS_PROC) += rtas-proc.o
21obj-$(CONFIG_IBMVIO) += vio.o 23obj-$(CONFIG_IBMVIO) += vio.o
24obj-$(CONFIG_GENERIC_TBSYNC) += smp-tbsync.o
22 25
23ifeq ($(CONFIG_PPC_MERGE),y) 26ifeq ($(CONFIG_PPC_MERGE),y)
24 27
@@ -38,6 +41,7 @@ obj-$(CONFIG_PPC_OF) += prom_init.o
38obj-$(CONFIG_MODULES) += ppc_ksyms.o 41obj-$(CONFIG_MODULES) += ppc_ksyms.o
39obj-$(CONFIG_BOOTX_TEXT) += btext.o 42obj-$(CONFIG_BOOTX_TEXT) += btext.o
40obj-$(CONFIG_6xx) += idle_6xx.o 43obj-$(CONFIG_6xx) += idle_6xx.o
44obj-$(CONFIG_SMP) += smp.o
41 45
42ifeq ($(CONFIG_PPC_ISERIES),y) 46ifeq ($(CONFIG_PPC_ISERIES),y)
43$(obj)/head_64.o: $(obj)/lparmap.s 47$(obj)/head_64.o: $(obj)/lparmap.s
@@ -46,8 +50,9 @@ endif
46 50
47else 51else
48# stuff used from here for ARCH=ppc or ARCH=ppc64 52# stuff used from here for ARCH=ppc or ARCH=ppc64
53smpobj-$(CONFIG_SMP) += smp.o
49obj-$(CONFIG_PPC64) += traps.o process.o init_task.o time.o \ 54obj-$(CONFIG_PPC64) += traps.o process.o init_task.o time.o \
50 setup-common.o 55 setup-common.o $(smpobj-y)
51 56
52 57
53endif 58endif
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 330cd783206f..bc5a3689cc05 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -40,7 +40,7 @@
40#ifdef CONFIG_PPC64 40#ifdef CONFIG_PPC64
41#include <asm/paca.h> 41#include <asm/paca.h>
42#include <asm/lppaca.h> 42#include <asm/lppaca.h>
43#include <asm/iSeries/HvLpEvent.h> 43#include <asm/iseries/hv_lp_event.h>
44#include <asm/cache.h> 44#include <asm/cache.h>
45#include <asm/systemcfg.h> 45#include <asm/systemcfg.h>
46#include <asm/compat.h> 46#include <asm/compat.h>
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index 147215a0d6c0..45d81976987f 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -35,7 +35,7 @@
35#include <asm/cputable.h> 35#include <asm/cputable.h>
36#include <asm/setup.h> 36#include <asm/setup.h>
37#include <asm/hvcall.h> 37#include <asm/hvcall.h>
38#include <asm/iSeries/LparMap.h> 38#include <asm/iseries/lpar_map.h>
39#include <asm/thread_info.h> 39#include <asm/thread_info.h>
40 40
41#ifdef CONFIG_PPC_ISERIES 41#ifdef CONFIG_PPC_ISERIES
@@ -1914,24 +1914,6 @@ _GLOBAL(hmt_start_secondary)
1914 blr 1914 blr
1915#endif 1915#endif
1916 1916
1917#if defined(CONFIG_KEXEC) || defined(CONFIG_SMP)
1918_GLOBAL(smp_release_cpus)
1919 /* All secondary cpus are spinning on a common
1920 * spinloop, release them all now so they can start
1921 * to spin on their individual paca spinloops.
1922 * For non SMP kernels, the secondary cpus never
1923 * get out of the common spinloop.
1924 * XXX This does nothing useful on iSeries, secondaries are
1925 * already waiting on their paca.
1926 */
1927 li r3,1
1928 LOADADDR(r5,__secondary_hold_spinloop)
1929 std r3,0(r5)
1930 sync
1931 blr
1932#endif /* CONFIG_SMP */
1933
1934
1935/* 1917/*
1936 * We put a few things here that have to be page-aligned. 1918 * We put a few things here that have to be page-aligned.
1937 * This stuff goes at the beginning of the bss, which is page-aligned. 1919 * This stuff goes at the beginning of the bss, which is page-aligned.
diff --git a/arch/powerpc/kernel/lparmap.c b/arch/powerpc/kernel/lparmap.c
index b81de286df5e..eded971d1bf9 100644
--- a/arch/powerpc/kernel/lparmap.c
+++ b/arch/powerpc/kernel/lparmap.c
@@ -8,7 +8,7 @@
8 */ 8 */
9#include <asm/mmu.h> 9#include <asm/mmu.h>
10#include <asm/page.h> 10#include <asm/page.h>
11#include <asm/iSeries/LparMap.h> 11#include <asm/iseries/lpar_map.h>
12 12
13const struct LparMap __attribute__((__section__(".text"))) xLparMap = { 13const struct LparMap __attribute__((__section__(".text"))) xLparMap = {
14 .xNumberEsids = HvEsidsToMap, 14 .xNumberEsids = HvEsidsToMap,
diff --git a/arch/powerpc/kernel/ppc32.h b/arch/powerpc/kernel/ppc32.h
new file mode 100644
index 000000000000..90e562771791
--- /dev/null
+++ b/arch/powerpc/kernel/ppc32.h
@@ -0,0 +1,138 @@
1#ifndef _PPC64_PPC32_H
2#define _PPC64_PPC32_H
3
4#include <linux/compat.h>
5#include <asm/siginfo.h>
6#include <asm/signal.h>
7
8/*
9 * Data types and macros for providing 32b PowerPC support.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16
17/* These are here to support 32-bit syscalls on a 64-bit kernel. */
18
19typedef struct compat_siginfo {
20 int si_signo;
21 int si_errno;
22 int si_code;
23
24 union {
25 int _pad[SI_PAD_SIZE32];
26
27 /* kill() */
28 struct {
29 compat_pid_t _pid; /* sender's pid */
30 compat_uid_t _uid; /* sender's uid */
31 } _kill;
32
33 /* POSIX.1b timers */
34 struct {
35 compat_timer_t _tid; /* timer id */
36 int _overrun; /* overrun count */
37 compat_sigval_t _sigval; /* same as below */
38 int _sys_private; /* not to be passed to user */
39 } _timer;
40
41 /* POSIX.1b signals */
42 struct {
43 compat_pid_t _pid; /* sender's pid */
44 compat_uid_t _uid; /* sender's uid */
45 compat_sigval_t _sigval;
46 } _rt;
47
48 /* SIGCHLD */
49 struct {
50 compat_pid_t _pid; /* which child */
51 compat_uid_t _uid; /* sender's uid */
52 int _status; /* exit code */
53 compat_clock_t _utime;
54 compat_clock_t _stime;
55 } _sigchld;
56
57 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
58 struct {
59 unsigned int _addr; /* faulting insn/memory ref. */
60 } _sigfault;
61
62 /* SIGPOLL */
63 struct {
64 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
65 int _fd;
66 } _sigpoll;
67 } _sifields;
68} compat_siginfo_t;
69
70#define __old_sigaction32 old_sigaction32
71
72struct __old_sigaction32 {
73 compat_uptr_t sa_handler;
74 compat_old_sigset_t sa_mask;
75 unsigned int sa_flags;
76 compat_uptr_t sa_restorer; /* not used by Linux/SPARC yet */
77};
78
79
80
81struct sigaction32 {
82 compat_uptr_t sa_handler; /* Really a pointer, but need to deal with 32 bits */
83 unsigned int sa_flags;
84 compat_uptr_t sa_restorer; /* Another 32 bit pointer */
85 compat_sigset_t sa_mask; /* A 32 bit mask */
86};
87
88typedef struct sigaltstack_32 {
89 unsigned int ss_sp;
90 int ss_flags;
91 compat_size_t ss_size;
92} stack_32_t;
93
94struct pt_regs32 {
95 unsigned int gpr[32];
96 unsigned int nip;
97 unsigned int msr;
98 unsigned int orig_gpr3; /* Used for restarting system calls */
99 unsigned int ctr;
100 unsigned int link;
101 unsigned int xer;
102 unsigned int ccr;
103 unsigned int mq; /* 601 only (not used at present) */
104 unsigned int trap; /* Reason for being here */
105 unsigned int dar; /* Fault registers */
106 unsigned int dsisr;
107 unsigned int result; /* Result of a system call */
108};
109
110struct sigcontext32 {
111 unsigned int _unused[4];
112 int signal;
113 compat_uptr_t handler;
114 unsigned int oldmask;
115 compat_uptr_t regs; /* 4 byte pointer to the pt_regs32 structure. */
116};
117
118struct mcontext32 {
119 elf_gregset_t32 mc_gregs;
120 elf_fpregset_t mc_fregs;
121 unsigned int mc_pad[2];
122 elf_vrregset_t32 mc_vregs __attribute__((__aligned__(16)));
123};
124
125struct ucontext32 {
126 unsigned int uc_flags;
127 unsigned int uc_link;
128 stack_32_t uc_stack;
129 int uc_pad[7];
130 compat_uptr_t uc_regs; /* points to uc_mcontext field */
131 compat_sigset_t uc_sigmask; /* mask last for extensibility */
132 /* glibc has 1024-bit signal masks, ours are 64-bit */
133 int uc_maskext[30];
134 int uc_pad2[3];
135 struct mcontext32 uc_mcontext;
136};
137
138#endif /* _PPC64_PPC32_H */
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index 8bc540337ba0..47d6f7e2ea9f 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -81,15 +81,6 @@ EXPORT_SYMBOL(_prep_type);
81EXPORT_SYMBOL(ucSystemType); 81EXPORT_SYMBOL(ucSystemType);
82#endif 82#endif
83 83
84#if !defined(__INLINE_BITOPS)
85EXPORT_SYMBOL(set_bit);
86EXPORT_SYMBOL(clear_bit);
87EXPORT_SYMBOL(change_bit);
88EXPORT_SYMBOL(test_and_set_bit);
89EXPORT_SYMBOL(test_and_clear_bit);
90EXPORT_SYMBOL(test_and_change_bit);
91#endif /* __INLINE_BITOPS */
92
93EXPORT_SYMBOL(strcpy); 84EXPORT_SYMBOL(strcpy);
94EXPORT_SYMBOL(strncpy); 85EXPORT_SYMBOL(strncpy);
95EXPORT_SYMBOL(strcat); 86EXPORT_SYMBOL(strcat);
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 8f85dabe4df3..96843211cc5c 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -48,8 +48,8 @@
48#include <asm/prom.h> 48#include <asm/prom.h>
49#ifdef CONFIG_PPC64 49#ifdef CONFIG_PPC64
50#include <asm/firmware.h> 50#include <asm/firmware.h>
51#include <asm/plpar_wrappers.h>
52#include <asm/time.h> 51#include <asm/time.h>
52#include <asm/machdep.h>
53#endif 53#endif
54 54
55extern unsigned long _get_SP(void); 55extern unsigned long _get_SP(void);
@@ -201,27 +201,15 @@ int dump_spe(struct pt_regs *regs, elf_vrregset_t *evrregs)
201} 201}
202#endif /* CONFIG_SPE */ 202#endif /* CONFIG_SPE */
203 203
204static void set_dabr_spr(unsigned long val)
205{
206 mtspr(SPRN_DABR, val);
207}
208
209int set_dabr(unsigned long dabr) 204int set_dabr(unsigned long dabr)
210{ 205{
211 int ret = 0;
212
213#ifdef CONFIG_PPC64 206#ifdef CONFIG_PPC64
214 if (firmware_has_feature(FW_FEATURE_XDABR)) { 207 if (ppc_md.set_dabr)
215 /* We want to catch accesses from kernel and userspace */ 208 return ppc_md.set_dabr(dabr);
216 unsigned long flags = H_DABRX_KERNEL|H_DABRX_USER;
217 ret = plpar_set_xdabr(dabr, flags);
218 } else if (firmware_has_feature(FW_FEATURE_DABR)) {
219 ret = plpar_set_dabr(dabr);
220 } else
221#endif 209#endif
222 set_dabr_spr(dabr);
223 210
224 return ret; 211 mtspr(SPRN_DABR, dabr);
212 return 0;
225} 213}
226 214
227#ifdef CONFIG_PPC64 215#ifdef CONFIG_PPC64
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 2eccd0e159e3..eec2da695508 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -1285,7 +1285,7 @@ static int __init early_init_dt_scan_memory(unsigned long node,
1285 1285
1286 endp = reg + (l / sizeof(cell_t)); 1286 endp = reg + (l / sizeof(cell_t));
1287 1287
1288 DBG("memory scan node %s ..., reg size %ld, data: %x %x %x %x, ...\n", 1288 DBG("memory scan node %s, reg size %ld, data: %x %x %x %x,\n",
1289 uname, l, reg[0], reg[1], reg[2], reg[3]); 1289 uname, l, reg[0], reg[1], reg[2], reg[3]);
1290 1290
1291 while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { 1291 while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) {
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 9750b3cd8ecd..c758b6624d7b 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -2000,7 +2000,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
2000#endif 2000#endif
2001 2001
2002 /* 2002 /*
2003 * On pSeries and BPA, copy the CPU hold code 2003 * Copy the CPU hold code
2004 */ 2004 */
2005 if (RELOC(of_platform) != PLATFORM_POWERMAC) 2005 if (RELOC(of_platform) != PLATFORM_POWERMAC)
2006 copy_and_flush(0, KERNELBASE + offset, 0x100, 0); 2006 copy_and_flush(0, KERNELBASE + offset, 0x100, 0);
diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c
new file mode 100644
index 000000000000..5bdd5b079d96
--- /dev/null
+++ b/arch/powerpc/kernel/rtas-proc.c
@@ -0,0 +1,808 @@
1/*
2 * arch/ppc64/kernel/rtas-proc.c
3 * Copyright (C) 2000 Tilmann Bitterberg
4 * (tilmann@bitterberg.de)
5 *
6 * RTAS (Runtime Abstraction Services) stuff
7 * Intention is to provide a clean user interface
8 * to use the RTAS.
9 *
10 * TODO:
11 * Split off a header file and maybe move it to a different
12 * location. Write Documentation on what the /proc/rtas/ entries
13 * actually do.
14 */
15
16#include <linux/errno.h>
17#include <linux/sched.h>
18#include <linux/proc_fs.h>
19#include <linux/stat.h>
20#include <linux/ctype.h>
21#include <linux/time.h>
22#include <linux/string.h>
23#include <linux/init.h>
24#include <linux/seq_file.h>
25#include <linux/bitops.h>
26#include <linux/rtc.h>
27
28#include <asm/uaccess.h>
29#include <asm/processor.h>
30#include <asm/io.h>
31#include <asm/prom.h>
32#include <asm/rtas.h>
33#include <asm/machdep.h> /* for ppc_md */
34#include <asm/time.h>
35#include <asm/systemcfg.h>
36
37/* Token for Sensors */
38#define KEY_SWITCH 0x0001
39#define ENCLOSURE_SWITCH 0x0002
40#define THERMAL_SENSOR 0x0003
41#define LID_STATUS 0x0004
42#define POWER_SOURCE 0x0005
43#define BATTERY_VOLTAGE 0x0006
44#define BATTERY_REMAINING 0x0007
45#define BATTERY_PERCENTAGE 0x0008
46#define EPOW_SENSOR 0x0009
47#define BATTERY_CYCLESTATE 0x000a
48#define BATTERY_CHARGING 0x000b
49
50/* IBM specific sensors */
51#define IBM_SURVEILLANCE 0x2328 /* 9000 */
52#define IBM_FANRPM 0x2329 /* 9001 */
53#define IBM_VOLTAGE 0x232a /* 9002 */
54#define IBM_DRCONNECTOR 0x232b /* 9003 */
55#define IBM_POWERSUPPLY 0x232c /* 9004 */
56
57/* Status return values */
58#define SENSOR_CRITICAL_HIGH 13
59#define SENSOR_WARNING_HIGH 12
60#define SENSOR_NORMAL 11
61#define SENSOR_WARNING_LOW 10
62#define SENSOR_CRITICAL_LOW 9
63#define SENSOR_SUCCESS 0
64#define SENSOR_HW_ERROR -1
65#define SENSOR_BUSY -2
66#define SENSOR_NOT_EXIST -3
67#define SENSOR_DR_ENTITY -9000
68
69/* Location Codes */
70#define LOC_SCSI_DEV_ADDR 'A'
71#define LOC_SCSI_DEV_LOC 'B'
72#define LOC_CPU 'C'
73#define LOC_DISKETTE 'D'
74#define LOC_ETHERNET 'E'
75#define LOC_FAN 'F'
76#define LOC_GRAPHICS 'G'
77/* reserved / not used 'H' */
78#define LOC_IO_ADAPTER 'I'
79/* reserved / not used 'J' */
80#define LOC_KEYBOARD 'K'
81#define LOC_LCD 'L'
82#define LOC_MEMORY 'M'
83#define LOC_NV_MEMORY 'N'
84#define LOC_MOUSE 'O'
85#define LOC_PLANAR 'P'
86#define LOC_OTHER_IO 'Q'
87#define LOC_PARALLEL 'R'
88#define LOC_SERIAL 'S'
89#define LOC_DEAD_RING 'T'
90#define LOC_RACKMOUNTED 'U' /* for _u_nit is rack mounted */
91#define LOC_VOLTAGE 'V'
92#define LOC_SWITCH_ADAPTER 'W'
93#define LOC_OTHER 'X'
94#define LOC_FIRMWARE 'Y'
95#define LOC_SCSI 'Z'
96
97/* Tokens for indicators */
98#define TONE_FREQUENCY 0x0001 /* 0 - 1000 (HZ)*/
99#define TONE_VOLUME 0x0002 /* 0 - 100 (%) */
100#define SYSTEM_POWER_STATE 0x0003
101#define WARNING_LIGHT 0x0004
102#define DISK_ACTIVITY_LIGHT 0x0005
103#define HEX_DISPLAY_UNIT 0x0006
104#define BATTERY_WARNING_TIME 0x0007
105#define CONDITION_CYCLE_REQUEST 0x0008
106#define SURVEILLANCE_INDICATOR 0x2328 /* 9000 */
107#define DR_ACTION 0x2329 /* 9001 */
108#define DR_INDICATOR 0x232a /* 9002 */
109/* 9003 - 9004: Vendor specific */
110/* 9006 - 9999: Vendor specific */
111
112/* other */
113#define MAX_SENSORS 17 /* I only know of 17 sensors */
114#define MAX_LINELENGTH 256
115#define SENSOR_PREFIX "ibm,sensor-"
116#define cel_to_fahr(x) ((x*9/5)+32)
117
118
119/* Globals */
120static struct rtas_sensors sensors;
121static struct device_node *rtas_node = NULL;
122static unsigned long power_on_time = 0; /* Save the time the user set */
123static char progress_led[MAX_LINELENGTH];
124
125static unsigned long rtas_tone_frequency = 1000;
126static unsigned long rtas_tone_volume = 0;
127
128/* ****************STRUCTS******************************************* */
129struct individual_sensor {
130 unsigned int token;
131 unsigned int quant;
132};
133
134struct rtas_sensors {
135 struct individual_sensor sensor[MAX_SENSORS];
136 unsigned int quant;
137};
138
139/* ****************************************************************** */
140/* Declarations */
141static int ppc_rtas_sensors_show(struct seq_file *m, void *v);
142static int ppc_rtas_clock_show(struct seq_file *m, void *v);
143static ssize_t ppc_rtas_clock_write(struct file *file,
144 const char __user *buf, size_t count, loff_t *ppos);
145static int ppc_rtas_progress_show(struct seq_file *m, void *v);
146static ssize_t ppc_rtas_progress_write(struct file *file,
147 const char __user *buf, size_t count, loff_t *ppos);
148static int ppc_rtas_poweron_show(struct seq_file *m, void *v);
149static ssize_t ppc_rtas_poweron_write(struct file *file,
150 const char __user *buf, size_t count, loff_t *ppos);
151
152static ssize_t ppc_rtas_tone_freq_write(struct file *file,
153 const char __user *buf, size_t count, loff_t *ppos);
154static int ppc_rtas_tone_freq_show(struct seq_file *m, void *v);
155static ssize_t ppc_rtas_tone_volume_write(struct file *file,
156 const char __user *buf, size_t count, loff_t *ppos);
157static int ppc_rtas_tone_volume_show(struct seq_file *m, void *v);
158static int ppc_rtas_rmo_buf_show(struct seq_file *m, void *v);
159
160static int sensors_open(struct inode *inode, struct file *file)
161{
162 return single_open(file, ppc_rtas_sensors_show, NULL);
163}
164
165struct file_operations ppc_rtas_sensors_operations = {
166 .open = sensors_open,
167 .read = seq_read,
168 .llseek = seq_lseek,
169 .release = single_release,
170};
171
172static int poweron_open(struct inode *inode, struct file *file)
173{
174 return single_open(file, ppc_rtas_poweron_show, NULL);
175}
176
177struct file_operations ppc_rtas_poweron_operations = {
178 .open = poweron_open,
179 .read = seq_read,
180 .llseek = seq_lseek,
181 .write = ppc_rtas_poweron_write,
182 .release = single_release,
183};
184
185static int progress_open(struct inode *inode, struct file *file)
186{
187 return single_open(file, ppc_rtas_progress_show, NULL);
188}
189
190struct file_operations ppc_rtas_progress_operations = {
191 .open = progress_open,
192 .read = seq_read,
193 .llseek = seq_lseek,
194 .write = ppc_rtas_progress_write,
195 .release = single_release,
196};
197
198static int clock_open(struct inode *inode, struct file *file)
199{
200 return single_open(file, ppc_rtas_clock_show, NULL);
201}
202
203struct file_operations ppc_rtas_clock_operations = {
204 .open = clock_open,
205 .read = seq_read,
206 .llseek = seq_lseek,
207 .write = ppc_rtas_clock_write,
208 .release = single_release,
209};
210
211static int tone_freq_open(struct inode *inode, struct file *file)
212{
213 return single_open(file, ppc_rtas_tone_freq_show, NULL);
214}
215
216struct file_operations ppc_rtas_tone_freq_operations = {
217 .open = tone_freq_open,
218 .read = seq_read,
219 .llseek = seq_lseek,
220 .write = ppc_rtas_tone_freq_write,
221 .release = single_release,
222};
223
224static int tone_volume_open(struct inode *inode, struct file *file)
225{
226 return single_open(file, ppc_rtas_tone_volume_show, NULL);
227}
228
229struct file_operations ppc_rtas_tone_volume_operations = {
230 .open = tone_volume_open,
231 .read = seq_read,
232 .llseek = seq_lseek,
233 .write = ppc_rtas_tone_volume_write,
234 .release = single_release,
235};
236
237static int rmo_buf_open(struct inode *inode, struct file *file)
238{
239 return single_open(file, ppc_rtas_rmo_buf_show, NULL);
240}
241
242struct file_operations ppc_rtas_rmo_buf_ops = {
243 .open = rmo_buf_open,
244 .read = seq_read,
245 .llseek = seq_lseek,
246 .release = single_release,
247};
248
249static int ppc_rtas_find_all_sensors(void);
250static void ppc_rtas_process_sensor(struct seq_file *m,
251 struct individual_sensor *s, int state, int error, char *loc);
252static char *ppc_rtas_process_error(int error);
253static void get_location_code(struct seq_file *m,
254 struct individual_sensor *s, char *loc);
255static void check_location_string(struct seq_file *m, char *c);
256static void check_location(struct seq_file *m, char *c);
257
258static int __init proc_rtas_init(void)
259{
260 struct proc_dir_entry *entry;
261
262 if (!(systemcfg->platform & PLATFORM_PSERIES))
263 return 1;
264
265 rtas_node = of_find_node_by_name(NULL, "rtas");
266 if (rtas_node == NULL)
267 return 1;
268
269 entry = create_proc_entry("ppc64/rtas/progress", S_IRUGO|S_IWUSR, NULL);
270 if (entry)
271 entry->proc_fops = &ppc_rtas_progress_operations;
272
273 entry = create_proc_entry("ppc64/rtas/clock", S_IRUGO|S_IWUSR, NULL);
274 if (entry)
275 entry->proc_fops = &ppc_rtas_clock_operations;
276
277 entry = create_proc_entry("ppc64/rtas/poweron", S_IWUSR|S_IRUGO, NULL);
278 if (entry)
279 entry->proc_fops = &ppc_rtas_poweron_operations;
280
281 entry = create_proc_entry("ppc64/rtas/sensors", S_IRUGO, NULL);
282 if (entry)
283 entry->proc_fops = &ppc_rtas_sensors_operations;
284
285 entry = create_proc_entry("ppc64/rtas/frequency", S_IWUSR|S_IRUGO,
286 NULL);
287 if (entry)
288 entry->proc_fops = &ppc_rtas_tone_freq_operations;
289
290 entry = create_proc_entry("ppc64/rtas/volume", S_IWUSR|S_IRUGO, NULL);
291 if (entry)
292 entry->proc_fops = &ppc_rtas_tone_volume_operations;
293
294 entry = create_proc_entry("ppc64/rtas/rmo_buffer", S_IRUSR, NULL);
295 if (entry)
296 entry->proc_fops = &ppc_rtas_rmo_buf_ops;
297
298 return 0;
299}
300
301__initcall(proc_rtas_init);
302
303static int parse_number(const char __user *p, size_t count, unsigned long *val)
304{
305 char buf[40];
306 char *end;
307
308 if (count > 39)
309 return -EINVAL;
310
311 if (copy_from_user(buf, p, count))
312 return -EFAULT;
313
314 buf[count] = 0;
315
316 *val = simple_strtoul(buf, &end, 10);
317 if (*end && *end != '\n')
318 return -EINVAL;
319
320 return 0;
321}
322
323/* ****************************************************************** */
324/* POWER-ON-TIME */
325/* ****************************************************************** */
326static ssize_t ppc_rtas_poweron_write(struct file *file,
327 const char __user *buf, size_t count, loff_t *ppos)
328{
329 struct rtc_time tm;
330 unsigned long nowtime;
331 int error = parse_number(buf, count, &nowtime);
332 if (error)
333 return error;
334
335 power_on_time = nowtime; /* save the time */
336
337 to_tm(nowtime, &tm);
338
339 error = rtas_call(rtas_token("set-time-for-power-on"), 7, 1, NULL,
340 tm.tm_year, tm.tm_mon, tm.tm_mday,
341 tm.tm_hour, tm.tm_min, tm.tm_sec, 0 /* nano */);
342 if (error)
343 printk(KERN_WARNING "error: setting poweron time returned: %s\n",
344 ppc_rtas_process_error(error));
345 return count;
346}
347/* ****************************************************************** */
348static int ppc_rtas_poweron_show(struct seq_file *m, void *v)
349{
350 if (power_on_time == 0)
351 seq_printf(m, "Power on time not set\n");
352 else
353 seq_printf(m, "%lu\n",power_on_time);
354 return 0;
355}
356
357/* ****************************************************************** */
358/* PROGRESS */
359/* ****************************************************************** */
360static ssize_t ppc_rtas_progress_write(struct file *file,
361 const char __user *buf, size_t count, loff_t *ppos)
362{
363 unsigned long hex;
364
365 if (count >= MAX_LINELENGTH)
366 count = MAX_LINELENGTH -1;
367 if (copy_from_user(progress_led, buf, count)) { /* save the string */
368 return -EFAULT;
369 }
370 progress_led[count] = 0;
371
372 /* Lets see if the user passed hexdigits */
373 hex = simple_strtoul(progress_led, NULL, 10);
374
375 rtas_progress ((char *)progress_led, hex);
376 return count;
377
378 /* clear the line */
379 /* rtas_progress(" ", 0xffff);*/
380}
381/* ****************************************************************** */
382static int ppc_rtas_progress_show(struct seq_file *m, void *v)
383{
384 if (progress_led)
385 seq_printf(m, "%s\n", progress_led);
386 return 0;
387}
388
389/* ****************************************************************** */
390/* CLOCK */
391/* ****************************************************************** */
392static ssize_t ppc_rtas_clock_write(struct file *file,
393 const char __user *buf, size_t count, loff_t *ppos)
394{
395 struct rtc_time tm;
396 unsigned long nowtime;
397 int error = parse_number(buf, count, &nowtime);
398 if (error)
399 return error;
400
401 to_tm(nowtime, &tm);
402 error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL,
403 tm.tm_year, tm.tm_mon, tm.tm_mday,
404 tm.tm_hour, tm.tm_min, tm.tm_sec, 0);
405 if (error)
406 printk(KERN_WARNING "error: setting the clock returned: %s\n",
407 ppc_rtas_process_error(error));
408 return count;
409}
410/* ****************************************************************** */
411static int ppc_rtas_clock_show(struct seq_file *m, void *v)
412{
413 int ret[8];
414 int error = rtas_call(rtas_token("get-time-of-day"), 0, 8, ret);
415
416 if (error) {
417 printk(KERN_WARNING "error: reading the clock returned: %s\n",
418 ppc_rtas_process_error(error));
419 seq_printf(m, "0");
420 } else {
421 unsigned int year, mon, day, hour, min, sec;
422 year = ret[0]; mon = ret[1]; day = ret[2];
423 hour = ret[3]; min = ret[4]; sec = ret[5];
424 seq_printf(m, "%lu\n",
425 mktime(year, mon, day, hour, min, sec));
426 }
427 return 0;
428}
429
430/* ****************************************************************** */
431/* SENSOR STUFF */
432/* ****************************************************************** */
433static int ppc_rtas_sensors_show(struct seq_file *m, void *v)
434{
435 int i,j;
436 int state, error;
437 int get_sensor_state = rtas_token("get-sensor-state");
438
439 seq_printf(m, "RTAS (RunTime Abstraction Services) Sensor Information\n");
440 seq_printf(m, "Sensor\t\tValue\t\tCondition\tLocation\n");
441 seq_printf(m, "********************************************************\n");
442
443 if (ppc_rtas_find_all_sensors() != 0) {
444 seq_printf(m, "\nNo sensors are available\n");
445 return 0;
446 }
447
448 for (i=0; i<sensors.quant; i++) {
449 struct individual_sensor *p = &sensors.sensor[i];
450 char rstr[64];
451 char *loc;
452 int llen, offs;
453
454 sprintf (rstr, SENSOR_PREFIX"%04d", p->token);
455 loc = (char *) get_property(rtas_node, rstr, &llen);
456
457 /* A sensor may have multiple instances */
458 for (j = 0, offs = 0; j <= p->quant; j++) {
459 error = rtas_call(get_sensor_state, 2, 2, &state,
460 p->token, j);
461
462 ppc_rtas_process_sensor(m, p, state, error, loc);
463 seq_putc(m, '\n');
464 if (loc) {
465 offs += strlen(loc) + 1;
466 loc += strlen(loc) + 1;
467 if (offs >= llen)
468 loc = NULL;
469 }
470 }
471 }
472 return 0;
473}
474
475/* ****************************************************************** */
476
477static int ppc_rtas_find_all_sensors(void)
478{
479 unsigned int *utmp;
480 int len, i;
481
482 utmp = (unsigned int *) get_property(rtas_node, "rtas-sensors", &len);
483 if (utmp == NULL) {
484 printk (KERN_ERR "error: could not get rtas-sensors\n");
485 return 1;
486 }
487
488 sensors.quant = len / 8; /* int + int */
489
490 for (i=0; i<sensors.quant; i++) {
491 sensors.sensor[i].token = *utmp++;
492 sensors.sensor[i].quant = *utmp++;
493 }
494 return 0;
495}
496
497/* ****************************************************************** */
498/*
499 * Builds a string of what rtas returned
500 */
501static char *ppc_rtas_process_error(int error)
502{
503 switch (error) {
504 case SENSOR_CRITICAL_HIGH:
505 return "(critical high)";
506 case SENSOR_WARNING_HIGH:
507 return "(warning high)";
508 case SENSOR_NORMAL:
509 return "(normal)";
510 case SENSOR_WARNING_LOW:
511 return "(warning low)";
512 case SENSOR_CRITICAL_LOW:
513 return "(critical low)";
514 case SENSOR_SUCCESS:
515 return "(read ok)";
516 case SENSOR_HW_ERROR:
517 return "(hardware error)";
518 case SENSOR_BUSY:
519 return "(busy)";
520 case SENSOR_NOT_EXIST:
521 return "(non existent)";
522 case SENSOR_DR_ENTITY:
523 return "(dr entity removed)";
524 default:
525 return "(UNKNOWN)";
526 }
527}
528
529/* ****************************************************************** */
530/*
531 * Builds a string out of what the sensor said
532 */
533
534static void ppc_rtas_process_sensor(struct seq_file *m,
535 struct individual_sensor *s, int state, int error, char *loc)
536{
537 /* Defined return vales */
538 const char * key_switch[] = { "Off\t", "Normal\t", "Secure\t",
539 "Maintenance" };
540 const char * enclosure_switch[] = { "Closed", "Open" };
541 const char * lid_status[] = { " ", "Open", "Closed" };
542 const char * power_source[] = { "AC\t", "Battery",
543 "AC & Battery" };
544 const char * battery_remaining[] = { "Very Low", "Low", "Mid", "High" };
545 const char * epow_sensor[] = {
546 "EPOW Reset", "Cooling warning", "Power warning",
547 "System shutdown", "System halt", "EPOW main enclosure",
548 "EPOW power off" };
549 const char * battery_cyclestate[] = { "None", "In progress",
550 "Requested" };
551 const char * battery_charging[] = { "Charging", "Discharching",
552 "No current flow" };
553 const char * ibm_drconnector[] = { "Empty", "Present", "Unusable",
554 "Exchange" };
555
556 int have_strings = 0;
557 int num_states = 0;
558 int temperature = 0;
559 int unknown = 0;
560
561 /* What kind of sensor do we have here? */
562
563 switch (s->token) {
564 case KEY_SWITCH:
565 seq_printf(m, "Key switch:\t");
566 num_states = sizeof(key_switch) / sizeof(char *);
567 if (state < num_states) {
568 seq_printf(m, "%s\t", key_switch[state]);
569 have_strings = 1;
570 }
571 break;
572 case ENCLOSURE_SWITCH:
573 seq_printf(m, "Enclosure switch:\t");
574 num_states = sizeof(enclosure_switch) / sizeof(char *);
575 if (state < num_states) {
576 seq_printf(m, "%s\t",
577 enclosure_switch[state]);
578 have_strings = 1;
579 }
580 break;
581 case THERMAL_SENSOR:
582 seq_printf(m, "Temp. (C/F):\t");
583 temperature = 1;
584 break;
585 case LID_STATUS:
586 seq_printf(m, "Lid status:\t");
587 num_states = sizeof(lid_status) / sizeof(char *);
588 if (state < num_states) {
589 seq_printf(m, "%s\t", lid_status[state]);
590 have_strings = 1;
591 }
592 break;
593 case POWER_SOURCE:
594 seq_printf(m, "Power source:\t");
595 num_states = sizeof(power_source) / sizeof(char *);
596 if (state < num_states) {
597 seq_printf(m, "%s\t",
598 power_source[state]);
599 have_strings = 1;
600 }
601 break;
602 case BATTERY_VOLTAGE:
603 seq_printf(m, "Battery voltage:\t");
604 break;
605 case BATTERY_REMAINING:
606 seq_printf(m, "Battery remaining:\t");
607 num_states = sizeof(battery_remaining) / sizeof(char *);
608 if (state < num_states)
609 {
610 seq_printf(m, "%s\t",
611 battery_remaining[state]);
612 have_strings = 1;
613 }
614 break;
615 case BATTERY_PERCENTAGE:
616 seq_printf(m, "Battery percentage:\t");
617 break;
618 case EPOW_SENSOR:
619 seq_printf(m, "EPOW Sensor:\t");
620 num_states = sizeof(epow_sensor) / sizeof(char *);
621 if (state < num_states) {
622 seq_printf(m, "%s\t", epow_sensor[state]);
623 have_strings = 1;
624 }
625 break;
626 case BATTERY_CYCLESTATE:
627 seq_printf(m, "Battery cyclestate:\t");
628 num_states = sizeof(battery_cyclestate) /
629 sizeof(char *);
630 if (state < num_states) {
631 seq_printf(m, "%s\t",
632 battery_cyclestate[state]);
633 have_strings = 1;
634 }
635 break;
636 case BATTERY_CHARGING:
637 seq_printf(m, "Battery Charging:\t");
638 num_states = sizeof(battery_charging) / sizeof(char *);
639 if (state < num_states) {
640 seq_printf(m, "%s\t",
641 battery_charging[state]);
642 have_strings = 1;
643 }
644 break;
645 case IBM_SURVEILLANCE:
646 seq_printf(m, "Surveillance:\t");
647 break;
648 case IBM_FANRPM:
649 seq_printf(m, "Fan (rpm):\t");
650 break;
651 case IBM_VOLTAGE:
652 seq_printf(m, "Voltage (mv):\t");
653 break;
654 case IBM_DRCONNECTOR:
655 seq_printf(m, "DR connector:\t");
656 num_states = sizeof(ibm_drconnector) / sizeof(char *);
657 if (state < num_states) {
658 seq_printf(m, "%s\t",
659 ibm_drconnector[state]);
660 have_strings = 1;
661 }
662 break;
663 case IBM_POWERSUPPLY:
664 seq_printf(m, "Powersupply:\t");
665 break;
666 default:
667 seq_printf(m, "Unknown sensor (type %d), ignoring it\n",
668 s->token);
669 unknown = 1;
670 have_strings = 1;
671 break;
672 }
673 if (have_strings == 0) {
674 if (temperature) {
675 seq_printf(m, "%4d /%4d\t", state, cel_to_fahr(state));
676 } else
677 seq_printf(m, "%10d\t", state);
678 }
679 if (unknown == 0) {
680 seq_printf(m, "%s\t", ppc_rtas_process_error(error));
681 get_location_code(m, s, loc);
682 }
683}
684
685/* ****************************************************************** */
686
687static void check_location(struct seq_file *m, char *c)
688{
689 switch (c[0]) {
690 case LOC_PLANAR:
691 seq_printf(m, "Planar #%c", c[1]);
692 break;
693 case LOC_CPU:
694 seq_printf(m, "CPU #%c", c[1]);
695 break;
696 case LOC_FAN:
697 seq_printf(m, "Fan #%c", c[1]);
698 break;
699 case LOC_RACKMOUNTED:
700 seq_printf(m, "Rack #%c", c[1]);
701 break;
702 case LOC_VOLTAGE:
703 seq_printf(m, "Voltage #%c", c[1]);
704 break;
705 case LOC_LCD:
706 seq_printf(m, "LCD #%c", c[1]);
707 break;
708 case '.':
709 seq_printf(m, "- %c", c[1]);
710 break;
711 default:
712 seq_printf(m, "Unknown location");
713 break;
714 }
715}
716
717
718/* ****************************************************************** */
719/*
720 * Format:
721 * ${LETTER}${NUMBER}[[-/]${LETTER}${NUMBER} [ ... ] ]
722 * the '.' may be an abbrevation
723 */
724static void check_location_string(struct seq_file *m, char *c)
725{
726 while (*c) {
727 if (isalpha(*c) || *c == '.')
728 check_location(m, c);
729 else if (*c == '/' || *c == '-')
730 seq_printf(m, " at ");
731 c++;
732 }
733}
734
735
736/* ****************************************************************** */
737
738static void get_location_code(struct seq_file *m, struct individual_sensor *s, char *loc)
739{
740 if (!loc || !*loc) {
741 seq_printf(m, "---");/* does not have a location */
742 } else {
743 check_location_string(m, loc);
744 }
745 seq_putc(m, ' ');
746}
747/* ****************************************************************** */
748/* INDICATORS - Tone Frequency */
749/* ****************************************************************** */
750static ssize_t ppc_rtas_tone_freq_write(struct file *file,
751 const char __user *buf, size_t count, loff_t *ppos)
752{
753 unsigned long freq;
754 int error = parse_number(buf, count, &freq);
755 if (error)
756 return error;
757
758 rtas_tone_frequency = freq; /* save it for later */
759 error = rtas_call(rtas_token("set-indicator"), 3, 1, NULL,
760 TONE_FREQUENCY, 0, freq);
761 if (error)
762 printk(KERN_WARNING "error: setting tone frequency returned: %s\n",
763 ppc_rtas_process_error(error));
764 return count;
765}
766/* ****************************************************************** */
767static int ppc_rtas_tone_freq_show(struct seq_file *m, void *v)
768{
769 seq_printf(m, "%lu\n", rtas_tone_frequency);
770 return 0;
771}
772/* ****************************************************************** */
773/* INDICATORS - Tone Volume */
774/* ****************************************************************** */
775static ssize_t ppc_rtas_tone_volume_write(struct file *file,
776 const char __user *buf, size_t count, loff_t *ppos)
777{
778 unsigned long volume;
779 int error = parse_number(buf, count, &volume);
780 if (error)
781 return error;
782
783 if (volume > 100)
784 volume = 100;
785
786 rtas_tone_volume = volume; /* save it for later */
787 error = rtas_call(rtas_token("set-indicator"), 3, 1, NULL,
788 TONE_VOLUME, 0, volume);
789 if (error)
790 printk(KERN_WARNING "error: setting tone volume returned: %s\n",
791 ppc_rtas_process_error(error));
792 return count;
793}
794/* ****************************************************************** */
795static int ppc_rtas_tone_volume_show(struct seq_file *m, void *v)
796{
797 seq_printf(m, "%lu\n", rtas_tone_volume);
798 return 0;
799}
800
801#define RMO_READ_BUF_MAX 30
802
803/* RTAS Userspace access */
804static int ppc_rtas_rmo_buf_show(struct seq_file *m, void *v)
805{
806 seq_printf(m, "%016lx %x\n", rtas_rmo_buf, RTAS_RMOBUF_MAX);
807 return 0;
808}
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 4d22eeeeb91d..b7fc2d884950 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -43,6 +43,13 @@ char rtas_data_buf[RTAS_DATA_BUF_SIZE] __cacheline_aligned;
43unsigned long rtas_rmo_buf; 43unsigned long rtas_rmo_buf;
44 44
45/* 45/*
46 * If non-NULL, this gets called when the kernel terminates.
47 * This is done like this so rtas_flash can be a module.
48 */
49void (*rtas_flash_term_hook)(int);
50EXPORT_SYMBOL(rtas_flash_term_hook);
51
52/*
46 * call_rtas_display_status and call_rtas_display_status_delay 53 * call_rtas_display_status and call_rtas_display_status_delay
47 * are designed only for very early low-level debugging, which 54 * are designed only for very early low-level debugging, which
48 * is why the token is hard-coded to 10. 55 * is why the token is hard-coded to 10.
@@ -206,6 +213,7 @@ void rtas_progress(char *s, unsigned short hex)
206 213
207 spin_unlock(&progress_lock); 214 spin_unlock(&progress_lock);
208} 215}
216EXPORT_SYMBOL(rtas_progress); /* needed by rtas_flash module */
209 217
210int rtas_token(const char *service) 218int rtas_token(const char *service)
211{ 219{
@@ -492,6 +500,8 @@ int rtas_set_indicator(int indicator, int index, int new_value)
492 500
493void rtas_restart(char *cmd) 501void rtas_restart(char *cmd)
494{ 502{
503 if (rtas_flash_term_hook)
504 rtas_flash_term_hook(SYS_RESTART);
495 printk("RTAS system-reboot returned %d\n", 505 printk("RTAS system-reboot returned %d\n",
496 rtas_call(rtas_token("system-reboot"), 0, 1, NULL)); 506 rtas_call(rtas_token("system-reboot"), 0, 1, NULL));
497 for (;;); 507 for (;;);
@@ -499,6 +509,8 @@ void rtas_restart(char *cmd)
499 509
500void rtas_power_off(void) 510void rtas_power_off(void)
501{ 511{
512 if (rtas_flash_term_hook)
513 rtas_flash_term_hook(SYS_POWER_OFF);
502 /* allow power on only with power button press */ 514 /* allow power on only with power button press */
503 printk("RTAS power-off returned %d\n", 515 printk("RTAS power-off returned %d\n",
504 rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1)); 516 rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1));
@@ -507,7 +519,12 @@ void rtas_power_off(void)
507 519
508void rtas_halt(void) 520void rtas_halt(void)
509{ 521{
510 rtas_power_off(); 522 if (rtas_flash_term_hook)
523 rtas_flash_term_hook(SYS_HALT);
524 /* allow power on only with power button press */
525 printk("RTAS power-off returned %d\n",
526 rtas_call(rtas_token("power-off"), 2, 1, NULL, -1, -1));
527 for (;;);
511} 528}
512 529
513/* Must be in the RMO region, so we place it here */ 530/* Must be in the RMO region, so we place it here */
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c
new file mode 100644
index 000000000000..50500093c97f
--- /dev/null
+++ b/arch/powerpc/kernel/rtas_flash.c
@@ -0,0 +1,834 @@
1/*
2 * c 2001 PPC 64 Team, IBM Corp
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 *
9 * /proc/ppc64/rtas/firmware_flash interface
10 *
11 * This file implements a firmware_flash interface to pump a firmware
12 * image into the kernel. At reboot time rtas_restart() will see the
13 * firmware image and flash it as it reboots (see rtas.c).
14 */
15
16#include <linux/module.h>
17#include <linux/init.h>
18#include <linux/proc_fs.h>
19#include <asm/delay.h>
20#include <asm/uaccess.h>
21#include <asm/rtas.h>
22#include <asm/abs_addr.h>
23
24#define MODULE_VERS "1.0"
25#define MODULE_NAME "rtas_flash"
26
27#define FIRMWARE_FLASH_NAME "firmware_flash"
28#define FIRMWARE_UPDATE_NAME "firmware_update"
29#define MANAGE_FLASH_NAME "manage_flash"
30#define VALIDATE_FLASH_NAME "validate_flash"
31
32/* General RTAS Status Codes */
33#define RTAS_RC_SUCCESS 0
34#define RTAS_RC_HW_ERR -1
35#define RTAS_RC_BUSY -2
36
37/* Flash image status values */
38#define FLASH_AUTH -9002 /* RTAS Not Service Authority Partition */
39#define FLASH_NO_OP -1099 /* No operation initiated by user */
40#define FLASH_IMG_SHORT -1005 /* Flash image shorter than expected */
41#define FLASH_IMG_BAD_LEN -1004 /* Bad length value in flash list block */
42#define FLASH_IMG_NULL_DATA -1003 /* Bad data value in flash list block */
43#define FLASH_IMG_READY 0 /* Firmware img ready for flash on reboot */
44
45/* Manage image status values */
46#define MANAGE_AUTH -9002 /* RTAS Not Service Authority Partition */
47#define MANAGE_ACTIVE_ERR -9001 /* RTAS Cannot Overwrite Active Img */
48#define MANAGE_NO_OP -1099 /* No operation initiated by user */
49#define MANAGE_PARAM_ERR -3 /* RTAS Parameter Error */
50#define MANAGE_HW_ERR -1 /* RTAS Hardware Error */
51
52/* Validate image status values */
53#define VALIDATE_AUTH -9002 /* RTAS Not Service Authority Partition */
54#define VALIDATE_NO_OP -1099 /* No operation initiated by the user */
55#define VALIDATE_INCOMPLETE -1002 /* User copied < VALIDATE_BUF_SIZE */
56#define VALIDATE_READY -1001 /* Firmware image ready for validation */
57#define VALIDATE_PARAM_ERR -3 /* RTAS Parameter Error */
58#define VALIDATE_HW_ERR -1 /* RTAS Hardware Error */
59#define VALIDATE_TMP_UPDATE 0 /* Validate Return Status */
60#define VALIDATE_FLASH_AUTH 1 /* Validate Return Status */
61#define VALIDATE_INVALID_IMG 2 /* Validate Return Status */
62#define VALIDATE_CUR_UNKNOWN 3 /* Validate Return Status */
63#define VALIDATE_TMP_COMMIT_DL 4 /* Validate Return Status */
64#define VALIDATE_TMP_COMMIT 5 /* Validate Return Status */
65#define VALIDATE_TMP_UPDATE_DL 6 /* Validate Return Status */
66
67/* ibm,manage-flash-image operation tokens */
68#define RTAS_REJECT_TMP_IMG 0
69#define RTAS_COMMIT_TMP_IMG 1
70
71/* Array sizes */
72#define VALIDATE_BUF_SIZE 4096
73#define RTAS_MSG_MAXLEN 64
74
75struct flash_block {
76 char *data;
77 unsigned long length;
78};
79
80/* This struct is very similar but not identical to
81 * that needed by the rtas flash update.
82 * All we need to do for rtas is rewrite num_blocks
83 * into a version/length and translate the pointers
84 * to absolute.
85 */
86#define FLASH_BLOCKS_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct flash_block))
87struct flash_block_list {
88 unsigned long num_blocks;
89 struct flash_block_list *next;
90 struct flash_block blocks[FLASH_BLOCKS_PER_NODE];
91};
92struct flash_block_list_header { /* just the header of flash_block_list */
93 unsigned long num_blocks;
94 struct flash_block_list *next;
95};
96
97static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL};
98
99#define FLASH_BLOCK_LIST_VERSION (1UL)
100
101/* Local copy of the flash block list.
102 * We only allow one open of the flash proc file and create this
103 * list as we go. This list will be put in the
104 * rtas_firmware_flash_list var once it is fully read.
105 *
106 * For convenience as we build the list we use virtual addrs,
107 * we do not fill in the version number, and the length field
108 * is treated as the number of entries currently in the block
109 * (i.e. not a byte count). This is all fixed on release.
110 */
111
112/* Status int must be first member of struct */
113struct rtas_update_flash_t
114{
115 int status; /* Flash update status */
116 struct flash_block_list *flist; /* Local copy of flash block list */
117};
118
119/* Status int must be first member of struct */
120struct rtas_manage_flash_t
121{
122 int status; /* Returned status */
123 unsigned int op; /* Reject or commit image */
124};
125
126/* Status int must be first member of struct */
127struct rtas_validate_flash_t
128{
129 int status; /* Returned status */
130 char buf[VALIDATE_BUF_SIZE]; /* Candidate image buffer */
131 unsigned int buf_size; /* Size of image buf */
132 unsigned int update_results; /* Update results token */
133};
134
135static DEFINE_SPINLOCK(flash_file_open_lock);
136static struct proc_dir_entry *firmware_flash_pde;
137static struct proc_dir_entry *firmware_update_pde;
138static struct proc_dir_entry *validate_pde;
139static struct proc_dir_entry *manage_pde;
140
141/* Do simple sanity checks on the flash image. */
142static int flash_list_valid(struct flash_block_list *flist)
143{
144 struct flash_block_list *f;
145 int i;
146 unsigned long block_size, image_size;
147
148 /* Paranoid self test here. We also collect the image size. */
149 image_size = 0;
150 for (f = flist; f; f = f->next) {
151 for (i = 0; i < f->num_blocks; i++) {
152 if (f->blocks[i].data == NULL) {
153 return FLASH_IMG_NULL_DATA;
154 }
155 block_size = f->blocks[i].length;
156 if (block_size <= 0 || block_size > PAGE_SIZE) {
157 return FLASH_IMG_BAD_LEN;
158 }
159 image_size += block_size;
160 }
161 }
162
163 if (image_size < (256 << 10)) {
164 if (image_size < 2)
165 return FLASH_NO_OP;
166 }
167
168 printk(KERN_INFO "FLASH: flash image with %ld bytes stored for hardware flash on reboot\n", image_size);
169
170 return FLASH_IMG_READY;
171}
172
173static void free_flash_list(struct flash_block_list *f)
174{
175 struct flash_block_list *next;
176 int i;
177
178 while (f) {
179 for (i = 0; i < f->num_blocks; i++)
180 free_page((unsigned long)(f->blocks[i].data));
181 next = f->next;
182 free_page((unsigned long)f);
183 f = next;
184 }
185}
186
187static int rtas_flash_release(struct inode *inode, struct file *file)
188{
189 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
190 struct rtas_update_flash_t *uf;
191
192 uf = (struct rtas_update_flash_t *) dp->data;
193 if (uf->flist) {
194 /* File was opened in write mode for a new flash attempt */
195 /* Clear saved list */
196 if (rtas_firmware_flash_list.next) {
197 free_flash_list(rtas_firmware_flash_list.next);
198 rtas_firmware_flash_list.next = NULL;
199 }
200
201 if (uf->status != FLASH_AUTH)
202 uf->status = flash_list_valid(uf->flist);
203
204 if (uf->status == FLASH_IMG_READY)
205 rtas_firmware_flash_list.next = uf->flist;
206 else
207 free_flash_list(uf->flist);
208
209 uf->flist = NULL;
210 }
211
212 atomic_dec(&dp->count);
213 return 0;
214}
215
216static void get_flash_status_msg(int status, char *buf)
217{
218 char *msg;
219
220 switch (status) {
221 case FLASH_AUTH:
222 msg = "error: this partition does not have service authority\n";
223 break;
224 case FLASH_NO_OP:
225 msg = "info: no firmware image for flash\n";
226 break;
227 case FLASH_IMG_SHORT:
228 msg = "error: flash image short\n";
229 break;
230 case FLASH_IMG_BAD_LEN:
231 msg = "error: internal error bad length\n";
232 break;
233 case FLASH_IMG_NULL_DATA:
234 msg = "error: internal error null data\n";
235 break;
236 case FLASH_IMG_READY:
237 msg = "ready: firmware image ready for flash on reboot\n";
238 break;
239 default:
240 sprintf(buf, "error: unexpected status value %d\n", status);
241 return;
242 }
243
244 strcpy(buf, msg);
245}
246
247/* Reading the proc file will show status (not the firmware contents) */
248static ssize_t rtas_flash_read(struct file *file, char __user *buf,
249 size_t count, loff_t *ppos)
250{
251 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
252 struct rtas_update_flash_t *uf;
253 char msg[RTAS_MSG_MAXLEN];
254 int msglen;
255
256 uf = (struct rtas_update_flash_t *) dp->data;
257
258 if (!strcmp(dp->name, FIRMWARE_FLASH_NAME)) {
259 get_flash_status_msg(uf->status, msg);
260 } else { /* FIRMWARE_UPDATE_NAME */
261 sprintf(msg, "%d\n", uf->status);
262 }
263 msglen = strlen(msg);
264 if (msglen > count)
265 msglen = count;
266
267 if (ppos && *ppos != 0)
268 return 0; /* be cheap */
269
270 if (!access_ok(VERIFY_WRITE, buf, msglen))
271 return -EINVAL;
272
273 if (copy_to_user(buf, msg, msglen))
274 return -EFAULT;
275
276 if (ppos)
277 *ppos = msglen;
278 return msglen;
279}
280
281/* We could be much more efficient here. But to keep this function
282 * simple we allocate a page to the block list no matter how small the
283 * count is. If the system is low on memory it will be just as well
284 * that we fail....
285 */
286static ssize_t rtas_flash_write(struct file *file, const char __user *buffer,
287 size_t count, loff_t *off)
288{
289 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
290 struct rtas_update_flash_t *uf;
291 char *p;
292 int next_free;
293 struct flash_block_list *fl;
294
295 uf = (struct rtas_update_flash_t *) dp->data;
296
297 if (uf->status == FLASH_AUTH || count == 0)
298 return count; /* discard data */
299
300 /* In the case that the image is not ready for flashing, the memory
301 * allocated for the block list will be freed upon the release of the
302 * proc file
303 */
304 if (uf->flist == NULL) {
305 uf->flist = (struct flash_block_list *) get_zeroed_page(GFP_KERNEL);
306 if (!uf->flist)
307 return -ENOMEM;
308 }
309
310 fl = uf->flist;
311 while (fl->next)
312 fl = fl->next; /* seek to last block_list for append */
313 next_free = fl->num_blocks;
314 if (next_free == FLASH_BLOCKS_PER_NODE) {
315 /* Need to allocate another block_list */
316 fl->next = (struct flash_block_list *)get_zeroed_page(GFP_KERNEL);
317 if (!fl->next)
318 return -ENOMEM;
319 fl = fl->next;
320 next_free = 0;
321 }
322
323 if (count > PAGE_SIZE)
324 count = PAGE_SIZE;
325 p = (char *)get_zeroed_page(GFP_KERNEL);
326 if (!p)
327 return -ENOMEM;
328
329 if(copy_from_user(p, buffer, count)) {
330 free_page((unsigned long)p);
331 return -EFAULT;
332 }
333 fl->blocks[next_free].data = p;
334 fl->blocks[next_free].length = count;
335 fl->num_blocks++;
336
337 return count;
338}
339
340static int rtas_excl_open(struct inode *inode, struct file *file)
341{
342 struct proc_dir_entry *dp = PDE(inode);
343
344 /* Enforce exclusive open with use count of PDE */
345 spin_lock(&flash_file_open_lock);
346 if (atomic_read(&dp->count) > 1) {
347 spin_unlock(&flash_file_open_lock);
348 return -EBUSY;
349 }
350
351 atomic_inc(&dp->count);
352 spin_unlock(&flash_file_open_lock);
353
354 return 0;
355}
356
357static int rtas_excl_release(struct inode *inode, struct file *file)
358{
359 struct proc_dir_entry *dp = PDE(inode);
360
361 atomic_dec(&dp->count);
362
363 return 0;
364}
365
366static void manage_flash(struct rtas_manage_flash_t *args_buf)
367{
368 unsigned int wait_time;
369 s32 rc;
370
371 while (1) {
372 rc = rtas_call(rtas_token("ibm,manage-flash-image"), 1,
373 1, NULL, args_buf->op);
374 if (rc == RTAS_RC_BUSY)
375 udelay(1);
376 else if (rtas_is_extended_busy(rc)) {
377 wait_time = rtas_extended_busy_delay_time(rc);
378 udelay(wait_time * 1000);
379 } else
380 break;
381 }
382
383 args_buf->status = rc;
384}
385
386static ssize_t manage_flash_read(struct file *file, char __user *buf,
387 size_t count, loff_t *ppos)
388{
389 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
390 struct rtas_manage_flash_t *args_buf;
391 char msg[RTAS_MSG_MAXLEN];
392 int msglen;
393
394 args_buf = (struct rtas_manage_flash_t *) dp->data;
395 if (args_buf == NULL)
396 return 0;
397
398 msglen = sprintf(msg, "%d\n", args_buf->status);
399 if (msglen > count)
400 msglen = count;
401
402 if (ppos && *ppos != 0)
403 return 0; /* be cheap */
404
405 if (!access_ok(VERIFY_WRITE, buf, msglen))
406 return -EINVAL;
407
408 if (copy_to_user(buf, msg, msglen))
409 return -EFAULT;
410
411 if (ppos)
412 *ppos = msglen;
413 return msglen;
414}
415
416static ssize_t manage_flash_write(struct file *file, const char __user *buf,
417 size_t count, loff_t *off)
418{
419 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
420 struct rtas_manage_flash_t *args_buf;
421 const char reject_str[] = "0";
422 const char commit_str[] = "1";
423 char stkbuf[10];
424 int op;
425
426 args_buf = (struct rtas_manage_flash_t *) dp->data;
427 if ((args_buf->status == MANAGE_AUTH) || (count == 0))
428 return count;
429
430 op = -1;
431 if (buf) {
432 if (count > 9) count = 9;
433 if (copy_from_user (stkbuf, buf, count)) {
434 return -EFAULT;
435 }
436 if (strncmp(stkbuf, reject_str, strlen(reject_str)) == 0)
437 op = RTAS_REJECT_TMP_IMG;
438 else if (strncmp(stkbuf, commit_str, strlen(commit_str)) == 0)
439 op = RTAS_COMMIT_TMP_IMG;
440 }
441
442 if (op == -1) /* buf is empty, or contains invalid string */
443 return -EINVAL;
444
445 args_buf->op = op;
446 manage_flash(args_buf);
447
448 return count;
449}
450
451static void validate_flash(struct rtas_validate_flash_t *args_buf)
452{
453 int token = rtas_token("ibm,validate-flash-image");
454 unsigned int wait_time;
455 int update_results;
456 s32 rc;
457
458 rc = 0;
459 while(1) {
460 spin_lock(&rtas_data_buf_lock);
461 memcpy(rtas_data_buf, args_buf->buf, VALIDATE_BUF_SIZE);
462 rc = rtas_call(token, 2, 2, &update_results,
463 (u32) __pa(rtas_data_buf), args_buf->buf_size);
464 memcpy(args_buf->buf, rtas_data_buf, VALIDATE_BUF_SIZE);
465 spin_unlock(&rtas_data_buf_lock);
466
467 if (rc == RTAS_RC_BUSY)
468 udelay(1);
469 else if (rtas_is_extended_busy(rc)) {
470 wait_time = rtas_extended_busy_delay_time(rc);
471 udelay(wait_time * 1000);
472 } else
473 break;
474 }
475
476 args_buf->status = rc;
477 args_buf->update_results = update_results;
478}
479
480static int get_validate_flash_msg(struct rtas_validate_flash_t *args_buf,
481 char *msg)
482{
483 int n;
484
485 if (args_buf->status >= VALIDATE_TMP_UPDATE) {
486 n = sprintf(msg, "%d\n", args_buf->update_results);
487 if ((args_buf->update_results >= VALIDATE_CUR_UNKNOWN) ||
488 (args_buf->update_results == VALIDATE_TMP_UPDATE))
489 n += sprintf(msg + n, "%s\n", args_buf->buf);
490 } else {
491 n = sprintf(msg, "%d\n", args_buf->status);
492 }
493 return n;
494}
495
496static ssize_t validate_flash_read(struct file *file, char __user *buf,
497 size_t count, loff_t *ppos)
498{
499 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
500 struct rtas_validate_flash_t *args_buf;
501 char msg[RTAS_MSG_MAXLEN];
502 int msglen;
503
504 args_buf = (struct rtas_validate_flash_t *) dp->data;
505
506 if (ppos && *ppos != 0)
507 return 0; /* be cheap */
508
509 msglen = get_validate_flash_msg(args_buf, msg);
510 if (msglen > count)
511 msglen = count;
512
513 if (!access_ok(VERIFY_WRITE, buf, msglen))
514 return -EINVAL;
515
516 if (copy_to_user(buf, msg, msglen))
517 return -EFAULT;
518
519 if (ppos)
520 *ppos = msglen;
521 return msglen;
522}
523
524static ssize_t validate_flash_write(struct file *file, const char __user *buf,
525 size_t count, loff_t *off)
526{
527 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
528 struct rtas_validate_flash_t *args_buf;
529 int rc;
530
531 args_buf = (struct rtas_validate_flash_t *) dp->data;
532
533 if (dp->data == NULL) {
534 dp->data = kmalloc(sizeof(struct rtas_validate_flash_t),
535 GFP_KERNEL);
536 if (dp->data == NULL)
537 return -ENOMEM;
538 }
539
540 /* We are only interested in the first 4K of the
541 * candidate image */
542 if ((*off >= VALIDATE_BUF_SIZE) ||
543 (args_buf->status == VALIDATE_AUTH)) {
544 *off += count;
545 return count;
546 }
547
548 if (*off + count >= VALIDATE_BUF_SIZE) {
549 count = VALIDATE_BUF_SIZE - *off;
550 args_buf->status = VALIDATE_READY;
551 } else {
552 args_buf->status = VALIDATE_INCOMPLETE;
553 }
554
555 if (!access_ok(VERIFY_READ, buf, count)) {
556 rc = -EFAULT;
557 goto done;
558 }
559 if (copy_from_user(args_buf->buf + *off, buf, count)) {
560 rc = -EFAULT;
561 goto done;
562 }
563
564 *off += count;
565 rc = count;
566done:
567 if (rc < 0) {
568 kfree(dp->data);
569 dp->data = NULL;
570 }
571 return rc;
572}
573
574static int validate_flash_release(struct inode *inode, struct file *file)
575{
576 struct proc_dir_entry *dp = PDE(file->f_dentry->d_inode);
577 struct rtas_validate_flash_t *args_buf;
578
579 args_buf = (struct rtas_validate_flash_t *) dp->data;
580
581 if (args_buf->status == VALIDATE_READY) {
582 args_buf->buf_size = VALIDATE_BUF_SIZE;
583 validate_flash(args_buf);
584 }
585
586 /* The matching atomic_inc was in rtas_excl_open() */
587 atomic_dec(&dp->count);
588
589 return 0;
590}
591
592static void rtas_flash_firmware(int reboot_type)
593{
594 unsigned long image_size;
595 struct flash_block_list *f, *next, *flist;
596 unsigned long rtas_block_list;
597 int i, status, update_token;
598
599 if (rtas_firmware_flash_list.next == NULL)
600 return; /* nothing to do */
601
602 if (reboot_type != SYS_RESTART) {
603 printk(KERN_ALERT "FLASH: firmware flash requires a reboot\n");
604 printk(KERN_ALERT "FLASH: the firmware image will NOT be flashed\n");
605 return;
606 }
607
608 update_token = rtas_token("ibm,update-flash-64-and-reboot");
609 if (update_token == RTAS_UNKNOWN_SERVICE) {
610 printk(KERN_ALERT "FLASH: ibm,update-flash-64-and-reboot "
611 "is not available -- not a service partition?\n");
612 printk(KERN_ALERT "FLASH: firmware will not be flashed\n");
613 return;
614 }
615
616 /* NOTE: the "first" block list is a global var with no data
617 * blocks in the kernel data segment. We do this because
618 * we want to ensure this block_list addr is under 4GB.
619 */
620 rtas_firmware_flash_list.num_blocks = 0;
621 flist = (struct flash_block_list *)&rtas_firmware_flash_list;
622 rtas_block_list = virt_to_abs(flist);
623 if (rtas_block_list >= 4UL*1024*1024*1024) {
624 printk(KERN_ALERT "FLASH: kernel bug...flash list header addr above 4GB\n");
625 return;
626 }
627
628 printk(KERN_ALERT "FLASH: preparing saved firmware image for flash\n");
629 /* Update the block_list in place. */
630 image_size = 0;
631 for (f = flist; f; f = next) {
632 /* Translate data addrs to absolute */
633 for (i = 0; i < f->num_blocks; i++) {
634 f->blocks[i].data = (char *)virt_to_abs(f->blocks[i].data);
635 image_size += f->blocks[i].length;
636 }
637 next = f->next;
638 /* Don't translate NULL pointer for last entry */
639 if (f->next)
640 f->next = (struct flash_block_list *)virt_to_abs(f->next);
641 else
642 f->next = NULL;
643 /* make num_blocks into the version/length field */
644 f->num_blocks = (FLASH_BLOCK_LIST_VERSION << 56) | ((f->num_blocks+1)*16);
645 }
646
647 printk(KERN_ALERT "FLASH: flash image is %ld bytes\n", image_size);
648 printk(KERN_ALERT "FLASH: performing flash and reboot\n");
649 rtas_progress("Flashing \n", 0x0);
650 rtas_progress("Please Wait... ", 0x0);
651 printk(KERN_ALERT "FLASH: this will take several minutes. Do not power off!\n");
652 status = rtas_call(update_token, 1, 1, NULL, rtas_block_list);
653 switch (status) { /* should only get "bad" status */
654 case 0:
655 printk(KERN_ALERT "FLASH: success\n");
656 break;
657 case -1:
658 printk(KERN_ALERT "FLASH: hardware error. Firmware may not be not flashed\n");
659 break;
660 case -3:
661 printk(KERN_ALERT "FLASH: image is corrupt or not correct for this platform. Firmware not flashed\n");
662 break;
663 case -4:
664 printk(KERN_ALERT "FLASH: flash failed when partially complete. System may not reboot\n");
665 break;
666 default:
667 printk(KERN_ALERT "FLASH: unknown flash return code %d\n", status);
668 break;
669 }
670}
671
672static void remove_flash_pde(struct proc_dir_entry *dp)
673{
674 if (dp) {
675 if (dp->data != NULL)
676 kfree(dp->data);
677 dp->owner = NULL;
678 remove_proc_entry(dp->name, dp->parent);
679 }
680}
681
682static int initialize_flash_pde_data(const char *rtas_call_name,
683 size_t buf_size,
684 struct proc_dir_entry *dp)
685{
686 int *status;
687 int token;
688
689 dp->data = kmalloc(buf_size, GFP_KERNEL);
690 if (dp->data == NULL) {
691 remove_flash_pde(dp);
692 return -ENOMEM;
693 }
694
695 memset(dp->data, 0, buf_size);
696
697 /*
698 * This code assumes that the status int is the first member of the
699 * struct
700 */
701 status = (int *) dp->data;
702 token = rtas_token(rtas_call_name);
703 if (token == RTAS_UNKNOWN_SERVICE)
704 *status = FLASH_AUTH;
705 else
706 *status = FLASH_NO_OP;
707
708 return 0;
709}
710
711static struct proc_dir_entry *create_flash_pde(const char *filename,
712 struct file_operations *fops)
713{
714 struct proc_dir_entry *ent = NULL;
715
716 ent = create_proc_entry(filename, S_IRUSR | S_IWUSR, NULL);
717 if (ent != NULL) {
718 ent->nlink = 1;
719 ent->proc_fops = fops;
720 ent->owner = THIS_MODULE;
721 }
722
723 return ent;
724}
725
726static struct file_operations rtas_flash_operations = {
727 .read = rtas_flash_read,
728 .write = rtas_flash_write,
729 .open = rtas_excl_open,
730 .release = rtas_flash_release,
731};
732
733static struct file_operations manage_flash_operations = {
734 .read = manage_flash_read,
735 .write = manage_flash_write,
736 .open = rtas_excl_open,
737 .release = rtas_excl_release,
738};
739
740static struct file_operations validate_flash_operations = {
741 .read = validate_flash_read,
742 .write = validate_flash_write,
743 .open = rtas_excl_open,
744 .release = validate_flash_release,
745};
746
747int __init rtas_flash_init(void)
748{
749 int rc;
750
751 if (rtas_token("ibm,update-flash-64-and-reboot") ==
752 RTAS_UNKNOWN_SERVICE) {
753 printk(KERN_ERR "rtas_flash: no firmware flash support\n");
754 return 1;
755 }
756
757 firmware_flash_pde = create_flash_pde("ppc64/rtas/"
758 FIRMWARE_FLASH_NAME,
759 &rtas_flash_operations);
760 if (firmware_flash_pde == NULL) {
761 rc = -ENOMEM;
762 goto cleanup;
763 }
764
765 rc = initialize_flash_pde_data("ibm,update-flash-64-and-reboot",
766 sizeof(struct rtas_update_flash_t),
767 firmware_flash_pde);
768 if (rc != 0)
769 goto cleanup;
770
771 firmware_update_pde = create_flash_pde("ppc64/rtas/"
772 FIRMWARE_UPDATE_NAME,
773 &rtas_flash_operations);
774 if (firmware_update_pde == NULL) {
775 rc = -ENOMEM;
776 goto cleanup;
777 }
778
779 rc = initialize_flash_pde_data("ibm,update-flash-64-and-reboot",
780 sizeof(struct rtas_update_flash_t),
781 firmware_update_pde);
782 if (rc != 0)
783 goto cleanup;
784
785 validate_pde = create_flash_pde("ppc64/rtas/" VALIDATE_FLASH_NAME,
786 &validate_flash_operations);
787 if (validate_pde == NULL) {
788 rc = -ENOMEM;
789 goto cleanup;
790 }
791
792 rc = initialize_flash_pde_data("ibm,validate-flash-image",
793 sizeof(struct rtas_validate_flash_t),
794 validate_pde);
795 if (rc != 0)
796 goto cleanup;
797
798 manage_pde = create_flash_pde("ppc64/rtas/" MANAGE_FLASH_NAME,
799 &manage_flash_operations);
800 if (manage_pde == NULL) {
801 rc = -ENOMEM;
802 goto cleanup;
803 }
804
805 rc = initialize_flash_pde_data("ibm,manage-flash-image",
806 sizeof(struct rtas_manage_flash_t),
807 manage_pde);
808 if (rc != 0)
809 goto cleanup;
810
811 rtas_flash_term_hook = rtas_flash_firmware;
812 return 0;
813
814cleanup:
815 remove_flash_pde(firmware_flash_pde);
816 remove_flash_pde(firmware_update_pde);
817 remove_flash_pde(validate_pde);
818 remove_flash_pde(manage_pde);
819
820 return rc;
821}
822
823void __exit rtas_flash_cleanup(void)
824{
825 rtas_flash_term_hook = NULL;
826 remove_flash_pde(firmware_flash_pde);
827 remove_flash_pde(firmware_update_pde);
828 remove_flash_pde(validate_pde);
829 remove_flash_pde(manage_pde);
830}
831
832module_init(rtas_flash_init);
833module_exit(rtas_flash_cleanup);
834MODULE_LICENSE("GPL");
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 1292460fcde2..d43fa8c0e5ac 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -170,12 +170,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
170 } 170 }
171 171
172#ifdef CONFIG_SMP 172#ifdef CONFIG_SMP
173#ifdef CONFIG_PPC64 /* XXX for now */
174 pvr = per_cpu(pvr, cpu_id); 173 pvr = per_cpu(pvr, cpu_id);
175#else 174#else
176 pvr = cpu_data[cpu_id].pvr;
177#endif
178#else
179 pvr = mfspr(SPRN_PVR); 175 pvr = mfspr(SPRN_PVR);
180#endif 176#endif
181 maj = (pvr >> 8) & 0xFF; 177 maj = (pvr >> 8) & 0xFF;
@@ -201,11 +197,11 @@ static int show_cpuinfo(struct seq_file *m, void *v)
201#ifdef CONFIG_TAU_AVERAGE 197#ifdef CONFIG_TAU_AVERAGE
202 /* more straightforward, but potentially misleading */ 198 /* more straightforward, but potentially misleading */
203 seq_printf(m, "temperature \t: %u C (uncalibrated)\n", 199 seq_printf(m, "temperature \t: %u C (uncalibrated)\n",
204 cpu_temp(i)); 200 cpu_temp(cpu_id));
205#else 201#else
206 /* show the actual temp sensor range */ 202 /* show the actual temp sensor range */
207 u32 temp; 203 u32 temp;
208 temp = cpu_temp_both(i); 204 temp = cpu_temp_both(cpu_id);
209 seq_printf(m, "temperature \t: %u-%u C (uncalibrated)\n", 205 seq_printf(m, "temperature \t: %u-%u C (uncalibrated)\n",
210 temp & 0xff, temp >> 16); 206 temp & 0xff, temp >> 16);
211#endif 207#endif
@@ -408,3 +404,118 @@ static int __init set_preferred_console(void)
408} 404}
409console_initcall(set_preferred_console); 405console_initcall(set_preferred_console);
410#endif /* CONFIG_PPC_MULTIPLATFORM */ 406#endif /* CONFIG_PPC_MULTIPLATFORM */
407
408#ifdef CONFIG_SMP
409
410/**
411 * setup_cpu_maps - initialize the following cpu maps:
412 * cpu_possible_map
413 * cpu_present_map
414 * cpu_sibling_map
415 *
416 * Having the possible map set up early allows us to restrict allocations
417 * of things like irqstacks to num_possible_cpus() rather than NR_CPUS.
418 *
419 * We do not initialize the online map here; cpus set their own bits in
420 * cpu_online_map as they come up.
421 *
422 * This function is valid only for Open Firmware systems. finish_device_tree
423 * must be called before using this.
424 *
425 * While we're here, we may as well set the "physical" cpu ids in the paca.
426 */
427void __init smp_setup_cpu_maps(void)
428{
429 struct device_node *dn = NULL;
430 int cpu = 0;
431 int swap_cpuid = 0;
432
433 while ((dn = of_find_node_by_type(dn, "cpu")) && cpu < NR_CPUS) {
434 int *intserv;
435 int j, len = sizeof(u32), nthreads = 1;
436
437 intserv = (int *)get_property(dn, "ibm,ppc-interrupt-server#s",
438 &len);
439 if (intserv)
440 nthreads = len / sizeof(int);
441 else {
442 intserv = (int *) get_property(dn, "reg", NULL);
443 if (!intserv)
444 intserv = &cpu; /* assume logical == phys */
445 }
446
447 for (j = 0; j < nthreads && cpu < NR_CPUS; j++) {
448 cpu_set(cpu, cpu_present_map);
449 set_hard_smp_processor_id(cpu, intserv[j]);
450
451 if (intserv[j] == boot_cpuid_phys)
452 swap_cpuid = cpu;
453 cpu_set(cpu, cpu_possible_map);
454 cpu++;
455 }
456 }
457
458 /* Swap CPU id 0 with boot_cpuid_phys, so we can always assume that
459 * boot cpu is logical 0.
460 */
461 if (boot_cpuid_phys != get_hard_smp_processor_id(0)) {
462 u32 tmp;
463 tmp = get_hard_smp_processor_id(0);
464 set_hard_smp_processor_id(0, boot_cpuid_phys);
465 set_hard_smp_processor_id(swap_cpuid, tmp);
466 }
467
468#ifdef CONFIG_PPC64
469 /*
470 * On pSeries LPAR, we need to know how many cpus
471 * could possibly be added to this partition.
472 */
473 if (systemcfg->platform == PLATFORM_PSERIES_LPAR &&
474 (dn = of_find_node_by_path("/rtas"))) {
475 int num_addr_cell, num_size_cell, maxcpus;
476 unsigned int *ireg;
477
478 num_addr_cell = prom_n_addr_cells(dn);
479 num_size_cell = prom_n_size_cells(dn);
480
481 ireg = (unsigned int *)
482 get_property(dn, "ibm,lrdr-capacity", NULL);
483
484 if (!ireg)
485 goto out;
486
487 maxcpus = ireg[num_addr_cell + num_size_cell];
488
489 /* Double maxcpus for processors which have SMT capability */
490 if (cpu_has_feature(CPU_FTR_SMT))
491 maxcpus *= 2;
492
493 if (maxcpus > NR_CPUS) {
494 printk(KERN_WARNING
495 "Partition configured for %d cpus, "
496 "operating system maximum is %d.\n",
497 maxcpus, NR_CPUS);
498 maxcpus = NR_CPUS;
499 } else
500 printk(KERN_INFO "Partition configured for %d cpus.\n",
501 maxcpus);
502
503 for (cpu = 0; cpu < maxcpus; cpu++)
504 cpu_set(cpu, cpu_possible_map);
505 out:
506 of_node_put(dn);
507 }
508
509 /*
510 * Do the sibling map; assume only two threads per processor.
511 */
512 for_each_cpu(cpu) {
513 cpu_set(cpu, cpu_sibling_map[cpu]);
514 if (cpu_has_feature(CPU_FTR_SMT))
515 cpu_set(cpu ^ 0x1, cpu_sibling_map[cpu]);
516 }
517
518 systemcfg->processorCount = num_present_cpus();
519#endif /* CONFIG_PPC64 */
520}
521#endif /* CONFIG_SMP */
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 9680ae99b084..b45eedbb4b3a 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -288,6 +288,8 @@ void __init setup_arch(char **cmdline_p)
288 unflatten_device_tree(); 288 unflatten_device_tree();
289 finish_device_tree(); 289 finish_device_tree();
290 290
291 smp_setup_cpu_maps();
292
291#ifdef CONFIG_BOOTX_TEXT 293#ifdef CONFIG_BOOTX_TEXT
292 init_boot_display(); 294 init_boot_display();
293#endif 295#endif
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 40c48100bf1b..6b52cce872be 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -56,7 +56,7 @@
56#include <asm/page.h> 56#include <asm/page.h>
57#include <asm/mmu.h> 57#include <asm/mmu.h>
58#include <asm/lmb.h> 58#include <asm/lmb.h>
59#include <asm/iSeries/ItLpNaca.h> 59#include <asm/iseries/it_lp_naca.h>
60#include <asm/firmware.h> 60#include <asm/firmware.h>
61#include <asm/systemcfg.h> 61#include <asm/systemcfg.h>
62#include <asm/xmon.h> 62#include <asm/xmon.h>
@@ -103,8 +103,6 @@ extern void htab_initialize(void);
103extern void early_init_devtree(void *flat_dt); 103extern void early_init_devtree(void *flat_dt);
104extern void unflatten_device_tree(void); 104extern void unflatten_device_tree(void);
105 105
106extern void smp_release_cpus(void);
107
108int have_of = 1; 106int have_of = 1;
109int boot_cpuid = 0; 107int boot_cpuid = 0;
110int boot_cpuid_phys = 0; 108int boot_cpuid_phys = 0;
@@ -183,120 +181,14 @@ static int __init early_smt_enabled(char *p)
183} 181}
184early_param("smt-enabled", early_smt_enabled); 182early_param("smt-enabled", early_smt_enabled);
185 183
186/** 184#else
187 * setup_cpu_maps - initialize the following cpu maps: 185#define check_smt_enabled()
188 * cpu_possible_map
189 * cpu_present_map
190 * cpu_sibling_map
191 *
192 * Having the possible map set up early allows us to restrict allocations
193 * of things like irqstacks to num_possible_cpus() rather than NR_CPUS.
194 *
195 * We do not initialize the online map here; cpus set their own bits in
196 * cpu_online_map as they come up.
197 *
198 * This function is valid only for Open Firmware systems. finish_device_tree
199 * must be called before using this.
200 *
201 * While we're here, we may as well set the "physical" cpu ids in the paca.
202 */
203static void __init setup_cpu_maps(void)
204{
205 struct device_node *dn = NULL;
206 int cpu = 0;
207 int swap_cpuid = 0;
208
209 check_smt_enabled();
210
211 while ((dn = of_find_node_by_type(dn, "cpu")) && cpu < NR_CPUS) {
212 u32 *intserv;
213 int j, len = sizeof(u32), nthreads;
214
215 intserv = (u32 *)get_property(dn, "ibm,ppc-interrupt-server#s",
216 &len);
217 if (!intserv)
218 intserv = (u32 *)get_property(dn, "reg", NULL);
219
220 nthreads = len / sizeof(u32);
221
222 for (j = 0; j < nthreads && cpu < NR_CPUS; j++) {
223 cpu_set(cpu, cpu_present_map);
224 set_hard_smp_processor_id(cpu, intserv[j]);
225
226 if (intserv[j] == boot_cpuid_phys)
227 swap_cpuid = cpu;
228 cpu_set(cpu, cpu_possible_map);
229 cpu++;
230 }
231 }
232
233 /* Swap CPU id 0 with boot_cpuid_phys, so we can always assume that
234 * boot cpu is logical 0.
235 */
236 if (boot_cpuid_phys != get_hard_smp_processor_id(0)) {
237 u32 tmp;
238 tmp = get_hard_smp_processor_id(0);
239 set_hard_smp_processor_id(0, boot_cpuid_phys);
240 set_hard_smp_processor_id(swap_cpuid, tmp);
241 }
242
243 /*
244 * On pSeries LPAR, we need to know how many cpus
245 * could possibly be added to this partition.
246 */
247 if (systemcfg->platform == PLATFORM_PSERIES_LPAR &&
248 (dn = of_find_node_by_path("/rtas"))) {
249 int num_addr_cell, num_size_cell, maxcpus;
250 unsigned int *ireg;
251
252 num_addr_cell = prom_n_addr_cells(dn);
253 num_size_cell = prom_n_size_cells(dn);
254
255 ireg = (unsigned int *)
256 get_property(dn, "ibm,lrdr-capacity", NULL);
257
258 if (!ireg)
259 goto out;
260
261 maxcpus = ireg[num_addr_cell + num_size_cell];
262
263 /* Double maxcpus for processors which have SMT capability */
264 if (cpu_has_feature(CPU_FTR_SMT))
265 maxcpus *= 2;
266
267 if (maxcpus > NR_CPUS) {
268 printk(KERN_WARNING
269 "Partition configured for %d cpus, "
270 "operating system maximum is %d.\n",
271 maxcpus, NR_CPUS);
272 maxcpus = NR_CPUS;
273 } else
274 printk(KERN_INFO "Partition configured for %d cpus.\n",
275 maxcpus);
276
277 for (cpu = 0; cpu < maxcpus; cpu++)
278 cpu_set(cpu, cpu_possible_map);
279 out:
280 of_node_put(dn);
281 }
282
283 /*
284 * Do the sibling map; assume only two threads per processor.
285 */
286 for_each_cpu(cpu) {
287 cpu_set(cpu, cpu_sibling_map[cpu]);
288 if (cpu_has_feature(CPU_FTR_SMT))
289 cpu_set(cpu ^ 0x1, cpu_sibling_map[cpu]);
290 }
291
292 systemcfg->processorCount = num_present_cpus();
293}
294#endif /* CONFIG_SMP */ 186#endif /* CONFIG_SMP */
295 187
296extern struct machdep_calls pSeries_md; 188extern struct machdep_calls pSeries_md;
297extern struct machdep_calls pmac_md; 189extern struct machdep_calls pmac_md;
298extern struct machdep_calls maple_md; 190extern struct machdep_calls maple_md;
299extern struct machdep_calls bpa_md; 191extern struct machdep_calls cell_md;
300extern struct machdep_calls iseries_md; 192extern struct machdep_calls iseries_md;
301 193
302/* Ultimately, stuff them in an elf section like initcalls... */ 194/* Ultimately, stuff them in an elf section like initcalls... */
@@ -310,8 +202,8 @@ static struct machdep_calls __initdata *machines[] = {
310#ifdef CONFIG_PPC_MAPLE 202#ifdef CONFIG_PPC_MAPLE
311 &maple_md, 203 &maple_md,
312#endif /* CONFIG_PPC_MAPLE */ 204#endif /* CONFIG_PPC_MAPLE */
313#ifdef CONFIG_PPC_BPA 205#ifdef CONFIG_PPC_CELL
314 &bpa_md, 206 &cell_md,
315#endif 207#endif
316#ifdef CONFIG_PPC_ISERIES 208#ifdef CONFIG_PPC_ISERIES
317 &iseries_md, 209 &iseries_md,
@@ -400,6 +292,29 @@ void __init early_setup(unsigned long dt_ptr)
400} 292}
401 293
402 294
295#if defined(CONFIG_SMP) || defined(CONFIG_KEXEC)
296void smp_release_cpus(void)
297{
298 extern unsigned long __secondary_hold_spinloop;
299
300 DBG(" -> smp_release_cpus()\n");
301
302 /* All secondary cpus are spinning on a common spinloop, release them
303 * all now so they can start to spin on their individual paca
304 * spinloops. For non SMP kernels, the secondary cpus never get out
305 * of the common spinloop.
306 * This is useless but harmless on iSeries, secondaries are already
307 * waiting on their paca spinloops. */
308
309 __secondary_hold_spinloop = 1;
310 mb();
311
312 DBG(" <- smp_release_cpus()\n");
313}
314#else
315#define smp_release_cpus()
316#endif /* CONFIG_SMP || CONFIG_KEXEC */
317
403/* 318/*
404 * Initialize some remaining members of the ppc64_caches and systemcfg structures 319 * Initialize some remaining members of the ppc64_caches and systemcfg structures
405 * (at least until we get rid of them completely). This is mostly some 320 * (at least until we get rid of them completely). This is mostly some
@@ -589,17 +504,13 @@ void __init setup_system(void)
589 504
590 parse_early_param(); 505 parse_early_param();
591 506
592#ifdef CONFIG_SMP 507 check_smt_enabled();
593 /* 508 smp_setup_cpu_maps();
594 * iSeries has already initialized the cpu maps at this point.
595 */
596 setup_cpu_maps();
597 509
598 /* Release secondary cpus out of their spinloops at 0x60 now that 510 /* Release secondary cpus out of their spinloops at 0x60 now that
599 * we can map physical -> logical CPU ids 511 * we can map physical -> logical CPU ids
600 */ 512 */
601 smp_release_cpus(); 513 smp_release_cpus();
602#endif
603 514
604 printk("Starting Linux PPC64 %s\n", system_utsname.version); 515 printk("Starting Linux PPC64 %s\n", system_utsname.version);
605 516
@@ -631,23 +542,6 @@ static int ppc64_panic_event(struct notifier_block *this,
631 return NOTIFY_DONE; 542 return NOTIFY_DONE;
632} 543}
633 544
634#ifdef CONFIG_PPC_ISERIES
635/*
636 * On iSeries we just parse the mem=X option from the command line.
637 * On pSeries it's a bit more complicated, see prom_init_mem()
638 */
639static int __init early_parsemem(char *p)
640{
641 if (!p)
642 return 0;
643
644 memory_limit = ALIGN(memparse(p, &p), PAGE_SIZE);
645
646 return 0;
647}
648early_param("mem", early_parsemem);
649#endif /* CONFIG_PPC_ISERIES */
650
651#ifdef CONFIG_IRQSTACKS 545#ifdef CONFIG_IRQSTACKS
652static void __init irqstack_early_init(void) 546static void __init irqstack_early_init(void)
653{ 547{
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 444c3e81884c..876c57c11365 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -43,7 +43,7 @@
43#include <asm/uaccess.h> 43#include <asm/uaccess.h>
44#include <asm/cacheflush.h> 44#include <asm/cacheflush.h>
45#ifdef CONFIG_PPC64 45#ifdef CONFIG_PPC64
46#include <asm/ppc32.h> 46#include "ppc32.h"
47#include <asm/ppcdebug.h> 47#include <asm/ppcdebug.h>
48#include <asm/unistd.h> 48#include <asm/unistd.h>
49#include <asm/vdso.h> 49#include <asm/vdso.h>
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
new file mode 100644
index 000000000000..ec9d0984b6a0
--- /dev/null
+++ b/arch/powerpc/kernel/signal_64.c
@@ -0,0 +1,581 @@
1/*
2 * linux/arch/ppc64/kernel/signal.c
3 *
4 * PowerPC version
5 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
6 *
7 * Derived from "arch/i386/kernel/signal.c"
8 * Copyright (C) 1991, 1992 Linus Torvalds
9 * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16
17#include <linux/config.h>
18#include <linux/sched.h>
19#include <linux/mm.h>
20#include <linux/smp.h>
21#include <linux/smp_lock.h>
22#include <linux/kernel.h>
23#include <linux/signal.h>
24#include <linux/errno.h>
25#include <linux/wait.h>
26#include <linux/unistd.h>
27#include <linux/stddef.h>
28#include <linux/elf.h>
29#include <linux/ptrace.h>
30#include <linux/module.h>
31
32#include <asm/sigcontext.h>
33#include <asm/ucontext.h>
34#include <asm/uaccess.h>
35#include <asm/pgtable.h>
36#include <asm/ppcdebug.h>
37#include <asm/unistd.h>
38#include <asm/cacheflush.h>
39#include <asm/vdso.h>
40
41#define DEBUG_SIG 0
42
43#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
44
45#define GP_REGS_SIZE min(sizeof(elf_gregset_t), sizeof(struct pt_regs))
46#define FP_REGS_SIZE sizeof(elf_fpregset_t)
47
48#define TRAMP_TRACEBACK 3
49#define TRAMP_SIZE 6
50
51/*
52 * When we have signals to deliver, we set up on the user stack,
53 * going down from the original stack pointer:
54 * 1) a rt_sigframe struct which contains the ucontext
55 * 2) a gap of __SIGNAL_FRAMESIZE bytes which acts as a dummy caller
56 * frame for the signal handler.
57 */
58
59struct rt_sigframe {
60 /* sys_rt_sigreturn requires the ucontext be the first field */
61 struct ucontext uc;
62 unsigned long _unused[2];
63 unsigned int tramp[TRAMP_SIZE];
64 struct siginfo *pinfo;
65 void *puc;
66 struct siginfo info;
67 /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */
68 char abigap[288];
69} __attribute__ ((aligned (16)));
70
71
72/*
73 * Atomically swap in the new signal mask, and wait for a signal.
74 */
75long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, int p3, int p4,
76 int p6, int p7, struct pt_regs *regs)
77{
78 sigset_t saveset, newset;
79
80 /* XXX: Don't preclude handling different sized sigset_t's. */
81 if (sigsetsize != sizeof(sigset_t))
82 return -EINVAL;
83
84 if (copy_from_user(&newset, unewset, sizeof(newset)))
85 return -EFAULT;
86 sigdelsetmask(&newset, ~_BLOCKABLE);
87
88 spin_lock_irq(&current->sighand->siglock);
89 saveset = current->blocked;
90 current->blocked = newset;
91 recalc_sigpending();
92 spin_unlock_irq(&current->sighand->siglock);
93
94 regs->result = -EINTR;
95 regs->gpr[3] = EINTR;
96 regs->ccr |= 0x10000000;
97 while (1) {
98 current->state = TASK_INTERRUPTIBLE;
99 schedule();
100 if (do_signal(&saveset, regs))
101 return 0;
102 }
103}
104
105long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, unsigned long r5,
106 unsigned long r6, unsigned long r7, unsigned long r8,
107 struct pt_regs *regs)
108{
109 return do_sigaltstack(uss, uoss, regs->gpr[1]);
110}
111
112
113/*
114 * Set up the sigcontext for the signal frame.
115 */
116
117static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
118 int signr, sigset_t *set, unsigned long handler)
119{
120 /* When CONFIG_ALTIVEC is set, we _always_ setup v_regs even if the
121 * process never used altivec yet (MSR_VEC is zero in pt_regs of
122 * the context). This is very important because we must ensure we
123 * don't lose the VRSAVE content that may have been set prior to
124 * the process doing its first vector operation
125 * Userland shall check AT_HWCAP to know wether it can rely on the
126 * v_regs pointer or not
127 */
128#ifdef CONFIG_ALTIVEC
129 elf_vrreg_t __user *v_regs = (elf_vrreg_t __user *)(((unsigned long)sc->vmx_reserve + 15) & ~0xful);
130#endif
131 long err = 0;
132
133 flush_fp_to_thread(current);
134
135 /* Make sure signal doesn't get spurrious FP exceptions */
136 current->thread.fpscr.val = 0;
137
138#ifdef CONFIG_ALTIVEC
139 err |= __put_user(v_regs, &sc->v_regs);
140
141 /* save altivec registers */
142 if (current->thread.used_vr) {
143 flush_altivec_to_thread(current);
144 /* Copy 33 vec registers (vr0..31 and vscr) to the stack */
145 err |= __copy_to_user(v_regs, current->thread.vr, 33 * sizeof(vector128));
146 /* set MSR_VEC in the MSR value in the frame to indicate that sc->v_reg)
147 * contains valid data.
148 */
149 regs->msr |= MSR_VEC;
150 }
151 /* We always copy to/from vrsave, it's 0 if we don't have or don't
152 * use altivec.
153 */
154 err |= __put_user(current->thread.vrsave, (u32 __user *)&v_regs[33]);
155#else /* CONFIG_ALTIVEC */
156 err |= __put_user(0, &sc->v_regs);
157#endif /* CONFIG_ALTIVEC */
158 err |= __put_user(&sc->gp_regs, &sc->regs);
159 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE);
160 err |= __copy_to_user(&sc->fp_regs, &current->thread.fpr, FP_REGS_SIZE);
161 err |= __put_user(signr, &sc->signal);
162 err |= __put_user(handler, &sc->handler);
163 if (set != NULL)
164 err |= __put_user(set->sig[0], &sc->oldmask);
165
166 return err;
167}
168
169/*
170 * Restore the sigcontext from the signal frame.
171 */
172
173static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig,
174 struct sigcontext __user *sc)
175{
176#ifdef CONFIG_ALTIVEC
177 elf_vrreg_t __user *v_regs;
178#endif
179 unsigned long err = 0;
180 unsigned long save_r13 = 0;
181 elf_greg_t *gregs = (elf_greg_t *)regs;
182#ifdef CONFIG_ALTIVEC
183 unsigned long msr;
184#endif
185 int i;
186
187 /* If this is not a signal return, we preserve the TLS in r13 */
188 if (!sig)
189 save_r13 = regs->gpr[13];
190
191 /* copy everything before MSR */
192 err |= __copy_from_user(regs, &sc->gp_regs,
193 PT_MSR*sizeof(unsigned long));
194
195 /* skip MSR and SOFTE */
196 for (i = PT_MSR+1; i <= PT_RESULT; i++) {
197 if (i == PT_SOFTE)
198 continue;
199 err |= __get_user(gregs[i], &sc->gp_regs[i]);
200 }
201
202 if (!sig)
203 regs->gpr[13] = save_r13;
204 err |= __copy_from_user(&current->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);
205 if (set != NULL)
206 err |= __get_user(set->sig[0], &sc->oldmask);
207
208#ifdef CONFIG_ALTIVEC
209 err |= __get_user(v_regs, &sc->v_regs);
210 err |= __get_user(msr, &sc->gp_regs[PT_MSR]);
211 if (err)
212 return err;
213 /* Copy 33 vec registers (vr0..31 and vscr) from the stack */
214 if (v_regs != 0 && (msr & MSR_VEC) != 0)
215 err |= __copy_from_user(current->thread.vr, v_regs,
216 33 * sizeof(vector128));
217 else if (current->thread.used_vr)
218 memset(current->thread.vr, 0, 33 * sizeof(vector128));
219 /* Always get VRSAVE back */
220 if (v_regs != 0)
221 err |= __get_user(current->thread.vrsave, (u32 __user *)&v_regs[33]);
222 else
223 current->thread.vrsave = 0;
224#endif /* CONFIG_ALTIVEC */
225
226#ifndef CONFIG_SMP
227 preempt_disable();
228 if (last_task_used_math == current)
229 last_task_used_math = NULL;
230 if (last_task_used_altivec == current)
231 last_task_used_altivec = NULL;
232 preempt_enable();
233#endif
234 /* Force reload of FP/VEC */
235 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC);
236
237 return err;
238}
239
240/*
241 * Allocate space for the signal frame
242 */
243static inline void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
244 size_t frame_size)
245{
246 unsigned long newsp;
247
248 /* Default to using normal stack */
249 newsp = regs->gpr[1];
250
251 if (ka->sa.sa_flags & SA_ONSTACK) {
252 if (! on_sig_stack(regs->gpr[1]))
253 newsp = (current->sas_ss_sp + current->sas_ss_size);
254 }
255
256 return (void __user *)((newsp - frame_size) & -16ul);
257}
258
259/*
260 * Setup the trampoline code on the stack
261 */
262static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp)
263{
264 int i;
265 long err = 0;
266
267 /* addi r1, r1, __SIGNAL_FRAMESIZE # Pop the dummy stackframe */
268 err |= __put_user(0x38210000UL | (__SIGNAL_FRAMESIZE & 0xffff), &tramp[0]);
269 /* li r0, __NR_[rt_]sigreturn| */
270 err |= __put_user(0x38000000UL | (syscall & 0xffff), &tramp[1]);
271 /* sc */
272 err |= __put_user(0x44000002UL, &tramp[2]);
273
274 /* Minimal traceback info */
275 for (i=TRAMP_TRACEBACK; i < TRAMP_SIZE ;i++)
276 err |= __put_user(0, &tramp[i]);
277
278 if (!err)
279 flush_icache_range((unsigned long) &tramp[0],
280 (unsigned long) &tramp[TRAMP_SIZE]);
281
282 return err;
283}
284
285/*
286 * Restore the user process's signal mask (also used by signal32.c)
287 */
288void restore_sigmask(sigset_t *set)
289{
290 sigdelsetmask(set, ~_BLOCKABLE);
291 spin_lock_irq(&current->sighand->siglock);
292 current->blocked = *set;
293 recalc_sigpending();
294 spin_unlock_irq(&current->sighand->siglock);
295}
296
297
298/*
299 * Handle {get,set,swap}_context operations
300 */
301int sys_swapcontext(struct ucontext __user *old_ctx,
302 struct ucontext __user *new_ctx,
303 long ctx_size, long r6, long r7, long r8, struct pt_regs *regs)
304{
305 unsigned char tmp;
306 sigset_t set;
307
308 /* Context size is for future use. Right now, we only make sure
309 * we are passed something we understand
310 */
311 if (ctx_size < sizeof(struct ucontext))
312 return -EINVAL;
313
314 if (old_ctx != NULL) {
315 if (!access_ok(VERIFY_WRITE, old_ctx, sizeof(*old_ctx))
316 || setup_sigcontext(&old_ctx->uc_mcontext, regs, 0, NULL, 0)
317 || __copy_to_user(&old_ctx->uc_sigmask,
318 &current->blocked, sizeof(sigset_t)))
319 return -EFAULT;
320 }
321 if (new_ctx == NULL)
322 return 0;
323 if (!access_ok(VERIFY_READ, new_ctx, sizeof(*new_ctx))
324 || __get_user(tmp, (u8 __user *) new_ctx)
325 || __get_user(tmp, (u8 __user *) (new_ctx + 1) - 1))
326 return -EFAULT;
327
328 /*
329 * If we get a fault copying the context into the kernel's
330 * image of the user's registers, we can't just return -EFAULT
331 * because the user's registers will be corrupted. For instance
332 * the NIP value may have been updated but not some of the
333 * other registers. Given that we have done the access_ok
334 * and successfully read the first and last bytes of the region
335 * above, this should only happen in an out-of-memory situation
336 * or if another thread unmaps the region containing the context.
337 * We kill the task with a SIGSEGV in this situation.
338 */
339
340 if (__copy_from_user(&set, &new_ctx->uc_sigmask, sizeof(set)))
341 do_exit(SIGSEGV);
342 restore_sigmask(&set);
343 if (restore_sigcontext(regs, NULL, 0, &new_ctx->uc_mcontext))
344 do_exit(SIGSEGV);
345
346 /* This returns like rt_sigreturn */
347 return 0;
348}
349
350
351/*
352 * Do a signal return; undo the signal stack.
353 */
354
355int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
356 unsigned long r6, unsigned long r7, unsigned long r8,
357 struct pt_regs *regs)
358{
359 struct ucontext __user *uc = (struct ucontext __user *)regs->gpr[1];
360 sigset_t set;
361
362 /* Always make any pending restarted system calls return -EINTR */
363 current_thread_info()->restart_block.fn = do_no_restart_syscall;
364
365 if (!access_ok(VERIFY_READ, uc, sizeof(*uc)))
366 goto badframe;
367
368 if (__copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
369 goto badframe;
370 restore_sigmask(&set);
371 if (restore_sigcontext(regs, NULL, 1, &uc->uc_mcontext))
372 goto badframe;
373
374 /* do_sigaltstack expects a __user pointer and won't modify
375 * what's in there anyway
376 */
377 do_sigaltstack(&uc->uc_stack, NULL, regs->gpr[1]);
378
379 return regs->result;
380
381badframe:
382#if DEBUG_SIG
383 printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n",
384 regs, uc, &uc->uc_mcontext);
385#endif
386 force_sig(SIGSEGV, current);
387 return 0;
388}
389
390static int setup_rt_frame(int signr, struct k_sigaction *ka, siginfo_t *info,
391 sigset_t *set, struct pt_regs *regs)
392{
393 /* Handler is *really* a pointer to the function descriptor for
394 * the signal routine. The first entry in the function
395 * descriptor is the entry address of signal and the second
396 * entry is the TOC value we need to use.
397 */
398 func_descr_t __user *funct_desc_ptr;
399 struct rt_sigframe __user *frame;
400 unsigned long newsp = 0;
401 long err = 0;
402
403 frame = get_sigframe(ka, regs, sizeof(*frame));
404
405 if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
406 goto badframe;
407
408 err |= __put_user(&frame->info, &frame->pinfo);
409 err |= __put_user(&frame->uc, &frame->puc);
410 err |= copy_siginfo_to_user(&frame->info, info);
411 if (err)
412 goto badframe;
413
414 /* Create the ucontext. */
415 err |= __put_user(0, &frame->uc.uc_flags);
416 err |= __put_user(0, &frame->uc.uc_link);
417 err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
418 err |= __put_user(sas_ss_flags(regs->gpr[1]),
419 &frame->uc.uc_stack.ss_flags);
420 err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
421 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, signr, NULL,
422 (unsigned long)ka->sa.sa_handler);
423 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
424 if (err)
425 goto badframe;
426
427 /* Set up to return from userspace. */
428 if (vdso64_rt_sigtramp && current->thread.vdso_base) {
429 regs->link = current->thread.vdso_base + vdso64_rt_sigtramp;
430 } else {
431 err |= setup_trampoline(__NR_rt_sigreturn, &frame->tramp[0]);
432 if (err)
433 goto badframe;
434 regs->link = (unsigned long) &frame->tramp[0];
435 }
436 funct_desc_ptr = (func_descr_t __user *) ka->sa.sa_handler;
437
438 /* Allocate a dummy caller frame for the signal handler. */
439 newsp = (unsigned long)frame - __SIGNAL_FRAMESIZE;
440 err |= put_user(regs->gpr[1], (unsigned long __user *)newsp);
441
442 /* Set up "regs" so we "return" to the signal handler. */
443 err |= get_user(regs->nip, &funct_desc_ptr->entry);
444 regs->gpr[1] = newsp;
445 err |= get_user(regs->gpr[2], &funct_desc_ptr->toc);
446 regs->gpr[3] = signr;
447 regs->result = 0;
448 if (ka->sa.sa_flags & SA_SIGINFO) {
449 err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo);
450 err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc);
451 regs->gpr[6] = (unsigned long) frame;
452 } else {
453 regs->gpr[4] = (unsigned long)&frame->uc.uc_mcontext;
454 }
455 if (err)
456 goto badframe;
457
458 if (test_thread_flag(TIF_SINGLESTEP))
459 ptrace_notify(SIGTRAP);
460
461 return 1;
462
463badframe:
464#if DEBUG_SIG
465 printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n",
466 regs, frame, newsp);
467#endif
468 force_sigsegv(signr, current);
469 return 0;
470}
471
472
473/*
474 * OK, we're invoking a handler
475 */
476static int handle_signal(unsigned long sig, struct k_sigaction *ka,
477 siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
478{
479 int ret;
480
481 /* Set up Signal Frame */
482 ret = setup_rt_frame(sig, ka, info, oldset, regs);
483
484 if (ret) {
485 spin_lock_irq(&current->sighand->siglock);
486 sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
487 if (!(ka->sa.sa_flags & SA_NODEFER))
488 sigaddset(&current->blocked,sig);
489 recalc_sigpending();
490 spin_unlock_irq(&current->sighand->siglock);
491 }
492
493 return ret;
494}
495
496static inline void syscall_restart(struct pt_regs *regs, struct k_sigaction *ka)
497{
498 switch ((int)regs->result) {
499 case -ERESTART_RESTARTBLOCK:
500 case -ERESTARTNOHAND:
501 /* ERESTARTNOHAND means that the syscall should only be
502 * restarted if there was no handler for the signal, and since
503 * we only get here if there is a handler, we dont restart.
504 */
505 regs->result = -EINTR;
506 break;
507 case -ERESTARTSYS:
508 /* ERESTARTSYS means to restart the syscall if there is no
509 * handler or the handler was registered with SA_RESTART
510 */
511 if (!(ka->sa.sa_flags & SA_RESTART)) {
512 regs->result = -EINTR;
513 break;
514 }
515 /* fallthrough */
516 case -ERESTARTNOINTR:
517 /* ERESTARTNOINTR means that the syscall should be
518 * called again after the signal handler returns.
519 */
520 regs->gpr[3] = regs->orig_gpr3;
521 regs->nip -= 4;
522 regs->result = 0;
523 break;
524 }
525}
526
527/*
528 * Note that 'init' is a special process: it doesn't get signals it doesn't
529 * want to handle. Thus you cannot kill init even with a SIGKILL even by
530 * mistake.
531 */
532int do_signal(sigset_t *oldset, struct pt_regs *regs)
533{
534 siginfo_t info;
535 int signr;
536 struct k_sigaction ka;
537
538 /*
539 * If the current thread is 32 bit - invoke the
540 * 32 bit signal handling code
541 */
542 if (test_thread_flag(TIF_32BIT))
543 return do_signal32(oldset, regs);
544
545 if (!oldset)
546 oldset = &current->blocked;
547
548 signr = get_signal_to_deliver(&info, &ka, regs, NULL);
549 if (signr > 0) {
550 /* Whee! Actually deliver the signal. */
551 if (TRAP(regs) == 0x0C00)
552 syscall_restart(regs, &ka);
553
554 /*
555 * Reenable the DABR before delivering the signal to
556 * user space. The DABR will have been cleared if it
557 * triggered inside the kernel.
558 */
559 if (current->thread.dabr)
560 set_dabr(current->thread.dabr);
561
562 return handle_signal(signr, &ka, &info, oldset, regs);
563 }
564
565 if (TRAP(regs) == 0x0C00) { /* System Call! */
566 if ((int)regs->result == -ERESTARTNOHAND ||
567 (int)regs->result == -ERESTARTSYS ||
568 (int)regs->result == -ERESTARTNOINTR) {
569 regs->gpr[3] = regs->orig_gpr3;
570 regs->nip -= 4; /* Back up & retry system call */
571 regs->result = 0;
572 } else if ((int)regs->result == -ERESTART_RESTARTBLOCK) {
573 regs->gpr[0] = __NR_restart_syscall;
574 regs->nip -= 4;
575 regs->result = 0;
576 }
577 }
578
579 return 0;
580}
581EXPORT_SYMBOL(do_signal);
diff --git a/arch/powerpc/kernel/smp-tbsync.c b/arch/powerpc/kernel/smp-tbsync.c
new file mode 100644
index 000000000000..9adef3bddad4
--- /dev/null
+++ b/arch/powerpc/kernel/smp-tbsync.c
@@ -0,0 +1,171 @@
1/*
2 * Smp timebase synchronization for ppc.
3 *
4 * Copyright (C) 2003 Samuel Rydh (samuel@ibrium.se)
5 *
6 */
7
8#include <linux/config.h>
9#include <linux/kernel.h>
10#include <linux/sched.h>
11#include <linux/smp.h>
12#include <linux/unistd.h>
13#include <linux/init.h>
14#include <asm/atomic.h>
15#include <asm/smp.h>
16#include <asm/time.h>
17
18#define NUM_ITER 300
19
20enum {
21 kExit=0, kSetAndTest, kTest
22};
23
24static struct {
25 volatile u64 tb;
26 volatile u64 mark;
27 volatile int cmd;
28 volatile int handshake;
29 int filler[2];
30
31 volatile int ack;
32 int filler2[7];
33
34 volatile int race_result;
35} *tbsync;
36
37static volatile int running;
38
39static void __devinit enter_contest(u64 mark, long add)
40{
41 while (get_tb() < mark)
42 tbsync->race_result = add;
43}
44
45void __devinit smp_generic_take_timebase(void)
46{
47 int cmd;
48 u64 tb;
49
50 local_irq_disable();
51 while (!running)
52 barrier();
53 rmb();
54
55 for (;;) {
56 tbsync->ack = 1;
57 while (!tbsync->handshake)
58 barrier();
59 rmb();
60
61 cmd = tbsync->cmd;
62 tb = tbsync->tb;
63 mb();
64 tbsync->ack = 0;
65 if (cmd == kExit)
66 break;
67
68 while (tbsync->handshake)
69 barrier();
70 if (cmd == kSetAndTest)
71 set_tb(tb >> 32, tb & 0xfffffffful);
72 enter_contest(tbsync->mark, -1);
73 }
74 local_irq_enable();
75}
76
77static int __devinit start_contest(int cmd, long offset, int num)
78{
79 int i, score=0;
80 u64 tb;
81 long mark;
82
83 tbsync->cmd = cmd;
84
85 local_irq_disable();
86 for (i = -3; i < num; ) {
87 tb = get_tb() + 400;
88 tbsync->tb = tb + offset;
89 tbsync->mark = mark = tb + 400;
90
91 wmb();
92
93 tbsync->handshake = 1;
94 while (tbsync->ack)
95 barrier();
96
97 while (get_tb() <= tb)
98 barrier();
99 tbsync->handshake = 0;
100 enter_contest(mark, 1);
101
102 while (!tbsync->ack)
103 barrier();
104
105 if (i++ > 0)
106 score += tbsync->race_result;
107 }
108 local_irq_enable();
109 return score;
110}
111
112void __devinit smp_generic_give_timebase(void)
113{
114 int i, score, score2, old, min=0, max=5000, offset=1000;
115
116 printk("Synchronizing timebase\n");
117
118 /* if this fails then this kernel won't work anyway... */
119 tbsync = kmalloc( sizeof(*tbsync), GFP_KERNEL );
120 memset( tbsync, 0, sizeof(*tbsync) );
121 mb();
122 running = 1;
123
124 while (!tbsync->ack)
125 barrier();
126
127 printk("Got ack\n");
128
129 /* binary search */
130 for (old = -1; old != offset ; offset = (min+max) / 2) {
131 score = start_contest(kSetAndTest, offset, NUM_ITER);
132
133 printk("score %d, offset %d\n", score, offset );
134
135 if( score > 0 )
136 max = offset;
137 else
138 min = offset;
139 old = offset;
140 }
141 score = start_contest(kSetAndTest, min, NUM_ITER);
142 score2 = start_contest(kSetAndTest, max, NUM_ITER);
143
144 printk("Min %d (score %d), Max %d (score %d)\n",
145 min, score, max, score2);
146 score = abs(score);
147 score2 = abs(score2);
148 offset = (score < score2) ? min : max;
149
150 /* guard against inaccurate mttb */
151 for (i = 0; i < 10; i++) {
152 start_contest(kSetAndTest, offset, NUM_ITER/10);
153
154 if ((score2 = start_contest(kTest, offset, NUM_ITER)) < 0)
155 score2 = -score2;
156 if (score2 <= score || score2 < 20)
157 break;
158 }
159 printk("Final offset: %d (%d/%d)\n", offset, score2, NUM_ITER );
160
161 /* exiting */
162 tbsync->cmd = kExit;
163 wmb();
164 tbsync->handshake = 1;
165 while (tbsync->ack)
166 barrier();
167 tbsync->handshake = 0;
168 kfree(tbsync);
169 tbsync = NULL;
170 running = 0;
171}
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
new file mode 100644
index 000000000000..1794a694a928
--- /dev/null
+++ b/arch/powerpc/kernel/smp.c
@@ -0,0 +1,565 @@
1/*
2 * SMP support for ppc.
3 *
4 * Written by Cort Dougan (cort@cs.nmt.edu) borrowing a great
5 * deal of code from the sparc and intel versions.
6 *
7 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
8 *
9 * PowerPC-64 Support added by Dave Engebretsen, Peter Bergner, and
10 * Mike Corrigan {engebret|bergner|mikec}@us.ibm.com
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version
15 * 2 of the License, or (at your option) any later version.
16 */
17
18#undef DEBUG
19
20#include <linux/config.h>
21#include <linux/kernel.h>
22#include <linux/module.h>
23#include <linux/sched.h>
24#include <linux/smp.h>
25#include <linux/interrupt.h>
26#include <linux/delay.h>
27#include <linux/init.h>
28#include <linux/spinlock.h>
29#include <linux/cache.h>
30#include <linux/err.h>
31#include <linux/sysdev.h>
32#include <linux/cpu.h>
33#include <linux/notifier.h>
34
35#include <asm/ptrace.h>
36#include <asm/atomic.h>
37#include <asm/irq.h>
38#include <asm/page.h>
39#include <asm/pgtable.h>
40#include <asm/prom.h>
41#include <asm/smp.h>
42#include <asm/time.h>
43#include <asm/xmon.h>
44#include <asm/machdep.h>
45#include <asm/cputable.h>
46#include <asm/system.h>
47#include <asm/mpic.h>
48#ifdef CONFIG_PPC64
49#include <asm/paca.h>
50#endif
51
52int smp_hw_index[NR_CPUS];
53struct thread_info *secondary_ti;
54
55#ifdef DEBUG
56#define DBG(fmt...) udbg_printf(fmt)
57#else
58#define DBG(fmt...)
59#endif
60
61cpumask_t cpu_possible_map = CPU_MASK_NONE;
62cpumask_t cpu_online_map = CPU_MASK_NONE;
63cpumask_t cpu_sibling_map[NR_CPUS] = { [0 ... NR_CPUS-1] = CPU_MASK_NONE };
64
65EXPORT_SYMBOL(cpu_online_map);
66EXPORT_SYMBOL(cpu_possible_map);
67
68/* SMP operations for this machine */
69struct smp_ops_t *smp_ops;
70
71static volatile unsigned int cpu_callin_map[NR_CPUS];
72
73void smp_call_function_interrupt(void);
74
75int smt_enabled_at_boot = 1;
76
77#ifdef CONFIG_MPIC
78int __init smp_mpic_probe(void)
79{
80 int nr_cpus;
81
82 DBG("smp_mpic_probe()...\n");
83
84 nr_cpus = cpus_weight(cpu_possible_map);
85
86 DBG("nr_cpus: %d\n", nr_cpus);
87
88 if (nr_cpus > 1)
89 mpic_request_ipis();
90
91 return nr_cpus;
92}
93
94void __devinit smp_mpic_setup_cpu(int cpu)
95{
96 mpic_setup_this_cpu();
97}
98#endif /* CONFIG_MPIC */
99
100#ifdef CONFIG_PPC64
101void __devinit smp_generic_kick_cpu(int nr)
102{
103 BUG_ON(nr < 0 || nr >= NR_CPUS);
104
105 /*
106 * The processor is currently spinning, waiting for the
107 * cpu_start field to become non-zero After we set cpu_start,
108 * the processor will continue on to secondary_start
109 */
110 paca[nr].cpu_start = 1;
111 smp_mb();
112}
113#endif
114
115void smp_message_recv(int msg, struct pt_regs *regs)
116{
117 switch(msg) {
118 case PPC_MSG_CALL_FUNCTION:
119 smp_call_function_interrupt();
120 break;
121 case PPC_MSG_RESCHEDULE:
122 /* XXX Do we have to do this? */
123 set_need_resched();
124 break;
125#ifdef CONFIG_DEBUGGER
126 case PPC_MSG_DEBUGGER_BREAK:
127 debugger_ipi(regs);
128 break;
129#endif
130 default:
131 printk("SMP %d: smp_message_recv(): unknown msg %d\n",
132 smp_processor_id(), msg);
133 break;
134 }
135}
136
137void smp_send_reschedule(int cpu)
138{
139 smp_ops->message_pass(cpu, PPC_MSG_RESCHEDULE);
140}
141
142#ifdef CONFIG_DEBUGGER
143void smp_send_debugger_break(int cpu)
144{
145 smp_ops->message_pass(cpu, PPC_MSG_DEBUGGER_BREAK);
146}
147#endif
148
149static void stop_this_cpu(void *dummy)
150{
151 local_irq_disable();
152 while (1)
153 ;
154}
155
156void smp_send_stop(void)
157{
158 smp_call_function(stop_this_cpu, NULL, 1, 0);
159}
160
161/*
162 * Structure and data for smp_call_function(). This is designed to minimise
163 * static memory requirements. It also looks cleaner.
164 * Stolen from the i386 version.
165 */
166static __cacheline_aligned_in_smp DEFINE_SPINLOCK(call_lock);
167
168static struct call_data_struct {
169 void (*func) (void *info);
170 void *info;
171 atomic_t started;
172 atomic_t finished;
173 int wait;
174} *call_data;
175
176/* delay of at least 8 seconds */
177#define SMP_CALL_TIMEOUT 8
178
179/*
180 * This function sends a 'generic call function' IPI to all other CPUs
181 * in the system.
182 *
183 * [SUMMARY] Run a function on all other CPUs.
184 * <func> The function to run. This must be fast and non-blocking.
185 * <info> An arbitrary pointer to pass to the function.
186 * <nonatomic> currently unused.
187 * <wait> If true, wait (atomically) until function has completed on other CPUs.
188 * [RETURNS] 0 on success, else a negative status code. Does not return until
189 * remote CPUs are nearly ready to execute <<func>> or are or have executed.
190 *
191 * You must not call this function with disabled interrupts or from a
192 * hardware interrupt handler or from a bottom half handler.
193 */
194int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
195 int wait)
196{
197 struct call_data_struct data;
198 int ret = -1, cpus;
199 u64 timeout;
200
201 /* Can deadlock when called with interrupts disabled */
202 WARN_ON(irqs_disabled());
203
204 data.func = func;
205 data.info = info;
206 atomic_set(&data.started, 0);
207 data.wait = wait;
208 if (wait)
209 atomic_set(&data.finished, 0);
210
211 spin_lock(&call_lock);
212 /* Must grab online cpu count with preempt disabled, otherwise
213 * it can change. */
214 cpus = num_online_cpus() - 1;
215 if (!cpus) {
216 ret = 0;
217 goto out;
218 }
219
220 call_data = &data;
221 smp_wmb();
222 /* Send a message to all other CPUs and wait for them to respond */
223 smp_ops->message_pass(MSG_ALL_BUT_SELF, PPC_MSG_CALL_FUNCTION);
224
225 timeout = get_tb() + (u64) SMP_CALL_TIMEOUT * tb_ticks_per_sec;
226
227 /* Wait for response */
228 while (atomic_read(&data.started) != cpus) {
229 HMT_low();
230 if (get_tb() >= timeout) {
231 printk("smp_call_function on cpu %d: other cpus not "
232 "responding (%d)\n", smp_processor_id(),
233 atomic_read(&data.started));
234 debugger(NULL);
235 goto out;
236 }
237 }
238
239 if (wait) {
240 while (atomic_read(&data.finished) != cpus) {
241 HMT_low();
242 if (get_tb() >= timeout) {
243 printk("smp_call_function on cpu %d: other "
244 "cpus not finishing (%d/%d)\n",
245 smp_processor_id(),
246 atomic_read(&data.finished),
247 atomic_read(&data.started));
248 debugger(NULL);
249 goto out;
250 }
251 }
252 }
253
254 ret = 0;
255
256 out:
257 call_data = NULL;
258 HMT_medium();
259 spin_unlock(&call_lock);
260 return ret;
261}
262
263EXPORT_SYMBOL(smp_call_function);
264
265void smp_call_function_interrupt(void)
266{
267 void (*func) (void *info);
268 void *info;
269 int wait;
270
271 /* call_data will be NULL if the sender timed out while
272 * waiting on us to receive the call.
273 */
274 if (!call_data)
275 return;
276
277 func = call_data->func;
278 info = call_data->info;
279 wait = call_data->wait;
280
281 if (!wait)
282 smp_mb__before_atomic_inc();
283
284 /*
285 * Notify initiating CPU that I've grabbed the data and am
286 * about to execute the function
287 */
288 atomic_inc(&call_data->started);
289 /*
290 * At this point the info structure may be out of scope unless wait==1
291 */
292 (*func)(info);
293 if (wait) {
294 smp_mb__before_atomic_inc();
295 atomic_inc(&call_data->finished);
296 }
297}
298
299extern struct gettimeofday_struct do_gtod;
300
301struct thread_info *current_set[NR_CPUS];
302
303DECLARE_PER_CPU(unsigned int, pvr);
304
305static void __devinit smp_store_cpu_info(int id)
306{
307 per_cpu(pvr, id) = mfspr(SPRN_PVR);
308}
309
310static void __init smp_create_idle(unsigned int cpu)
311{
312 struct task_struct *p;
313
314 /* create a process for the processor */
315 p = fork_idle(cpu);
316 if (IS_ERR(p))
317 panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p));
318#ifdef CONFIG_PPC64
319 paca[cpu].__current = p;
320#endif
321 current_set[cpu] = p->thread_info;
322 p->thread_info->cpu = cpu;
323}
324
325void __init smp_prepare_cpus(unsigned int max_cpus)
326{
327 unsigned int cpu;
328
329 DBG("smp_prepare_cpus\n");
330
331 /*
332 * setup_cpu may need to be called on the boot cpu. We havent
333 * spun any cpus up but lets be paranoid.
334 */
335 BUG_ON(boot_cpuid != smp_processor_id());
336
337 /* Fixup boot cpu */
338 smp_store_cpu_info(boot_cpuid);
339 cpu_callin_map[boot_cpuid] = 1;
340
341 max_cpus = smp_ops->probe();
342
343 smp_space_timers(max_cpus);
344
345 for_each_cpu(cpu)
346 if (cpu != boot_cpuid)
347 smp_create_idle(cpu);
348}
349
350void __devinit smp_prepare_boot_cpu(void)
351{
352 BUG_ON(smp_processor_id() != boot_cpuid);
353
354 cpu_set(boot_cpuid, cpu_online_map);
355#ifdef CONFIG_PPC64
356 paca[boot_cpuid].__current = current;
357#endif
358 current_set[boot_cpuid] = current->thread_info;
359}
360
361#ifdef CONFIG_HOTPLUG_CPU
362/* State of each CPU during hotplug phases */
363DEFINE_PER_CPU(int, cpu_state) = { 0 };
364
365int generic_cpu_disable(void)
366{
367 unsigned int cpu = smp_processor_id();
368
369 if (cpu == boot_cpuid)
370 return -EBUSY;
371
372 systemcfg->processorCount--;
373 cpu_clear(cpu, cpu_online_map);
374 fixup_irqs(cpu_online_map);
375 return 0;
376}
377
378int generic_cpu_enable(unsigned int cpu)
379{
380 /* Do the normal bootup if we haven't
381 * already bootstrapped. */
382 if (system_state != SYSTEM_RUNNING)
383 return -ENOSYS;
384
385 /* get the target out of it's holding state */
386 per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
387 smp_wmb();
388
389 while (!cpu_online(cpu))
390 cpu_relax();
391
392 fixup_irqs(cpu_online_map);
393 /* counter the irq disable in fixup_irqs */
394 local_irq_enable();
395 return 0;
396}
397
398void generic_cpu_die(unsigned int cpu)
399{
400 int i;
401
402 for (i = 0; i < 100; i++) {
403 smp_rmb();
404 if (per_cpu(cpu_state, cpu) == CPU_DEAD)
405 return;
406 msleep(100);
407 }
408 printk(KERN_ERR "CPU%d didn't die...\n", cpu);
409}
410
411void generic_mach_cpu_die(void)
412{
413 unsigned int cpu;
414
415 local_irq_disable();
416 cpu = smp_processor_id();
417 printk(KERN_DEBUG "CPU%d offline\n", cpu);
418 __get_cpu_var(cpu_state) = CPU_DEAD;
419 smp_wmb();
420 while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE)
421 cpu_relax();
422
423 flush_tlb_pending();
424 cpu_set(cpu, cpu_online_map);
425 local_irq_enable();
426}
427#endif
428
429static int __devinit cpu_enable(unsigned int cpu)
430{
431 if (smp_ops->cpu_enable)
432 return smp_ops->cpu_enable(cpu);
433
434 return -ENOSYS;
435}
436
437int __devinit __cpu_up(unsigned int cpu)
438{
439 int c;
440
441 secondary_ti = current_set[cpu];
442 if (!cpu_enable(cpu))
443 return 0;
444
445 if (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu))
446 return -EINVAL;
447
448#ifdef CONFIG_PPC64
449 paca[cpu].default_decr = tb_ticks_per_jiffy;
450#endif
451
452 /* Make sure callin-map entry is 0 (can be leftover a CPU
453 * hotplug
454 */
455 cpu_callin_map[cpu] = 0;
456
457 /* The information for processor bringup must
458 * be written out to main store before we release
459 * the processor.
460 */
461 smp_mb();
462
463 /* wake up cpus */
464 DBG("smp: kicking cpu %d\n", cpu);
465 smp_ops->kick_cpu(cpu);
466
467 /*
468 * wait to see if the cpu made a callin (is actually up).
469 * use this value that I found through experimentation.
470 * -- Cort
471 */
472 if (system_state < SYSTEM_RUNNING)
473 for (c = 5000; c && !cpu_callin_map[cpu]; c--)
474 udelay(100);
475#ifdef CONFIG_HOTPLUG_CPU
476 else
477 /*
478 * CPUs can take much longer to come up in the
479 * hotplug case. Wait five seconds.
480 */
481 for (c = 25; c && !cpu_callin_map[cpu]; c--) {
482 msleep(200);
483 }
484#endif
485
486 if (!cpu_callin_map[cpu]) {
487 printk("Processor %u is stuck.\n", cpu);
488 return -ENOENT;
489 }
490
491 printk("Processor %u found.\n", cpu);
492
493 if (smp_ops->give_timebase)
494 smp_ops->give_timebase();
495
496 /* Wait until cpu puts itself in the online map */
497 while (!cpu_online(cpu))
498 cpu_relax();
499
500 return 0;
501}
502
503
504/* Activate a secondary processor. */
505int __devinit start_secondary(void *unused)
506{
507 unsigned int cpu = smp_processor_id();
508
509 atomic_inc(&init_mm.mm_count);
510 current->active_mm = &init_mm;
511
512 smp_store_cpu_info(cpu);
513 set_dec(tb_ticks_per_jiffy);
514 cpu_callin_map[cpu] = 1;
515
516 smp_ops->setup_cpu(cpu);
517 if (smp_ops->take_timebase)
518 smp_ops->take_timebase();
519
520 spin_lock(&call_lock);
521 cpu_set(cpu, cpu_online_map);
522 spin_unlock(&call_lock);
523
524 local_irq_enable();
525
526 cpu_idle();
527 return 0;
528}
529
530int setup_profiling_timer(unsigned int multiplier)
531{
532 return 0;
533}
534
535void __init smp_cpus_done(unsigned int max_cpus)
536{
537 cpumask_t old_mask;
538
539 /* We want the setup_cpu() here to be called from CPU 0, but our
540 * init thread may have been "borrowed" by another CPU in the meantime
541 * se we pin us down to CPU 0 for a short while
542 */
543 old_mask = current->cpus_allowed;
544 set_cpus_allowed(current, cpumask_of_cpu(boot_cpuid));
545
546 smp_ops->setup_cpu(boot_cpuid);
547
548 set_cpus_allowed(current, old_mask);
549}
550
551#ifdef CONFIG_HOTPLUG_CPU
552int __cpu_disable(void)
553{
554 if (smp_ops->cpu_disable)
555 return smp_ops->cpu_disable();
556
557 return -ENOSYS;
558}
559
560void __cpu_die(unsigned int cpu)
561{
562 if (smp_ops->cpu_die)
563 smp_ops->cpu_die(cpu);
564}
565#endif
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 23436b6c1881..6996a593dcb3 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -66,8 +66,8 @@
66#include <asm/firmware.h> 66#include <asm/firmware.h>
67#endif 67#endif
68#ifdef CONFIG_PPC_ISERIES 68#ifdef CONFIG_PPC_ISERIES
69#include <asm/iSeries/ItLpQueue.h> 69#include <asm/iseries/it_lp_queue.h>
70#include <asm/iSeries/HvCallXm.h> 70#include <asm/iseries/hv_call_xm.h>
71#endif 71#endif
72 72
73/* keep track of when we need to update the rtc */ 73/* keep track of when we need to update the rtc */
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 5d638ecddbd0..07e5ee40b870 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -147,8 +147,8 @@ int die(const char *str, struct pt_regs *regs, long err)
147 printk("POWERMAC "); 147 printk("POWERMAC ");
148 nl = 1; 148 nl = 1;
149 break; 149 break;
150 case PLATFORM_BPA: 150 case PLATFORM_CELL:
151 printk("BPA "); 151 printk("CELL ");
152 nl = 1; 152 nl = 1;
153 break; 153 break;
154 } 154 }
@@ -749,22 +749,22 @@ static int check_bug_trap(struct pt_regs *regs)
749 if (bug->line & BUG_WARNING_TRAP) { 749 if (bug->line & BUG_WARNING_TRAP) {
750 /* this is a WARN_ON rather than BUG/BUG_ON */ 750 /* this is a WARN_ON rather than BUG/BUG_ON */
751#ifdef CONFIG_XMON 751#ifdef CONFIG_XMON
752 xmon_printf(KERN_ERR "Badness in %s at %s:%d\n", 752 xmon_printf(KERN_ERR "Badness in %s at %s:%ld\n",
753 bug->function, bug->file, 753 bug->function, bug->file,
754 bug->line & ~BUG_WARNING_TRAP); 754 bug->line & ~BUG_WARNING_TRAP);
755#endif /* CONFIG_XMON */ 755#endif /* CONFIG_XMON */
756 printk(KERN_ERR "Badness in %s at %s:%d\n", 756 printk(KERN_ERR "Badness in %s at %s:%ld\n",
757 bug->function, bug->file, 757 bug->function, bug->file,
758 bug->line & ~BUG_WARNING_TRAP); 758 bug->line & ~BUG_WARNING_TRAP);
759 dump_stack(); 759 dump_stack();
760 return 1; 760 return 1;
761 } 761 }
762#ifdef CONFIG_XMON 762#ifdef CONFIG_XMON
763 xmon_printf(KERN_CRIT "kernel BUG in %s at %s:%d!\n", 763 xmon_printf(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
764 bug->function, bug->file, bug->line); 764 bug->function, bug->file, bug->line);
765 xmon(regs); 765 xmon(regs);
766#endif /* CONFIG_XMON */ 766#endif /* CONFIG_XMON */
767 printk(KERN_CRIT "kernel BUG in %s at %s:%d!\n", 767 printk(KERN_CRIT "kernel BUG in %s at %s:%ld!\n",
768 bug->function, bug->file, bug->line); 768 bug->function, bug->file, bug->line);
769 769
770 return 0; 770 return 0;
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index d4dfcfbce272..7fa7b15fd8e6 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -3,9 +3,12 @@
3#include <asm/page.h> 3#include <asm/page.h>
4#else 4#else
5#define PAGE_SIZE 4096 5#define PAGE_SIZE 4096
6#define KERNELBASE CONFIG_KERNEL_START
6#endif 7#endif
7#include <asm-generic/vmlinux.lds.h> 8#include <asm-generic/vmlinux.lds.h>
8 9
10ENTRY(_stext)
11
9#ifdef CONFIG_PPC64 12#ifdef CONFIG_PPC64
10OUTPUT_ARCH(powerpc:common64) 13OUTPUT_ARCH(powerpc:common64)
11jiffies = jiffies_64; 14jiffies = jiffies_64;
@@ -21,33 +24,9 @@ SECTIONS
21 *(.exit.data) 24 *(.exit.data)
22 } 25 }
23 26
27 . = KERNELBASE;
24 28
25 /* Read-only sections, merged into text segment: */ 29 /* Read-only sections, merged into text segment: */
26#ifdef CONFIG_PPC32
27 . = + SIZEOF_HEADERS;
28 .interp : { *(.interp) }
29 .hash : { *(.hash) }
30 .dynsym : { *(.dynsym) }
31 .dynstr : { *(.dynstr) }
32 .rel.text : { *(.rel.text) }
33 .rela.text : { *(.rela.text) }
34 .rel.data : { *(.rel.data) }
35 .rela.data : { *(.rela.data) }
36 .rel.rodata : { *(.rel.rodata) }
37 .rela.rodata : { *(.rela.rodata) }
38 .rel.got : { *(.rel.got) }
39 .rela.got : { *(.rela.got) }
40 .rel.ctors : { *(.rel.ctors) }
41 .rela.ctors : { *(.rela.ctors) }
42 .rel.dtors : { *(.rel.dtors) }
43 .rela.dtors : { *(.rela.dtors) }
44 .rel.bss : { *(.rel.bss) }
45 .rela.bss : { *(.rela.bss) }
46 .rel.plt : { *(.rel.plt) }
47 .rela.plt : { *(.rela.plt) }
48/* .init : { *(.init) } =0*/
49 .plt : { *(.plt) }
50#endif
51 .text : { 30 .text : {
52 *(.text .text.*) 31 *(.text .text.*)
53 SCHED_TEXT 32 SCHED_TEXT
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index e6b2be3bcec1..34f5c2e074c9 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -3,13 +3,14 @@
3# 3#
4 4
5ifeq ($(CONFIG_PPC_MERGE),y) 5ifeq ($(CONFIG_PPC_MERGE),y)
6obj-y := string.o 6obj-y := string.o strcase.o
7obj-$(CONFIG_PPC32) += div64.o copy_32.o checksum_32.o
7endif 8endif
8 9
9obj-y += strcase.o 10obj-y += bitops.o
10obj-$(CONFIG_PPC32) += div64.o copy_32.o checksum_32.o
11obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \ 11obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \
12 memcpy_64.o usercopy_64.o mem_64.o 12 memcpy_64.o usercopy_64.o mem_64.o string.o \
13 strcase.o
13obj-$(CONFIG_PPC_ISERIES) += e2a.o 14obj-$(CONFIG_PPC_ISERIES) += e2a.o
14obj-$(CONFIG_XMON) += sstep.o 15obj-$(CONFIG_XMON) += sstep.o
15 16
diff --git a/arch/powerpc/lib/bitops.c b/arch/powerpc/lib/bitops.c
new file mode 100644
index 000000000000..b67ce3004ebf
--- /dev/null
+++ b/arch/powerpc/lib/bitops.c
@@ -0,0 +1,150 @@
1#include <linux/types.h>
2#include <linux/module.h>
3#include <asm/byteorder.h>
4#include <asm/bitops.h>
5
6/**
7 * find_next_bit - find the next set bit in a memory region
8 * @addr: The address to base the search on
9 * @offset: The bitnumber to start searching at
10 * @size: The maximum size to search
11 */
12unsigned long find_next_bit(const unsigned long *addr, unsigned long size,
13 unsigned long offset)
14{
15 const unsigned long *p = addr + BITOP_WORD(offset);
16 unsigned long result = offset & ~(BITS_PER_LONG-1);
17 unsigned long tmp;
18
19 if (offset >= size)
20 return size;
21 size -= result;
22 offset %= BITS_PER_LONG;
23 if (offset) {
24 tmp = *(p++);
25 tmp &= (~0UL << offset);
26 if (size < BITS_PER_LONG)
27 goto found_first;
28 if (tmp)
29 goto found_middle;
30 size -= BITS_PER_LONG;
31 result += BITS_PER_LONG;
32 }
33 while (size & ~(BITS_PER_LONG-1)) {
34 if ((tmp = *(p++)))
35 goto found_middle;
36 result += BITS_PER_LONG;
37 size -= BITS_PER_LONG;
38 }
39 if (!size)
40 return result;
41 tmp = *p;
42
43found_first:
44 tmp &= (~0UL >> (64 - size));
45 if (tmp == 0UL) /* Are any bits set? */
46 return result + size; /* Nope. */
47found_middle:
48 return result + __ffs(tmp);
49}
50EXPORT_SYMBOL(find_next_bit);
51
52/*
53 * This implementation of find_{first,next}_zero_bit was stolen from
54 * Linus' asm-alpha/bitops.h.
55 */
56unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size,
57 unsigned long offset)
58{
59 const unsigned long *p = addr + BITOP_WORD(offset);
60 unsigned long result = offset & ~(BITS_PER_LONG-1);
61 unsigned long tmp;
62
63 if (offset >= size)
64 return size;
65 size -= result;
66 offset %= BITS_PER_LONG;
67 if (offset) {
68 tmp = *(p++);
69 tmp |= ~0UL >> (BITS_PER_LONG - offset);
70 if (size < BITS_PER_LONG)
71 goto found_first;
72 if (~tmp)
73 goto found_middle;
74 size -= BITS_PER_LONG;
75 result += BITS_PER_LONG;
76 }
77 while (size & ~(BITS_PER_LONG-1)) {
78 if (~(tmp = *(p++)))
79 goto found_middle;
80 result += BITS_PER_LONG;
81 size -= BITS_PER_LONG;
82 }
83 if (!size)
84 return result;
85 tmp = *p;
86
87found_first:
88 tmp |= ~0UL << size;
89 if (tmp == ~0UL) /* Are any bits zero? */
90 return result + size; /* Nope. */
91found_middle:
92 return result + ffz(tmp);
93}
94EXPORT_SYMBOL(find_next_zero_bit);
95
96static inline unsigned int ext2_ilog2(unsigned int x)
97{
98 int lz;
99
100 asm("cntlzw %0,%1": "=r"(lz):"r"(x));
101 return 31 - lz;
102}
103
104static inline unsigned int ext2_ffz(unsigned int x)
105{
106 u32 rc;
107 if ((x = ~x) == 0)
108 return 32;
109 rc = ext2_ilog2(x & -x);
110 return rc;
111}
112
113unsigned long find_next_zero_le_bit(const unsigned long *addr,
114 unsigned long size, unsigned long offset)
115{
116 const unsigned int *p = ((const unsigned int *)addr) + (offset >> 5);
117 unsigned int result = offset & ~31;
118 unsigned int tmp;
119
120 if (offset >= size)
121 return size;
122 size -= result;
123 offset &= 31;
124 if (offset) {
125 tmp = cpu_to_le32p(p++);
126 tmp |= ~0U >> (32 - offset); /* bug or feature ? */
127 if (size < 32)
128 goto found_first;
129 if (tmp != ~0)
130 goto found_middle;
131 size -= 32;
132 result += 32;
133 }
134 while (size >= 32) {
135 if ((tmp = cpu_to_le32p(p++)) != ~0)
136 goto found_middle;
137 result += 32;
138 size -= 32;
139 }
140 if (!size)
141 return result;
142 tmp = cpu_to_le32p(p);
143found_first:
144 tmp |= ~0 << size;
145 if (tmp == ~0) /* Are any bits zero? */
146 return result + size; /* Nope. */
147found_middle:
148 return result + ext2_ffz(tmp);
149}
150EXPORT_SYMBOL(find_next_zero_le_bit);
diff --git a/arch/powerpc/lib/locks.c b/arch/powerpc/lib/locks.c
index 3794715b2972..2a912f411eb4 100644
--- a/arch/powerpc/lib/locks.c
+++ b/arch/powerpc/lib/locks.c
@@ -22,7 +22,7 @@
22/* waiting for a spinlock... */ 22/* waiting for a spinlock... */
23#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES) 23#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES)
24#include <asm/hvcall.h> 24#include <asm/hvcall.h>
25#include <asm/iSeries/HvCall.h> 25#include <asm/iseries/hv_call.h>
26 26
27void __spin_yield(raw_spinlock_t *lock) 27void __spin_yield(raw_spinlock_t *lock)
28{ 28{
diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile
index 172c0db63504..8836b3a00668 100644
--- a/arch/powerpc/platforms/Makefile
+++ b/arch/powerpc/platforms/Makefile
@@ -11,3 +11,4 @@ obj-$(CONFIG_85xx) += 85xx/
11obj-$(CONFIG_PPC_PSERIES) += pseries/ 11obj-$(CONFIG_PPC_PSERIES) += pseries/
12obj-$(CONFIG_PPC_ISERIES) += iseries/ 12obj-$(CONFIG_PPC_ISERIES) += iseries/
13obj-$(CONFIG_PPC_MAPLE) += maple/ 13obj-$(CONFIG_PPC_MAPLE) += maple/
14obj-$(CONFIG_PPC_CELL) += cell/
diff --git a/arch/powerpc/platforms/cell/Makefile b/arch/powerpc/platforms/cell/Makefile
new file mode 100644
index 000000000000..55e094b96bc0
--- /dev/null
+++ b/arch/powerpc/platforms/cell/Makefile
@@ -0,0 +1,2 @@
1obj-y += interrupt.o iommu.o setup.o spider-pic.o
2obj-$(CONFIG_SMP) += smp.o
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
new file mode 100644
index 000000000000..7fbe78a9327d
--- /dev/null
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -0,0 +1,284 @@
1/*
2 * Cell Internal Interrupt Controller
3 *
4 * (C) Copyright IBM Deutschland Entwicklung GmbH 2005
5 *
6 * Author: Arnd Bergmann <arndb@de.ibm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/config.h>
24#include <linux/interrupt.h>
25#include <linux/irq.h>
26#include <linux/percpu.h>
27#include <linux/types.h>
28
29#include <asm/io.h>
30#include <asm/pgtable.h>
31#include <asm/prom.h>
32#include <asm/ptrace.h>
33
34#include "interrupt.h"
35
36struct iic_pending_bits {
37 u32 data;
38 u8 flags;
39 u8 class;
40 u8 source;
41 u8 prio;
42};
43
44enum iic_pending_flags {
45 IIC_VALID = 0x80,
46 IIC_IPI = 0x40,
47};
48
49struct iic_regs {
50 struct iic_pending_bits pending;
51 struct iic_pending_bits pending_destr;
52 u64 generate;
53 u64 prio;
54};
55
56struct iic {
57 struct iic_regs __iomem *regs;
58};
59
60static DEFINE_PER_CPU(struct iic, iic);
61
62void iic_local_enable(void)
63{
64 out_be64(&__get_cpu_var(iic).regs->prio, 0xff);
65}
66
67void iic_local_disable(void)
68{
69 out_be64(&__get_cpu_var(iic).regs->prio, 0x0);
70}
71
72static unsigned int iic_startup(unsigned int irq)
73{
74 return 0;
75}
76
77static void iic_enable(unsigned int irq)
78{
79 iic_local_enable();
80}
81
82static void iic_disable(unsigned int irq)
83{
84}
85
86static void iic_end(unsigned int irq)
87{
88 iic_local_enable();
89}
90
91static struct hw_interrupt_type iic_pic = {
92 .typename = " CELL-IIC ",
93 .startup = iic_startup,
94 .enable = iic_enable,
95 .disable = iic_disable,
96 .end = iic_end,
97};
98
99static int iic_external_get_irq(struct iic_pending_bits pending)
100{
101 int irq;
102 unsigned char node, unit;
103
104 node = pending.source >> 4;
105 unit = pending.source & 0xf;
106 irq = -1;
107
108 /*
109 * This mapping is specific to the Cell Broadband
110 * Engine. We might need to get the numbers
111 * from the device tree to support future CPUs.
112 */
113 switch (unit) {
114 case 0x00:
115 case 0x0b:
116 /*
117 * One of these units can be connected
118 * to an external interrupt controller.
119 */
120 if (pending.prio > 0x3f ||
121 pending.class != 2)
122 break;
123 irq = IIC_EXT_OFFSET
124 + spider_get_irq(pending.prio + node * IIC_NODE_STRIDE)
125 + node * IIC_NODE_STRIDE;
126 break;
127 case 0x01 ... 0x04:
128 case 0x07 ... 0x0a:
129 /*
130 * These units are connected to the SPEs
131 */
132 if (pending.class > 2)
133 break;
134 irq = IIC_SPE_OFFSET
135 + pending.class * IIC_CLASS_STRIDE
136 + node * IIC_NODE_STRIDE
137 + unit;
138 break;
139 }
140 if (irq == -1)
141 printk(KERN_WARNING "Unexpected interrupt class %02x, "
142 "source %02x, prio %02x, cpu %02x\n", pending.class,
143 pending.source, pending.prio, smp_processor_id());
144 return irq;
145}
146
147/* Get an IRQ number from the pending state register of the IIC */
148int iic_get_irq(struct pt_regs *regs)
149{
150 struct iic *iic;
151 int irq;
152 struct iic_pending_bits pending;
153
154 iic = &__get_cpu_var(iic);
155 *(unsigned long *) &pending =
156 in_be64((unsigned long __iomem *) &iic->regs->pending_destr);
157
158 irq = -1;
159 if (pending.flags & IIC_VALID) {
160 if (pending.flags & IIC_IPI) {
161 irq = IIC_IPI_OFFSET + (pending.prio >> 4);
162/*
163 if (irq > 0x80)
164 printk(KERN_WARNING "Unexpected IPI prio %02x"
165 "on CPU %02x\n", pending.prio,
166 smp_processor_id());
167*/
168 } else {
169 irq = iic_external_get_irq(pending);
170 }
171 }
172 return irq;
173}
174
175static struct iic_regs __iomem *find_iic(int cpu)
176{
177 struct device_node *np;
178 int nodeid = cpu / 2;
179 unsigned long regs;
180 struct iic_regs __iomem *iic_regs;
181
182 for (np = of_find_node_by_type(NULL, "cpu");
183 np;
184 np = of_find_node_by_type(np, "cpu")) {
185 if (nodeid == *(int *)get_property(np, "node-id", NULL))
186 break;
187 }
188
189 if (!np) {
190 printk(KERN_WARNING "IIC: CPU %d not found\n", cpu);
191 iic_regs = NULL;
192 } else {
193 regs = *(long *)get_property(np, "iic", NULL);
194
195 /* hack until we have decided on the devtree info */
196 regs += 0x400;
197 if (cpu & 1)
198 regs += 0x20;
199
200 printk(KERN_DEBUG "IIC for CPU %d at %lx\n", cpu, regs);
201 iic_regs = __ioremap(regs, sizeof(struct iic_regs),
202 _PAGE_NO_CACHE);
203 }
204 return iic_regs;
205}
206
207#ifdef CONFIG_SMP
208
209/* Use the highest interrupt priorities for IPI */
210static inline int iic_ipi_to_irq(int ipi)
211{
212 return IIC_IPI_OFFSET + IIC_NUM_IPIS - 1 - ipi;
213}
214
215static inline int iic_irq_to_ipi(int irq)
216{
217 return IIC_NUM_IPIS - 1 - (irq - IIC_IPI_OFFSET);
218}
219
220void iic_setup_cpu(void)
221{
222 out_be64(&__get_cpu_var(iic).regs->prio, 0xff);
223}
224
225void iic_cause_IPI(int cpu, int mesg)
226{
227 out_be64(&per_cpu(iic, cpu).regs->generate, (IIC_NUM_IPIS - 1 - mesg) << 4);
228}
229
230static irqreturn_t iic_ipi_action(int irq, void *dev_id, struct pt_regs *regs)
231{
232 smp_message_recv(iic_irq_to_ipi(irq), regs);
233 return IRQ_HANDLED;
234}
235
236static void iic_request_ipi(int ipi, const char *name)
237{
238 int irq;
239
240 irq = iic_ipi_to_irq(ipi);
241 /* IPIs are marked SA_INTERRUPT as they must run with irqs
242 * disabled */
243 get_irq_desc(irq)->handler = &iic_pic;
244 get_irq_desc(irq)->status |= IRQ_PER_CPU;
245 request_irq(irq, iic_ipi_action, SA_INTERRUPT, name, NULL);
246}
247
248void iic_request_IPIs(void)
249{
250 iic_request_ipi(PPC_MSG_CALL_FUNCTION, "IPI-call");
251 iic_request_ipi(PPC_MSG_RESCHEDULE, "IPI-resched");
252#ifdef CONFIG_DEBUGGER
253 iic_request_ipi(PPC_MSG_DEBUGGER_BREAK, "IPI-debug");
254#endif /* CONFIG_DEBUGGER */
255}
256#endif /* CONFIG_SMP */
257
258static void iic_setup_spe_handlers(void)
259{
260 int be, isrc;
261
262 /* Assume two threads per BE are present */
263 for (be=0; be < num_present_cpus() / 2; be++) {
264 for (isrc = 0; isrc < IIC_CLASS_STRIDE * 3; isrc++) {
265 int irq = IIC_NODE_STRIDE * be + IIC_SPE_OFFSET + isrc;
266 get_irq_desc(irq)->handler = &iic_pic;
267 }
268 }
269}
270
271void iic_init_IRQ(void)
272{
273 int cpu, irq_offset;
274 struct iic *iic;
275
276 irq_offset = 0;
277 for_each_cpu(cpu) {
278 iic = &per_cpu(iic, cpu);
279 iic->regs = find_iic(cpu);
280 if (iic->regs)
281 out_be64(&iic->regs->prio, 0xff);
282 }
283 iic_setup_spe_handlers();
284}
diff --git a/arch/powerpc/platforms/cell/interrupt.h b/arch/powerpc/platforms/cell/interrupt.h
new file mode 100644
index 000000000000..37d58e6fd0c6
--- /dev/null
+++ b/arch/powerpc/platforms/cell/interrupt.h
@@ -0,0 +1,62 @@
1#ifndef ASM_CELL_PIC_H
2#define ASM_CELL_PIC_H
3#ifdef __KERNEL__
4/*
5 * Mapping of IIC pending bits into per-node
6 * interrupt numbers.
7 *
8 * IRQ FF CC SS PP FF CC SS PP Description
9 *
10 * 00-3f 80 02 +0 00 - 80 02 +0 3f South Bridge
11 * 00-3f 80 02 +b 00 - 80 02 +b 3f South Bridge
12 * 41-4a 80 00 +1 ** - 80 00 +a ** SPU Class 0
13 * 51-5a 80 01 +1 ** - 80 01 +a ** SPU Class 1
14 * 61-6a 80 02 +1 ** - 80 02 +a ** SPU Class 2
15 * 70-7f C0 ** ** 00 - C0 ** ** 0f IPI
16 *
17 * F flags
18 * C class
19 * S source
20 * P Priority
21 * + node number
22 * * don't care
23 *
24 * A node consists of a Cell Broadband Engine and an optional
25 * south bridge device providing a maximum of 64 IRQs.
26 * The south bridge may be connected to either IOIF0
27 * or IOIF1.
28 * Each SPE is represented as three IRQ lines, one per
29 * interrupt class.
30 * 16 IRQ numbers are reserved for inter processor
31 * interruptions, although these are only used in the
32 * range of the first node.
33 *
34 * This scheme needs 128 IRQ numbers per BIF node ID,
35 * which means that with the total of 512 lines
36 * available, we can have a maximum of four nodes.
37 */
38
39enum {
40 IIC_EXT_OFFSET = 0x00, /* Start of south bridge IRQs */
41 IIC_NUM_EXT = 0x40, /* Number of south bridge IRQs */
42 IIC_SPE_OFFSET = 0x40, /* Start of SPE interrupts */
43 IIC_CLASS_STRIDE = 0x10, /* SPE IRQs per class */
44 IIC_IPI_OFFSET = 0x70, /* Start of IPI IRQs */
45 IIC_NUM_IPIS = 0x10, /* IRQs reserved for IPI */
46 IIC_NODE_STRIDE = 0x80, /* Total IRQs per node */
47};
48
49extern void iic_init_IRQ(void);
50extern int iic_get_irq(struct pt_regs *regs);
51extern void iic_cause_IPI(int cpu, int mesg);
52extern void iic_request_IPIs(void);
53extern void iic_setup_cpu(void);
54extern void iic_local_enable(void);
55extern void iic_local_disable(void);
56
57
58extern void spider_init_IRQ(void);
59extern int spider_get_irq(unsigned long int_pending);
60
61#endif
62#endif /* ASM_CELL_PIC_H */
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
new file mode 100644
index 000000000000..74f999b4ac9e
--- /dev/null
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -0,0 +1,381 @@
1/*
2 * IOMMU implementation for Cell Broadband Processor Architecture
3 * We just establish a linear mapping at boot by setting all the
4 * IOPT cache entries in the CPU.
5 * The mapping functions should be identical to pci_direct_iommu,
6 * except for the handling of the high order bit that is required
7 * by the Spider bridge. These should be split into a separate
8 * file at the point where we get a different bridge chip.
9 *
10 * Copyright (C) 2005 IBM Deutschland Entwicklung GmbH,
11 * Arnd Bergmann <arndb@de.ibm.com>
12 *
13 * Based on linear mapping
14 * Copyright (C) 2003 Benjamin Herrenschmidt (benh@kernel.crashing.org)
15 *
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version
19 * 2 of the License, or (at your option) any later version.
20 */
21
22#undef DEBUG
23
24#include <linux/kernel.h>
25#include <linux/pci.h>
26#include <linux/delay.h>
27#include <linux/string.h>
28#include <linux/init.h>
29#include <linux/bootmem.h>
30#include <linux/mm.h>
31#include <linux/dma-mapping.h>
32
33#include <asm/sections.h>
34#include <asm/iommu.h>
35#include <asm/io.h>
36#include <asm/prom.h>
37#include <asm/pci-bridge.h>
38#include <asm/machdep.h>
39#include <asm/pmac_feature.h>
40#include <asm/abs_addr.h>
41#include <asm/system.h>
42#include <asm/ppc-pci.h>
43
44#include "iommu.h"
45
46static inline unsigned long
47get_iopt_entry(unsigned long real_address, unsigned long ioid,
48 unsigned long prot)
49{
50 return (prot & IOPT_PROT_MASK)
51 | (IOPT_COHERENT)
52 | (IOPT_ORDER_VC)
53 | (real_address & IOPT_RPN_MASK)
54 | (ioid & IOPT_IOID_MASK);
55}
56
57typedef struct {
58 unsigned long val;
59} ioste;
60
61static inline ioste
62mk_ioste(unsigned long val)
63{
64 ioste ioste = { .val = val, };
65 return ioste;
66}
67
68static inline ioste
69get_iost_entry(unsigned long iopt_base, unsigned long io_address, unsigned page_size)
70{
71 unsigned long ps;
72 unsigned long iostep;
73 unsigned long nnpt;
74 unsigned long shift;
75
76 switch (page_size) {
77 case 0x1000000:
78 ps = IOST_PS_16M;
79 nnpt = 0; /* one page per segment */
80 shift = 5; /* segment has 16 iopt entries */
81 break;
82
83 case 0x100000:
84 ps = IOST_PS_1M;
85 nnpt = 0; /* one page per segment */
86 shift = 1; /* segment has 256 iopt entries */
87 break;
88
89 case 0x10000:
90 ps = IOST_PS_64K;
91 nnpt = 0x07; /* 8 pages per io page table */
92 shift = 0; /* all entries are used */
93 break;
94
95 case 0x1000:
96 ps = IOST_PS_4K;
97 nnpt = 0x7f; /* 128 pages per io page table */
98 shift = 0; /* all entries are used */
99 break;
100
101 default: /* not a known compile time constant */
102 {
103 /* BUILD_BUG_ON() is not usable here */
104 extern void __get_iost_entry_bad_page_size(void);
105 __get_iost_entry_bad_page_size();
106 }
107 break;
108 }
109
110 iostep = iopt_base +
111 /* need 8 bytes per iopte */
112 (((io_address / page_size * 8)
113 /* align io page tables on 4k page boundaries */
114 << shift)
115 /* nnpt+1 pages go into each iopt */
116 & ~(nnpt << 12));
117
118 nnpt++; /* this seems to work, but the documentation is not clear
119 about wether we put nnpt or nnpt-1 into the ioste bits.
120 In theory, this can't work for 4k pages. */
121 return mk_ioste(IOST_VALID_MASK
122 | (iostep & IOST_PT_BASE_MASK)
123 | ((nnpt << 5) & IOST_NNPT_MASK)
124 | (ps & IOST_PS_MASK));
125}
126
127/* compute the address of an io pte */
128static inline unsigned long
129get_ioptep(ioste iost_entry, unsigned long io_address)
130{
131 unsigned long iopt_base;
132 unsigned long page_size;
133 unsigned long page_number;
134 unsigned long iopt_offset;
135
136 iopt_base = iost_entry.val & IOST_PT_BASE_MASK;
137 page_size = iost_entry.val & IOST_PS_MASK;
138
139 /* decode page size to compute page number */
140 page_number = (io_address & 0x0fffffff) >> (10 + 2 * page_size);
141 /* page number is an offset into the io page table */
142 iopt_offset = (page_number << 3) & 0x7fff8ul;
143 return iopt_base + iopt_offset;
144}
145
146/* compute the tag field of the iopt cache entry */
147static inline unsigned long
148get_ioc_tag(ioste iost_entry, unsigned long io_address)
149{
150 unsigned long iopte = get_ioptep(iost_entry, io_address);
151
152 return IOPT_VALID_MASK
153 | ((iopte & 0x00000000000000ff8ul) >> 3)
154 | ((iopte & 0x0000003fffffc0000ul) >> 9);
155}
156
157/* compute the hashed 6 bit index for the 4-way associative pte cache */
158static inline unsigned long
159get_ioc_hash(ioste iost_entry, unsigned long io_address)
160{
161 unsigned long iopte = get_ioptep(iost_entry, io_address);
162
163 return ((iopte & 0x000000000000001f8ul) >> 3)
164 ^ ((iopte & 0x00000000000020000ul) >> 17)
165 ^ ((iopte & 0x00000000000010000ul) >> 15)
166 ^ ((iopte & 0x00000000000008000ul) >> 13)
167 ^ ((iopte & 0x00000000000004000ul) >> 11)
168 ^ ((iopte & 0x00000000000002000ul) >> 9)
169 ^ ((iopte & 0x00000000000001000ul) >> 7);
170}
171
172/* same as above, but pretend that we have a simpler 1-way associative
173 pte cache with an 8 bit index */
174static inline unsigned long
175get_ioc_hash_1way(ioste iost_entry, unsigned long io_address)
176{
177 unsigned long iopte = get_ioptep(iost_entry, io_address);
178
179 return ((iopte & 0x000000000000001f8ul) >> 3)
180 ^ ((iopte & 0x00000000000020000ul) >> 17)
181 ^ ((iopte & 0x00000000000010000ul) >> 15)
182 ^ ((iopte & 0x00000000000008000ul) >> 13)
183 ^ ((iopte & 0x00000000000004000ul) >> 11)
184 ^ ((iopte & 0x00000000000002000ul) >> 9)
185 ^ ((iopte & 0x00000000000001000ul) >> 7)
186 ^ ((iopte & 0x0000000000000c000ul) >> 8);
187}
188
189static inline ioste
190get_iost_cache(void __iomem *base, unsigned long index)
191{
192 unsigned long __iomem *p = (base + IOC_ST_CACHE_DIR);
193 return mk_ioste(in_be64(&p[index]));
194}
195
196static inline void
197set_iost_cache(void __iomem *base, unsigned long index, ioste ste)
198{
199 unsigned long __iomem *p = (base + IOC_ST_CACHE_DIR);
200 pr_debug("ioste %02lx was %016lx, store %016lx", index,
201 get_iost_cache(base, index).val, ste.val);
202 out_be64(&p[index], ste.val);
203 pr_debug(" now %016lx\n", get_iost_cache(base, index).val);
204}
205
206static inline unsigned long
207get_iopt_cache(void __iomem *base, unsigned long index, unsigned long *tag)
208{
209 unsigned long __iomem *tags = (void *)(base + IOC_PT_CACHE_DIR);
210 unsigned long __iomem *p = (void *)(base + IOC_PT_CACHE_REG);
211
212 *tag = tags[index];
213 rmb();
214 return *p;
215}
216
217static inline void
218set_iopt_cache(void __iomem *base, unsigned long index,
219 unsigned long tag, unsigned long val)
220{
221 unsigned long __iomem *tags = base + IOC_PT_CACHE_DIR;
222 unsigned long __iomem *p = base + IOC_PT_CACHE_REG;
223 pr_debug("iopt %02lx was v%016lx/t%016lx, store v%016lx/t%016lx\n",
224 index, get_iopt_cache(base, index, &oldtag), oldtag, val, tag);
225
226 out_be64(p, val);
227 out_be64(&tags[index], tag);
228}
229
230static inline void
231set_iost_origin(void __iomem *base)
232{
233 unsigned long __iomem *p = base + IOC_ST_ORIGIN;
234 unsigned long origin = IOSTO_ENABLE | IOSTO_SW;
235
236 pr_debug("iost_origin %016lx, now %016lx\n", in_be64(p), origin);
237 out_be64(p, origin);
238}
239
240static inline void
241set_iocmd_config(void __iomem *base)
242{
243 unsigned long __iomem *p = base + 0xc00;
244 unsigned long conf;
245
246 conf = in_be64(p);
247 pr_debug("iost_conf %016lx, now %016lx\n", conf, conf | IOCMD_CONF_TE);
248 out_be64(p, conf | IOCMD_CONF_TE);
249}
250
251/* FIXME: get these from the device tree */
252#define ioc_base 0x20000511000ull
253#define ioc_mmio_base 0x20000510000ull
254#define ioid 0x48a
255#define iopt_phys_offset (- 0x20000000) /* We have a 512MB offset from the SB */
256#define io_page_size 0x1000000
257
258static unsigned long map_iopt_entry(unsigned long address)
259{
260 switch (address >> 20) {
261 case 0x600:
262 address = 0x24020000000ull; /* spider i/o */
263 break;
264 default:
265 address += iopt_phys_offset;
266 break;
267 }
268
269 return get_iopt_entry(address, ioid, IOPT_PROT_RW);
270}
271
272static void iommu_bus_setup_null(struct pci_bus *b) { }
273static void iommu_dev_setup_null(struct pci_dev *d) { }
274
275/* initialize the iommu to support a simple linear mapping
276 * for each DMA window used by any device. For now, we
277 * happen to know that there is only one DMA window in use,
278 * starting at iopt_phys_offset. */
279static void cell_map_iommu(void)
280{
281 unsigned long address;
282 void __iomem *base;
283 ioste ioste;
284 unsigned long index;
285
286 base = __ioremap(ioc_base, 0x1000, _PAGE_NO_CACHE);
287 pr_debug("%lx mapped to %p\n", ioc_base, base);
288 set_iocmd_config(base);
289 iounmap(base);
290
291 base = __ioremap(ioc_mmio_base, 0x1000, _PAGE_NO_CACHE);
292 pr_debug("%lx mapped to %p\n", ioc_mmio_base, base);
293
294 set_iost_origin(base);
295
296 for (address = 0; address < 0x100000000ul; address += io_page_size) {
297 ioste = get_iost_entry(0x10000000000ul, address, io_page_size);
298 if ((address & 0xfffffff) == 0) /* segment start */
299 set_iost_cache(base, address >> 28, ioste);
300 index = get_ioc_hash_1way(ioste, address);
301 pr_debug("addr %08lx, index %02lx, ioste %016lx\n",
302 address, index, ioste.val);
303 set_iopt_cache(base,
304 get_ioc_hash_1way(ioste, address),
305 get_ioc_tag(ioste, address),
306 map_iopt_entry(address));
307 }
308 iounmap(base);
309}
310
311
312static void *cell_alloc_coherent(struct device *hwdev, size_t size,
313 dma_addr_t *dma_handle, gfp_t flag)
314{
315 void *ret;
316
317 ret = (void *)__get_free_pages(flag, get_order(size));
318 if (ret != NULL) {
319 memset(ret, 0, size);
320 *dma_handle = virt_to_abs(ret) | CELL_DMA_VALID;
321 }
322 return ret;
323}
324
325static void cell_free_coherent(struct device *hwdev, size_t size,
326 void *vaddr, dma_addr_t dma_handle)
327{
328 free_pages((unsigned long)vaddr, get_order(size));
329}
330
331static dma_addr_t cell_map_single(struct device *hwdev, void *ptr,
332 size_t size, enum dma_data_direction direction)
333{
334 return virt_to_abs(ptr) | CELL_DMA_VALID;
335}
336
337static void cell_unmap_single(struct device *hwdev, dma_addr_t dma_addr,
338 size_t size, enum dma_data_direction direction)
339{
340}
341
342static int cell_map_sg(struct device *hwdev, struct scatterlist *sg,
343 int nents, enum dma_data_direction direction)
344{
345 int i;
346
347 for (i = 0; i < nents; i++, sg++) {
348 sg->dma_address = (page_to_phys(sg->page) + sg->offset)
349 | CELL_DMA_VALID;
350 sg->dma_length = sg->length;
351 }
352
353 return nents;
354}
355
356static void cell_unmap_sg(struct device *hwdev, struct scatterlist *sg,
357 int nents, enum dma_data_direction direction)
358{
359}
360
361static int cell_dma_supported(struct device *dev, u64 mask)
362{
363 return mask < 0x100000000ull;
364}
365
366void cell_init_iommu(void)
367{
368 cell_map_iommu();
369
370 /* Direct I/O, IOMMU off */
371 ppc_md.iommu_dev_setup = iommu_dev_setup_null;
372 ppc_md.iommu_bus_setup = iommu_bus_setup_null;
373
374 pci_dma_ops.alloc_coherent = cell_alloc_coherent;
375 pci_dma_ops.free_coherent = cell_free_coherent;
376 pci_dma_ops.map_single = cell_map_single;
377 pci_dma_ops.unmap_single = cell_unmap_single;
378 pci_dma_ops.map_sg = cell_map_sg;
379 pci_dma_ops.unmap_sg = cell_unmap_sg;
380 pci_dma_ops.dma_supported = cell_dma_supported;
381}
diff --git a/arch/powerpc/platforms/cell/iommu.h b/arch/powerpc/platforms/cell/iommu.h
new file mode 100644
index 000000000000..490d77abfe85
--- /dev/null
+++ b/arch/powerpc/platforms/cell/iommu.h
@@ -0,0 +1,65 @@
1#ifndef CELL_IOMMU_H
2#define CELL_IOMMU_H
3
4/* some constants */
5enum {
6 /* segment table entries */
7 IOST_VALID_MASK = 0x8000000000000000ul,
8 IOST_TAG_MASK = 0x3000000000000000ul,
9 IOST_PT_BASE_MASK = 0x000003fffffff000ul,
10 IOST_NNPT_MASK = 0x0000000000000fe0ul,
11 IOST_PS_MASK = 0x000000000000000ful,
12
13 IOST_PS_4K = 0x1,
14 IOST_PS_64K = 0x3,
15 IOST_PS_1M = 0x5,
16 IOST_PS_16M = 0x7,
17
18 /* iopt tag register */
19 IOPT_VALID_MASK = 0x0000000200000000ul,
20 IOPT_TAG_MASK = 0x00000001fffffffful,
21
22 /* iopt cache register */
23 IOPT_PROT_MASK = 0xc000000000000000ul,
24 IOPT_PROT_NONE = 0x0000000000000000ul,
25 IOPT_PROT_READ = 0x4000000000000000ul,
26 IOPT_PROT_WRITE = 0x8000000000000000ul,
27 IOPT_PROT_RW = 0xc000000000000000ul,
28 IOPT_COHERENT = 0x2000000000000000ul,
29
30 IOPT_ORDER_MASK = 0x1800000000000000ul,
31 /* order access to same IOID/VC on same address */
32 IOPT_ORDER_ADDR = 0x0800000000000000ul,
33 /* similar, but only after a write access */
34 IOPT_ORDER_WRITES = 0x1000000000000000ul,
35 /* Order all accesses to same IOID/VC */
36 IOPT_ORDER_VC = 0x1800000000000000ul,
37
38 IOPT_RPN_MASK = 0x000003fffffff000ul,
39 IOPT_HINT_MASK = 0x0000000000000800ul,
40 IOPT_IOID_MASK = 0x00000000000007fful,
41
42 IOSTO_ENABLE = 0x8000000000000000ul,
43 IOSTO_ORIGIN = 0x000003fffffff000ul,
44 IOSTO_HW = 0x0000000000000800ul,
45 IOSTO_SW = 0x0000000000000400ul,
46
47 IOCMD_CONF_TE = 0x0000800000000000ul,
48
49 /* memory mapped registers */
50 IOC_PT_CACHE_DIR = 0x000,
51 IOC_ST_CACHE_DIR = 0x800,
52 IOC_PT_CACHE_REG = 0x910,
53 IOC_ST_ORIGIN = 0x918,
54 IOC_CONF = 0x930,
55
56 /* The high bit needs to be set on every DMA address,
57 only 2GB are addressable */
58 CELL_DMA_VALID = 0x80000000,
59 CELL_DMA_MASK = 0x7fffffff,
60};
61
62
63void cell_init_iommu(void);
64
65#endif
diff --git a/arch/powerpc/platforms/cell/setup.c b/arch/powerpc/platforms/cell/setup.c
new file mode 100644
index 000000000000..9a495634d0c2
--- /dev/null
+++ b/arch/powerpc/platforms/cell/setup.c
@@ -0,0 +1,141 @@
1/*
2 * linux/arch/powerpc/platforms/cell/cell_setup.c
3 *
4 * Copyright (C) 1995 Linus Torvalds
5 * Adapted from 'alpha' version by Gary Thomas
6 * Modified by Cort Dougan (cort@cs.nmt.edu)
7 * Modified by PPC64 Team, IBM Corp
8 * Modified by Cell Team, IBM Deutschland Entwicklung GmbH
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version
13 * 2 of the License, or (at your option) any later version.
14 */
15#undef DEBUG
16
17#include <linux/config.h>
18#include <linux/sched.h>
19#include <linux/kernel.h>
20#include <linux/mm.h>
21#include <linux/stddef.h>
22#include <linux/unistd.h>
23#include <linux/slab.h>
24#include <linux/user.h>
25#include <linux/reboot.h>
26#include <linux/init.h>
27#include <linux/delay.h>
28#include <linux/irq.h>
29#include <linux/seq_file.h>
30#include <linux/root_dev.h>
31#include <linux/console.h>
32
33#include <asm/mmu.h>
34#include <asm/processor.h>
35#include <asm/io.h>
36#include <asm/pgtable.h>
37#include <asm/prom.h>
38#include <asm/rtas.h>
39#include <asm/pci-bridge.h>
40#include <asm/iommu.h>
41#include <asm/dma.h>
42#include <asm/machdep.h>
43#include <asm/time.h>
44#include <asm/nvram.h>
45#include <asm/cputable.h>
46#include <asm/ppc-pci.h>
47#include <asm/irq.h>
48
49#include "interrupt.h"
50#include "iommu.h"
51
52#ifdef DEBUG
53#define DBG(fmt...) udbg_printf(fmt)
54#else
55#define DBG(fmt...)
56#endif
57
58void cell_show_cpuinfo(struct seq_file *m)
59{
60 struct device_node *root;
61 const char *model = "";
62
63 root = of_find_node_by_path("/");
64 if (root)
65 model = get_property(root, "model", NULL);
66 seq_printf(m, "machine\t\t: CHRP %s\n", model);
67 of_node_put(root);
68}
69
70static void cell_progress(char *s, unsigned short hex)
71{
72 printk("*** %04x : %s\n", hex, s ? s : "");
73}
74
75static void __init cell_setup_arch(void)
76{
77 ppc_md.init_IRQ = iic_init_IRQ;
78 ppc_md.get_irq = iic_get_irq;
79
80#ifdef CONFIG_SMP
81 smp_init_cell();
82#endif
83
84 /* init to some ~sane value until calibrate_delay() runs */
85 loops_per_jiffy = 50000000;
86
87 if (ROOT_DEV == 0) {
88 printk("No ramdisk, default root is /dev/hda2\n");
89 ROOT_DEV = Root_HDA2;
90 }
91
92 /* Find and initialize PCI host bridges */
93 init_pci_config_tokens();
94 find_and_init_phbs();
95 spider_init_IRQ();
96#ifdef CONFIG_DUMMY_CONSOLE
97 conswitchp = &dummy_con;
98#endif
99
100 mmio_nvram_init();
101}
102
103/*
104 * Early initialization. Relocation is on but do not reference unbolted pages
105 */
106static void __init cell_init_early(void)
107{
108 DBG(" -> cell_init_early()\n");
109
110 hpte_init_native();
111
112 cell_init_iommu();
113
114 ppc64_interrupt_controller = IC_CELL_PIC;
115
116 DBG(" <- cell_init_early()\n");
117}
118
119
120static int __init cell_probe(int platform)
121{
122 if (platform != PLATFORM_CELL)
123 return 0;
124
125 return 1;
126}
127
128struct machdep_calls __initdata cell_md = {
129 .probe = cell_probe,
130 .setup_arch = cell_setup_arch,
131 .init_early = cell_init_early,
132 .show_cpuinfo = cell_show_cpuinfo,
133 .restart = rtas_restart,
134 .power_off = rtas_power_off,
135 .halt = rtas_halt,
136 .get_boot_time = rtas_get_boot_time,
137 .get_rtc_time = rtas_get_rtc_time,
138 .set_rtc_time = rtas_set_rtc_time,
139 .calibrate_decr = generic_calibrate_decr,
140 .progress = cell_progress,
141};
diff --git a/arch/powerpc/platforms/cell/smp.c b/arch/powerpc/platforms/cell/smp.c
new file mode 100644
index 000000000000..de96eadf419d
--- /dev/null
+++ b/arch/powerpc/platforms/cell/smp.c
@@ -0,0 +1,230 @@
1/*
2 * SMP support for BPA machines.
3 *
4 * Dave Engebretsen, Peter Bergner, and
5 * Mike Corrigan {engebret|bergner|mikec}@us.ibm.com
6 *
7 * Plus various changes from other IBM teams...
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version
12 * 2 of the License, or (at your option) any later version.
13 */
14
15#undef DEBUG
16
17#include <linux/config.h>
18#include <linux/kernel.h>
19#include <linux/module.h>
20#include <linux/sched.h>
21#include <linux/smp.h>
22#include <linux/interrupt.h>
23#include <linux/delay.h>
24#include <linux/init.h>
25#include <linux/spinlock.h>
26#include <linux/cache.h>
27#include <linux/err.h>
28#include <linux/sysdev.h>
29#include <linux/cpu.h>
30
31#include <asm/ptrace.h>
32#include <asm/atomic.h>
33#include <asm/irq.h>
34#include <asm/page.h>
35#include <asm/pgtable.h>
36#include <asm/io.h>
37#include <asm/prom.h>
38#include <asm/smp.h>
39#include <asm/paca.h>
40#include <asm/time.h>
41#include <asm/machdep.h>
42#include <asm/cputable.h>
43#include <asm/firmware.h>
44#include <asm/system.h>
45#include <asm/rtas.h>
46
47#include "interrupt.h"
48
49#ifdef DEBUG
50#define DBG(fmt...) udbg_printf(fmt)
51#else
52#define DBG(fmt...)
53#endif
54
55/*
56 * The primary thread of each non-boot processor is recorded here before
57 * smp init.
58 */
59static cpumask_t of_spin_map;
60
61extern void pSeries_secondary_smp_init(unsigned long);
62
63/**
64 * smp_startup_cpu() - start the given cpu
65 *
66 * At boot time, there is nothing to do for primary threads which were
67 * started from Open Firmware. For anything else, call RTAS with the
68 * appropriate start location.
69 *
70 * Returns:
71 * 0 - failure
72 * 1 - success
73 */
74static inline int __devinit smp_startup_cpu(unsigned int lcpu)
75{
76 int status;
77 unsigned long start_here = __pa((u32)*((unsigned long *)
78 pSeries_secondary_smp_init));
79 unsigned int pcpu;
80 int start_cpu;
81
82 if (cpu_isset(lcpu, of_spin_map))
83 /* Already started by OF and sitting in spin loop */
84 return 1;
85
86 pcpu = get_hard_smp_processor_id(lcpu);
87
88 /* Fixup atomic count: it exited inside IRQ handler. */
89 paca[lcpu].__current->thread_info->preempt_count = 0;
90
91 /*
92 * If the RTAS start-cpu token does not exist then presume the
93 * cpu is already spinning.
94 */
95 start_cpu = rtas_token("start-cpu");
96 if (start_cpu == RTAS_UNKNOWN_SERVICE)
97 return 1;
98
99 status = rtas_call(start_cpu, 3, 1, NULL, pcpu, start_here, lcpu);
100 if (status != 0) {
101 printk(KERN_ERR "start-cpu failed: %i\n", status);
102 return 0;
103 }
104
105 return 1;
106}
107
108static void smp_iic_message_pass(int target, int msg)
109{
110 unsigned int i;
111
112 if (target < NR_CPUS) {
113 iic_cause_IPI(target, msg);
114 } else {
115 for_each_online_cpu(i) {
116 if (target == MSG_ALL_BUT_SELF
117 && i == smp_processor_id())
118 continue;
119 iic_cause_IPI(i, msg);
120 }
121 }
122}
123
124static int __init smp_iic_probe(void)
125{
126 iic_request_IPIs();
127
128 return cpus_weight(cpu_possible_map);
129}
130
131static void __devinit smp_iic_setup_cpu(int cpu)
132{
133 if (cpu != boot_cpuid)
134 iic_setup_cpu();
135}
136
137static DEFINE_SPINLOCK(timebase_lock);
138static unsigned long timebase = 0;
139
140static void __devinit cell_give_timebase(void)
141{
142 spin_lock(&timebase_lock);
143 rtas_call(rtas_token("freeze-time-base"), 0, 1, NULL);
144 timebase = get_tb();
145 spin_unlock(&timebase_lock);
146
147 while (timebase)
148 barrier();
149 rtas_call(rtas_token("thaw-time-base"), 0, 1, NULL);
150}
151
152static void __devinit cell_take_timebase(void)
153{
154 while (!timebase)
155 barrier();
156 spin_lock(&timebase_lock);
157 set_tb(timebase >> 32, timebase & 0xffffffff);
158 timebase = 0;
159 spin_unlock(&timebase_lock);
160}
161
162static void __devinit smp_cell_kick_cpu(int nr)
163{
164 BUG_ON(nr < 0 || nr >= NR_CPUS);
165
166 if (!smp_startup_cpu(nr))
167 return;
168
169 /*
170 * The processor is currently spinning, waiting for the
171 * cpu_start field to become non-zero After we set cpu_start,
172 * the processor will continue on to secondary_start
173 */
174 paca[nr].cpu_start = 1;
175}
176
177static int smp_cell_cpu_bootable(unsigned int nr)
178{
179 /* Special case - we inhibit secondary thread startup
180 * during boot if the user requests it. Odd-numbered
181 * cpus are assumed to be secondary threads.
182 */
183 if (system_state < SYSTEM_RUNNING &&
184 cpu_has_feature(CPU_FTR_SMT) &&
185 !smt_enabled_at_boot && nr % 2 != 0)
186 return 0;
187
188 return 1;
189}
190static struct smp_ops_t bpa_iic_smp_ops = {
191 .message_pass = smp_iic_message_pass,
192 .probe = smp_iic_probe,
193 .kick_cpu = smp_cell_kick_cpu,
194 .setup_cpu = smp_iic_setup_cpu,
195 .cpu_bootable = smp_cell_cpu_bootable,
196};
197
198/* This is called very early */
199void __init smp_init_cell(void)
200{
201 int i;
202
203 DBG(" -> smp_init_cell()\n");
204
205 smp_ops = &bpa_iic_smp_ops;
206
207 /* Mark threads which are still spinning in hold loops. */
208 if (cpu_has_feature(CPU_FTR_SMT)) {
209 for_each_present_cpu(i) {
210 if (i % 2 == 0)
211 /*
212 * Even-numbered logical cpus correspond to
213 * primary threads.
214 */
215 cpu_set(i, of_spin_map);
216 }
217 } else {
218 of_spin_map = cpu_present_map;
219 }
220
221 cpu_clear(boot_cpuid, of_spin_map);
222
223 /* Non-lpar has additional take/give timebase */
224 if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) {
225 smp_ops->give_timebase = cell_give_timebase;
226 smp_ops->take_timebase = cell_take_timebase;
227 }
228
229 DBG(" <- smp_init_cell()\n");
230}
diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
new file mode 100644
index 000000000000..e74132188bdf
--- /dev/null
+++ b/arch/powerpc/platforms/cell/spider-pic.c
@@ -0,0 +1,191 @@
1/*
2 * External Interrupt Controller on Spider South Bridge
3 *
4 * (C) Copyright IBM Deutschland Entwicklung GmbH 2005
5 *
6 * Author: Arnd Bergmann <arndb@de.ibm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/interrupt.h>
24#include <linux/irq.h>
25
26#include <asm/pgtable.h>
27#include <asm/prom.h>
28#include <asm/io.h>
29
30#include "interrupt.h"
31
32/* register layout taken from Spider spec, table 7.4-4 */
33enum {
34 TIR_DEN = 0x004, /* Detection Enable Register */
35 TIR_MSK = 0x084, /* Mask Level Register */
36 TIR_EDC = 0x0c0, /* Edge Detection Clear Register */
37 TIR_PNDA = 0x100, /* Pending Register A */
38 TIR_PNDB = 0x104, /* Pending Register B */
39 TIR_CS = 0x144, /* Current Status Register */
40 TIR_LCSA = 0x150, /* Level Current Status Register A */
41 TIR_LCSB = 0x154, /* Level Current Status Register B */
42 TIR_LCSC = 0x158, /* Level Current Status Register C */
43 TIR_LCSD = 0x15c, /* Level Current Status Register D */
44 TIR_CFGA = 0x200, /* Setting Register A0 */
45 TIR_CFGB = 0x204, /* Setting Register B0 */
46 /* 0x208 ... 0x3ff Setting Register An/Bn */
47 TIR_PPNDA = 0x400, /* Packet Pending Register A */
48 TIR_PPNDB = 0x404, /* Packet Pending Register B */
49 TIR_PIERA = 0x408, /* Packet Output Error Register A */
50 TIR_PIERB = 0x40c, /* Packet Output Error Register B */
51 TIR_PIEN = 0x444, /* Packet Output Enable Register */
52 TIR_PIPND = 0x454, /* Packet Output Pending Register */
53 TIRDID = 0x484, /* Spider Device ID Register */
54 REISTIM = 0x500, /* Reissue Command Timeout Time Setting */
55 REISTIMEN = 0x504, /* Reissue Command Timeout Setting */
56 REISWAITEN = 0x508, /* Reissue Wait Control*/
57};
58
59static void __iomem *spider_pics[4];
60
61static void __iomem *spider_get_pic(int irq)
62{
63 int node = irq / IIC_NODE_STRIDE;
64 irq %= IIC_NODE_STRIDE;
65
66 if (irq >= IIC_EXT_OFFSET &&
67 irq < IIC_EXT_OFFSET + IIC_NUM_EXT &&
68 spider_pics)
69 return spider_pics[node];
70 return NULL;
71}
72
73static int spider_get_nr(unsigned int irq)
74{
75 return (irq % IIC_NODE_STRIDE) - IIC_EXT_OFFSET;
76}
77
78static void __iomem *spider_get_irq_config(int irq)
79{
80 void __iomem *pic;
81 pic = spider_get_pic(irq);
82 return pic + TIR_CFGA + 8 * spider_get_nr(irq);
83}
84
85static void spider_enable_irq(unsigned int irq)
86{
87 void __iomem *cfg = spider_get_irq_config(irq);
88 irq = spider_get_nr(irq);
89
90 out_be32(cfg, in_be32(cfg) | 0x3107000eu);
91 out_be32(cfg + 4, in_be32(cfg + 4) | 0x00020000u | irq);
92}
93
94static void spider_disable_irq(unsigned int irq)
95{
96 void __iomem *cfg = spider_get_irq_config(irq);
97 irq = spider_get_nr(irq);
98
99 out_be32(cfg, in_be32(cfg) & ~0x30000000u);
100}
101
102static unsigned int spider_startup_irq(unsigned int irq)
103{
104 spider_enable_irq(irq);
105 return 0;
106}
107
108static void spider_shutdown_irq(unsigned int irq)
109{
110 spider_disable_irq(irq);
111}
112
113static void spider_end_irq(unsigned int irq)
114{
115 spider_enable_irq(irq);
116}
117
118static void spider_ack_irq(unsigned int irq)
119{
120 spider_disable_irq(irq);
121 iic_local_enable();
122}
123
124static struct hw_interrupt_type spider_pic = {
125 .typename = " SPIDER ",
126 .startup = spider_startup_irq,
127 .shutdown = spider_shutdown_irq,
128 .enable = spider_enable_irq,
129 .disable = spider_disable_irq,
130 .ack = spider_ack_irq,
131 .end = spider_end_irq,
132};
133
134
135int spider_get_irq(unsigned long int_pending)
136{
137 void __iomem *regs = spider_get_pic(int_pending);
138 unsigned long cs;
139 int irq;
140
141 cs = in_be32(regs + TIR_CS);
142
143 irq = cs >> 24;
144 if (irq != 63)
145 return irq;
146
147 return -1;
148}
149
150void spider_init_IRQ(void)
151{
152 int node;
153 struct device_node *dn;
154 unsigned int *property;
155 long spiderpic;
156 int n;
157
158/* FIXME: detect multiple PICs as soon as the device tree has them */
159 for (node = 0; node < 1; node++) {
160 dn = of_find_node_by_path("/");
161 n = prom_n_addr_cells(dn);
162 property = (unsigned int *) get_property(dn,
163 "platform-spider-pic", NULL);
164
165 if (!property)
166 continue;
167 for (spiderpic = 0; n > 0; --n)
168 spiderpic = (spiderpic << 32) + *property++;
169 printk(KERN_DEBUG "SPIDER addr: %lx\n", spiderpic);
170 spider_pics[node] = __ioremap(spiderpic, 0x800, _PAGE_NO_CACHE);
171 for (n = 0; n < IIC_NUM_EXT; n++) {
172 int irq = n + IIC_EXT_OFFSET + node * IIC_NODE_STRIDE;
173 get_irq_desc(irq)->handler = &spider_pic;
174
175 /* do not mask any interrupts because of level */
176 out_be32(spider_pics[node] + TIR_MSK, 0x0);
177
178 /* disable edge detection clear */
179 /* out_be32(spider_pics[node] + TIR_EDC, 0x0); */
180
181 /* enable interrupt packets to be output */
182 out_be32(spider_pics[node] + TIR_PIEN,
183 in_be32(spider_pics[node] + TIR_PIEN) | 0x1);
184
185 /* Enable the interrupt detection enable bit. Do this last! */
186 out_be32(spider_pics[node] + TIR_DEN,
187 in_be32(spider_pics[node] +TIR_DEN) | 0x1);
188
189 }
190 }
191}
diff --git a/arch/powerpc/platforms/chrp/nvram.c b/arch/powerpc/platforms/chrp/nvram.c
index 4ac7125aa09c..150f67d6f90c 100644
--- a/arch/powerpc/platforms/chrp/nvram.c
+++ b/arch/powerpc/platforms/chrp/nvram.c
@@ -17,6 +17,7 @@
17#include <asm/uaccess.h> 17#include <asm/uaccess.h>
18#include <asm/prom.h> 18#include <asm/prom.h>
19#include <asm/machdep.h> 19#include <asm/machdep.h>
20#include <asm/rtas.h>
20#include "chrp.h" 21#include "chrp.h"
21 22
22static unsigned int nvram_size; 23static unsigned int nvram_size;
@@ -25,7 +26,8 @@ static DEFINE_SPINLOCK(nvram_lock);
25 26
26static unsigned char chrp_nvram_read(int addr) 27static unsigned char chrp_nvram_read(int addr)
27{ 28{
28 unsigned long done, flags; 29 unsigned int done;
30 unsigned long flags;
29 unsigned char ret; 31 unsigned char ret;
30 32
31 if (addr >= nvram_size) { 33 if (addr >= nvram_size) {
@@ -34,7 +36,8 @@ static unsigned char chrp_nvram_read(int addr)
34 return 0xff; 36 return 0xff;
35 } 37 }
36 spin_lock_irqsave(&nvram_lock, flags); 38 spin_lock_irqsave(&nvram_lock, flags);
37 if ((call_rtas("nvram-fetch", 3, 2, &done, addr, __pa(nvram_buf), 1) != 0) || 1 != done) 39 if ((rtas_call(rtas_token("nvram-fetch"), 3, 2, &done, addr,
40 __pa(nvram_buf), 1) != 0) || 1 != done)
38 ret = 0xff; 41 ret = 0xff;
39 else 42 else
40 ret = nvram_buf[0]; 43 ret = nvram_buf[0];
@@ -45,7 +48,8 @@ static unsigned char chrp_nvram_read(int addr)
45 48
46static void chrp_nvram_write(int addr, unsigned char val) 49static void chrp_nvram_write(int addr, unsigned char val)
47{ 50{
48 unsigned long done, flags; 51 unsigned int done;
52 unsigned long flags;
49 53
50 if (addr >= nvram_size) { 54 if (addr >= nvram_size) {
51 printk(KERN_DEBUG "%s: write addr %d > nvram_size %u\n", 55 printk(KERN_DEBUG "%s: write addr %d > nvram_size %u\n",
@@ -54,7 +58,8 @@ static void chrp_nvram_write(int addr, unsigned char val)
54 } 58 }
55 spin_lock_irqsave(&nvram_lock, flags); 59 spin_lock_irqsave(&nvram_lock, flags);
56 nvram_buf[0] = val; 60 nvram_buf[0] = val;
57 if ((call_rtas("nvram-store", 3, 2, &done, addr, __pa(nvram_buf), 1) != 0) || 1 != done) 61 if ((rtas_call(rtas_token("nvram-store"), 3, 2, &done, addr,
62 __pa(nvram_buf), 1) != 0) || 1 != done)
58 printk(KERN_DEBUG "rtas IO error storing 0x%02x at %d", val, addr); 63 printk(KERN_DEBUG "rtas IO error storing 0x%02x at %d", val, addr);
59 spin_unlock_irqrestore(&nvram_lock, flags); 64 spin_unlock_irqrestore(&nvram_lock, flags);
60} 65}
diff --git a/arch/powerpc/platforms/chrp/pegasos_eth.c b/arch/powerpc/platforms/chrp/pegasos_eth.c
index a9052305c35d..29c86781c493 100644
--- a/arch/powerpc/platforms/chrp/pegasos_eth.c
+++ b/arch/powerpc/platforms/chrp/pegasos_eth.c
@@ -14,6 +14,7 @@
14#include <linux/init.h> 14#include <linux/init.h>
15#include <linux/ioport.h> 15#include <linux/ioport.h>
16#include <linux/device.h> 16#include <linux/device.h>
17#include <linux/platform_device.h>
17#include <linux/mv643xx.h> 18#include <linux/mv643xx.h>
18#include <linux/pci.h> 19#include <linux/pci.h>
19 20
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c
index 31ee49c25014..bb2315997d45 100644
--- a/arch/powerpc/platforms/chrp/smp.c
+++ b/arch/powerpc/platforms/chrp/smp.c
@@ -35,43 +35,6 @@
35#include <asm/smp.h> 35#include <asm/smp.h>
36#include <asm/mpic.h> 36#include <asm/mpic.h>
37 37
38extern unsigned long smp_chrp_cpu_nr;
39
40static int __init smp_chrp_probe(void)
41{
42 struct device_node *cpus = NULL;
43 unsigned int *reg;
44 int reglen;
45 int ncpus = 0;
46 int cpuid;
47 unsigned int phys;
48
49 /* Count CPUs in the device-tree */
50 cpuid = 1; /* the boot cpu is logical cpu 0 */
51 while ((cpus = of_find_node_by_type(cpus, "cpu")) != NULL) {
52 phys = ncpus;
53 reg = (unsigned int *) get_property(cpus, "reg", &reglen);
54 if (reg && reglen >= sizeof(unsigned int))
55 /* hmmm, not having a reg property would be bad */
56 phys = *reg;
57 if (phys != boot_cpuid_phys) {
58 set_hard_smp_processor_id(cpuid, phys);
59 ++cpuid;
60 }
61 ++ncpus;
62 }
63
64 printk(KERN_INFO "CHRP SMP probe found %d cpus\n", ncpus);
65
66 /* Nothing more to do if less than 2 of them */
67 if (ncpus <= 1)
68 return 1;
69
70 mpic_request_ipis();
71
72 return ncpus;
73}
74
75static void __devinit smp_chrp_kick_cpu(int nr) 38static void __devinit smp_chrp_kick_cpu(int nr)
76{ 39{
77 *(unsigned long *)KERNELBASE = nr; 40 *(unsigned long *)KERNELBASE = nr;
@@ -114,7 +77,7 @@ void __devinit smp_chrp_take_timebase(void)
114/* CHRP with openpic */ 77/* CHRP with openpic */
115struct smp_ops_t chrp_smp_ops = { 78struct smp_ops_t chrp_smp_ops = {
116 .message_pass = smp_mpic_message_pass, 79 .message_pass = smp_mpic_message_pass,
117 .probe = smp_chrp_probe, 80 .probe = smp_mpic_probe,
118 .kick_cpu = smp_chrp_kick_cpu, 81 .kick_cpu = smp_chrp_kick_cpu,
119 .setup_cpu = smp_chrp_setup_cpu, 82 .setup_cpu = smp_chrp_setup_cpu,
120 .give_timebase = smp_chrp_give_timebase, 83 .give_timebase = smp_chrp_give_timebase,
diff --git a/arch/powerpc/platforms/iseries/call_hpt.h b/arch/powerpc/platforms/iseries/call_hpt.h
index 321f3bb7a8f5..a843b0f87b72 100644
--- a/arch/powerpc/platforms/iseries/call_hpt.h
+++ b/arch/powerpc/platforms/iseries/call_hpt.h
@@ -23,8 +23,8 @@
23 * drive the hypervisor from the OS. 23 * drive the hypervisor from the OS.
24 */ 24 */
25 25
26#include <asm/iSeries/HvCallSc.h> 26#include <asm/iseries/hv_call_sc.h>
27#include <asm/iSeries/HvTypes.h> 27#include <asm/iseries/hv_types.h>
28#include <asm/mmu.h> 28#include <asm/mmu.h>
29 29
30#define HvCallHptGetHptAddress HvCallHpt + 0 30#define HvCallHptGetHptAddress HvCallHpt + 0
diff --git a/arch/powerpc/platforms/iseries/call_pci.h b/arch/powerpc/platforms/iseries/call_pci.h
index a86e065b9577..59d4e0ad5cf3 100644
--- a/arch/powerpc/platforms/iseries/call_pci.h
+++ b/arch/powerpc/platforms/iseries/call_pci.h
@@ -25,8 +25,8 @@
25#ifndef _PLATFORMS_ISERIES_CALL_PCI_H 25#ifndef _PLATFORMS_ISERIES_CALL_PCI_H
26#define _PLATFORMS_ISERIES_CALL_PCI_H 26#define _PLATFORMS_ISERIES_CALL_PCI_H
27 27
28#include <asm/iSeries/HvCallSc.h> 28#include <asm/iseries/hv_call_sc.h>
29#include <asm/iSeries/HvTypes.h> 29#include <asm/iseries/hv_types.h>
30 30
31/* 31/*
32 * DSA == Direct Select Address 32 * DSA == Direct Select Address
diff --git a/arch/powerpc/platforms/iseries/call_sm.h b/arch/powerpc/platforms/iseries/call_sm.h
index ef223166cf22..c7e251619f48 100644
--- a/arch/powerpc/platforms/iseries/call_sm.h
+++ b/arch/powerpc/platforms/iseries/call_sm.h
@@ -23,8 +23,8 @@
23 * drive the hypervisor from the OS. 23 * drive the hypervisor from the OS.
24 */ 24 */
25 25
26#include <asm/iSeries/HvCallSc.h> 26#include <asm/iseries/hv_call_sc.h>
27#include <asm/iSeries/HvTypes.h> 27#include <asm/iseries/hv_types.h>
28 28
29#define HvCallSmGet64BitsOfAccessMap HvCallSm + 11 29#define HvCallSmGet64BitsOfAccessMap HvCallSm + 11
30 30
diff --git a/arch/powerpc/platforms/iseries/hvlog.c b/arch/powerpc/platforms/iseries/hvlog.c
index f61e2e9ac9ec..62ec73479687 100644
--- a/arch/powerpc/platforms/iseries/hvlog.c
+++ b/arch/powerpc/platforms/iseries/hvlog.c
@@ -9,9 +9,9 @@
9 9
10#include <asm/page.h> 10#include <asm/page.h>
11#include <asm/abs_addr.h> 11#include <asm/abs_addr.h>
12#include <asm/iSeries/HvCall.h> 12#include <asm/iseries/hv_call.h>
13#include <asm/iSeries/HvCallSc.h> 13#include <asm/iseries/hv_call_sc.h>
14#include <asm/iSeries/HvTypes.h> 14#include <asm/iseries/hv_types.h>
15 15
16 16
17void HvCall_writeLogBuffer(const void *buffer, u64 len) 17void HvCall_writeLogBuffer(const void *buffer, u64 len)
diff --git a/arch/powerpc/platforms/iseries/hvlpconfig.c b/arch/powerpc/platforms/iseries/hvlpconfig.c
index dc28621aea0d..663a1affb4bb 100644
--- a/arch/powerpc/platforms/iseries/hvlpconfig.c
+++ b/arch/powerpc/platforms/iseries/hvlpconfig.c
@@ -17,7 +17,7 @@
17 */ 17 */
18 18
19#include <linux/module.h> 19#include <linux/module.h>
20#include <asm/iSeries/HvLpConfig.h> 20#include <asm/iseries/hv_lp_config.h>
21 21
22HvLpIndex HvLpConfig_getLpIndex_outline(void) 22HvLpIndex HvLpConfig_getLpIndex_outline(void)
23{ 23{
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c
index 1db26d8be640..1a6845b5c5a4 100644
--- a/arch/powerpc/platforms/iseries/iommu.c
+++ b/arch/powerpc/platforms/iseries/iommu.c
@@ -32,7 +32,7 @@
32#include <asm/machdep.h> 32#include <asm/machdep.h>
33#include <asm/abs_addr.h> 33#include <asm/abs_addr.h>
34#include <asm/pci-bridge.h> 34#include <asm/pci-bridge.h>
35#include <asm/iSeries/HvCallXm.h> 35#include <asm/iseries/hv_call_xm.h>
36 36
37extern struct list_head iSeries_Global_Device_List; 37extern struct list_head iSeries_Global_Device_List;
38 38
diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c
index 937ac99b9d33..c1135912cc05 100644
--- a/arch/powerpc/platforms/iseries/irq.c
+++ b/arch/powerpc/platforms/iseries/irq.c
@@ -36,9 +36,9 @@
36#include <linux/spinlock.h> 36#include <linux/spinlock.h>
37 37
38#include <asm/ppcdebug.h> 38#include <asm/ppcdebug.h>
39#include <asm/iSeries/HvTypes.h> 39#include <asm/iseries/hv_types.h>
40#include <asm/iSeries/HvLpEvent.h> 40#include <asm/iseries/hv_lp_event.h>
41#include <asm/iSeries/HvCallXm.h> 41#include <asm/iseries/hv_call_xm.h>
42 42
43#include "irq.h" 43#include "irq.h"
44#include "call_pci.h" 44#include "call_pci.h"
diff --git a/arch/powerpc/platforms/iseries/ksyms.c b/arch/powerpc/platforms/iseries/ksyms.c
index f271b3539721..a2200842f4e5 100644
--- a/arch/powerpc/platforms/iseries/ksyms.c
+++ b/arch/powerpc/platforms/iseries/ksyms.c
@@ -9,7 +9,7 @@
9#include <linux/module.h> 9#include <linux/module.h>
10 10
11#include <asm/hw_irq.h> 11#include <asm/hw_irq.h>
12#include <asm/iSeries/HvCallSc.h> 12#include <asm/iseries/hv_call_sc.h>
13 13
14EXPORT_SYMBOL(HvCall0); 14EXPORT_SYMBOL(HvCall0);
15EXPORT_SYMBOL(HvCall1); 15EXPORT_SYMBOL(HvCall1);
diff --git a/arch/powerpc/platforms/iseries/lpardata.c b/arch/powerpc/platforms/iseries/lpardata.c
index ed2ffee6f731..bb8c91537f35 100644
--- a/arch/powerpc/platforms/iseries/lpardata.c
+++ b/arch/powerpc/platforms/iseries/lpardata.c
@@ -13,16 +13,16 @@
13#include <linux/bitops.h> 13#include <linux/bitops.h>
14#include <asm/processor.h> 14#include <asm/processor.h>
15#include <asm/ptrace.h> 15#include <asm/ptrace.h>
16#include <asm/naca.h>
17#include <asm/abs_addr.h> 16#include <asm/abs_addr.h>
18#include <asm/iSeries/ItLpNaca.h> 17#include <asm/iseries/it_lp_naca.h>
19#include <asm/lppaca.h> 18#include <asm/lppaca.h>
20#include <asm/iSeries/ItLpRegSave.h> 19#include <asm/iseries/it_lp_reg_save.h>
21#include <asm/paca.h> 20#include <asm/paca.h>
22#include <asm/iSeries/LparMap.h> 21#include <asm/iseries/lpar_map.h>
23#include <asm/iSeries/ItExtVpdPanel.h> 22#include <asm/iseries/it_exp_vpd_panel.h>
24#include <asm/iSeries/ItLpQueue.h> 23#include <asm/iseries/it_lp_queue.h>
25 24
25#include "naca.h"
26#include "vpd_areas.h" 26#include "vpd_areas.h"
27#include "spcomm_area.h" 27#include "spcomm_area.h"
28#include "ipl_parms.h" 28#include "ipl_parms.h"
diff --git a/arch/powerpc/platforms/iseries/lpevents.c b/arch/powerpc/platforms/iseries/lpevents.c
index 54c7753dbe05..e9fb98bf895f 100644
--- a/arch/powerpc/platforms/iseries/lpevents.c
+++ b/arch/powerpc/platforms/iseries/lpevents.c
@@ -17,10 +17,10 @@
17 17
18#include <asm/system.h> 18#include <asm/system.h>
19#include <asm/paca.h> 19#include <asm/paca.h>
20#include <asm/iSeries/ItLpQueue.h> 20#include <asm/iseries/it_lp_queue.h>
21#include <asm/iSeries/HvLpEvent.h> 21#include <asm/iseries/hv_lp_event.h>
22#include <asm/iSeries/HvCallEvent.h> 22#include <asm/iseries/hv_call_event.h>
23#include <asm/iSeries/ItLpNaca.h> 23#include <asm/iseries/it_lp_naca.h>
24 24
25/* 25/*
26 * The LpQueue is used to pass event data from the hypervisor to 26 * The LpQueue is used to pass event data from the hypervisor to
diff --git a/arch/powerpc/platforms/iseries/mf.c b/arch/powerpc/platforms/iseries/mf.c
index e5de31aa0015..49e7e4b85847 100644
--- a/arch/powerpc/platforms/iseries/mf.c
+++ b/arch/powerpc/platforms/iseries/mf.c
@@ -38,10 +38,10 @@
38#include <asm/uaccess.h> 38#include <asm/uaccess.h>
39#include <asm/paca.h> 39#include <asm/paca.h>
40#include <asm/abs_addr.h> 40#include <asm/abs_addr.h>
41#include <asm/iSeries/vio.h> 41#include <asm/iseries/vio.h>
42#include <asm/iSeries/mf.h> 42#include <asm/iseries/mf.h>
43#include <asm/iSeries/HvLpConfig.h> 43#include <asm/iseries/hv_lp_config.h>
44#include <asm/iSeries/ItLpQueue.h> 44#include <asm/iseries/it_lp_queue.h>
45 45
46#include "setup.h" 46#include "setup.h"
47 47
diff --git a/arch/powerpc/platforms/iseries/naca.h b/arch/powerpc/platforms/iseries/naca.h
new file mode 100644
index 000000000000..ab2372eb8d2e
--- /dev/null
+++ b/arch/powerpc/platforms/iseries/naca.h
@@ -0,0 +1,24 @@
1#ifndef _PLATFORMS_ISERIES_NACA_H
2#define _PLATFORMS_ISERIES_NACA_H
3
4/*
5 * c 2001 PPC 64 Team, IBM Corp
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <asm/types.h>
14
15struct naca_struct {
16 /* Kernel only data - undefined for user space */
17 void *xItVpdAreas; /* VPD Data 0x00 */
18 void *xRamDisk; /* iSeries ramdisk 0x08 */
19 u64 xRamDiskSize; /* In pages 0x10 */
20};
21
22extern struct naca_struct naca;
23
24#endif /* _PLATFORMS_ISERIES_NACA_H */
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c
index 959e59fd9c11..7d7d5884343f 100644
--- a/arch/powerpc/platforms/iseries/pci.c
+++ b/arch/powerpc/platforms/iseries/pci.c
@@ -36,8 +36,8 @@
36#include <asm/iommu.h> 36#include <asm/iommu.h>
37#include <asm/abs_addr.h> 37#include <asm/abs_addr.h>
38 38
39#include <asm/iSeries/HvCallXm.h> 39#include <asm/iseries/hv_call_xm.h>
40#include <asm/iSeries/mf.h> 40#include <asm/iseries/mf.h>
41 41
42#include <asm/ppc-pci.h> 42#include <asm/ppc-pci.h>
43 43
diff --git a/arch/powerpc/platforms/iseries/proc.c b/arch/powerpc/platforms/iseries/proc.c
index 6f1929cac66b..e68b6b5fa89f 100644
--- a/arch/powerpc/platforms/iseries/proc.c
+++ b/arch/powerpc/platforms/iseries/proc.c
@@ -24,8 +24,8 @@
24#include <asm/processor.h> 24#include <asm/processor.h>
25#include <asm/time.h> 25#include <asm/time.h>
26#include <asm/lppaca.h> 26#include <asm/lppaca.h>
27#include <asm/iSeries/ItLpQueue.h> 27#include <asm/iseries/it_lp_queue.h>
28#include <asm/iSeries/HvCallXm.h> 28#include <asm/iseries/hv_call_xm.h>
29 29
30#include "processor_vpd.h" 30#include "processor_vpd.h"
31#include "main_store.h" 31#include "main_store.h"
diff --git a/arch/powerpc/platforms/iseries/release_data.h b/arch/powerpc/platforms/iseries/release_data.h
index c68b9c3e5caf..66189fd2e32d 100644
--- a/arch/powerpc/platforms/iseries/release_data.h
+++ b/arch/powerpc/platforms/iseries/release_data.h
@@ -24,7 +24,7 @@
24 * address of the OS's NACA). 24 * address of the OS's NACA).
25 */ 25 */
26#include <asm/types.h> 26#include <asm/types.h>
27#include <asm/naca.h> 27#include "naca.h"
28 28
29/* 29/*
30 * When we IPL a secondary partition, we will check if if the 30 * When we IPL a secondary partition, we will check if if the
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c
index 1544c6f10a38..fda712b42168 100644
--- a/arch/powerpc/platforms/iseries/setup.c
+++ b/arch/powerpc/platforms/iseries/setup.c
@@ -27,6 +27,7 @@
27#include <linux/kdev_t.h> 27#include <linux/kdev_t.h>
28#include <linux/major.h> 28#include <linux/major.h>
29#include <linux/root_dev.h> 29#include <linux/root_dev.h>
30#include <linux/kernel.h>
30 31
31#include <asm/processor.h> 32#include <asm/processor.h>
32#include <asm/machdep.h> 33#include <asm/machdep.h>
@@ -40,19 +41,19 @@
40#include <asm/firmware.h> 41#include <asm/firmware.h>
41 42
42#include <asm/time.h> 43#include <asm/time.h>
43#include <asm/naca.h>
44#include <asm/paca.h> 44#include <asm/paca.h>
45#include <asm/cache.h> 45#include <asm/cache.h>
46#include <asm/sections.h> 46#include <asm/sections.h>
47#include <asm/abs_addr.h> 47#include <asm/abs_addr.h>
48#include <asm/iSeries/HvLpConfig.h> 48#include <asm/iseries/hv_lp_config.h>
49#include <asm/iSeries/HvCallEvent.h> 49#include <asm/iseries/hv_call_event.h>
50#include <asm/iSeries/HvCallXm.h> 50#include <asm/iseries/hv_call_xm.h>
51#include <asm/iSeries/ItLpQueue.h> 51#include <asm/iseries/it_lp_queue.h>
52#include <asm/iSeries/mf.h> 52#include <asm/iseries/mf.h>
53#include <asm/iSeries/HvLpEvent.h> 53#include <asm/iseries/hv_lp_event.h>
54#include <asm/iSeries/LparMap.h> 54#include <asm/iseries/lpar_map.h>
55 55
56#include "naca.h"
56#include "setup.h" 57#include "setup.h"
57#include "irq.h" 58#include "irq.h"
58#include "vpd_areas.h" 59#include "vpd_areas.h"
@@ -94,6 +95,8 @@ extern unsigned long iSeries_recal_titan;
94 95
95static int mf_initialized; 96static int mf_initialized;
96 97
98static unsigned long cmd_mem_limit;
99
97struct MemoryBlock { 100struct MemoryBlock {
98 unsigned long absStart; 101 unsigned long absStart;
99 unsigned long absEnd; 102 unsigned long absEnd;
@@ -341,23 +344,6 @@ static void __init iSeries_init_early(void)
341 */ 344 */
342 iommu_init_early_iSeries(); 345 iommu_init_early_iSeries();
343 346
344 iSeries_get_cmdline();
345
346 /* Save unparsed command line copy for /proc/cmdline */
347 strlcpy(saved_command_line, cmd_line, COMMAND_LINE_SIZE);
348
349 /* Parse early parameters, in particular mem=x */
350 parse_early_param();
351
352 if (memory_limit) {
353 if (memory_limit < systemcfg->physicalMemorySize)
354 systemcfg->physicalMemorySize = memory_limit;
355 else {
356 printk("Ignoring mem=%lu >= ram_top.\n", memory_limit);
357 memory_limit = 0;
358 }
359 }
360
361 /* Initialize machine-dependency vectors */ 347 /* Initialize machine-dependency vectors */
362#ifdef CONFIG_SMP 348#ifdef CONFIG_SMP
363 smp_init_iSeries(); 349 smp_init_iSeries();
@@ -971,6 +957,8 @@ void build_flat_dt(struct iseries_flat_dt *dt)
971 /* /chosen */ 957 /* /chosen */
972 dt_start_node(dt, "chosen"); 958 dt_start_node(dt, "chosen");
973 dt_prop_u32(dt, "linux,platform", PLATFORM_ISERIES_LPAR); 959 dt_prop_u32(dt, "linux,platform", PLATFORM_ISERIES_LPAR);
960 if (cmd_mem_limit)
961 dt_prop_u64(dt, "linux,memory-limit", cmd_mem_limit);
974 dt_end_node(dt); 962 dt_end_node(dt);
975 963
976 dt_cpus(dt); 964 dt_cpus(dt);
@@ -990,7 +978,27 @@ void * __init iSeries_early_setup(void)
990 */ 978 */
991 build_iSeries_Memory_Map(); 979 build_iSeries_Memory_Map();
992 980
981 iSeries_get_cmdline();
982
983 /* Save unparsed command line copy for /proc/cmdline */
984 strlcpy(saved_command_line, cmd_line, COMMAND_LINE_SIZE);
985
986 /* Parse early parameters, in particular mem=x */
987 parse_early_param();
988
993 build_flat_dt(&iseries_dt); 989 build_flat_dt(&iseries_dt);
994 990
995 return (void *) __pa(&iseries_dt); 991 return (void *) __pa(&iseries_dt);
996} 992}
993
994/*
995 * On iSeries we just parse the mem=X option from the command line.
996 * On pSeries it's a bit more complicated, see prom_init_mem()
997 */
998static int __init early_parsemem(char *p)
999{
1000 if (p)
1001 cmd_mem_limit = ALIGN(memparse(p, &p), PAGE_SIZE);
1002 return 0;
1003}
1004early_param("mem", early_parsemem);
diff --git a/arch/powerpc/platforms/iseries/smp.c b/arch/powerpc/platforms/iseries/smp.c
index f720916682f6..3336bad67724 100644
--- a/arch/powerpc/platforms/iseries/smp.c
+++ b/arch/powerpc/platforms/iseries/smp.c
@@ -38,7 +38,7 @@
38#include <asm/io.h> 38#include <asm/io.h>
39#include <asm/smp.h> 39#include <asm/smp.h>
40#include <asm/paca.h> 40#include <asm/paca.h>
41#include <asm/iSeries/HvCall.h> 41#include <asm/iseries/hv_call.h>
42#include <asm/time.h> 42#include <asm/time.h>
43#include <asm/ppcdebug.h> 43#include <asm/ppcdebug.h>
44#include <asm/machdep.h> 44#include <asm/machdep.h>
diff --git a/arch/powerpc/platforms/iseries/vio.c b/arch/powerpc/platforms/iseries/vio.c
index c0f7d2e9153f..c27a66876c2c 100644
--- a/arch/powerpc/platforms/iseries/vio.c
+++ b/arch/powerpc/platforms/iseries/vio.c
@@ -17,10 +17,10 @@
17#include <asm/tce.h> 17#include <asm/tce.h>
18#include <asm/abs_addr.h> 18#include <asm/abs_addr.h>
19#include <asm/page.h> 19#include <asm/page.h>
20#include <asm/iSeries/vio.h> 20#include <asm/iseries/vio.h>
21#include <asm/iSeries/HvTypes.h> 21#include <asm/iseries/hv_types.h>
22#include <asm/iSeries/HvLpConfig.h> 22#include <asm/iseries/hv_lp_config.h>
23#include <asm/iSeries/HvCallXm.h> 23#include <asm/iseries/hv_call_xm.h>
24 24
25struct device *iSeries_vio_dev = &vio_bus_device.dev; 25struct device *iSeries_vio_dev = &vio_bus_device.dev;
26EXPORT_SYMBOL(iSeries_vio_dev); 26EXPORT_SYMBOL(iSeries_vio_dev);
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c
index c0c767bd37f1..fe97bfbf7463 100644
--- a/arch/powerpc/platforms/iseries/viopath.c
+++ b/arch/powerpc/platforms/iseries/viopath.c
@@ -41,12 +41,12 @@
41 41
42#include <asm/system.h> 42#include <asm/system.h>
43#include <asm/uaccess.h> 43#include <asm/uaccess.h>
44#include <asm/iSeries/HvTypes.h> 44#include <asm/iseries/hv_types.h>
45#include <asm/iSeries/ItExtVpdPanel.h> 45#include <asm/iseries/it_exp_vpd_panel.h>
46#include <asm/iSeries/HvLpEvent.h> 46#include <asm/iseries/hv_lp_event.h>
47#include <asm/iSeries/HvLpConfig.h> 47#include <asm/iseries/hv_lp_config.h>
48#include <asm/iSeries/mf.h> 48#include <asm/iseries/mf.h>
49#include <asm/iSeries/vio.h> 49#include <asm/iseries/vio.h>
50 50
51/* Status of the path to each other partition in the system. 51/* Status of the path to each other partition in the system.
52 * This is overkill, since we will only ever establish connections 52 * This is overkill, since we will only ever establish connections
diff --git a/arch/powerpc/platforms/iseries/vpdinfo.c b/arch/powerpc/platforms/iseries/vpdinfo.c
index 9c318849dee7..23a6d1e5b429 100644
--- a/arch/powerpc/platforms/iseries/vpdinfo.c
+++ b/arch/powerpc/platforms/iseries/vpdinfo.c
@@ -32,7 +32,7 @@
32#include <asm/resource.h> 32#include <asm/resource.h>
33#include <asm/abs_addr.h> 33#include <asm/abs_addr.h>
34#include <asm/pci-bridge.h> 34#include <asm/pci-bridge.h>
35#include <asm/iSeries/HvTypes.h> 35#include <asm/iseries/hv_types.h>
36 36
37#include "pci.h" 37#include "pci.h"
38#include "call_pci.h" 38#include "call_pci.h"
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index 0037a8c8c81f..83a49e80ac29 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -576,7 +576,7 @@ void __init pmac_pic_init(void)
576#endif /* CONFIG_PPC32 */ 576#endif /* CONFIG_PPC32 */
577} 577}
578 578
579#ifdef CONFIG_PM 579#if defined(CONFIG_PM) && defined(CONFIG_PPC32)
580/* 580/*
581 * These procedures are used in implementing sleep on the powerbooks. 581 * These procedures are used in implementing sleep on the powerbooks.
582 * sleep_save_intrs() saves the states of all interrupt enables 582 * sleep_save_intrs() saves the states of all interrupt enables
@@ -643,7 +643,7 @@ static int pmacpic_resume(struct sys_device *sysdev)
643 return 0; 643 return 0;
644} 644}
645 645
646#endif /* CONFIG_PM */ 646#endif /* CONFIG_PM && CONFIG_PPC32 */
647 647
648static struct sysdev_class pmacpic_sysclass = { 648static struct sysdev_class pmacpic_sysclass = {
649 set_kset_name("pmac_pic"), 649 set_kset_name("pmac_pic"),
@@ -655,10 +655,10 @@ static struct sys_device device_pmacpic = {
655}; 655};
656 656
657static struct sysdev_driver driver_pmacpic = { 657static struct sysdev_driver driver_pmacpic = {
658#ifdef CONFIG_PM 658#if defined(CONFIG_PM) && defined(CONFIG_PPC32)
659 .suspend = &pmacpic_suspend, 659 .suspend = &pmacpic_suspend,
660 .resume = &pmacpic_resume, 660 .resume = &pmacpic_resume,
661#endif /* CONFIG_PM */ 661#endif /* CONFIG_PM && CONFIG_PPC32 */
662}; 662};
663 663
664static int __init init_pmacpic_sysfs(void) 664static int __init init_pmacpic_sysfs(void)
diff --git a/arch/powerpc/platforms/powermac/setup.c b/arch/powerpc/platforms/powermac/setup.c
index 6f62af597291..80b58c1ec412 100644
--- a/arch/powerpc/platforms/powermac/setup.c
+++ b/arch/powerpc/platforms/powermac/setup.c
@@ -75,6 +75,7 @@
75#include <asm/smu.h> 75#include <asm/smu.h>
76#include <asm/pmc.h> 76#include <asm/pmc.h>
77#include <asm/mpic.h> 77#include <asm/mpic.h>
78#include <asm/lmb.h>
78 79
79#include "pmac.h" 80#include "pmac.h"
80 81
@@ -350,7 +351,7 @@ void __init pmac_setup_arch(void)
350 find_via_pmu(); 351 find_via_pmu();
351 smu_init(); 352 smu_init();
352 353
353#ifdef CONFIG_NVRAM 354#if defined(CONFIG_NVRAM) || defined(CONFIG_PPC64)
354 pmac_nvram_init(); 355 pmac_nvram_init();
355#endif 356#endif
356 357
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 2d57f588151d..e3fc3407bb1f 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -21,15 +21,6 @@ config EEH
21 depends on PPC_PSERIES 21 depends on PPC_PSERIES
22 default y if !EMBEDDED 22 default y if !EMBEDDED
23 23
24config RTAS_PROC
25 bool "Proc interface to RTAS"
26 depends on PPC_RTAS
27 default y
28
29config RTAS_FLASH
30 tristate "Firmware flash interface"
31 depends on PPC64 && RTAS_PROC
32
33config SCANLOG 24config SCANLOG
34 tristate "Scanlog dump interface" 25 tristate "Scanlog dump interface"
35 depends on RTAS_PROC && PPC_PSERIES 26 depends on RTAS_PROC && PPC_PSERIES
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile
index 5ef494e3a70f..b9938fece781 100644
--- a/arch/powerpc/platforms/pseries/Makefile
+++ b/arch/powerpc/platforms/pseries/Makefile
@@ -1,5 +1,5 @@
1obj-y := pci.o lpar.o hvCall.o nvram.o reconfig.o \ 1obj-y := pci.o lpar.o hvCall.o nvram.o reconfig.o \
2 setup.o iommu.o rtas-fw.o ras.o 2 setup.o iommu.o ras.o rtasd.o
3obj-$(CONFIG_SMP) += smp.o 3obj-$(CONFIG_SMP) += smp.o
4obj-$(CONFIG_IBMVIO) += vio.o 4obj-$(CONFIG_IBMVIO) += vio.o
5obj-$(CONFIG_XICS) += xics.o 5obj-$(CONFIG_XICS) += xics.o
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index 9e90d41131d8..513e27231493 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -42,13 +42,14 @@
42#include <asm/pci-bridge.h> 42#include <asm/pci-bridge.h>
43#include <asm/machdep.h> 43#include <asm/machdep.h>
44#include <asm/abs_addr.h> 44#include <asm/abs_addr.h>
45#include <asm/plpar_wrappers.h>
46#include <asm/pSeries_reconfig.h> 45#include <asm/pSeries_reconfig.h>
47#include <asm/systemcfg.h> 46#include <asm/systemcfg.h>
48#include <asm/firmware.h> 47#include <asm/firmware.h>
49#include <asm/tce.h> 48#include <asm/tce.h>
50#include <asm/ppc-pci.h> 49#include <asm/ppc-pci.h>
51 50
51#include "plpar_wrappers.h"
52
52#define DBG(fmt...) 53#define DBG(fmt...)
53 54
54extern int is_python(struct device_node *); 55extern int is_python(struct device_node *);
@@ -498,7 +499,7 @@ static int iommu_reconfig_notifier(struct notifier_block *nb, unsigned long acti
498 499
499 switch (action) { 500 switch (action) {
500 case PSERIES_RECONFIG_REMOVE: 501 case PSERIES_RECONFIG_REMOVE:
501 if (pci->iommu_table && 502 if (pci && pci->iommu_table &&
502 get_property(np, "ibm,dma-window", NULL)) 503 get_property(np, "ibm,dma-window", NULL))
503 iommu_free_table(np); 504 iommu_free_table(np);
504 break; 505 break;
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 268d8362dde7..e384a5a91796 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -38,7 +38,8 @@
38#include <asm/prom.h> 38#include <asm/prom.h>
39#include <asm/abs_addr.h> 39#include <asm/abs_addr.h>
40#include <asm/cputable.h> 40#include <asm/cputable.h>
41#include <asm/plpar_wrappers.h> 41
42#include "plpar_wrappers.h"
42 43
43#ifdef DEBUG 44#ifdef DEBUG
44#define DBG(fmt...) udbg_printf(fmt) 45#define DBG(fmt...) udbg_printf(fmt)
@@ -260,22 +261,18 @@ out:
260void vpa_init(int cpu) 261void vpa_init(int cpu)
261{ 262{
262 int hwcpu = get_hard_smp_processor_id(cpu); 263 int hwcpu = get_hard_smp_processor_id(cpu);
263 unsigned long vpa = (unsigned long)&(paca[cpu].lppaca); 264 unsigned long vpa = __pa(&paca[cpu].lppaca);
264 long ret; 265 long ret;
265 unsigned long flags;
266
267 /* Register the Virtual Processor Area (VPA) */
268 flags = 1UL << (63 - 18);
269 266
270 if (cpu_has_feature(CPU_FTR_ALTIVEC)) 267 if (cpu_has_feature(CPU_FTR_ALTIVEC))
271 paca[cpu].lppaca.vmxregs_in_use = 1; 268 paca[cpu].lppaca.vmxregs_in_use = 1;
272 269
273 ret = register_vpa(flags, hwcpu, __pa(vpa)); 270 ret = register_vpa(hwcpu, vpa);
274 271
275 if (ret) 272 if (ret)
276 printk(KERN_ERR "WARNING: vpa_init: VPA registration for " 273 printk(KERN_ERR "WARNING: vpa_init: VPA registration for "
277 "cpu %d (hw %d) of area %lx returns %ld\n", 274 "cpu %d (hw %d) of area %lx returns %ld\n",
278 cpu, hwcpu, __pa(vpa), ret); 275 cpu, hwcpu, vpa, ret);
279} 276}
280 277
281long pSeries_lpar_hpte_insert(unsigned long hpte_group, 278long pSeries_lpar_hpte_insert(unsigned long hpte_group,
diff --git a/arch/powerpc/platforms/pseries/plpar_wrappers.h b/arch/powerpc/platforms/pseries/plpar_wrappers.h
new file mode 100644
index 000000000000..382f8c5b0e7c
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h
@@ -0,0 +1,120 @@
1#ifndef _PSERIES_PLPAR_WRAPPERS_H
2#define _PSERIES_PLPAR_WRAPPERS_H
3
4#include <asm/hvcall.h>
5
6static inline long poll_pending(void)
7{
8 unsigned long dummy;
9 return plpar_hcall(H_POLL_PENDING, 0, 0, 0, 0, &dummy, &dummy, &dummy);
10}
11
12static inline long prod_processor(void)
13{
14 plpar_hcall_norets(H_PROD);
15 return 0;
16}
17
18static inline long cede_processor(void)
19{
20 plpar_hcall_norets(H_CEDE);
21 return 0;
22}
23
24static inline long vpa_call(unsigned long flags, unsigned long cpu,
25 unsigned long vpa)
26{
27 /* flags are in bits 16-18 (counting from most significant bit) */
28 flags = flags << (63 - 18);
29
30 return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa);
31}
32
33static inline long unregister_vpa(unsigned long cpu, unsigned long vpa)
34{
35 return vpa_call(0x5, cpu, vpa);
36}
37
38static inline long register_vpa(unsigned long cpu, unsigned long vpa)
39{
40 return vpa_call(0x1, cpu, vpa);
41}
42
43extern void vpa_init(int cpu);
44
45static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex,
46 unsigned long avpn, unsigned long *old_pteh_ret,
47 unsigned long *old_ptel_ret)
48{
49 unsigned long dummy;
50 return plpar_hcall(H_REMOVE, flags, ptex, avpn, 0, old_pteh_ret,
51 old_ptel_ret, &dummy);
52}
53
54static inline long plpar_pte_read(unsigned long flags, unsigned long ptex,
55 unsigned long *old_pteh_ret, unsigned long *old_ptel_ret)
56{
57 unsigned long dummy;
58 return plpar_hcall(H_READ, flags, ptex, 0, 0, old_pteh_ret,
59 old_ptel_ret, &dummy);
60}
61
62static inline long plpar_pte_protect(unsigned long flags, unsigned long ptex,
63 unsigned long avpn)
64{
65 return plpar_hcall_norets(H_PROTECT, flags, ptex, avpn);
66}
67
68static inline long plpar_tce_get(unsigned long liobn, unsigned long ioba,
69 unsigned long *tce_ret)
70{
71 unsigned long dummy;
72 return plpar_hcall(H_GET_TCE, liobn, ioba, 0, 0, tce_ret, &dummy,
73 &dummy);
74}
75
76static inline long plpar_tce_put(unsigned long liobn, unsigned long ioba,
77 unsigned long tceval)
78{
79 return plpar_hcall_norets(H_PUT_TCE, liobn, ioba, tceval);
80}
81
82static inline long plpar_tce_put_indirect(unsigned long liobn,
83 unsigned long ioba, unsigned long page, unsigned long count)
84{
85 return plpar_hcall_norets(H_PUT_TCE_INDIRECT, liobn, ioba, page, count);
86}
87
88static inline long plpar_tce_stuff(unsigned long liobn, unsigned long ioba,
89 unsigned long tceval, unsigned long count)
90{
91 return plpar_hcall_norets(H_STUFF_TCE, liobn, ioba, tceval, count);
92}
93
94static inline long plpar_get_term_char(unsigned long termno,
95 unsigned long *len_ret, char *buf_ret)
96{
97 unsigned long *lbuf = (unsigned long *)buf_ret; /* TODO: alignment? */
98 return plpar_hcall(H_GET_TERM_CHAR, termno, 0, 0, 0, len_ret,
99 lbuf + 0, lbuf + 1);
100}
101
102static inline long plpar_put_term_char(unsigned long termno, unsigned long len,
103 const char *buffer)
104{
105 unsigned long *lbuf = (unsigned long *)buffer; /* TODO: alignment? */
106 return plpar_hcall_norets(H_PUT_TERM_CHAR, termno, len, lbuf[0],
107 lbuf[1]);
108}
109
110static inline long plpar_set_xdabr(unsigned long address, unsigned long flags)
111{
112 return plpar_hcall_norets(H_SET_XDABR, address, flags);
113}
114
115static inline long plpar_set_dabr(unsigned long val)
116{
117 return plpar_hcall_norets(H_SET_DABR, val);
118}
119
120#endif /* _PSERIES_PLPAR_WRAPPERS_H */
diff --git a/arch/powerpc/platforms/pseries/rtas-fw.c b/arch/powerpc/platforms/pseries/rtas-fw.c
deleted file mode 100644
index 15d81d758ca0..000000000000
--- a/arch/powerpc/platforms/pseries/rtas-fw.c
+++ /dev/null
@@ -1,138 +0,0 @@
1/*
2 *
3 * Procedures for firmware flash updates on pSeries systems.
4 *
5 * Peter Bergner, IBM March 2001.
6 * Copyright (C) 2001 IBM.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version.
12 */
13
14#include <stdarg.h>
15#include <linux/kernel.h>
16#include <linux/types.h>
17#include <linux/spinlock.h>
18#include <linux/module.h>
19#include <linux/init.h>
20
21#include <asm/prom.h>
22#include <asm/rtas.h>
23#include <asm/semaphore.h>
24#include <asm/machdep.h>
25#include <asm/page.h>
26#include <asm/param.h>
27#include <asm/system.h>
28#include <asm/abs_addr.h>
29#include <asm/udbg.h>
30#include <asm/delay.h>
31#include <asm/uaccess.h>
32#include <asm/systemcfg.h>
33
34#include "rtas-fw.h"
35
36struct flash_block_list_header rtas_firmware_flash_list = {0, NULL};
37
38#define FLASH_BLOCK_LIST_VERSION (1UL)
39
40static void rtas_flash_firmware(void)
41{
42 unsigned long image_size;
43 struct flash_block_list *f, *next, *flist;
44 unsigned long rtas_block_list;
45 int i, status, update_token;
46
47 update_token = rtas_token("ibm,update-flash-64-and-reboot");
48 if (update_token == RTAS_UNKNOWN_SERVICE) {
49 printk(KERN_ALERT "FLASH: ibm,update-flash-64-and-reboot is not available -- not a service partition?\n");
50 printk(KERN_ALERT "FLASH: firmware will not be flashed\n");
51 return;
52 }
53
54 /* NOTE: the "first" block list is a global var with no data
55 * blocks in the kernel data segment. We do this because
56 * we want to ensure this block_list addr is under 4GB.
57 */
58 rtas_firmware_flash_list.num_blocks = 0;
59 flist = (struct flash_block_list *)&rtas_firmware_flash_list;
60 rtas_block_list = virt_to_abs(flist);
61 if (rtas_block_list >= 4UL*1024*1024*1024) {
62 printk(KERN_ALERT "FLASH: kernel bug...flash list header addr above 4GB\n");
63 return;
64 }
65
66 printk(KERN_ALERT "FLASH: preparing saved firmware image for flash\n");
67 /* Update the block_list in place. */
68 image_size = 0;
69 for (f = flist; f; f = next) {
70 /* Translate data addrs to absolute */
71 for (i = 0; i < f->num_blocks; i++) {
72 f->blocks[i].data = (char *)virt_to_abs(f->blocks[i].data);
73 image_size += f->blocks[i].length;
74 }
75 next = f->next;
76 /* Don't translate NULL pointer for last entry */
77 if (f->next)
78 f->next = (struct flash_block_list *)virt_to_abs(f->next);
79 else
80 f->next = NULL;
81 /* make num_blocks into the version/length field */
82 f->num_blocks = (FLASH_BLOCK_LIST_VERSION << 56) | ((f->num_blocks+1)*16);
83 }
84
85 printk(KERN_ALERT "FLASH: flash image is %ld bytes\n", image_size);
86 printk(KERN_ALERT "FLASH: performing flash and reboot\n");
87 rtas_progress("Flashing \n", 0x0);
88 rtas_progress("Please Wait... ", 0x0);
89 printk(KERN_ALERT "FLASH: this will take several minutes. Do not power off!\n");
90 status = rtas_call(update_token, 1, 1, NULL, rtas_block_list);
91 switch (status) { /* should only get "bad" status */
92 case 0:
93 printk(KERN_ALERT "FLASH: success\n");
94 break;
95 case -1:
96 printk(KERN_ALERT "FLASH: hardware error. Firmware may not be not flashed\n");
97 break;
98 case -3:
99 printk(KERN_ALERT "FLASH: image is corrupt or not correct for this platform. Firmware not flashed\n");
100 break;
101 case -4:
102 printk(KERN_ALERT "FLASH: flash failed when partially complete. System may not reboot\n");
103 break;
104 default:
105 printk(KERN_ALERT "FLASH: unknown flash return code %d\n", status);
106 break;
107 }
108}
109
110void rtas_flash_bypass_warning(void)
111{
112 printk(KERN_ALERT "FLASH: firmware flash requires a reboot\n");
113 printk(KERN_ALERT "FLASH: the firmware image will NOT be flashed\n");
114}
115
116
117void rtas_fw_restart(char *cmd)
118{
119 if (rtas_firmware_flash_list.next)
120 rtas_flash_firmware();
121 rtas_restart(cmd);
122}
123
124void rtas_fw_power_off(void)
125{
126 if (rtas_firmware_flash_list.next)
127 rtas_flash_bypass_warning();
128 rtas_power_off();
129}
130
131void rtas_fw_halt(void)
132{
133 if (rtas_firmware_flash_list.next)
134 rtas_flash_bypass_warning();
135 rtas_halt();
136}
137
138EXPORT_SYMBOL(rtas_firmware_flash_list);
diff --git a/arch/powerpc/platforms/pseries/rtas-fw.h b/arch/powerpc/platforms/pseries/rtas-fw.h
deleted file mode 100644
index e70fa69974a3..000000000000
--- a/arch/powerpc/platforms/pseries/rtas-fw.h
+++ /dev/null
@@ -1,3 +0,0 @@
1void rtas_fw_restart(char *cmd);
2void rtas_fw_power_off(void);
3void rtas_fw_halt(void);
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c
new file mode 100644
index 000000000000..e26b0420b6dd
--- /dev/null
+++ b/arch/powerpc/platforms/pseries/rtasd.c
@@ -0,0 +1,527 @@
1/*
2 * Copyright (C) 2001 Anton Blanchard <anton@au.ibm.com>, IBM
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 *
9 * Communication to userspace based on kernel/printk.c
10 */
11
12#include <linux/types.h>
13#include <linux/errno.h>
14#include <linux/sched.h>
15#include <linux/kernel.h>
16#include <linux/poll.h>
17#include <linux/proc_fs.h>
18#include <linux/init.h>
19#include <linux/vmalloc.h>
20#include <linux/spinlock.h>
21#include <linux/cpu.h>
22#include <linux/delay.h>
23
24#include <asm/uaccess.h>
25#include <asm/io.h>
26#include <asm/rtas.h>
27#include <asm/prom.h>
28#include <asm/nvram.h>
29#include <asm/atomic.h>
30#include <asm/systemcfg.h>
31
32#if 0
33#define DEBUG(A...) printk(KERN_ERR A)
34#else
35#define DEBUG(A...)
36#endif
37
38static DEFINE_SPINLOCK(rtasd_log_lock);
39
40DECLARE_WAIT_QUEUE_HEAD(rtas_log_wait);
41
42static char *rtas_log_buf;
43static unsigned long rtas_log_start;
44static unsigned long rtas_log_size;
45
46static int surveillance_timeout = -1;
47static unsigned int rtas_event_scan_rate;
48static unsigned int rtas_error_log_max;
49static unsigned int rtas_error_log_buffer_max;
50
51static int full_rtas_msgs = 0;
52
53extern int no_logging;
54
55volatile int error_log_cnt = 0;
56
57/*
58 * Since we use 32 bit RTAS, the physical address of this must be below
59 * 4G or else bad things happen. Allocate this in the kernel data and
60 * make it big enough.
61 */
62static unsigned char logdata[RTAS_ERROR_LOG_MAX];
63
64static int get_eventscan_parms(void);
65
66static char *rtas_type[] = {
67 "Unknown", "Retry", "TCE Error", "Internal Device Failure",
68 "Timeout", "Data Parity", "Address Parity", "Cache Parity",
69 "Address Invalid", "ECC Uncorrected", "ECC Corrupted",
70};
71
72static char *rtas_event_type(int type)
73{
74 if ((type > 0) && (type < 11))
75 return rtas_type[type];
76
77 switch (type) {
78 case RTAS_TYPE_EPOW:
79 return "EPOW";
80 case RTAS_TYPE_PLATFORM:
81 return "Platform Error";
82 case RTAS_TYPE_IO:
83 return "I/O Event";
84 case RTAS_TYPE_INFO:
85 return "Platform Information Event";
86 case RTAS_TYPE_DEALLOC:
87 return "Resource Deallocation Event";
88 case RTAS_TYPE_DUMP:
89 return "Dump Notification Event";
90 }
91
92 return rtas_type[0];
93}
94
95/* To see this info, grep RTAS /var/log/messages and each entry
96 * will be collected together with obvious begin/end.
97 * There will be a unique identifier on the begin and end lines.
98 * This will persist across reboots.
99 *
100 * format of error logs returned from RTAS:
101 * bytes (size) : contents
102 * --------------------------------------------------------
103 * 0-7 (8) : rtas_error_log
104 * 8-47 (40) : extended info
105 * 48-51 (4) : vendor id
106 * 52-1023 (vendor specific) : location code and debug data
107 */
108static void printk_log_rtas(char *buf, int len)
109{
110
111 int i,j,n = 0;
112 int perline = 16;
113 char buffer[64];
114 char * str = "RTAS event";
115
116 if (full_rtas_msgs) {
117 printk(RTAS_DEBUG "%d -------- %s begin --------\n",
118 error_log_cnt, str);
119
120 /*
121 * Print perline bytes on each line, each line will start
122 * with RTAS and a changing number, so syslogd will
123 * print lines that are otherwise the same. Separate every
124 * 4 bytes with a space.
125 */
126 for (i = 0; i < len; i++) {
127 j = i % perline;
128 if (j == 0) {
129 memset(buffer, 0, sizeof(buffer));
130 n = sprintf(buffer, "RTAS %d:", i/perline);
131 }
132
133 if ((i % 4) == 0)
134 n += sprintf(buffer+n, " ");
135
136 n += sprintf(buffer+n, "%02x", (unsigned char)buf[i]);
137
138 if (j == (perline-1))
139 printk(KERN_DEBUG "%s\n", buffer);
140 }
141 if ((i % perline) != 0)
142 printk(KERN_DEBUG "%s\n", buffer);
143
144 printk(RTAS_DEBUG "%d -------- %s end ----------\n",
145 error_log_cnt, str);
146 } else {
147 struct rtas_error_log *errlog = (struct rtas_error_log *)buf;
148
149 printk(RTAS_DEBUG "event: %d, Type: %s, Severity: %d\n",
150 error_log_cnt, rtas_event_type(errlog->type),
151 errlog->severity);
152 }
153}
154
155static int log_rtas_len(char * buf)
156{
157 int len;
158 struct rtas_error_log *err;
159
160 /* rtas fixed header */
161 len = 8;
162 err = (struct rtas_error_log *)buf;
163 if (err->extended_log_length) {
164
165 /* extended header */
166 len += err->extended_log_length;
167 }
168
169 if (rtas_error_log_max == 0) {
170 get_eventscan_parms();
171 }
172 if (len > rtas_error_log_max)
173 len = rtas_error_log_max;
174
175 return len;
176}
177
178/*
179 * First write to nvram, if fatal error, that is the only
180 * place we log the info. The error will be picked up
181 * on the next reboot by rtasd. If not fatal, run the
182 * method for the type of error. Currently, only RTAS
183 * errors have methods implemented, but in the future
184 * there might be a need to store data in nvram before a
185 * call to panic().
186 *
187 * XXX We write to nvram periodically, to indicate error has
188 * been written and sync'd, but there is a possibility
189 * that if we don't shutdown correctly, a duplicate error
190 * record will be created on next reboot.
191 */
192void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
193{
194 unsigned long offset;
195 unsigned long s;
196 int len = 0;
197
198 DEBUG("logging event\n");
199 if (buf == NULL)
200 return;
201
202 spin_lock_irqsave(&rtasd_log_lock, s);
203
204 /* get length and increase count */
205 switch (err_type & ERR_TYPE_MASK) {
206 case ERR_TYPE_RTAS_LOG:
207 len = log_rtas_len(buf);
208 if (!(err_type & ERR_FLAG_BOOT))
209 error_log_cnt++;
210 break;
211 case ERR_TYPE_KERNEL_PANIC:
212 default:
213 spin_unlock_irqrestore(&rtasd_log_lock, s);
214 return;
215 }
216
217 /* Write error to NVRAM */
218 if (!no_logging && !(err_type & ERR_FLAG_BOOT))
219 nvram_write_error_log(buf, len, err_type);
220
221 /*
222 * rtas errors can occur during boot, and we do want to capture
223 * those somewhere, even if nvram isn't ready (why not?), and even
224 * if rtasd isn't ready. Put them into the boot log, at least.
225 */
226 if ((err_type & ERR_TYPE_MASK) == ERR_TYPE_RTAS_LOG)
227 printk_log_rtas(buf, len);
228
229 /* Check to see if we need to or have stopped logging */
230 if (fatal || no_logging) {
231 no_logging = 1;
232 spin_unlock_irqrestore(&rtasd_log_lock, s);
233 return;
234 }
235
236 /* call type specific method for error */
237 switch (err_type & ERR_TYPE_MASK) {
238 case ERR_TYPE_RTAS_LOG:
239 offset = rtas_error_log_buffer_max *
240 ((rtas_log_start+rtas_log_size) & LOG_NUMBER_MASK);
241
242 /* First copy over sequence number */
243 memcpy(&rtas_log_buf[offset], (void *) &error_log_cnt, sizeof(int));
244
245 /* Second copy over error log data */
246 offset += sizeof(int);
247 memcpy(&rtas_log_buf[offset], buf, len);
248
249 if (rtas_log_size < LOG_NUMBER)
250 rtas_log_size += 1;
251 else
252 rtas_log_start += 1;
253
254 spin_unlock_irqrestore(&rtasd_log_lock, s);
255 wake_up_interruptible(&rtas_log_wait);
256 break;
257 case ERR_TYPE_KERNEL_PANIC:
258 default:
259 spin_unlock_irqrestore(&rtasd_log_lock, s);
260 return;
261 }
262
263}
264
265
266static int rtas_log_open(struct inode * inode, struct file * file)
267{
268 return 0;
269}
270
271static int rtas_log_release(struct inode * inode, struct file * file)
272{
273 return 0;
274}
275
276/* This will check if all events are logged, if they are then, we
277 * know that we can safely clear the events in NVRAM.
278 * Next we'll sit and wait for something else to log.
279 */
280static ssize_t rtas_log_read(struct file * file, char __user * buf,
281 size_t count, loff_t *ppos)
282{
283 int error;
284 char *tmp;
285 unsigned long s;
286 unsigned long offset;
287
288 if (!buf || count < rtas_error_log_buffer_max)
289 return -EINVAL;
290
291 count = rtas_error_log_buffer_max;
292
293 if (!access_ok(VERIFY_WRITE, buf, count))
294 return -EFAULT;
295
296 tmp = kmalloc(count, GFP_KERNEL);
297 if (!tmp)
298 return -ENOMEM;
299
300
301 spin_lock_irqsave(&rtasd_log_lock, s);
302 /* if it's 0, then we know we got the last one (the one in NVRAM) */
303 if (rtas_log_size == 0 && !no_logging)
304 nvram_clear_error_log();
305 spin_unlock_irqrestore(&rtasd_log_lock, s);
306
307
308 error = wait_event_interruptible(rtas_log_wait, rtas_log_size);
309 if (error)
310 goto out;
311
312 spin_lock_irqsave(&rtasd_log_lock, s);
313 offset = rtas_error_log_buffer_max * (rtas_log_start & LOG_NUMBER_MASK);
314 memcpy(tmp, &rtas_log_buf[offset], count);
315
316 rtas_log_start += 1;
317 rtas_log_size -= 1;
318 spin_unlock_irqrestore(&rtasd_log_lock, s);
319
320 error = copy_to_user(buf, tmp, count) ? -EFAULT : count;
321out:
322 kfree(tmp);
323 return error;
324}
325
326static unsigned int rtas_log_poll(struct file *file, poll_table * wait)
327{
328 poll_wait(file, &rtas_log_wait, wait);
329 if (rtas_log_size)
330 return POLLIN | POLLRDNORM;
331 return 0;
332}
333
334struct file_operations proc_rtas_log_operations = {
335 .read = rtas_log_read,
336 .poll = rtas_log_poll,
337 .open = rtas_log_open,
338 .release = rtas_log_release,
339};
340
341static int enable_surveillance(int timeout)
342{
343 int error;
344
345 error = rtas_set_indicator(SURVEILLANCE_TOKEN, 0, timeout);
346
347 if (error == 0)
348 return 0;
349
350 if (error == -EINVAL) {
351 printk(KERN_INFO "rtasd: surveillance not supported\n");
352 return 0;
353 }
354
355 printk(KERN_ERR "rtasd: could not update surveillance\n");
356 return -1;
357}
358
359static int get_eventscan_parms(void)
360{
361 struct device_node *node;
362 int *ip;
363
364 node = of_find_node_by_path("/rtas");
365
366 ip = (int *)get_property(node, "rtas-event-scan-rate", NULL);
367 if (ip == NULL) {
368 printk(KERN_ERR "rtasd: no rtas-event-scan-rate\n");
369 of_node_put(node);
370 return -1;
371 }
372 rtas_event_scan_rate = *ip;
373 DEBUG("rtas-event-scan-rate %d\n", rtas_event_scan_rate);
374
375 /* Make room for the sequence number */
376 rtas_error_log_max = rtas_get_error_log_max();
377 rtas_error_log_buffer_max = rtas_error_log_max + sizeof(int);
378
379 of_node_put(node);
380
381 return 0;
382}
383
384static void do_event_scan(int event_scan)
385{
386 int error;
387 do {
388 memset(logdata, 0, rtas_error_log_max);
389 error = rtas_call(event_scan, 4, 1, NULL,
390 RTAS_EVENT_SCAN_ALL_EVENTS, 0,
391 __pa(logdata), rtas_error_log_max);
392 if (error == -1) {
393 printk(KERN_ERR "event-scan failed\n");
394 break;
395 }
396
397 if (error == 0)
398 pSeries_log_error(logdata, ERR_TYPE_RTAS_LOG, 0);
399
400 } while(error == 0);
401}
402
403static void do_event_scan_all_cpus(long delay)
404{
405 int cpu;
406
407 lock_cpu_hotplug();
408 cpu = first_cpu(cpu_online_map);
409 for (;;) {
410 set_cpus_allowed(current, cpumask_of_cpu(cpu));
411 do_event_scan(rtas_token("event-scan"));
412 set_cpus_allowed(current, CPU_MASK_ALL);
413
414 /* Drop hotplug lock, and sleep for the specified delay */
415 unlock_cpu_hotplug();
416 msleep_interruptible(delay);
417 lock_cpu_hotplug();
418
419 cpu = next_cpu(cpu, cpu_online_map);
420 if (cpu == NR_CPUS)
421 break;
422 }
423 unlock_cpu_hotplug();
424}
425
426static int rtasd(void *unused)
427{
428 unsigned int err_type;
429 int event_scan = rtas_token("event-scan");
430 int rc;
431
432 daemonize("rtasd");
433
434 if (event_scan == RTAS_UNKNOWN_SERVICE || get_eventscan_parms() == -1)
435 goto error;
436
437 rtas_log_buf = vmalloc(rtas_error_log_buffer_max*LOG_NUMBER);
438 if (!rtas_log_buf) {
439 printk(KERN_ERR "rtasd: no memory\n");
440 goto error;
441 }
442
443 printk(KERN_INFO "RTAS daemon started\n");
444
445 DEBUG("will sleep for %d milliseconds\n", (30000/rtas_event_scan_rate));
446
447 /* See if we have any error stored in NVRAM */
448 memset(logdata, 0, rtas_error_log_max);
449
450 rc = nvram_read_error_log(logdata, rtas_error_log_max, &err_type);
451
452 /* We can use rtas_log_buf now */
453 no_logging = 0;
454
455 if (!rc) {
456 if (err_type != ERR_FLAG_ALREADY_LOGGED) {
457 pSeries_log_error(logdata, err_type | ERR_FLAG_BOOT, 0);
458 }
459 }
460
461 /* First pass. */
462 do_event_scan_all_cpus(1000);
463
464 if (surveillance_timeout != -1) {
465 DEBUG("enabling surveillance\n");
466 enable_surveillance(surveillance_timeout);
467 DEBUG("surveillance enabled\n");
468 }
469
470 /* Delay should be at least one second since some
471 * machines have problems if we call event-scan too
472 * quickly. */
473 for (;;)
474 do_event_scan_all_cpus(30000/rtas_event_scan_rate);
475
476error:
477 /* Should delete proc entries */
478 return -EINVAL;
479}
480
481static int __init rtas_init(void)
482{
483 struct proc_dir_entry *entry;
484
485 /* No RTAS, only warn if we are on a pSeries box */
486 if (rtas_token("event-scan") == RTAS_UNKNOWN_SERVICE) {
487 if (systemcfg->platform & PLATFORM_PSERIES)
488 printk(KERN_INFO "rtasd: no event-scan on system\n");
489 return 1;
490 }
491
492 entry = create_proc_entry("ppc64/rtas/error_log", S_IRUSR, NULL);
493 if (entry)
494 entry->proc_fops = &proc_rtas_log_operations;
495 else
496 printk(KERN_ERR "Failed to create error_log proc entry\n");
497
498 if (kernel_thread(rtasd, NULL, CLONE_FS) < 0)
499 printk(KERN_ERR "Failed to start RTAS daemon\n");
500
501 return 0;
502}
503
504static int __init surveillance_setup(char *str)
505{
506 int i;
507
508 if (get_option(&str,&i)) {
509 if (i >= 0 && i <= 255)
510 surveillance_timeout = i;
511 }
512
513 return 1;
514}
515
516static int __init rtasmsgs_setup(char *str)
517{
518 if (strcmp(str, "on") == 0)
519 full_rtas_msgs = 1;
520 else if (strcmp(str, "off") == 0)
521 full_rtas_msgs = 0;
522
523 return 1;
524}
525__initcall(rtas_init);
526__setup("surveillance=", surveillance_setup);
527__setup("rtasmsgs=", rtasmsgs_setup);
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 10cb0f2d9b5b..65bee939eecc 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -58,7 +58,6 @@
58#include <asm/irq.h> 58#include <asm/irq.h>
59#include <asm/time.h> 59#include <asm/time.h>
60#include <asm/nvram.h> 60#include <asm/nvram.h>
61#include <asm/plpar_wrappers.h>
62#include "xics.h" 61#include "xics.h"
63#include <asm/firmware.h> 62#include <asm/firmware.h>
64#include <asm/pmc.h> 63#include <asm/pmc.h>
@@ -67,7 +66,7 @@
67#include <asm/i8259.h> 66#include <asm/i8259.h>
68#include <asm/udbg.h> 67#include <asm/udbg.h>
69 68
70#include "rtas-fw.h" 69#include "plpar_wrappers.h"
71 70
72#ifdef DEBUG 71#ifdef DEBUG
73#define DBG(fmt...) udbg_printf(fmt) 72#define DBG(fmt...) udbg_printf(fmt)
@@ -352,6 +351,16 @@ static void pSeries_mach_cpu_die(void)
352 for(;;); 351 for(;;);
353} 352}
354 353
354static int pseries_set_dabr(unsigned long dabr)
355{
356 if (firmware_has_feature(FW_FEATURE_XDABR)) {
357 /* We want to catch accesses from kernel and userspace */
358 return plpar_set_xdabr(dabr, H_DABRX_KERNEL | H_DABRX_USER);
359 }
360
361 return plpar_set_dabr(dabr);
362}
363
355 364
356/* 365/*
357 * Early initialization. Relocation is on but do not reference unbolted pages 366 * Early initialization. Relocation is on but do not reference unbolted pages
@@ -387,6 +396,8 @@ static void __init pSeries_init_early(void)
387 DBG("Hello World !\n"); 396 DBG("Hello World !\n");
388 } 397 }
389 398
399 if (firmware_has_feature(FW_FEATURE_XDABR | FW_FEATURE_DABR))
400 ppc_md.set_dabr = pseries_set_dabr;
390 401
391 iommu_init_early_pSeries(); 402 iommu_init_early_pSeries();
392 403
@@ -591,9 +602,9 @@ struct machdep_calls __initdata pSeries_md = {
591 .pcibios_fixup = pSeries_final_fixup, 602 .pcibios_fixup = pSeries_final_fixup,
592 .pci_probe_mode = pSeries_pci_probe_mode, 603 .pci_probe_mode = pSeries_pci_probe_mode,
593 .irq_bus_setup = pSeries_irq_bus_setup, 604 .irq_bus_setup = pSeries_irq_bus_setup,
594 .restart = rtas_fw_restart, 605 .restart = rtas_restart,
595 .power_off = rtas_fw_power_off, 606 .power_off = rtas_power_off,
596 .halt = rtas_fw_halt, 607 .halt = rtas_halt,
597 .panic = rtas_os_term, 608 .panic = rtas_os_term,
598 .cpu_die = pSeries_mach_cpu_die, 609 .cpu_die = pSeries_mach_cpu_die,
599 .get_boot_time = rtas_get_boot_time, 610 .get_boot_time = rtas_get_boot_time,
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index 9c9458ddfc25..7a243e8ccd7e 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -44,10 +44,11 @@
44#include <asm/firmware.h> 44#include <asm/firmware.h>
45#include <asm/system.h> 45#include <asm/system.h>
46#include <asm/rtas.h> 46#include <asm/rtas.h>
47#include <asm/plpar_wrappers.h>
48#include <asm/pSeries_reconfig.h> 47#include <asm/pSeries_reconfig.h>
49#include <asm/mpic.h> 48#include <asm/mpic.h>
50 49
50#include "plpar_wrappers.h"
51
51#ifdef DEBUG 52#ifdef DEBUG
52#define DBG(fmt...) udbg_printf(fmt) 53#define DBG(fmt...) udbg_printf(fmt)
53#else 54#else
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 8acd21dee05d..6b7efcfc352a 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_PPC_MPC106) += grackle.o
5obj-$(CONFIG_BOOKE) += dcr.o 5obj-$(CONFIG_BOOKE) += dcr.o
6obj-$(CONFIG_40x) += dcr.o 6obj-$(CONFIG_40x) += dcr.o
7obj-$(CONFIG_U3_DART) += u3_iommu.o 7obj-$(CONFIG_U3_DART) += u3_iommu.o
8obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
diff --git a/arch/powerpc/sysdev/dart.h b/arch/powerpc/sysdev/dart.h
new file mode 100644
index 000000000000..ea8f0d9eed8a
--- /dev/null
+++ b/arch/powerpc/sysdev/dart.h
@@ -0,0 +1,59 @@
1/*
2 * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19#ifndef _POWERPC_SYSDEV_DART_H
20#define _POWERPC_SYSDEV_DART_H
21
22
23/* physical base of DART registers */
24#define DART_BASE 0xf8033000UL
25
26/* Offset from base to control register */
27#define DARTCNTL 0
28/* Offset from base to exception register */
29#define DARTEXCP 0x10
30/* Offset from base to TLB tag registers */
31#define DARTTAG 0x1000
32
33
34/* Control Register fields */
35
36/* base address of table (pfn) */
37#define DARTCNTL_BASE_MASK 0xfffff
38#define DARTCNTL_BASE_SHIFT 12
39
40#define DARTCNTL_FLUSHTLB 0x400
41#define DARTCNTL_ENABLE 0x200
42
43/* size of table in pages */
44#define DARTCNTL_SIZE_MASK 0x1ff
45#define DARTCNTL_SIZE_SHIFT 0
46
47
48/* DART table fields */
49
50#define DARTMAP_VALID 0x80000000
51#define DARTMAP_RPNMASK 0x00ffffff
52
53
54#define DART_PAGE_SHIFT 12
55#define DART_PAGE_SIZE (1 << DART_PAGE_SHIFT)
56#define DART_PAGE_FACTOR (PAGE_SHIFT - DART_PAGE_SHIFT)
57
58
59#endif /* _POWERPC_SYSDEV_DART_H */
diff --git a/arch/powerpc/sysdev/mmio_nvram.c b/arch/powerpc/sysdev/mmio_nvram.c
new file mode 100644
index 000000000000..74e0d31a3559
--- /dev/null
+++ b/arch/powerpc/sysdev/mmio_nvram.c
@@ -0,0 +1,118 @@
1/*
2 * memory mapped NVRAM
3 *
4 * (C) Copyright IBM Corp. 2005
5 *
6 * Authors : Utz Bacher <utz.bacher@de.ibm.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include <linux/fs.h>
24#include <linux/init.h>
25#include <linux/kernel.h>
26#include <linux/spinlock.h>
27#include <linux/types.h>
28
29#include <asm/machdep.h>
30#include <asm/nvram.h>
31#include <asm/prom.h>
32
33static void __iomem *mmio_nvram_start;
34static long mmio_nvram_len;
35static spinlock_t mmio_nvram_lock = SPIN_LOCK_UNLOCKED;
36
37static ssize_t mmio_nvram_read(char *buf, size_t count, loff_t *index)
38{
39 unsigned long flags;
40
41 if (*index >= mmio_nvram_len)
42 return 0;
43 if (*index + count > mmio_nvram_len)
44 count = mmio_nvram_len - *index;
45
46 spin_lock_irqsave(&mmio_nvram_lock, flags);
47
48 memcpy_fromio(buf, mmio_nvram_start + *index, count);
49
50 spin_unlock_irqrestore(&mmio_nvram_lock, flags);
51
52 *index += count;
53 return count;
54}
55
56static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index)
57{
58 unsigned long flags;
59
60 if (*index >= mmio_nvram_len)
61 return 0;
62 if (*index + count > mmio_nvram_len)
63 count = mmio_nvram_len - *index;
64
65 spin_lock_irqsave(&mmio_nvram_lock, flags);
66
67 memcpy_toio(mmio_nvram_start + *index, buf, count);
68
69 spin_unlock_irqrestore(&mmio_nvram_lock, flags);
70
71 *index += count;
72 return count;
73}
74
75static ssize_t mmio_nvram_get_size(void)
76{
77 return mmio_nvram_len;
78}
79
80int __init mmio_nvram_init(void)
81{
82 struct device_node *nvram_node;
83 unsigned long *buffer;
84 int proplen;
85 unsigned long nvram_addr;
86 int ret;
87
88 ret = -ENODEV;
89 nvram_node = of_find_node_by_type(NULL, "nvram");
90 if (!nvram_node)
91 goto out;
92
93 ret = -EIO;
94 buffer = (unsigned long *)get_property(nvram_node, "reg", &proplen);
95 if (proplen != 2*sizeof(unsigned long))
96 goto out;
97
98 ret = -ENODEV;
99 nvram_addr = buffer[0];
100 mmio_nvram_len = buffer[1];
101 if ( (!mmio_nvram_len) || (!nvram_addr) )
102 goto out;
103
104 mmio_nvram_start = ioremap(nvram_addr, mmio_nvram_len);
105 if (!mmio_nvram_start)
106 goto out;
107
108 printk(KERN_INFO "mmio NVRAM, %luk mapped to %p\n",
109 mmio_nvram_len >> 10, mmio_nvram_start);
110
111 ppc_md.nvram_read = mmio_nvram_read;
112 ppc_md.nvram_write = mmio_nvram_write;
113 ppc_md.nvram_size = mmio_nvram_get_size;
114
115out:
116 of_node_put(nvram_node);
117 return ret;
118}
diff --git a/arch/powerpc/sysdev/u3_iommu.c b/arch/powerpc/sysdev/u3_iommu.c
index fba871a1bda5..607722178c1a 100644
--- a/arch/powerpc/sysdev/u3_iommu.c
+++ b/arch/powerpc/sysdev/u3_iommu.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * arch/ppc64/kernel/u3_iommu.c 2 * arch/powerpc/sysdev/u3_iommu.c
3 * 3 *
4 * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation 4 * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
5 * 5 *
@@ -44,9 +44,10 @@
44#include <asm/abs_addr.h> 44#include <asm/abs_addr.h>
45#include <asm/cacheflush.h> 45#include <asm/cacheflush.h>
46#include <asm/lmb.h> 46#include <asm/lmb.h>
47#include <asm/dart.h>
48#include <asm/ppc-pci.h> 47#include <asm/ppc-pci.h>
49 48
49#include "dart.h"
50
50extern int iommu_force_on; 51extern int iommu_force_on;
51 52
52/* Physical base address and size of the DART table */ 53/* Physical base address and size of the DART table */