diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/Kconfig | 13 | ||||
-rw-r--r-- | arch/powerpc/Makefile | 9 | ||||
-rw-r--r-- | arch/powerpc/boot/crt0.S | 23 | ||||
-rw-r--r-- | arch/powerpc/configs/ppc64_defconfig | 1579 | ||||
-rw-r--r-- | arch/powerpc/configs/pseries_defconfig | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/Makefile | 7 | ||||
-rw-r--r-- | arch/powerpc/kernel/align.c | 530 | ||||
-rw-r--r-- | arch/powerpc/kernel/idle_64.c | 121 | ||||
-rw-r--r-- | arch/powerpc/kernel/misc_32.S | 8 | ||||
-rw-r--r-- | arch/powerpc/kernel/nvram_64.c | 742 | ||||
-rw-r--r-- | arch/powerpc/kernel/rtas-rtc.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/time.c | 28 | ||||
-rw-r--r-- | arch/powerpc/platforms/chrp/setup.c | 11 | ||||
-rw-r--r-- | arch/powerpc/platforms/chrp/smp.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/chrp/time.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/maple/time.c | 11 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 3 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 4 |
18 files changed, 3049 insertions, 51 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 94df74bcc0ee..bb2efdd566a9 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -598,19 +598,6 @@ config ARCH_MEMORY_PROBE | |||
598 | def_bool y | 598 | def_bool y |
599 | depends on MEMORY_HOTPLUG | 599 | depends on MEMORY_HOTPLUG |
600 | 600 | ||
601 | # Some NUMA nodes have memory ranges that span | ||
602 | # other nodes. Even though a pfn is valid and | ||
603 | # between a node's start and end pfns, it may not | ||
604 | # reside on that node. | ||
605 | # | ||
606 | # This is a relatively temporary hack that should | ||
607 | # be able to go away when sparsemem is fully in | ||
608 | # place | ||
609 | |||
610 | config NODES_SPAN_OTHER_NODES | ||
611 | def_bool y | ||
612 | depends on NEED_MULTIPLE_NODES | ||
613 | |||
614 | config PPC_64K_PAGES | 601 | config PPC_64K_PAGES |
615 | bool "64k page size" | 602 | bool "64k page size" |
616 | depends on PPC64 | 603 | depends on PPC64 |
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 99dbea8c5c50..98f67c78d1bd 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
@@ -33,6 +33,8 @@ endif | |||
33 | 33 | ||
34 | export CROSS32CC CROSS32AS CROSS32LD CROSS32OBJCOPY | 34 | export CROSS32CC CROSS32AS CROSS32LD CROSS32OBJCOPY |
35 | 35 | ||
36 | KBUILD_DEFCONFIG := $(shell uname -m)_defconfig | ||
37 | |||
36 | ifeq ($(CONFIG_PPC64),y) | 38 | ifeq ($(CONFIG_PPC64),y) |
37 | OLDARCH := ppc64 | 39 | OLDARCH := ppc64 |
38 | SZ := 64 | 40 | SZ := 64 |
@@ -111,9 +113,6 @@ cpu-as-$(CONFIG_E200) += -Wa,-me200 | |||
111 | AFLAGS += $(cpu-as-y) | 113 | AFLAGS += $(cpu-as-y) |
112 | CFLAGS += $(cpu-as-y) | 114 | CFLAGS += $(cpu-as-y) |
113 | 115 | ||
114 | # Default to the common case. | ||
115 | KBUILD_DEFCONFIG := common_defconfig | ||
116 | |||
117 | head-y := arch/powerpc/kernel/head_32.o | 116 | head-y := arch/powerpc/kernel/head_32.o |
118 | head-$(CONFIG_PPC64) := arch/powerpc/kernel/head_64.o | 117 | head-$(CONFIG_PPC64) := arch/powerpc/kernel/head_64.o |
119 | head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o | 118 | head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o |
@@ -125,11 +124,11 @@ head-$(CONFIG_PPC64) += arch/powerpc/kernel/entry_64.o | |||
125 | head-$(CONFIG_PPC_FPU) += arch/powerpc/kernel/fpu.o | 124 | head-$(CONFIG_PPC_FPU) += arch/powerpc/kernel/fpu.o |
126 | 125 | ||
127 | core-y += arch/powerpc/kernel/ \ | 126 | core-y += arch/powerpc/kernel/ \ |
128 | arch/$(OLDARCH)/kernel/ \ | ||
129 | arch/powerpc/mm/ \ | 127 | arch/powerpc/mm/ \ |
130 | arch/powerpc/lib/ \ | 128 | arch/powerpc/lib/ \ |
131 | arch/powerpc/sysdev/ \ | 129 | arch/powerpc/sysdev/ \ |
132 | arch/powerpc/platforms/ | 130 | arch/powerpc/platforms/ |
131 | core-$(CONFIG_PPC32) += arch/ppc/kernel/ | ||
133 | core-$(CONFIG_MATH_EMULATION) += arch/ppc/math-emu/ | 132 | core-$(CONFIG_MATH_EMULATION) += arch/ppc/math-emu/ |
134 | core-$(CONFIG_XMON) += arch/powerpc/xmon/ | 133 | core-$(CONFIG_XMON) += arch/powerpc/xmon/ |
135 | core-$(CONFIG_APUS) += arch/ppc/amiga/ | 134 | core-$(CONFIG_APUS) += arch/ppc/amiga/ |
@@ -165,7 +164,7 @@ define archhelp | |||
165 | @echo ' (your) ~/bin/installkernel or' | 164 | @echo ' (your) ~/bin/installkernel or' |
166 | @echo ' (distribution) /sbin/installkernel or' | 165 | @echo ' (distribution) /sbin/installkernel or' |
167 | @echo ' install to $$(INSTALL_PATH) and run lilo' | 166 | @echo ' install to $$(INSTALL_PATH) and run lilo' |
168 | @echo ' *_defconfig - Select default config from arch/$(ARCH)/ppc/configs' | 167 | @echo ' *_defconfig - Select default config from arch/$(ARCH)/configs' |
169 | endef | 168 | endef |
170 | 169 | ||
171 | archclean: | 170 | archclean: |
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S index 9cc442263939..d2f2ace56cd3 100644 --- a/arch/powerpc/boot/crt0.S +++ b/arch/powerpc/boot/crt0.S | |||
@@ -14,43 +14,42 @@ | |||
14 | .text | 14 | .text |
15 | .globl _zimage_start | 15 | .globl _zimage_start |
16 | _zimage_start: | 16 | _zimage_start: |
17 | bl reloc_offset | 17 | bl 1f |
18 | 18 | ||
19 | reloc_offset: | 19 | 1: |
20 | mflr r0 | 20 | mflr r0 |
21 | lis r9,reloc_offset@ha | 21 | lis r9,1b@ha |
22 | addi r9,r9,reloc_offset@l | 22 | addi r9,r9,1b@l |
23 | subf. r0,r9,r0 | 23 | subf. r0,r9,r0 |
24 | beq clear_caches | 24 | beq 3f |
25 | 25 | ||
26 | reloc_got2: | ||
27 | lis r9,__got2_start@ha | 26 | lis r9,__got2_start@ha |
28 | addi r9,r9,__got2_start@l | 27 | addi r9,r9,__got2_start@l |
29 | lis r8,__got2_end@ha | 28 | lis r8,__got2_end@ha |
30 | addi r8,r8,__got2_end@l | 29 | addi r8,r8,__got2_end@l |
31 | subf. r8,r9,r8 | 30 | subf. r8,r9,r8 |
32 | beq clear_caches | 31 | beq 3f |
33 | srwi. r8,r8,2 | 32 | srwi. r8,r8,2 |
34 | mtctr r8 | 33 | mtctr r8 |
35 | add r9,r0,r9 | 34 | add r9,r0,r9 |
36 | reloc_got2_loop: | 35 | 2: |
37 | lwz r8,0(r9) | 36 | lwz r8,0(r9) |
38 | add r8,r8,r0 | 37 | add r8,r8,r0 |
39 | stw r8,0(r9) | 38 | stw r8,0(r9) |
40 | addi r9,r9,4 | 39 | addi r9,r9,4 |
41 | bdnz reloc_got2_loop | 40 | bdnz 2b |
42 | 41 | ||
43 | clear_caches: | 42 | 3: |
44 | lis r9,_start@h | 43 | lis r9,_start@h |
45 | add r9,r0,r9 | 44 | add r9,r0,r9 |
46 | lis r8,_etext@ha | 45 | lis r8,_etext@ha |
47 | addi r8,r8,_etext@l | 46 | addi r8,r8,_etext@l |
48 | add r8,r0,r8 | 47 | add r8,r0,r8 |
49 | 1: dcbf r0,r9 | 48 | 4: dcbf r0,r9 |
50 | icbi r0,r9 | 49 | icbi r0,r9 |
51 | addi r9,r9,0x20 | 50 | addi r9,r9,0x20 |
52 | cmplwi 0,r9,8 | 51 | cmplwi 0,r9,8 |
53 | blt 1b | 52 | blt 4b |
54 | sync | 53 | sync |
55 | isync | 54 | isync |
56 | 55 | ||
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig new file mode 100644 index 000000000000..b5ba3bbd96fb --- /dev/null +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -0,0 +1,1579 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.15-rc1 | ||
4 | # Fri Nov 18 16:23:24 2005 | ||
5 | # | ||
6 | CONFIG_PPC64=y | ||
7 | CONFIG_64BIT=y | ||
8 | CONFIG_PPC_MERGE=y | ||
9 | CONFIG_MMU=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
12 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
13 | CONFIG_PPC=y | ||
14 | CONFIG_EARLY_PRINTK=y | ||
15 | CONFIG_COMPAT=y | ||
16 | CONFIG_SYSVIPC_COMPAT=y | ||
17 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
18 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
19 | |||
20 | # | ||
21 | # Processor support | ||
22 | # | ||
23 | # CONFIG_POWER4_ONLY is not set | ||
24 | CONFIG_POWER3=y | ||
25 | CONFIG_POWER4=y | ||
26 | CONFIG_PPC_FPU=y | ||
27 | CONFIG_ALTIVEC=y | ||
28 | CONFIG_PPC_STD_MMU=y | ||
29 | CONFIG_SMP=y | ||
30 | CONFIG_NR_CPUS=32 | ||
31 | |||
32 | # | ||
33 | # Code maturity level options | ||
34 | # | ||
35 | CONFIG_EXPERIMENTAL=y | ||
36 | CONFIG_CLEAN_COMPILE=y | ||
37 | CONFIG_LOCK_KERNEL=y | ||
38 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
39 | |||
40 | # | ||
41 | # General setup | ||
42 | # | ||
43 | CONFIG_LOCALVERSION="" | ||
44 | CONFIG_LOCALVERSION_AUTO=y | ||
45 | CONFIG_SWAP=y | ||
46 | CONFIG_SYSVIPC=y | ||
47 | CONFIG_POSIX_MQUEUE=y | ||
48 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
49 | CONFIG_SYSCTL=y | ||
50 | # CONFIG_AUDIT is not set | ||
51 | CONFIG_HOTPLUG=y | ||
52 | CONFIG_KOBJECT_UEVENT=y | ||
53 | CONFIG_IKCONFIG=y | ||
54 | CONFIG_IKCONFIG_PROC=y | ||
55 | CONFIG_CPUSETS=y | ||
56 | CONFIG_INITRAMFS_SOURCE="" | ||
57 | # CONFIG_EMBEDDED is not set | ||
58 | CONFIG_KALLSYMS=y | ||
59 | CONFIG_KALLSYMS_ALL=y | ||
60 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
61 | CONFIG_PRINTK=y | ||
62 | CONFIG_BUG=y | ||
63 | CONFIG_BASE_FULL=y | ||
64 | CONFIG_FUTEX=y | ||
65 | CONFIG_EPOLL=y | ||
66 | CONFIG_SHMEM=y | ||
67 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
68 | CONFIG_CC_ALIGN_LABELS=0 | ||
69 | CONFIG_CC_ALIGN_LOOPS=0 | ||
70 | CONFIG_CC_ALIGN_JUMPS=0 | ||
71 | # CONFIG_TINY_SHMEM is not set | ||
72 | CONFIG_BASE_SMALL=0 | ||
73 | |||
74 | # | ||
75 | # Loadable module support | ||
76 | # | ||
77 | CONFIG_MODULES=y | ||
78 | CONFIG_MODULE_UNLOAD=y | ||
79 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
80 | CONFIG_OBSOLETE_MODPARM=y | ||
81 | CONFIG_MODVERSIONS=y | ||
82 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
83 | CONFIG_KMOD=y | ||
84 | CONFIG_STOP_MACHINE=y | ||
85 | |||
86 | # | ||
87 | # Block layer | ||
88 | # | ||
89 | |||
90 | # | ||
91 | # IO Schedulers | ||
92 | # | ||
93 | CONFIG_IOSCHED_NOOP=y | ||
94 | CONFIG_IOSCHED_AS=y | ||
95 | CONFIG_IOSCHED_DEADLINE=y | ||
96 | CONFIG_IOSCHED_CFQ=y | ||
97 | CONFIG_DEFAULT_AS=y | ||
98 | # CONFIG_DEFAULT_DEADLINE is not set | ||
99 | # CONFIG_DEFAULT_CFQ is not set | ||
100 | # CONFIG_DEFAULT_NOOP is not set | ||
101 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
102 | |||
103 | # | ||
104 | # Platform support | ||
105 | # | ||
106 | CONFIG_PPC_MULTIPLATFORM=y | ||
107 | # CONFIG_PPC_ISERIES is not set | ||
108 | # CONFIG_EMBEDDED6xx is not set | ||
109 | # CONFIG_APUS is not set | ||
110 | CONFIG_PPC_PSERIES=y | ||
111 | CONFIG_PPC_PMAC=y | ||
112 | CONFIG_PPC_PMAC64=y | ||
113 | CONFIG_PPC_MAPLE=y | ||
114 | # CONFIG_PPC_CELL is not set | ||
115 | CONFIG_PPC_OF=y | ||
116 | CONFIG_XICS=y | ||
117 | CONFIG_U3_DART=y | ||
118 | CONFIG_MPIC=y | ||
119 | CONFIG_PPC_RTAS=y | ||
120 | CONFIG_RTAS_ERROR_LOGGING=y | ||
121 | CONFIG_RTAS_PROC=y | ||
122 | CONFIG_RTAS_FLASH=m | ||
123 | # CONFIG_MMIO_NVRAM is not set | ||
124 | CONFIG_MPIC_BROKEN_U3=y | ||
125 | CONFIG_IBMVIO=y | ||
126 | # CONFIG_PPC_MPC106 is not set | ||
127 | CONFIG_GENERIC_TBSYNC=y | ||
128 | CONFIG_CPU_FREQ=y | ||
129 | CONFIG_CPU_FREQ_TABLE=y | ||
130 | # CONFIG_CPU_FREQ_DEBUG is not set | ||
131 | CONFIG_CPU_FREQ_STAT=y | ||
132 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | ||
133 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | ||
134 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||
135 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||
136 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y | ||
137 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
138 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | ||
139 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
140 | CONFIG_CPU_FREQ_PMAC64=y | ||
141 | # CONFIG_WANT_EARLY_SERIAL is not set | ||
142 | |||
143 | # | ||
144 | # Kernel options | ||
145 | # | ||
146 | # CONFIG_HZ_100 is not set | ||
147 | CONFIG_HZ_250=y | ||
148 | # CONFIG_HZ_1000 is not set | ||
149 | CONFIG_HZ=250 | ||
150 | CONFIG_PREEMPT_NONE=y | ||
151 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
152 | # CONFIG_PREEMPT is not set | ||
153 | # CONFIG_PREEMPT_BKL is not set | ||
154 | CONFIG_BINFMT_ELF=y | ||
155 | CONFIG_BINFMT_MISC=m | ||
156 | CONFIG_FORCE_MAX_ZONEORDER=13 | ||
157 | CONFIG_IOMMU_VMERGE=y | ||
158 | CONFIG_HOTPLUG_CPU=y | ||
159 | CONFIG_KEXEC=y | ||
160 | CONFIG_IRQ_ALL_CPUS=y | ||
161 | CONFIG_PPC_SPLPAR=y | ||
162 | CONFIG_EEH=y | ||
163 | CONFIG_SCANLOG=m | ||
164 | CONFIG_LPARCFG=y | ||
165 | # CONFIG_NUMA is not set | ||
166 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
167 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
168 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
169 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
170 | CONFIG_SELECT_MEMORY_MODEL=y | ||
171 | # CONFIG_FLATMEM_MANUAL is not set | ||
172 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
173 | CONFIG_SPARSEMEM_MANUAL=y | ||
174 | CONFIG_SPARSEMEM=y | ||
175 | CONFIG_HAVE_MEMORY_PRESENT=y | ||
176 | # CONFIG_SPARSEMEM_STATIC is not set | ||
177 | CONFIG_SPARSEMEM_EXTREME=y | ||
178 | # CONFIG_MEMORY_HOTPLUG is not set | ||
179 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
180 | # CONFIG_PPC_64K_PAGES is not set | ||
181 | # CONFIG_SCHED_SMT is not set | ||
182 | CONFIG_PROC_DEVICETREE=y | ||
183 | # CONFIG_CMDLINE_BOOL is not set | ||
184 | # CONFIG_PM is not set | ||
185 | CONFIG_SECCOMP=y | ||
186 | CONFIG_ISA_DMA_API=y | ||
187 | |||
188 | # | ||
189 | # Bus options | ||
190 | # | ||
191 | CONFIG_GENERIC_ISA_DMA=y | ||
192 | CONFIG_PPC_I8259=y | ||
193 | # CONFIG_PPC_INDIRECT_PCI is not set | ||
194 | CONFIG_PCI=y | ||
195 | CONFIG_PCI_DOMAINS=y | ||
196 | # CONFIG_PCI_LEGACY_PROC is not set | ||
197 | # CONFIG_PCI_DEBUG is not set | ||
198 | |||
199 | # | ||
200 | # PCCARD (PCMCIA/CardBus) support | ||
201 | # | ||
202 | # CONFIG_PCCARD is not set | ||
203 | |||
204 | # | ||
205 | # PCI Hotplug Support | ||
206 | # | ||
207 | CONFIG_HOTPLUG_PCI=m | ||
208 | # CONFIG_HOTPLUG_PCI_FAKE is not set | ||
209 | # CONFIG_HOTPLUG_PCI_CPCI is not set | ||
210 | # CONFIG_HOTPLUG_PCI_SHPC is not set | ||
211 | CONFIG_HOTPLUG_PCI_RPA=m | ||
212 | CONFIG_HOTPLUG_PCI_RPA_DLPAR=m | ||
213 | CONFIG_KERNEL_START=0xc000000000000000 | ||
214 | |||
215 | # | ||
216 | # Networking | ||
217 | # | ||
218 | CONFIG_NET=y | ||
219 | |||
220 | # | ||
221 | # Networking options | ||
222 | # | ||
223 | CONFIG_PACKET=y | ||
224 | # CONFIG_PACKET_MMAP is not set | ||
225 | CONFIG_UNIX=y | ||
226 | CONFIG_XFRM=y | ||
227 | CONFIG_XFRM_USER=m | ||
228 | CONFIG_NET_KEY=m | ||
229 | CONFIG_INET=y | ||
230 | CONFIG_IP_MULTICAST=y | ||
231 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
232 | CONFIG_IP_FIB_HASH=y | ||
233 | # CONFIG_IP_PNP is not set | ||
234 | CONFIG_NET_IPIP=y | ||
235 | # CONFIG_NET_IPGRE is not set | ||
236 | # CONFIG_IP_MROUTE is not set | ||
237 | # CONFIG_ARPD is not set | ||
238 | CONFIG_SYN_COOKIES=y | ||
239 | CONFIG_INET_AH=m | ||
240 | CONFIG_INET_ESP=m | ||
241 | CONFIG_INET_IPCOMP=m | ||
242 | CONFIG_INET_TUNNEL=y | ||
243 | CONFIG_INET_DIAG=y | ||
244 | CONFIG_INET_TCP_DIAG=y | ||
245 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
246 | CONFIG_TCP_CONG_BIC=y | ||
247 | |||
248 | # | ||
249 | # IP: Virtual Server Configuration | ||
250 | # | ||
251 | # CONFIG_IP_VS is not set | ||
252 | # CONFIG_IPV6 is not set | ||
253 | CONFIG_NETFILTER=y | ||
254 | # CONFIG_NETFILTER_DEBUG is not set | ||
255 | |||
256 | # | ||
257 | # Core Netfilter Configuration | ||
258 | # | ||
259 | CONFIG_NETFILTER_NETLINK=y | ||
260 | CONFIG_NETFILTER_NETLINK_QUEUE=m | ||
261 | CONFIG_NETFILTER_NETLINK_LOG=m | ||
262 | |||
263 | # | ||
264 | # IP: Netfilter Configuration | ||
265 | # | ||
266 | CONFIG_IP_NF_CONNTRACK=m | ||
267 | CONFIG_IP_NF_CT_ACCT=y | ||
268 | CONFIG_IP_NF_CONNTRACK_MARK=y | ||
269 | CONFIG_IP_NF_CONNTRACK_EVENTS=y | ||
270 | CONFIG_IP_NF_CONNTRACK_NETLINK=m | ||
271 | CONFIG_IP_NF_CT_PROTO_SCTP=m | ||
272 | CONFIG_IP_NF_FTP=m | ||
273 | CONFIG_IP_NF_IRC=m | ||
274 | # CONFIG_IP_NF_NETBIOS_NS is not set | ||
275 | CONFIG_IP_NF_TFTP=m | ||
276 | CONFIG_IP_NF_AMANDA=m | ||
277 | # CONFIG_IP_NF_PPTP is not set | ||
278 | CONFIG_IP_NF_QUEUE=m | ||
279 | CONFIG_IP_NF_IPTABLES=m | ||
280 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
281 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
282 | CONFIG_IP_NF_MATCH_MAC=m | ||
283 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
284 | CONFIG_IP_NF_MATCH_MARK=m | ||
285 | CONFIG_IP_NF_MATCH_MULTIPORT=m | ||
286 | CONFIG_IP_NF_MATCH_TOS=m | ||
287 | CONFIG_IP_NF_MATCH_RECENT=m | ||
288 | CONFIG_IP_NF_MATCH_ECN=m | ||
289 | CONFIG_IP_NF_MATCH_DSCP=m | ||
290 | CONFIG_IP_NF_MATCH_AH_ESP=m | ||
291 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
292 | CONFIG_IP_NF_MATCH_TTL=m | ||
293 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
294 | CONFIG_IP_NF_MATCH_HELPER=m | ||
295 | CONFIG_IP_NF_MATCH_STATE=m | ||
296 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
297 | CONFIG_IP_NF_MATCH_OWNER=m | ||
298 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
299 | CONFIG_IP_NF_MATCH_REALM=m | ||
300 | CONFIG_IP_NF_MATCH_SCTP=m | ||
301 | CONFIG_IP_NF_MATCH_DCCP=m | ||
302 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
303 | CONFIG_IP_NF_MATCH_CONNMARK=m | ||
304 | CONFIG_IP_NF_MATCH_CONNBYTES=m | ||
305 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
306 | CONFIG_IP_NF_MATCH_STRING=m | ||
307 | CONFIG_IP_NF_FILTER=m | ||
308 | CONFIG_IP_NF_TARGET_REJECT=m | ||
309 | CONFIG_IP_NF_TARGET_LOG=m | ||
310 | CONFIG_IP_NF_TARGET_ULOG=m | ||
311 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
312 | CONFIG_IP_NF_TARGET_NFQUEUE=m | ||
313 | CONFIG_IP_NF_NAT=m | ||
314 | CONFIG_IP_NF_NAT_NEEDED=y | ||
315 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
316 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
317 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
318 | CONFIG_IP_NF_TARGET_SAME=m | ||
319 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
320 | CONFIG_IP_NF_NAT_IRC=m | ||
321 | CONFIG_IP_NF_NAT_FTP=m | ||
322 | CONFIG_IP_NF_NAT_TFTP=m | ||
323 | CONFIG_IP_NF_NAT_AMANDA=m | ||
324 | CONFIG_IP_NF_MANGLE=m | ||
325 | CONFIG_IP_NF_TARGET_TOS=m | ||
326 | CONFIG_IP_NF_TARGET_ECN=m | ||
327 | CONFIG_IP_NF_TARGET_DSCP=m | ||
328 | CONFIG_IP_NF_TARGET_MARK=m | ||
329 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
330 | CONFIG_IP_NF_TARGET_TTL=m | ||
331 | CONFIG_IP_NF_TARGET_CONNMARK=m | ||
332 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
333 | CONFIG_IP_NF_RAW=m | ||
334 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
335 | CONFIG_IP_NF_ARPTABLES=m | ||
336 | CONFIG_IP_NF_ARPFILTER=m | ||
337 | CONFIG_IP_NF_ARP_MANGLE=m | ||
338 | |||
339 | # | ||
340 | # DCCP Configuration (EXPERIMENTAL) | ||
341 | # | ||
342 | # CONFIG_IP_DCCP is not set | ||
343 | |||
344 | # | ||
345 | # SCTP Configuration (EXPERIMENTAL) | ||
346 | # | ||
347 | # CONFIG_IP_SCTP is not set | ||
348 | # CONFIG_ATM is not set | ||
349 | # CONFIG_BRIDGE is not set | ||
350 | # CONFIG_VLAN_8021Q is not set | ||
351 | # CONFIG_DECNET is not set | ||
352 | CONFIG_LLC=y | ||
353 | # CONFIG_LLC2 is not set | ||
354 | # CONFIG_IPX is not set | ||
355 | # CONFIG_ATALK is not set | ||
356 | # CONFIG_X25 is not set | ||
357 | # CONFIG_LAPB is not set | ||
358 | # CONFIG_NET_DIVERT is not set | ||
359 | # CONFIG_ECONET is not set | ||
360 | # CONFIG_WAN_ROUTER is not set | ||
361 | |||
362 | # | ||
363 | # QoS and/or fair queueing | ||
364 | # | ||
365 | # CONFIG_NET_SCHED is not set | ||
366 | CONFIG_NET_CLS_ROUTE=y | ||
367 | |||
368 | # | ||
369 | # Network testing | ||
370 | # | ||
371 | # CONFIG_NET_PKTGEN is not set | ||
372 | # CONFIG_HAMRADIO is not set | ||
373 | # CONFIG_IRDA is not set | ||
374 | # CONFIG_BT is not set | ||
375 | # CONFIG_IEEE80211 is not set | ||
376 | |||
377 | # | ||
378 | # Device Drivers | ||
379 | # | ||
380 | |||
381 | # | ||
382 | # Generic Driver Options | ||
383 | # | ||
384 | CONFIG_STANDALONE=y | ||
385 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
386 | CONFIG_FW_LOADER=y | ||
387 | # CONFIG_DEBUG_DRIVER is not set | ||
388 | |||
389 | # | ||
390 | # Connector - unified userspace <-> kernelspace linker | ||
391 | # | ||
392 | # CONFIG_CONNECTOR is not set | ||
393 | |||
394 | # | ||
395 | # Memory Technology Devices (MTD) | ||
396 | # | ||
397 | # CONFIG_MTD is not set | ||
398 | |||
399 | # | ||
400 | # Parallel port support | ||
401 | # | ||
402 | # CONFIG_PARPORT is not set | ||
403 | |||
404 | # | ||
405 | # Plug and Play support | ||
406 | # | ||
407 | |||
408 | # | ||
409 | # Block devices | ||
410 | # | ||
411 | CONFIG_BLK_DEV_FD=y | ||
412 | # CONFIG_BLK_CPQ_DA is not set | ||
413 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
414 | # CONFIG_BLK_DEV_DAC960 is not set | ||
415 | # CONFIG_BLK_DEV_UMEM is not set | ||
416 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
417 | CONFIG_BLK_DEV_LOOP=y | ||
418 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
419 | CONFIG_BLK_DEV_NBD=m | ||
420 | # CONFIG_BLK_DEV_SX8 is not set | ||
421 | # CONFIG_BLK_DEV_UB is not set | ||
422 | CONFIG_BLK_DEV_RAM=y | ||
423 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
424 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
425 | CONFIG_BLK_DEV_INITRD=y | ||
426 | # CONFIG_CDROM_PKTCDVD is not set | ||
427 | # CONFIG_ATA_OVER_ETH is not set | ||
428 | |||
429 | # | ||
430 | # ATA/ATAPI/MFM/RLL support | ||
431 | # | ||
432 | CONFIG_IDE=y | ||
433 | CONFIG_BLK_DEV_IDE=y | ||
434 | |||
435 | # | ||
436 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
437 | # | ||
438 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
439 | CONFIG_BLK_DEV_IDEDISK=y | ||
440 | # CONFIG_IDEDISK_MULTI_MODE is not set | ||
441 | CONFIG_BLK_DEV_IDECD=y | ||
442 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
443 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
444 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
445 | # CONFIG_IDE_TASK_IOCTL is not set | ||
446 | |||
447 | # | ||
448 | # IDE chipset support/bugfixes | ||
449 | # | ||
450 | CONFIG_IDE_GENERIC=y | ||
451 | CONFIG_BLK_DEV_IDEPCI=y | ||
452 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
453 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
454 | CONFIG_BLK_DEV_GENERIC=y | ||
455 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
456 | # CONFIG_BLK_DEV_SL82C105 is not set | ||
457 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
458 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
459 | CONFIG_IDEDMA_PCI_AUTO=y | ||
460 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
461 | # CONFIG_BLK_DEV_AEC62XX is not set | ||
462 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
463 | CONFIG_BLK_DEV_AMD74XX=y | ||
464 | # CONFIG_BLK_DEV_CMD64X is not set | ||
465 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
466 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
467 | # CONFIG_BLK_DEV_CS5520 is not set | ||
468 | # CONFIG_BLK_DEV_CS5530 is not set | ||
469 | # CONFIG_BLK_DEV_HPT34X is not set | ||
470 | # CONFIG_BLK_DEV_HPT366 is not set | ||
471 | # CONFIG_BLK_DEV_SC1200 is not set | ||
472 | # CONFIG_BLK_DEV_PIIX is not set | ||
473 | # CONFIG_BLK_DEV_IT821X is not set | ||
474 | # CONFIG_BLK_DEV_NS87415 is not set | ||
475 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
476 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
477 | # CONFIG_BLK_DEV_SVWKS is not set | ||
478 | # CONFIG_BLK_DEV_SIIMAGE is not set | ||
479 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
480 | # CONFIG_BLK_DEV_TRM290 is not set | ||
481 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
482 | CONFIG_BLK_DEV_IDE_PMAC=y | ||
483 | CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y | ||
484 | CONFIG_BLK_DEV_IDEDMA_PMAC=y | ||
485 | # CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set | ||
486 | # CONFIG_IDE_ARM is not set | ||
487 | CONFIG_BLK_DEV_IDEDMA=y | ||
488 | # CONFIG_IDEDMA_IVB is not set | ||
489 | CONFIG_IDEDMA_AUTO=y | ||
490 | # CONFIG_BLK_DEV_HD is not set | ||
491 | |||
492 | # | ||
493 | # SCSI device support | ||
494 | # | ||
495 | # CONFIG_RAID_ATTRS is not set | ||
496 | CONFIG_SCSI=y | ||
497 | CONFIG_SCSI_PROC_FS=y | ||
498 | |||
499 | # | ||
500 | # SCSI support type (disk, tape, CD-ROM) | ||
501 | # | ||
502 | CONFIG_BLK_DEV_SD=y | ||
503 | CONFIG_CHR_DEV_ST=y | ||
504 | # CONFIG_CHR_DEV_OSST is not set | ||
505 | CONFIG_BLK_DEV_SR=y | ||
506 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
507 | CONFIG_CHR_DEV_SG=y | ||
508 | # CONFIG_CHR_DEV_SCH is not set | ||
509 | |||
510 | # | ||
511 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
512 | # | ||
513 | CONFIG_SCSI_MULTI_LUN=y | ||
514 | CONFIG_SCSI_CONSTANTS=y | ||
515 | # CONFIG_SCSI_LOGGING is not set | ||
516 | |||
517 | # | ||
518 | # SCSI Transport Attributes | ||
519 | # | ||
520 | CONFIG_SCSI_SPI_ATTRS=y | ||
521 | CONFIG_SCSI_FC_ATTRS=y | ||
522 | CONFIG_SCSI_ISCSI_ATTRS=m | ||
523 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
524 | |||
525 | # | ||
526 | # SCSI low-level drivers | ||
527 | # | ||
528 | # CONFIG_ISCSI_TCP is not set | ||
529 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
530 | # CONFIG_SCSI_3W_9XXX is not set | ||
531 | # CONFIG_SCSI_ACARD is not set | ||
532 | # CONFIG_SCSI_AACRAID is not set | ||
533 | # CONFIG_SCSI_AIC7XXX is not set | ||
534 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
535 | # CONFIG_SCSI_AIC79XX is not set | ||
536 | # CONFIG_MEGARAID_NEWGEN is not set | ||
537 | # CONFIG_MEGARAID_LEGACY is not set | ||
538 | # CONFIG_MEGARAID_SAS is not set | ||
539 | CONFIG_SCSI_SATA=y | ||
540 | # CONFIG_SCSI_SATA_AHCI is not set | ||
541 | CONFIG_SCSI_SATA_SVW=y | ||
542 | # CONFIG_SCSI_ATA_PIIX is not set | ||
543 | # CONFIG_SCSI_SATA_MV is not set | ||
544 | # CONFIG_SCSI_SATA_NV is not set | ||
545 | # CONFIG_SCSI_PDC_ADMA is not set | ||
546 | # CONFIG_SCSI_SATA_QSTOR is not set | ||
547 | # CONFIG_SCSI_SATA_PROMISE is not set | ||
548 | # CONFIG_SCSI_SATA_SX4 is not set | ||
549 | # CONFIG_SCSI_SATA_SIL is not set | ||
550 | # CONFIG_SCSI_SATA_SIL24 is not set | ||
551 | # CONFIG_SCSI_SATA_SIS is not set | ||
552 | # CONFIG_SCSI_SATA_ULI is not set | ||
553 | # CONFIG_SCSI_SATA_VIA is not set | ||
554 | # CONFIG_SCSI_SATA_VITESSE is not set | ||
555 | # CONFIG_SCSI_BUSLOGIC is not set | ||
556 | # CONFIG_SCSI_DMX3191D is not set | ||
557 | # CONFIG_SCSI_EATA is not set | ||
558 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
559 | # CONFIG_SCSI_GDTH is not set | ||
560 | # CONFIG_SCSI_IPS is not set | ||
561 | CONFIG_SCSI_IBMVSCSI=y | ||
562 | # CONFIG_SCSI_INITIO is not set | ||
563 | # CONFIG_SCSI_INIA100 is not set | ||
564 | CONFIG_SCSI_SYM53C8XX_2=y | ||
565 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 | ||
566 | CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 | ||
567 | CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 | ||
568 | # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set | ||
569 | CONFIG_SCSI_IPR=y | ||
570 | CONFIG_SCSI_IPR_TRACE=y | ||
571 | CONFIG_SCSI_IPR_DUMP=y | ||
572 | # CONFIG_SCSI_QLOGIC_FC is not set | ||
573 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
574 | CONFIG_SCSI_QLA2XXX=y | ||
575 | CONFIG_SCSI_QLA21XX=m | ||
576 | CONFIG_SCSI_QLA22XX=m | ||
577 | CONFIG_SCSI_QLA2300=m | ||
578 | CONFIG_SCSI_QLA2322=m | ||
579 | CONFIG_SCSI_QLA6312=m | ||
580 | CONFIG_SCSI_QLA24XX=m | ||
581 | CONFIG_SCSI_LPFC=m | ||
582 | # CONFIG_SCSI_DC395x is not set | ||
583 | # CONFIG_SCSI_DC390T is not set | ||
584 | CONFIG_SCSI_DEBUG=m | ||
585 | |||
586 | # | ||
587 | # Multi-device support (RAID and LVM) | ||
588 | # | ||
589 | CONFIG_MD=y | ||
590 | CONFIG_BLK_DEV_MD=y | ||
591 | CONFIG_MD_LINEAR=y | ||
592 | CONFIG_MD_RAID0=y | ||
593 | CONFIG_MD_RAID1=y | ||
594 | CONFIG_MD_RAID10=y | ||
595 | CONFIG_MD_RAID5=y | ||
596 | CONFIG_MD_RAID6=m | ||
597 | CONFIG_MD_MULTIPATH=m | ||
598 | CONFIG_MD_FAULTY=m | ||
599 | CONFIG_BLK_DEV_DM=y | ||
600 | CONFIG_DM_CRYPT=m | ||
601 | CONFIG_DM_SNAPSHOT=m | ||
602 | CONFIG_DM_MIRROR=m | ||
603 | CONFIG_DM_ZERO=m | ||
604 | CONFIG_DM_MULTIPATH=m | ||
605 | CONFIG_DM_MULTIPATH_EMC=m | ||
606 | |||
607 | # | ||
608 | # Fusion MPT device support | ||
609 | # | ||
610 | # CONFIG_FUSION is not set | ||
611 | # CONFIG_FUSION_SPI is not set | ||
612 | # CONFIG_FUSION_FC is not set | ||
613 | # CONFIG_FUSION_SAS is not set | ||
614 | |||
615 | # | ||
616 | # IEEE 1394 (FireWire) support | ||
617 | # | ||
618 | CONFIG_IEEE1394=y | ||
619 | |||
620 | # | ||
621 | # Subsystem Options | ||
622 | # | ||
623 | # CONFIG_IEEE1394_VERBOSEDEBUG is not set | ||
624 | # CONFIG_IEEE1394_OUI_DB is not set | ||
625 | CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y | ||
626 | CONFIG_IEEE1394_CONFIG_ROM_IP1394=y | ||
627 | # CONFIG_IEEE1394_EXPORT_FULL_API is not set | ||
628 | |||
629 | # | ||
630 | # Device Drivers | ||
631 | # | ||
632 | # CONFIG_IEEE1394_PCILYNX is not set | ||
633 | CONFIG_IEEE1394_OHCI1394=y | ||
634 | |||
635 | # | ||
636 | # Protocol Drivers | ||
637 | # | ||
638 | CONFIG_IEEE1394_VIDEO1394=m | ||
639 | CONFIG_IEEE1394_SBP2=m | ||
640 | # CONFIG_IEEE1394_SBP2_PHYS_DMA is not set | ||
641 | CONFIG_IEEE1394_ETH1394=m | ||
642 | CONFIG_IEEE1394_DV1394=m | ||
643 | CONFIG_IEEE1394_RAWIO=y | ||
644 | CONFIG_IEEE1394_CMP=m | ||
645 | CONFIG_IEEE1394_AMDTP=m | ||
646 | |||
647 | # | ||
648 | # I2O device support | ||
649 | # | ||
650 | # CONFIG_I2O is not set | ||
651 | |||
652 | # | ||
653 | # Macintosh device drivers | ||
654 | # | ||
655 | CONFIG_ADB_PMU=y | ||
656 | CONFIG_PMAC_SMU=y | ||
657 | CONFIG_THERM_PM72=y | ||
658 | CONFIG_WINDFARM=y | ||
659 | CONFIG_WINDFARM_PM81=y | ||
660 | CONFIG_WINDFARM_PM91=y | ||
661 | |||
662 | # | ||
663 | # Network device support | ||
664 | # | ||
665 | CONFIG_NETDEVICES=y | ||
666 | CONFIG_DUMMY=m | ||
667 | CONFIG_BONDING=m | ||
668 | # CONFIG_EQUALIZER is not set | ||
669 | CONFIG_TUN=m | ||
670 | |||
671 | # | ||
672 | # ARCnet devices | ||
673 | # | ||
674 | # CONFIG_ARCNET is not set | ||
675 | |||
676 | # | ||
677 | # PHY device support | ||
678 | # | ||
679 | # CONFIG_PHYLIB is not set | ||
680 | |||
681 | # | ||
682 | # Ethernet (10 or 100Mbit) | ||
683 | # | ||
684 | CONFIG_NET_ETHERNET=y | ||
685 | CONFIG_MII=y | ||
686 | # CONFIG_HAPPYMEAL is not set | ||
687 | CONFIG_SUNGEM=y | ||
688 | # CONFIG_CASSINI is not set | ||
689 | CONFIG_NET_VENDOR_3COM=y | ||
690 | CONFIG_VORTEX=y | ||
691 | # CONFIG_TYPHOON is not set | ||
692 | |||
693 | # | ||
694 | # Tulip family network device support | ||
695 | # | ||
696 | # CONFIG_NET_TULIP is not set | ||
697 | # CONFIG_HP100 is not set | ||
698 | CONFIG_IBMVETH=m | ||
699 | CONFIG_NET_PCI=y | ||
700 | CONFIG_PCNET32=y | ||
701 | # CONFIG_AMD8111_ETH is not set | ||
702 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
703 | # CONFIG_B44 is not set | ||
704 | # CONFIG_FORCEDETH is not set | ||
705 | # CONFIG_DGRS is not set | ||
706 | # CONFIG_EEPRO100 is not set | ||
707 | CONFIG_E100=y | ||
708 | # CONFIG_FEALNX is not set | ||
709 | # CONFIG_NATSEMI is not set | ||
710 | # CONFIG_NE2K_PCI is not set | ||
711 | # CONFIG_8139CP is not set | ||
712 | # CONFIG_8139TOO is not set | ||
713 | # CONFIG_SIS900 is not set | ||
714 | # CONFIG_EPIC100 is not set | ||
715 | # CONFIG_SUNDANCE is not set | ||
716 | # CONFIG_VIA_RHINE is not set | ||
717 | |||
718 | # | ||
719 | # Ethernet (1000 Mbit) | ||
720 | # | ||
721 | CONFIG_ACENIC=y | ||
722 | CONFIG_ACENIC_OMIT_TIGON_I=y | ||
723 | # CONFIG_DL2K is not set | ||
724 | CONFIG_E1000=y | ||
725 | # CONFIG_E1000_NAPI is not set | ||
726 | # CONFIG_NS83820 is not set | ||
727 | # CONFIG_HAMACHI is not set | ||
728 | # CONFIG_YELLOWFIN is not set | ||
729 | # CONFIG_R8169 is not set | ||
730 | # CONFIG_SIS190 is not set | ||
731 | # CONFIG_SKGE is not set | ||
732 | # CONFIG_SK98LIN is not set | ||
733 | # CONFIG_VIA_VELOCITY is not set | ||
734 | CONFIG_TIGON3=y | ||
735 | # CONFIG_BNX2 is not set | ||
736 | # CONFIG_MV643XX_ETH is not set | ||
737 | |||
738 | # | ||
739 | # Ethernet (10000 Mbit) | ||
740 | # | ||
741 | # CONFIG_CHELSIO_T1 is not set | ||
742 | CONFIG_IXGB=m | ||
743 | # CONFIG_IXGB_NAPI is not set | ||
744 | # CONFIG_S2IO is not set | ||
745 | |||
746 | # | ||
747 | # Token Ring devices | ||
748 | # | ||
749 | CONFIG_TR=y | ||
750 | CONFIG_IBMOL=y | ||
751 | # CONFIG_3C359 is not set | ||
752 | # CONFIG_TMS380TR is not set | ||
753 | |||
754 | # | ||
755 | # Wireless LAN (non-hamradio) | ||
756 | # | ||
757 | # CONFIG_NET_RADIO is not set | ||
758 | |||
759 | # | ||
760 | # Wan interfaces | ||
761 | # | ||
762 | # CONFIG_WAN is not set | ||
763 | # CONFIG_FDDI is not set | ||
764 | # CONFIG_HIPPI is not set | ||
765 | CONFIG_PPP=m | ||
766 | # CONFIG_PPP_MULTILINK is not set | ||
767 | # CONFIG_PPP_FILTER is not set | ||
768 | CONFIG_PPP_ASYNC=m | ||
769 | CONFIG_PPP_SYNC_TTY=m | ||
770 | CONFIG_PPP_DEFLATE=m | ||
771 | CONFIG_PPP_BSDCOMP=m | ||
772 | # CONFIG_PPP_MPPE is not set | ||
773 | CONFIG_PPPOE=m | ||
774 | # CONFIG_SLIP is not set | ||
775 | # CONFIG_NET_FC is not set | ||
776 | # CONFIG_SHAPER is not set | ||
777 | CONFIG_NETCONSOLE=y | ||
778 | CONFIG_NETPOLL=y | ||
779 | CONFIG_NETPOLL_RX=y | ||
780 | CONFIG_NETPOLL_TRAP=y | ||
781 | CONFIG_NET_POLL_CONTROLLER=y | ||
782 | |||
783 | # | ||
784 | # ISDN subsystem | ||
785 | # | ||
786 | # CONFIG_ISDN is not set | ||
787 | |||
788 | # | ||
789 | # Telephony Support | ||
790 | # | ||
791 | # CONFIG_PHONE is not set | ||
792 | |||
793 | # | ||
794 | # Input device support | ||
795 | # | ||
796 | CONFIG_INPUT=y | ||
797 | |||
798 | # | ||
799 | # Userland interfaces | ||
800 | # | ||
801 | CONFIG_INPUT_MOUSEDEV=y | ||
802 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
803 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
804 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
805 | # CONFIG_INPUT_JOYDEV is not set | ||
806 | # CONFIG_INPUT_TSDEV is not set | ||
807 | CONFIG_INPUT_EVDEV=m | ||
808 | # CONFIG_INPUT_EVBUG is not set | ||
809 | |||
810 | # | ||
811 | # Input Device Drivers | ||
812 | # | ||
813 | CONFIG_INPUT_KEYBOARD=y | ||
814 | CONFIG_KEYBOARD_ATKBD=y | ||
815 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
816 | # CONFIG_KEYBOARD_LKKBD is not set | ||
817 | # CONFIG_KEYBOARD_XTKBD is not set | ||
818 | # CONFIG_KEYBOARD_NEWTON is not set | ||
819 | CONFIG_INPUT_MOUSE=y | ||
820 | CONFIG_MOUSE_PS2=y | ||
821 | # CONFIG_MOUSE_SERIAL is not set | ||
822 | # CONFIG_MOUSE_VSXXXAA is not set | ||
823 | # CONFIG_INPUT_JOYSTICK is not set | ||
824 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
825 | CONFIG_INPUT_MISC=y | ||
826 | CONFIG_INPUT_PCSPKR=m | ||
827 | # CONFIG_INPUT_UINPUT is not set | ||
828 | |||
829 | # | ||
830 | # Hardware I/O ports | ||
831 | # | ||
832 | CONFIG_SERIO=y | ||
833 | CONFIG_SERIO_I8042=y | ||
834 | # CONFIG_SERIO_SERPORT is not set | ||
835 | # CONFIG_SERIO_PCIPS2 is not set | ||
836 | CONFIG_SERIO_LIBPS2=y | ||
837 | # CONFIG_SERIO_RAW is not set | ||
838 | # CONFIG_GAMEPORT is not set | ||
839 | |||
840 | # | ||
841 | # Character devices | ||
842 | # | ||
843 | CONFIG_VT=y | ||
844 | CONFIG_VT_CONSOLE=y | ||
845 | CONFIG_HW_CONSOLE=y | ||
846 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
847 | |||
848 | # | ||
849 | # Serial drivers | ||
850 | # | ||
851 | CONFIG_SERIAL_8250=y | ||
852 | CONFIG_SERIAL_8250_CONSOLE=y | ||
853 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
854 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
855 | |||
856 | # | ||
857 | # Non-8250 serial port support | ||
858 | # | ||
859 | CONFIG_SERIAL_CORE=y | ||
860 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
861 | # CONFIG_SERIAL_PMACZILOG is not set | ||
862 | CONFIG_SERIAL_ICOM=m | ||
863 | CONFIG_SERIAL_JSM=m | ||
864 | CONFIG_UNIX98_PTYS=y | ||
865 | CONFIG_LEGACY_PTYS=y | ||
866 | CONFIG_LEGACY_PTY_COUNT=256 | ||
867 | CONFIG_HVC_CONSOLE=y | ||
868 | CONFIG_HVCS=m | ||
869 | |||
870 | # | ||
871 | # IPMI | ||
872 | # | ||
873 | # CONFIG_IPMI_HANDLER is not set | ||
874 | |||
875 | # | ||
876 | # Watchdog Cards | ||
877 | # | ||
878 | # CONFIG_WATCHDOG is not set | ||
879 | # CONFIG_RTC is not set | ||
880 | # CONFIG_GEN_RTC is not set | ||
881 | # CONFIG_DTLK is not set | ||
882 | # CONFIG_R3964 is not set | ||
883 | # CONFIG_APPLICOM is not set | ||
884 | |||
885 | # | ||
886 | # Ftape, the floppy tape device driver | ||
887 | # | ||
888 | # CONFIG_AGP is not set | ||
889 | # CONFIG_DRM is not set | ||
890 | CONFIG_RAW_DRIVER=y | ||
891 | CONFIG_MAX_RAW_DEVS=256 | ||
892 | # CONFIG_HANGCHECK_TIMER is not set | ||
893 | |||
894 | # | ||
895 | # TPM devices | ||
896 | # | ||
897 | # CONFIG_TCG_TPM is not set | ||
898 | # CONFIG_TELCLOCK is not set | ||
899 | |||
900 | # | ||
901 | # I2C support | ||
902 | # | ||
903 | CONFIG_I2C=y | ||
904 | CONFIG_I2C_CHARDEV=y | ||
905 | |||
906 | # | ||
907 | # I2C Algorithms | ||
908 | # | ||
909 | CONFIG_I2C_ALGOBIT=y | ||
910 | # CONFIG_I2C_ALGOPCF is not set | ||
911 | # CONFIG_I2C_ALGOPCA is not set | ||
912 | |||
913 | # | ||
914 | # I2C Hardware Bus support | ||
915 | # | ||
916 | # CONFIG_I2C_ALI1535 is not set | ||
917 | # CONFIG_I2C_ALI1563 is not set | ||
918 | # CONFIG_I2C_ALI15X3 is not set | ||
919 | # CONFIG_I2C_AMD756 is not set | ||
920 | CONFIG_I2C_AMD8111=y | ||
921 | # CONFIG_I2C_I801 is not set | ||
922 | # CONFIG_I2C_I810 is not set | ||
923 | # CONFIG_I2C_PIIX4 is not set | ||
924 | CONFIG_I2C_KEYWEST=y | ||
925 | CONFIG_I2C_PMAC_SMU=y | ||
926 | # CONFIG_I2C_NFORCE2 is not set | ||
927 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
928 | # CONFIG_I2C_PROSAVAGE is not set | ||
929 | # CONFIG_I2C_SAVAGE4 is not set | ||
930 | # CONFIG_SCx200_ACB is not set | ||
931 | # CONFIG_I2C_SIS5595 is not set | ||
932 | # CONFIG_I2C_SIS630 is not set | ||
933 | # CONFIG_I2C_SIS96X is not set | ||
934 | # CONFIG_I2C_STUB is not set | ||
935 | # CONFIG_I2C_VIA is not set | ||
936 | # CONFIG_I2C_VIAPRO is not set | ||
937 | # CONFIG_I2C_VOODOO3 is not set | ||
938 | # CONFIG_I2C_PCA_ISA is not set | ||
939 | |||
940 | # | ||
941 | # Miscellaneous I2C Chip support | ||
942 | # | ||
943 | # CONFIG_SENSORS_DS1337 is not set | ||
944 | # CONFIG_SENSORS_DS1374 is not set | ||
945 | # CONFIG_SENSORS_EEPROM is not set | ||
946 | # CONFIG_SENSORS_PCF8574 is not set | ||
947 | # CONFIG_SENSORS_PCA9539 is not set | ||
948 | # CONFIG_SENSORS_PCF8591 is not set | ||
949 | # CONFIG_SENSORS_RTC8564 is not set | ||
950 | # CONFIG_SENSORS_MAX6875 is not set | ||
951 | # CONFIG_RTC_X1205_I2C is not set | ||
952 | # CONFIG_I2C_DEBUG_CORE is not set | ||
953 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
954 | # CONFIG_I2C_DEBUG_BUS is not set | ||
955 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
956 | |||
957 | # | ||
958 | # Dallas's 1-wire bus | ||
959 | # | ||
960 | # CONFIG_W1 is not set | ||
961 | |||
962 | # | ||
963 | # Hardware Monitoring support | ||
964 | # | ||
965 | # CONFIG_HWMON is not set | ||
966 | # CONFIG_HWMON_VID is not set | ||
967 | |||
968 | # | ||
969 | # Misc devices | ||
970 | # | ||
971 | |||
972 | # | ||
973 | # Multimedia Capabilities Port drivers | ||
974 | # | ||
975 | |||
976 | # | ||
977 | # Multimedia devices | ||
978 | # | ||
979 | # CONFIG_VIDEO_DEV is not set | ||
980 | |||
981 | # | ||
982 | # Digital Video Broadcasting Devices | ||
983 | # | ||
984 | # CONFIG_DVB is not set | ||
985 | |||
986 | # | ||
987 | # Graphics support | ||
988 | # | ||
989 | CONFIG_FB=y | ||
990 | CONFIG_FB_CFB_FILLRECT=y | ||
991 | CONFIG_FB_CFB_COPYAREA=y | ||
992 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
993 | CONFIG_FB_MACMODES=y | ||
994 | CONFIG_FB_MODE_HELPERS=y | ||
995 | CONFIG_FB_TILEBLITTING=y | ||
996 | # CONFIG_FB_CIRRUS is not set | ||
997 | # CONFIG_FB_PM2 is not set | ||
998 | # CONFIG_FB_CYBER2000 is not set | ||
999 | CONFIG_FB_OF=y | ||
1000 | # CONFIG_FB_CONTROL is not set | ||
1001 | # CONFIG_FB_PLATINUM is not set | ||
1002 | # CONFIG_FB_VALKYRIE is not set | ||
1003 | # CONFIG_FB_CT65550 is not set | ||
1004 | # CONFIG_FB_ASILIANT is not set | ||
1005 | # CONFIG_FB_IMSTT is not set | ||
1006 | # CONFIG_FB_VGA16 is not set | ||
1007 | # CONFIG_FB_S1D13XXX is not set | ||
1008 | # CONFIG_FB_NVIDIA is not set | ||
1009 | # CONFIG_FB_RIVA is not set | ||
1010 | CONFIG_FB_MATROX=y | ||
1011 | CONFIG_FB_MATROX_MILLENIUM=y | ||
1012 | CONFIG_FB_MATROX_MYSTIQUE=y | ||
1013 | CONFIG_FB_MATROX_G=y | ||
1014 | CONFIG_FB_MATROX_I2C=m | ||
1015 | CONFIG_FB_MATROX_MAVEN=m | ||
1016 | CONFIG_FB_MATROX_MULTIHEAD=y | ||
1017 | # CONFIG_FB_RADEON_OLD is not set | ||
1018 | CONFIG_FB_RADEON=y | ||
1019 | CONFIG_FB_RADEON_I2C=y | ||
1020 | # CONFIG_FB_RADEON_DEBUG is not set | ||
1021 | # CONFIG_FB_ATY128 is not set | ||
1022 | # CONFIG_FB_ATY is not set | ||
1023 | # CONFIG_FB_SAVAGE is not set | ||
1024 | # CONFIG_FB_SIS is not set | ||
1025 | # CONFIG_FB_NEOMAGIC is not set | ||
1026 | # CONFIG_FB_KYRO is not set | ||
1027 | # CONFIG_FB_3DFX is not set | ||
1028 | # CONFIG_FB_VOODOO1 is not set | ||
1029 | # CONFIG_FB_CYBLA is not set | ||
1030 | # CONFIG_FB_TRIDENT is not set | ||
1031 | # CONFIG_FB_VIRTUAL is not set | ||
1032 | |||
1033 | # | ||
1034 | # Console display driver support | ||
1035 | # | ||
1036 | # CONFIG_VGA_CONSOLE is not set | ||
1037 | CONFIG_DUMMY_CONSOLE=y | ||
1038 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
1039 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
1040 | # CONFIG_FONTS is not set | ||
1041 | CONFIG_FONT_8x8=y | ||
1042 | CONFIG_FONT_8x16=y | ||
1043 | |||
1044 | # | ||
1045 | # Logo configuration | ||
1046 | # | ||
1047 | CONFIG_LOGO=y | ||
1048 | CONFIG_LOGO_LINUX_MONO=y | ||
1049 | CONFIG_LOGO_LINUX_VGA16=y | ||
1050 | CONFIG_LOGO_LINUX_CLUT224=y | ||
1051 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | ||
1052 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | ||
1053 | CONFIG_BACKLIGHT_DEVICE=y | ||
1054 | CONFIG_LCD_CLASS_DEVICE=y | ||
1055 | CONFIG_LCD_DEVICE=y | ||
1056 | |||
1057 | # | ||
1058 | # Sound | ||
1059 | # | ||
1060 | CONFIG_SOUND=m | ||
1061 | |||
1062 | # | ||
1063 | # Advanced Linux Sound Architecture | ||
1064 | # | ||
1065 | CONFIG_SND=m | ||
1066 | CONFIG_SND_TIMER=m | ||
1067 | CONFIG_SND_PCM=m | ||
1068 | CONFIG_SND_SEQUENCER=m | ||
1069 | CONFIG_SND_SEQ_DUMMY=m | ||
1070 | CONFIG_SND_OSSEMUL=y | ||
1071 | CONFIG_SND_MIXER_OSS=m | ||
1072 | CONFIG_SND_PCM_OSS=m | ||
1073 | CONFIG_SND_SEQUENCER_OSS=y | ||
1074 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
1075 | # CONFIG_SND_DEBUG is not set | ||
1076 | CONFIG_SND_GENERIC_DRIVER=y | ||
1077 | |||
1078 | # | ||
1079 | # Generic devices | ||
1080 | # | ||
1081 | # CONFIG_SND_DUMMY is not set | ||
1082 | # CONFIG_SND_VIRMIDI is not set | ||
1083 | # CONFIG_SND_MTPAV is not set | ||
1084 | # CONFIG_SND_SERIAL_U16550 is not set | ||
1085 | # CONFIG_SND_MPU401 is not set | ||
1086 | |||
1087 | # | ||
1088 | # PCI devices | ||
1089 | # | ||
1090 | # CONFIG_SND_ALI5451 is not set | ||
1091 | # CONFIG_SND_ATIIXP is not set | ||
1092 | # CONFIG_SND_ATIIXP_MODEM is not set | ||
1093 | # CONFIG_SND_AU8810 is not set | ||
1094 | # CONFIG_SND_AU8820 is not set | ||
1095 | # CONFIG_SND_AU8830 is not set | ||
1096 | # CONFIG_SND_AZT3328 is not set | ||
1097 | # CONFIG_SND_BT87X is not set | ||
1098 | # CONFIG_SND_CS46XX is not set | ||
1099 | # CONFIG_SND_CS4281 is not set | ||
1100 | # CONFIG_SND_EMU10K1 is not set | ||
1101 | # CONFIG_SND_EMU10K1X is not set | ||
1102 | # CONFIG_SND_CA0106 is not set | ||
1103 | # CONFIG_SND_KORG1212 is not set | ||
1104 | # CONFIG_SND_MIXART is not set | ||
1105 | # CONFIG_SND_NM256 is not set | ||
1106 | # CONFIG_SND_RME32 is not set | ||
1107 | # CONFIG_SND_RME96 is not set | ||
1108 | # CONFIG_SND_RME9652 is not set | ||
1109 | # CONFIG_SND_HDSP is not set | ||
1110 | # CONFIG_SND_HDSPM is not set | ||
1111 | # CONFIG_SND_TRIDENT is not set | ||
1112 | # CONFIG_SND_YMFPCI is not set | ||
1113 | # CONFIG_SND_AD1889 is not set | ||
1114 | # CONFIG_SND_ALS4000 is not set | ||
1115 | # CONFIG_SND_CMIPCI is not set | ||
1116 | # CONFIG_SND_ENS1370 is not set | ||
1117 | # CONFIG_SND_ENS1371 is not set | ||
1118 | # CONFIG_SND_ES1938 is not set | ||
1119 | # CONFIG_SND_ES1968 is not set | ||
1120 | # CONFIG_SND_MAESTRO3 is not set | ||
1121 | # CONFIG_SND_FM801 is not set | ||
1122 | # CONFIG_SND_ICE1712 is not set | ||
1123 | # CONFIG_SND_ICE1724 is not set | ||
1124 | # CONFIG_SND_INTEL8X0 is not set | ||
1125 | # CONFIG_SND_INTEL8X0M is not set | ||
1126 | # CONFIG_SND_SONICVIBES is not set | ||
1127 | # CONFIG_SND_VIA82XX is not set | ||
1128 | # CONFIG_SND_VIA82XX_MODEM is not set | ||
1129 | # CONFIG_SND_VX222 is not set | ||
1130 | # CONFIG_SND_HDA_INTEL is not set | ||
1131 | |||
1132 | # | ||
1133 | # ALSA PowerMac devices | ||
1134 | # | ||
1135 | CONFIG_SND_POWERMAC=m | ||
1136 | CONFIG_SND_POWERMAC_AUTO_DRC=y | ||
1137 | |||
1138 | # | ||
1139 | # USB devices | ||
1140 | # | ||
1141 | # CONFIG_SND_USB_AUDIO is not set | ||
1142 | # CONFIG_SND_USB_USX2Y is not set | ||
1143 | |||
1144 | # | ||
1145 | # Open Sound System | ||
1146 | # | ||
1147 | # CONFIG_SOUND_PRIME is not set | ||
1148 | |||
1149 | # | ||
1150 | # USB support | ||
1151 | # | ||
1152 | CONFIG_USB_ARCH_HAS_HCD=y | ||
1153 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
1154 | CONFIG_USB=y | ||
1155 | # CONFIG_USB_DEBUG is not set | ||
1156 | |||
1157 | # | ||
1158 | # Miscellaneous USB options | ||
1159 | # | ||
1160 | CONFIG_USB_DEVICEFS=y | ||
1161 | # CONFIG_USB_BANDWIDTH is not set | ||
1162 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
1163 | # CONFIG_USB_OTG is not set | ||
1164 | |||
1165 | # | ||
1166 | # USB Host Controller Drivers | ||
1167 | # | ||
1168 | CONFIG_USB_EHCI_HCD=y | ||
1169 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
1170 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | ||
1171 | # CONFIG_USB_ISP116X_HCD is not set | ||
1172 | CONFIG_USB_OHCI_HCD=y | ||
1173 | # CONFIG_USB_OHCI_BIG_ENDIAN is not set | ||
1174 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
1175 | # CONFIG_USB_UHCI_HCD is not set | ||
1176 | # CONFIG_USB_SL811_HCD is not set | ||
1177 | |||
1178 | # | ||
1179 | # USB Device Class drivers | ||
1180 | # | ||
1181 | # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set | ||
1182 | # CONFIG_USB_ACM is not set | ||
1183 | # CONFIG_USB_PRINTER is not set | ||
1184 | |||
1185 | # | ||
1186 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
1187 | # | ||
1188 | |||
1189 | # | ||
1190 | # may also be needed; see USB_STORAGE Help for more information | ||
1191 | # | ||
1192 | CONFIG_USB_STORAGE=m | ||
1193 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1194 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
1195 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
1196 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
1197 | # CONFIG_USB_STORAGE_DPCM is not set | ||
1198 | # CONFIG_USB_STORAGE_USBAT is not set | ||
1199 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
1200 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
1201 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
1202 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1203 | |||
1204 | # | ||
1205 | # USB Input Devices | ||
1206 | # | ||
1207 | CONFIG_USB_HID=y | ||
1208 | CONFIG_USB_HIDINPUT=y | ||
1209 | # CONFIG_HID_FF is not set | ||
1210 | CONFIG_USB_HIDDEV=y | ||
1211 | # CONFIG_USB_AIPTEK is not set | ||
1212 | # CONFIG_USB_WACOM is not set | ||
1213 | # CONFIG_USB_ACECAD is not set | ||
1214 | # CONFIG_USB_KBTAB is not set | ||
1215 | # CONFIG_USB_POWERMATE is not set | ||
1216 | # CONFIG_USB_MTOUCH is not set | ||
1217 | # CONFIG_USB_ITMTOUCH is not set | ||
1218 | # CONFIG_USB_EGALAX is not set | ||
1219 | # CONFIG_USB_YEALINK is not set | ||
1220 | # CONFIG_USB_XPAD is not set | ||
1221 | # CONFIG_USB_ATI_REMOTE is not set | ||
1222 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
1223 | # CONFIG_USB_APPLETOUCH is not set | ||
1224 | |||
1225 | # | ||
1226 | # USB Imaging devices | ||
1227 | # | ||
1228 | # CONFIG_USB_MDC800 is not set | ||
1229 | # CONFIG_USB_MICROTEK is not set | ||
1230 | |||
1231 | # | ||
1232 | # USB Multimedia devices | ||
1233 | # | ||
1234 | # CONFIG_USB_DABUSB is not set | ||
1235 | |||
1236 | # | ||
1237 | # Video4Linux support is needed for USB Multimedia device support | ||
1238 | # | ||
1239 | |||
1240 | # | ||
1241 | # USB Network Adapters | ||
1242 | # | ||
1243 | # CONFIG_USB_CATC is not set | ||
1244 | # CONFIG_USB_KAWETH is not set | ||
1245 | # CONFIG_USB_PEGASUS is not set | ||
1246 | # CONFIG_USB_RTL8150 is not set | ||
1247 | # CONFIG_USB_USBNET is not set | ||
1248 | # CONFIG_USB_MON is not set | ||
1249 | |||
1250 | # | ||
1251 | # USB port drivers | ||
1252 | # | ||
1253 | |||
1254 | # | ||
1255 | # USB Serial Converter support | ||
1256 | # | ||
1257 | # CONFIG_USB_SERIAL is not set | ||
1258 | |||
1259 | # | ||
1260 | # USB Miscellaneous drivers | ||
1261 | # | ||
1262 | # CONFIG_USB_EMI62 is not set | ||
1263 | # CONFIG_USB_EMI26 is not set | ||
1264 | # CONFIG_USB_AUERSWALD is not set | ||
1265 | # CONFIG_USB_RIO500 is not set | ||
1266 | # CONFIG_USB_LEGOTOWER is not set | ||
1267 | # CONFIG_USB_LCD is not set | ||
1268 | # CONFIG_USB_LED is not set | ||
1269 | # CONFIG_USB_CYTHERM is not set | ||
1270 | # CONFIG_USB_PHIDGETKIT is not set | ||
1271 | # CONFIG_USB_PHIDGETSERVO is not set | ||
1272 | # CONFIG_USB_IDMOUSE is not set | ||
1273 | # CONFIG_USB_SISUSBVGA is not set | ||
1274 | # CONFIG_USB_LD is not set | ||
1275 | # CONFIG_USB_TEST is not set | ||
1276 | |||
1277 | # | ||
1278 | # USB DSL modem support | ||
1279 | # | ||
1280 | |||
1281 | # | ||
1282 | # USB Gadget Support | ||
1283 | # | ||
1284 | # CONFIG_USB_GADGET is not set | ||
1285 | |||
1286 | # | ||
1287 | # MMC/SD Card support | ||
1288 | # | ||
1289 | # CONFIG_MMC is not set | ||
1290 | |||
1291 | # | ||
1292 | # InfiniBand support | ||
1293 | # | ||
1294 | CONFIG_INFINIBAND=m | ||
1295 | # CONFIG_INFINIBAND_USER_MAD is not set | ||
1296 | # CONFIG_INFINIBAND_USER_ACCESS is not set | ||
1297 | CONFIG_INFINIBAND_MTHCA=m | ||
1298 | # CONFIG_INFINIBAND_MTHCA_DEBUG is not set | ||
1299 | CONFIG_INFINIBAND_IPOIB=m | ||
1300 | # CONFIG_INFINIBAND_IPOIB_DEBUG is not set | ||
1301 | # CONFIG_INFINIBAND_SRP is not set | ||
1302 | |||
1303 | # | ||
1304 | # SN Devices | ||
1305 | # | ||
1306 | |||
1307 | # | ||
1308 | # File systems | ||
1309 | # | ||
1310 | CONFIG_EXT2_FS=y | ||
1311 | CONFIG_EXT2_FS_XATTR=y | ||
1312 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1313 | CONFIG_EXT2_FS_SECURITY=y | ||
1314 | CONFIG_EXT2_FS_XIP=y | ||
1315 | CONFIG_FS_XIP=y | ||
1316 | CONFIG_EXT3_FS=y | ||
1317 | CONFIG_EXT3_FS_XATTR=y | ||
1318 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
1319 | CONFIG_EXT3_FS_SECURITY=y | ||
1320 | CONFIG_JBD=y | ||
1321 | # CONFIG_JBD_DEBUG is not set | ||
1322 | CONFIG_FS_MBCACHE=y | ||
1323 | CONFIG_REISERFS_FS=y | ||
1324 | # CONFIG_REISERFS_CHECK is not set | ||
1325 | # CONFIG_REISERFS_PROC_INFO is not set | ||
1326 | CONFIG_REISERFS_FS_XATTR=y | ||
1327 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
1328 | CONFIG_REISERFS_FS_SECURITY=y | ||
1329 | CONFIG_JFS_FS=y | ||
1330 | CONFIG_JFS_POSIX_ACL=y | ||
1331 | CONFIG_JFS_SECURITY=y | ||
1332 | # CONFIG_JFS_DEBUG is not set | ||
1333 | # CONFIG_JFS_STATISTICS is not set | ||
1334 | CONFIG_FS_POSIX_ACL=y | ||
1335 | CONFIG_XFS_FS=m | ||
1336 | CONFIG_XFS_EXPORT=y | ||
1337 | # CONFIG_XFS_QUOTA is not set | ||
1338 | CONFIG_XFS_SECURITY=y | ||
1339 | CONFIG_XFS_POSIX_ACL=y | ||
1340 | # CONFIG_XFS_RT is not set | ||
1341 | # CONFIG_MINIX_FS is not set | ||
1342 | # CONFIG_ROMFS_FS is not set | ||
1343 | CONFIG_INOTIFY=y | ||
1344 | # CONFIG_QUOTA is not set | ||
1345 | CONFIG_DNOTIFY=y | ||
1346 | CONFIG_AUTOFS_FS=y | ||
1347 | # CONFIG_AUTOFS4_FS is not set | ||
1348 | # CONFIG_FUSE_FS is not set | ||
1349 | |||
1350 | # | ||
1351 | # CD-ROM/DVD Filesystems | ||
1352 | # | ||
1353 | CONFIG_ISO9660_FS=y | ||
1354 | # CONFIG_JOLIET is not set | ||
1355 | # CONFIG_ZISOFS is not set | ||
1356 | CONFIG_UDF_FS=m | ||
1357 | CONFIG_UDF_NLS=y | ||
1358 | |||
1359 | # | ||
1360 | # DOS/FAT/NT Filesystems | ||
1361 | # | ||
1362 | CONFIG_FAT_FS=y | ||
1363 | CONFIG_MSDOS_FS=y | ||
1364 | CONFIG_VFAT_FS=y | ||
1365 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1366 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1367 | # CONFIG_NTFS_FS is not set | ||
1368 | |||
1369 | # | ||
1370 | # Pseudo filesystems | ||
1371 | # | ||
1372 | CONFIG_PROC_FS=y | ||
1373 | CONFIG_PROC_KCORE=y | ||
1374 | CONFIG_SYSFS=y | ||
1375 | CONFIG_TMPFS=y | ||
1376 | CONFIG_HUGETLBFS=y | ||
1377 | CONFIG_HUGETLB_PAGE=y | ||
1378 | CONFIG_RAMFS=y | ||
1379 | # CONFIG_RELAYFS_FS is not set | ||
1380 | |||
1381 | # | ||
1382 | # Miscellaneous filesystems | ||
1383 | # | ||
1384 | # CONFIG_ADFS_FS is not set | ||
1385 | # CONFIG_AFFS_FS is not set | ||
1386 | CONFIG_HFS_FS=m | ||
1387 | CONFIG_HFSPLUS_FS=m | ||
1388 | # CONFIG_BEFS_FS is not set | ||
1389 | # CONFIG_BFS_FS is not set | ||
1390 | # CONFIG_EFS_FS is not set | ||
1391 | CONFIG_CRAMFS=y | ||
1392 | # CONFIG_VXFS_FS is not set | ||
1393 | # CONFIG_HPFS_FS is not set | ||
1394 | # CONFIG_QNX4FS_FS is not set | ||
1395 | # CONFIG_SYSV_FS is not set | ||
1396 | # CONFIG_UFS_FS is not set | ||
1397 | |||
1398 | # | ||
1399 | # Network File Systems | ||
1400 | # | ||
1401 | CONFIG_NFS_FS=y | ||
1402 | CONFIG_NFS_V3=y | ||
1403 | CONFIG_NFS_V3_ACL=y | ||
1404 | CONFIG_NFS_V4=y | ||
1405 | # CONFIG_NFS_DIRECTIO is not set | ||
1406 | CONFIG_NFSD=m | ||
1407 | CONFIG_NFSD_V2_ACL=y | ||
1408 | CONFIG_NFSD_V3=y | ||
1409 | CONFIG_NFSD_V3_ACL=y | ||
1410 | CONFIG_NFSD_V4=y | ||
1411 | CONFIG_NFSD_TCP=y | ||
1412 | CONFIG_LOCKD=y | ||
1413 | CONFIG_LOCKD_V4=y | ||
1414 | CONFIG_EXPORTFS=m | ||
1415 | CONFIG_NFS_ACL_SUPPORT=y | ||
1416 | CONFIG_NFS_COMMON=y | ||
1417 | CONFIG_SUNRPC=y | ||
1418 | CONFIG_SUNRPC_GSS=y | ||
1419 | CONFIG_RPCSEC_GSS_KRB5=y | ||
1420 | CONFIG_RPCSEC_GSS_SPKM3=m | ||
1421 | # CONFIG_SMB_FS is not set | ||
1422 | CONFIG_CIFS=m | ||
1423 | # CONFIG_CIFS_STATS is not set | ||
1424 | CONFIG_CIFS_XATTR=y | ||
1425 | CONFIG_CIFS_POSIX=y | ||
1426 | # CONFIG_CIFS_EXPERIMENTAL is not set | ||
1427 | # CONFIG_NCP_FS is not set | ||
1428 | # CONFIG_CODA_FS is not set | ||
1429 | # CONFIG_AFS_FS is not set | ||
1430 | # CONFIG_9P_FS is not set | ||
1431 | |||
1432 | # | ||
1433 | # Partition Types | ||
1434 | # | ||
1435 | CONFIG_PARTITION_ADVANCED=y | ||
1436 | # CONFIG_ACORN_PARTITION is not set | ||
1437 | # CONFIG_OSF_PARTITION is not set | ||
1438 | # CONFIG_AMIGA_PARTITION is not set | ||
1439 | # CONFIG_ATARI_PARTITION is not set | ||
1440 | CONFIG_MAC_PARTITION=y | ||
1441 | CONFIG_MSDOS_PARTITION=y | ||
1442 | # CONFIG_BSD_DISKLABEL is not set | ||
1443 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1444 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1445 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1446 | # CONFIG_LDM_PARTITION is not set | ||
1447 | # CONFIG_SGI_PARTITION is not set | ||
1448 | # CONFIG_ULTRIX_PARTITION is not set | ||
1449 | # CONFIG_SUN_PARTITION is not set | ||
1450 | # CONFIG_EFI_PARTITION is not set | ||
1451 | |||
1452 | # | ||
1453 | # Native Language Support | ||
1454 | # | ||
1455 | CONFIG_NLS=y | ||
1456 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1457 | CONFIG_NLS_CODEPAGE_437=y | ||
1458 | CONFIG_NLS_CODEPAGE_737=m | ||
1459 | CONFIG_NLS_CODEPAGE_775=m | ||
1460 | CONFIG_NLS_CODEPAGE_850=m | ||
1461 | CONFIG_NLS_CODEPAGE_852=m | ||
1462 | CONFIG_NLS_CODEPAGE_855=m | ||
1463 | CONFIG_NLS_CODEPAGE_857=m | ||
1464 | CONFIG_NLS_CODEPAGE_860=m | ||
1465 | CONFIG_NLS_CODEPAGE_861=m | ||
1466 | CONFIG_NLS_CODEPAGE_862=m | ||
1467 | CONFIG_NLS_CODEPAGE_863=m | ||
1468 | CONFIG_NLS_CODEPAGE_864=m | ||
1469 | CONFIG_NLS_CODEPAGE_865=m | ||
1470 | CONFIG_NLS_CODEPAGE_866=m | ||
1471 | CONFIG_NLS_CODEPAGE_869=m | ||
1472 | CONFIG_NLS_CODEPAGE_936=m | ||
1473 | CONFIG_NLS_CODEPAGE_950=m | ||
1474 | CONFIG_NLS_CODEPAGE_932=m | ||
1475 | CONFIG_NLS_CODEPAGE_949=m | ||
1476 | CONFIG_NLS_CODEPAGE_874=m | ||
1477 | CONFIG_NLS_ISO8859_8=m | ||
1478 | CONFIG_NLS_CODEPAGE_1250=m | ||
1479 | CONFIG_NLS_CODEPAGE_1251=m | ||
1480 | CONFIG_NLS_ASCII=m | ||
1481 | CONFIG_NLS_ISO8859_1=y | ||
1482 | CONFIG_NLS_ISO8859_2=m | ||
1483 | CONFIG_NLS_ISO8859_3=m | ||
1484 | CONFIG_NLS_ISO8859_4=m | ||
1485 | CONFIG_NLS_ISO8859_5=m | ||
1486 | CONFIG_NLS_ISO8859_6=m | ||
1487 | CONFIG_NLS_ISO8859_7=m | ||
1488 | CONFIG_NLS_ISO8859_9=m | ||
1489 | CONFIG_NLS_ISO8859_13=m | ||
1490 | CONFIG_NLS_ISO8859_14=m | ||
1491 | CONFIG_NLS_ISO8859_15=m | ||
1492 | CONFIG_NLS_KOI8_R=m | ||
1493 | CONFIG_NLS_KOI8_U=m | ||
1494 | CONFIG_NLS_UTF8=m | ||
1495 | |||
1496 | # | ||
1497 | # Library routines | ||
1498 | # | ||
1499 | CONFIG_CRC_CCITT=m | ||
1500 | # CONFIG_CRC16 is not set | ||
1501 | CONFIG_CRC32=y | ||
1502 | CONFIG_LIBCRC32C=m | ||
1503 | CONFIG_ZLIB_INFLATE=y | ||
1504 | CONFIG_ZLIB_DEFLATE=m | ||
1505 | CONFIG_TEXTSEARCH=y | ||
1506 | CONFIG_TEXTSEARCH_KMP=m | ||
1507 | CONFIG_TEXTSEARCH_BM=m | ||
1508 | CONFIG_TEXTSEARCH_FSM=m | ||
1509 | |||
1510 | # | ||
1511 | # Instrumentation Support | ||
1512 | # | ||
1513 | CONFIG_PROFILING=y | ||
1514 | CONFIG_OPROFILE=y | ||
1515 | # CONFIG_KPROBES is not set | ||
1516 | |||
1517 | # | ||
1518 | # Kernel hacking | ||
1519 | # | ||
1520 | # CONFIG_PRINTK_TIME is not set | ||
1521 | CONFIG_DEBUG_KERNEL=y | ||
1522 | CONFIG_MAGIC_SYSRQ=y | ||
1523 | CONFIG_LOG_BUF_SHIFT=17 | ||
1524 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1525 | # CONFIG_SCHEDSTATS is not set | ||
1526 | # CONFIG_DEBUG_SLAB is not set | ||
1527 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1528 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1529 | # CONFIG_DEBUG_KOBJECT is not set | ||
1530 | # CONFIG_DEBUG_INFO is not set | ||
1531 | CONFIG_DEBUG_FS=y | ||
1532 | # CONFIG_DEBUG_VM is not set | ||
1533 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1534 | CONFIG_DEBUG_STACKOVERFLOW=y | ||
1535 | CONFIG_DEBUG_STACK_USAGE=y | ||
1536 | CONFIG_DEBUGGER=y | ||
1537 | CONFIG_XMON=y | ||
1538 | # CONFIG_XMON_DEFAULT is not set | ||
1539 | CONFIG_IRQSTACKS=y | ||
1540 | CONFIG_BOOTX_TEXT=y | ||
1541 | |||
1542 | # | ||
1543 | # Security options | ||
1544 | # | ||
1545 | # CONFIG_KEYS is not set | ||
1546 | # CONFIG_SECURITY is not set | ||
1547 | |||
1548 | # | ||
1549 | # Cryptographic options | ||
1550 | # | ||
1551 | CONFIG_CRYPTO=y | ||
1552 | CONFIG_CRYPTO_HMAC=y | ||
1553 | CONFIG_CRYPTO_NULL=m | ||
1554 | CONFIG_CRYPTO_MD4=m | ||
1555 | CONFIG_CRYPTO_MD5=y | ||
1556 | CONFIG_CRYPTO_SHA1=m | ||
1557 | CONFIG_CRYPTO_SHA256=m | ||
1558 | CONFIG_CRYPTO_SHA512=m | ||
1559 | CONFIG_CRYPTO_WP512=m | ||
1560 | CONFIG_CRYPTO_TGR192=m | ||
1561 | CONFIG_CRYPTO_DES=y | ||
1562 | CONFIG_CRYPTO_BLOWFISH=m | ||
1563 | CONFIG_CRYPTO_TWOFISH=m | ||
1564 | CONFIG_CRYPTO_SERPENT=m | ||
1565 | CONFIG_CRYPTO_AES=m | ||
1566 | CONFIG_CRYPTO_CAST5=m | ||
1567 | CONFIG_CRYPTO_CAST6=m | ||
1568 | CONFIG_CRYPTO_TEA=m | ||
1569 | CONFIG_CRYPTO_ARC4=m | ||
1570 | CONFIG_CRYPTO_KHAZAD=m | ||
1571 | CONFIG_CRYPTO_ANUBIS=m | ||
1572 | CONFIG_CRYPTO_DEFLATE=m | ||
1573 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
1574 | CONFIG_CRYPTO_CRC32C=m | ||
1575 | CONFIG_CRYPTO_TEST=m | ||
1576 | |||
1577 | # | ||
1578 | # Hardware crypto devices | ||
1579 | # | ||
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index b4745c918a4a..b589b196eb3f 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -165,7 +165,6 @@ CONFIG_SPARSEMEM_EXTREME=y | |||
165 | # CONFIG_MEMORY_HOTPLUG is not set | 165 | # CONFIG_MEMORY_HOTPLUG is not set |
166 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | 166 | CONFIG_SPLIT_PTLOCK_CPUS=4096 |
167 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y | 167 | CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y |
168 | CONFIG_NODES_SPAN_OTHER_NODES=y | ||
169 | # CONFIG_PPC_64K_PAGES is not set | 168 | # CONFIG_PPC_64K_PAGES is not set |
170 | CONFIG_SCHED_SMT=y | 169 | CONFIG_SCHED_SMT=y |
171 | CONFIG_PROC_DEVICETREE=y | 170 | CONFIG_PROC_DEVICETREE=y |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 4970e3721a84..9ed551b6c172 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -12,12 +12,12 @@ CFLAGS_btext.o += -fPIC | |||
12 | endif | 12 | endif |
13 | 13 | ||
14 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ | 14 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ |
15 | irq.o signal_32.o pmc.o vdso.o | 15 | irq.o align.o signal_32.o pmc.o vdso.o |
16 | obj-y += vdso32/ | 16 | obj-y += vdso32/ |
17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ | 17 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ |
18 | signal_64.o ptrace32.o systbl.o \ | 18 | signal_64.o ptrace32.o systbl.o \ |
19 | paca.o ioctl32.o cpu_setup_power4.o \ | 19 | paca.o ioctl32.o cpu_setup_power4.o \ |
20 | firmware.o sysfs.o udbg.o | 20 | firmware.o sysfs.o udbg.o idle_64.o |
21 | obj-$(CONFIG_PPC64) += vdso64/ | 21 | obj-$(CONFIG_PPC64) += vdso64/ |
22 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o | 22 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o |
23 | obj-$(CONFIG_POWER4) += idle_power4.o | 23 | obj-$(CONFIG_POWER4) += idle_power4.o |
@@ -35,6 +35,7 @@ obj-$(CONFIG_PPC_PSERIES) += udbg_16550.o | |||
35 | obj-$(CONFIG_PPC_MAPLE) += udbg_16550.o | 35 | obj-$(CONFIG_PPC_MAPLE) += udbg_16550.o |
36 | udbgscc-$(CONFIG_PPC64) := udbg_scc.o | 36 | udbgscc-$(CONFIG_PPC64) := udbg_scc.o |
37 | obj-$(CONFIG_PPC_PMAC) += $(udbgscc-y) | 37 | obj-$(CONFIG_PPC_PMAC) += $(udbgscc-y) |
38 | obj64-$(CONFIG_PPC_MULTIPLATFORM) += nvram_64.o | ||
38 | 39 | ||
39 | ifeq ($(CONFIG_PPC_MERGE),y) | 40 | ifeq ($(CONFIG_PPC_MERGE),y) |
40 | 41 | ||
@@ -78,5 +79,7 @@ smpobj-$(CONFIG_SMP) += smp.o | |||
78 | 79 | ||
79 | endif | 80 | endif |
80 | 81 | ||
82 | obj-$(CONFIG_PPC64) += $(obj64-y) | ||
83 | |||
81 | extra-$(CONFIG_PPC_FPU) += fpu.o | 84 | extra-$(CONFIG_PPC_FPU) += fpu.o |
82 | extra-$(CONFIG_PPC64) += entry_64.o | 85 | extra-$(CONFIG_PPC64) += entry_64.o |
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c new file mode 100644 index 000000000000..faaec9c6f78f --- /dev/null +++ b/arch/powerpc/kernel/align.c | |||
@@ -0,0 +1,530 @@ | |||
1 | /* align.c - handle alignment exceptions for the Power PC. | ||
2 | * | ||
3 | * Copyright (c) 1996 Paul Mackerras <paulus@cs.anu.edu.au> | ||
4 | * Copyright (c) 1998-1999 TiVo, Inc. | ||
5 | * PowerPC 403GCX modifications. | ||
6 | * Copyright (c) 1999 Grant Erickson <grant@lcse.umn.edu> | ||
7 | * PowerPC 403GCX/405GP modifications. | ||
8 | * Copyright (c) 2001-2002 PPC64 team, IBM Corp | ||
9 | * 64-bit and Power4 support | ||
10 | * Copyright (c) 2005 Benjamin Herrenschmidt, IBM Corp | ||
11 | * <benh@kernel.crashing.org> | ||
12 | * Merge ppc32 and ppc64 implementations | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or | ||
15 | * modify it under the terms of the GNU General Public License | ||
16 | * as published by the Free Software Foundation; either version | ||
17 | * 2 of the License, or (at your option) any later version. | ||
18 | */ | ||
19 | |||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/mm.h> | ||
22 | #include <asm/processor.h> | ||
23 | #include <asm/uaccess.h> | ||
24 | #include <asm/system.h> | ||
25 | #include <asm/cache.h> | ||
26 | #include <asm/cputable.h> | ||
27 | |||
28 | struct aligninfo { | ||
29 | unsigned char len; | ||
30 | unsigned char flags; | ||
31 | }; | ||
32 | |||
33 | #define IS_XFORM(inst) (((inst) >> 26) == 31) | ||
34 | #define IS_DSFORM(inst) (((inst) >> 26) >= 56) | ||
35 | |||
36 | #define INVALID { 0, 0 } | ||
37 | |||
38 | #define LD 1 /* load */ | ||
39 | #define ST 2 /* store */ | ||
40 | #define SE 4 /* sign-extend value */ | ||
41 | #define F 8 /* to/from fp regs */ | ||
42 | #define U 0x10 /* update index register */ | ||
43 | #define M 0x20 /* multiple load/store */ | ||
44 | #define SW 0x40 /* byte swap int or ... */ | ||
45 | #define S 0x40 /* ... single-precision fp */ | ||
46 | #define SX 0x40 /* byte count in XER */ | ||
47 | #define HARD 0x80 /* string, stwcx. */ | ||
48 | |||
49 | #define DCBZ 0x5f /* 8xx/82xx dcbz faults when cache not enabled */ | ||
50 | |||
51 | #define SWAP(a, b) (t = (a), (a) = (b), (b) = t) | ||
52 | |||
53 | /* | ||
54 | * The PowerPC stores certain bits of the instruction that caused the | ||
55 | * alignment exception in the DSISR register. This array maps those | ||
56 | * bits to information about the operand length and what the | ||
57 | * instruction would do. | ||
58 | */ | ||
59 | static struct aligninfo aligninfo[128] = { | ||
60 | { 4, LD }, /* 00 0 0000: lwz / lwarx */ | ||
61 | INVALID, /* 00 0 0001 */ | ||
62 | { 4, ST }, /* 00 0 0010: stw */ | ||
63 | INVALID, /* 00 0 0011 */ | ||
64 | { 2, LD }, /* 00 0 0100: lhz */ | ||
65 | { 2, LD+SE }, /* 00 0 0101: lha */ | ||
66 | { 2, ST }, /* 00 0 0110: sth */ | ||
67 | { 4, LD+M }, /* 00 0 0111: lmw */ | ||
68 | { 4, LD+F+S }, /* 00 0 1000: lfs */ | ||
69 | { 8, LD+F }, /* 00 0 1001: lfd */ | ||
70 | { 4, ST+F+S }, /* 00 0 1010: stfs */ | ||
71 | { 8, ST+F }, /* 00 0 1011: stfd */ | ||
72 | INVALID, /* 00 0 1100 */ | ||
73 | { 8, LD }, /* 00 0 1101: ld/ldu/lwa */ | ||
74 | INVALID, /* 00 0 1110 */ | ||
75 | { 8, ST }, /* 00 0 1111: std/stdu */ | ||
76 | { 4, LD+U }, /* 00 1 0000: lwzu */ | ||
77 | INVALID, /* 00 1 0001 */ | ||
78 | { 4, ST+U }, /* 00 1 0010: stwu */ | ||
79 | INVALID, /* 00 1 0011 */ | ||
80 | { 2, LD+U }, /* 00 1 0100: lhzu */ | ||
81 | { 2, LD+SE+U }, /* 00 1 0101: lhau */ | ||
82 | { 2, ST+U }, /* 00 1 0110: sthu */ | ||
83 | { 4, ST+M }, /* 00 1 0111: stmw */ | ||
84 | { 4, LD+F+S+U }, /* 00 1 1000: lfsu */ | ||
85 | { 8, LD+F+U }, /* 00 1 1001: lfdu */ | ||
86 | { 4, ST+F+S+U }, /* 00 1 1010: stfsu */ | ||
87 | { 8, ST+F+U }, /* 00 1 1011: stfdu */ | ||
88 | INVALID, /* 00 1 1100 */ | ||
89 | INVALID, /* 00 1 1101 */ | ||
90 | INVALID, /* 00 1 1110 */ | ||
91 | INVALID, /* 00 1 1111 */ | ||
92 | { 8, LD }, /* 01 0 0000: ldx */ | ||
93 | INVALID, /* 01 0 0001 */ | ||
94 | { 8, ST }, /* 01 0 0010: stdx */ | ||
95 | INVALID, /* 01 0 0011 */ | ||
96 | INVALID, /* 01 0 0100 */ | ||
97 | { 4, LD+SE }, /* 01 0 0101: lwax */ | ||
98 | INVALID, /* 01 0 0110 */ | ||
99 | INVALID, /* 01 0 0111 */ | ||
100 | { 4, LD+M+HARD+SX }, /* 01 0 1000: lswx */ | ||
101 | { 4, LD+M+HARD }, /* 01 0 1001: lswi */ | ||
102 | { 4, ST+M+HARD+SX }, /* 01 0 1010: stswx */ | ||
103 | { 4, ST+M+HARD }, /* 01 0 1011: stswi */ | ||
104 | INVALID, /* 01 0 1100 */ | ||
105 | { 8, LD+U }, /* 01 0 1101: ldu */ | ||
106 | INVALID, /* 01 0 1110 */ | ||
107 | { 8, ST+U }, /* 01 0 1111: stdu */ | ||
108 | { 8, LD+U }, /* 01 1 0000: ldux */ | ||
109 | INVALID, /* 01 1 0001 */ | ||
110 | { 8, ST+U }, /* 01 1 0010: stdux */ | ||
111 | INVALID, /* 01 1 0011 */ | ||
112 | INVALID, /* 01 1 0100 */ | ||
113 | { 4, LD+SE+U }, /* 01 1 0101: lwaux */ | ||
114 | INVALID, /* 01 1 0110 */ | ||
115 | INVALID, /* 01 1 0111 */ | ||
116 | INVALID, /* 01 1 1000 */ | ||
117 | INVALID, /* 01 1 1001 */ | ||
118 | INVALID, /* 01 1 1010 */ | ||
119 | INVALID, /* 01 1 1011 */ | ||
120 | INVALID, /* 01 1 1100 */ | ||
121 | INVALID, /* 01 1 1101 */ | ||
122 | INVALID, /* 01 1 1110 */ | ||
123 | INVALID, /* 01 1 1111 */ | ||
124 | INVALID, /* 10 0 0000 */ | ||
125 | INVALID, /* 10 0 0001 */ | ||
126 | INVALID, /* 10 0 0010: stwcx. */ | ||
127 | INVALID, /* 10 0 0011 */ | ||
128 | INVALID, /* 10 0 0100 */ | ||
129 | INVALID, /* 10 0 0101 */ | ||
130 | INVALID, /* 10 0 0110 */ | ||
131 | INVALID, /* 10 0 0111 */ | ||
132 | { 4, LD+SW }, /* 10 0 1000: lwbrx */ | ||
133 | INVALID, /* 10 0 1001 */ | ||
134 | { 4, ST+SW }, /* 10 0 1010: stwbrx */ | ||
135 | INVALID, /* 10 0 1011 */ | ||
136 | { 2, LD+SW }, /* 10 0 1100: lhbrx */ | ||
137 | { 4, LD+SE }, /* 10 0 1101 lwa */ | ||
138 | { 2, ST+SW }, /* 10 0 1110: sthbrx */ | ||
139 | INVALID, /* 10 0 1111 */ | ||
140 | INVALID, /* 10 1 0000 */ | ||
141 | INVALID, /* 10 1 0001 */ | ||
142 | INVALID, /* 10 1 0010 */ | ||
143 | INVALID, /* 10 1 0011 */ | ||
144 | INVALID, /* 10 1 0100 */ | ||
145 | INVALID, /* 10 1 0101 */ | ||
146 | INVALID, /* 10 1 0110 */ | ||
147 | INVALID, /* 10 1 0111 */ | ||
148 | INVALID, /* 10 1 1000 */ | ||
149 | INVALID, /* 10 1 1001 */ | ||
150 | INVALID, /* 10 1 1010 */ | ||
151 | INVALID, /* 10 1 1011 */ | ||
152 | INVALID, /* 10 1 1100 */ | ||
153 | INVALID, /* 10 1 1101 */ | ||
154 | INVALID, /* 10 1 1110 */ | ||
155 | { 0, ST+HARD }, /* 10 1 1111: dcbz */ | ||
156 | { 4, LD }, /* 11 0 0000: lwzx */ | ||
157 | INVALID, /* 11 0 0001 */ | ||
158 | { 4, ST }, /* 11 0 0010: stwx */ | ||
159 | INVALID, /* 11 0 0011 */ | ||
160 | { 2, LD }, /* 11 0 0100: lhzx */ | ||
161 | { 2, LD+SE }, /* 11 0 0101: lhax */ | ||
162 | { 2, ST }, /* 11 0 0110: sthx */ | ||
163 | INVALID, /* 11 0 0111 */ | ||
164 | { 4, LD+F+S }, /* 11 0 1000: lfsx */ | ||
165 | { 8, LD+F }, /* 11 0 1001: lfdx */ | ||
166 | { 4, ST+F+S }, /* 11 0 1010: stfsx */ | ||
167 | { 8, ST+F }, /* 11 0 1011: stfdx */ | ||
168 | INVALID, /* 11 0 1100 */ | ||
169 | { 8, LD+M }, /* 11 0 1101: lmd */ | ||
170 | INVALID, /* 11 0 1110 */ | ||
171 | { 8, ST+M }, /* 11 0 1111: stmd */ | ||
172 | { 4, LD+U }, /* 11 1 0000: lwzux */ | ||
173 | INVALID, /* 11 1 0001 */ | ||
174 | { 4, ST+U }, /* 11 1 0010: stwux */ | ||
175 | INVALID, /* 11 1 0011 */ | ||
176 | { 2, LD+U }, /* 11 1 0100: lhzux */ | ||
177 | { 2, LD+SE+U }, /* 11 1 0101: lhaux */ | ||
178 | { 2, ST+U }, /* 11 1 0110: sthux */ | ||
179 | INVALID, /* 11 1 0111 */ | ||
180 | { 4, LD+F+S+U }, /* 11 1 1000: lfsux */ | ||
181 | { 8, LD+F+U }, /* 11 1 1001: lfdux */ | ||
182 | { 4, ST+F+S+U }, /* 11 1 1010: stfsux */ | ||
183 | { 8, ST+F+U }, /* 11 1 1011: stfdux */ | ||
184 | INVALID, /* 11 1 1100 */ | ||
185 | INVALID, /* 11 1 1101 */ | ||
186 | INVALID, /* 11 1 1110 */ | ||
187 | INVALID, /* 11 1 1111 */ | ||
188 | }; | ||
189 | |||
190 | /* | ||
191 | * Create a DSISR value from the instruction | ||
192 | */ | ||
193 | static inline unsigned make_dsisr(unsigned instr) | ||
194 | { | ||
195 | unsigned dsisr; | ||
196 | |||
197 | |||
198 | /* bits 6:15 --> 22:31 */ | ||
199 | dsisr = (instr & 0x03ff0000) >> 16; | ||
200 | |||
201 | if (IS_XFORM(instr)) { | ||
202 | /* bits 29:30 --> 15:16 */ | ||
203 | dsisr |= (instr & 0x00000006) << 14; | ||
204 | /* bit 25 --> 17 */ | ||
205 | dsisr |= (instr & 0x00000040) << 8; | ||
206 | /* bits 21:24 --> 18:21 */ | ||
207 | dsisr |= (instr & 0x00000780) << 3; | ||
208 | } else { | ||
209 | /* bit 5 --> 17 */ | ||
210 | dsisr |= (instr & 0x04000000) >> 12; | ||
211 | /* bits 1: 4 --> 18:21 */ | ||
212 | dsisr |= (instr & 0x78000000) >> 17; | ||
213 | /* bits 30:31 --> 12:13 */ | ||
214 | if (IS_DSFORM(instr)) | ||
215 | dsisr |= (instr & 0x00000003) << 18; | ||
216 | } | ||
217 | |||
218 | return dsisr; | ||
219 | } | ||
220 | |||
221 | /* | ||
222 | * The dcbz (data cache block zero) instruction | ||
223 | * gives an alignment fault if used on non-cacheable | ||
224 | * memory. We handle the fault mainly for the | ||
225 | * case when we are running with the cache disabled | ||
226 | * for debugging. | ||
227 | */ | ||
228 | static int emulate_dcbz(struct pt_regs *regs, unsigned char __user *addr) | ||
229 | { | ||
230 | long __user *p; | ||
231 | int i, size; | ||
232 | |||
233 | #ifdef __powerpc64__ | ||
234 | size = ppc64_caches.dline_size; | ||
235 | #else | ||
236 | size = L1_CACHE_BYTES; | ||
237 | #endif | ||
238 | p = (long __user *) (regs->dar & -size); | ||
239 | if (user_mode(regs) && !access_ok(VERIFY_WRITE, p, size)) | ||
240 | return -EFAULT; | ||
241 | for (i = 0; i < size / sizeof(long); ++i) | ||
242 | if (__put_user(0, p+i)) | ||
243 | return -EFAULT; | ||
244 | return 1; | ||
245 | } | ||
246 | |||
247 | /* | ||
248 | * Emulate load & store multiple instructions | ||
249 | * On 64-bit machines, these instructions only affect/use the | ||
250 | * bottom 4 bytes of each register, and the loads clear the | ||
251 | * top 4 bytes of the affected register. | ||
252 | */ | ||
253 | #ifdef CONFIG_PPC64 | ||
254 | #define REG_BYTE(rp, i) *((u8 *)((rp) + ((i) >> 2)) + ((i) & 3) + 4) | ||
255 | #else | ||
256 | #define REG_BYTE(rp, i) *((u8 *)(rp) + (i)) | ||
257 | #endif | ||
258 | |||
259 | static int emulate_multiple(struct pt_regs *regs, unsigned char __user *addr, | ||
260 | unsigned int reg, unsigned int nb, | ||
261 | unsigned int flags, unsigned int instr) | ||
262 | { | ||
263 | unsigned long *rptr; | ||
264 | unsigned int nb0, i; | ||
265 | |||
266 | /* | ||
267 | * We do not try to emulate 8 bytes multiple as they aren't really | ||
268 | * available in our operating environments and we don't try to | ||
269 | * emulate multiples operations in kernel land as they should never | ||
270 | * be used/generated there at least not on unaligned boundaries | ||
271 | */ | ||
272 | if (unlikely((nb > 4) || !user_mode(regs))) | ||
273 | return 0; | ||
274 | |||
275 | /* lmw, stmw, lswi/x, stswi/x */ | ||
276 | nb0 = 0; | ||
277 | if (flags & HARD) { | ||
278 | if (flags & SX) { | ||
279 | nb = regs->xer & 127; | ||
280 | if (nb == 0) | ||
281 | return 1; | ||
282 | } else { | ||
283 | if (__get_user(instr, | ||
284 | (unsigned int __user *)regs->nip)) | ||
285 | return -EFAULT; | ||
286 | nb = (instr >> 11) & 0x1f; | ||
287 | if (nb == 0) | ||
288 | nb = 32; | ||
289 | } | ||
290 | if (nb + reg * 4 > 128) { | ||
291 | nb0 = nb + reg * 4 - 128; | ||
292 | nb = 128 - reg * 4; | ||
293 | } | ||
294 | } else { | ||
295 | /* lwm, stmw */ | ||
296 | nb = (32 - reg) * 4; | ||
297 | } | ||
298 | |||
299 | if (!access_ok((flags & ST ? VERIFY_WRITE: VERIFY_READ), addr, nb+nb0)) | ||
300 | return -EFAULT; /* bad address */ | ||
301 | |||
302 | rptr = ®s->gpr[reg]; | ||
303 | if (flags & LD) { | ||
304 | /* | ||
305 | * This zeroes the top 4 bytes of the affected registers | ||
306 | * in 64-bit mode, and also zeroes out any remaining | ||
307 | * bytes of the last register for lsw*. | ||
308 | */ | ||
309 | memset(rptr, 0, ((nb + 3) / 4) * sizeof(unsigned long)); | ||
310 | if (nb0 > 0) | ||
311 | memset(®s->gpr[0], 0, | ||
312 | ((nb0 + 3) / 4) * sizeof(unsigned long)); | ||
313 | |||
314 | for (i = 0; i < nb; ++i) | ||
315 | if (__get_user(REG_BYTE(rptr, i), addr + i)) | ||
316 | return -EFAULT; | ||
317 | if (nb0 > 0) { | ||
318 | rptr = ®s->gpr[0]; | ||
319 | addr += nb; | ||
320 | for (i = 0; i < nb0; ++i) | ||
321 | if (__get_user(REG_BYTE(rptr, i), addr + i)) | ||
322 | return -EFAULT; | ||
323 | } | ||
324 | |||
325 | } else { | ||
326 | for (i = 0; i < nb; ++i) | ||
327 | if (__put_user(REG_BYTE(rptr, i), addr + i)) | ||
328 | return -EFAULT; | ||
329 | if (nb0 > 0) { | ||
330 | rptr = ®s->gpr[0]; | ||
331 | addr += nb; | ||
332 | for (i = 0; i < nb0; ++i) | ||
333 | if (__put_user(REG_BYTE(rptr, i), addr + i)) | ||
334 | return -EFAULT; | ||
335 | } | ||
336 | } | ||
337 | return 1; | ||
338 | } | ||
339 | |||
340 | |||
341 | /* | ||
342 | * Called on alignment exception. Attempts to fixup | ||
343 | * | ||
344 | * Return 1 on success | ||
345 | * Return 0 if unable to handle the interrupt | ||
346 | * Return -EFAULT if data address is bad | ||
347 | */ | ||
348 | |||
349 | int fix_alignment(struct pt_regs *regs) | ||
350 | { | ||
351 | unsigned int instr, nb, flags; | ||
352 | unsigned int reg, areg; | ||
353 | unsigned int dsisr; | ||
354 | unsigned char __user *addr; | ||
355 | unsigned char __user *p; | ||
356 | int ret, t; | ||
357 | union { | ||
358 | u64 ll; | ||
359 | double dd; | ||
360 | unsigned char v[8]; | ||
361 | struct { | ||
362 | unsigned hi32; | ||
363 | int low32; | ||
364 | } x32; | ||
365 | struct { | ||
366 | unsigned char hi48[6]; | ||
367 | short low16; | ||
368 | } x16; | ||
369 | } data; | ||
370 | |||
371 | /* | ||
372 | * We require a complete register set, if not, then our assembly | ||
373 | * is broken | ||
374 | */ | ||
375 | CHECK_FULL_REGS(regs); | ||
376 | |||
377 | dsisr = regs->dsisr; | ||
378 | |||
379 | /* Some processors don't provide us with a DSISR we can use here, | ||
380 | * let's make one up from the instruction | ||
381 | */ | ||
382 | if (cpu_has_feature(CPU_FTR_NODSISRALIGN)) { | ||
383 | unsigned int real_instr; | ||
384 | if (unlikely(__get_user(real_instr, | ||
385 | (unsigned int __user *)regs->nip))) | ||
386 | return -EFAULT; | ||
387 | dsisr = make_dsisr(real_instr); | ||
388 | } | ||
389 | |||
390 | /* extract the operation and registers from the dsisr */ | ||
391 | reg = (dsisr >> 5) & 0x1f; /* source/dest register */ | ||
392 | areg = dsisr & 0x1f; /* register to update */ | ||
393 | instr = (dsisr >> 10) & 0x7f; | ||
394 | instr |= (dsisr >> 13) & 0x60; | ||
395 | |||
396 | /* Lookup the operation in our table */ | ||
397 | nb = aligninfo[instr].len; | ||
398 | flags = aligninfo[instr].flags; | ||
399 | |||
400 | /* DAR has the operand effective address */ | ||
401 | addr = (unsigned char __user *)regs->dar; | ||
402 | |||
403 | /* A size of 0 indicates an instruction we don't support, with | ||
404 | * the exception of DCBZ which is handled as a special case here | ||
405 | */ | ||
406 | if (instr == DCBZ) | ||
407 | return emulate_dcbz(regs, addr); | ||
408 | if (unlikely(nb == 0)) | ||
409 | return 0; | ||
410 | |||
411 | /* Load/Store Multiple instructions are handled in their own | ||
412 | * function | ||
413 | */ | ||
414 | if (flags & M) | ||
415 | return emulate_multiple(regs, addr, reg, nb, flags, instr); | ||
416 | |||
417 | /* Verify the address of the operand */ | ||
418 | if (unlikely(user_mode(regs) && | ||
419 | !access_ok((flags & ST ? VERIFY_WRITE : VERIFY_READ), | ||
420 | addr, nb))) | ||
421 | return -EFAULT; | ||
422 | |||
423 | /* Force the fprs into the save area so we can reference them */ | ||
424 | if (flags & F) { | ||
425 | /* userland only */ | ||
426 | if (unlikely(!user_mode(regs))) | ||
427 | return 0; | ||
428 | flush_fp_to_thread(current); | ||
429 | } | ||
430 | |||
431 | /* If we are loading, get the data from user space, else | ||
432 | * get it from register values | ||
433 | */ | ||
434 | if (flags & LD) { | ||
435 | data.ll = 0; | ||
436 | ret = 0; | ||
437 | p = addr; | ||
438 | switch (nb) { | ||
439 | case 8: | ||
440 | ret |= __get_user(data.v[0], p++); | ||
441 | ret |= __get_user(data.v[1], p++); | ||
442 | ret |= __get_user(data.v[2], p++); | ||
443 | ret |= __get_user(data.v[3], p++); | ||
444 | case 4: | ||
445 | ret |= __get_user(data.v[4], p++); | ||
446 | ret |= __get_user(data.v[5], p++); | ||
447 | case 2: | ||
448 | ret |= __get_user(data.v[6], p++); | ||
449 | ret |= __get_user(data.v[7], p++); | ||
450 | if (unlikely(ret)) | ||
451 | return -EFAULT; | ||
452 | } | ||
453 | } else if (flags & F) | ||
454 | data.dd = current->thread.fpr[reg]; | ||
455 | else | ||
456 | data.ll = regs->gpr[reg]; | ||
457 | |||
458 | /* Perform other misc operations like sign extension, byteswap, | ||
459 | * or floating point single precision conversion | ||
460 | */ | ||
461 | switch (flags & ~U) { | ||
462 | case LD+SE: /* sign extend */ | ||
463 | if ( nb == 2 ) | ||
464 | data.ll = data.x16.low16; | ||
465 | else /* nb must be 4 */ | ||
466 | data.ll = data.x32.low32; | ||
467 | break; | ||
468 | case LD+S: /* byte-swap */ | ||
469 | case ST+S: | ||
470 | if (nb == 2) { | ||
471 | SWAP(data.v[6], data.v[7]); | ||
472 | } else { | ||
473 | SWAP(data.v[4], data.v[7]); | ||
474 | SWAP(data.v[5], data.v[6]); | ||
475 | } | ||
476 | break; | ||
477 | |||
478 | /* Single-precision FP load and store require conversions... */ | ||
479 | case LD+F+S: | ||
480 | #ifdef CONFIG_PPC_FPU | ||
481 | preempt_disable(); | ||
482 | enable_kernel_fp(); | ||
483 | cvt_fd((float *)&data.v[4], &data.dd, ¤t->thread); | ||
484 | preempt_enable(); | ||
485 | #else | ||
486 | return 0; | ||
487 | #endif | ||
488 | break; | ||
489 | case ST+F+S: | ||
490 | #ifdef CONFIG_PPC_FPU | ||
491 | preempt_disable(); | ||
492 | enable_kernel_fp(); | ||
493 | cvt_df(&data.dd, (float *)&data.v[4], ¤t->thread); | ||
494 | preempt_enable(); | ||
495 | #else | ||
496 | return 0; | ||
497 | #endif | ||
498 | break; | ||
499 | } | ||
500 | |||
501 | /* Store result to memory or update registers */ | ||
502 | if (flags & ST) { | ||
503 | ret = 0; | ||
504 | p = addr; | ||
505 | switch (nb) { | ||
506 | case 8: | ||
507 | ret |= __put_user(data.v[0], p++); | ||
508 | ret |= __put_user(data.v[1], p++); | ||
509 | ret |= __put_user(data.v[2], p++); | ||
510 | ret |= __put_user(data.v[3], p++); | ||
511 | case 4: | ||
512 | ret |= __put_user(data.v[4], p++); | ||
513 | ret |= __put_user(data.v[5], p++); | ||
514 | case 2: | ||
515 | ret |= __put_user(data.v[6], p++); | ||
516 | ret |= __put_user(data.v[7], p++); | ||
517 | } | ||
518 | if (unlikely(ret)) | ||
519 | return -EFAULT; | ||
520 | } else if (flags & F) | ||
521 | current->thread.fpr[reg] = data.dd; | ||
522 | else | ||
523 | regs->gpr[reg] = data.ll; | ||
524 | |||
525 | /* Update RA as needed */ | ||
526 | if (flags & U) | ||
527 | regs->gpr[areg] = regs->dar; | ||
528 | |||
529 | return 1; | ||
530 | } | ||
diff --git a/arch/powerpc/kernel/idle_64.c b/arch/powerpc/kernel/idle_64.c new file mode 100644 index 000000000000..b879d3057ef8 --- /dev/null +++ b/arch/powerpc/kernel/idle_64.c | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * Idle daemon for PowerPC. Idle daemon will handle any action | ||
3 | * that needs to be taken when the system becomes idle. | ||
4 | * | ||
5 | * Originally Written by Cort Dougan (cort@cs.nmt.edu) | ||
6 | * | ||
7 | * iSeries supported added by Mike Corrigan <mikejc@us.ibm.com> | ||
8 | * | ||
9 | * Additional shared processor, SMT, and firmware support | ||
10 | * Copyright (c) 2003 Dave Engebretsen <engebret@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 | #include <linux/config.h> | ||
19 | #include <linux/sched.h> | ||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/smp.h> | ||
22 | #include <linux/cpu.h> | ||
23 | #include <linux/sysctl.h> | ||
24 | |||
25 | #include <asm/system.h> | ||
26 | #include <asm/processor.h> | ||
27 | #include <asm/cputable.h> | ||
28 | #include <asm/time.h> | ||
29 | #include <asm/machdep.h> | ||
30 | #include <asm/smp.h> | ||
31 | |||
32 | extern void power4_idle(void); | ||
33 | |||
34 | void default_idle(void) | ||
35 | { | ||
36 | unsigned int cpu = smp_processor_id(); | ||
37 | set_thread_flag(TIF_POLLING_NRFLAG); | ||
38 | |||
39 | while (1) { | ||
40 | if (!need_resched()) { | ||
41 | while (!need_resched() && !cpu_is_offline(cpu)) { | ||
42 | ppc64_runlatch_off(); | ||
43 | |||
44 | /* | ||
45 | * Go into low thread priority and possibly | ||
46 | * low power mode. | ||
47 | */ | ||
48 | HMT_low(); | ||
49 | HMT_very_low(); | ||
50 | } | ||
51 | |||
52 | HMT_medium(); | ||
53 | } | ||
54 | |||
55 | ppc64_runlatch_on(); | ||
56 | preempt_enable_no_resched(); | ||
57 | schedule(); | ||
58 | preempt_disable(); | ||
59 | if (cpu_is_offline(cpu) && system_state == SYSTEM_RUNNING) | ||
60 | cpu_die(); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void native_idle(void) | ||
65 | { | ||
66 | while (1) { | ||
67 | ppc64_runlatch_off(); | ||
68 | |||
69 | if (!need_resched()) | ||
70 | power4_idle(); | ||
71 | |||
72 | if (need_resched()) { | ||
73 | ppc64_runlatch_on(); | ||
74 | preempt_enable_no_resched(); | ||
75 | schedule(); | ||
76 | preempt_disable(); | ||
77 | } | ||
78 | |||
79 | if (cpu_is_offline(smp_processor_id()) && | ||
80 | system_state == SYSTEM_RUNNING) | ||
81 | cpu_die(); | ||
82 | } | ||
83 | } | ||
84 | |||
85 | void cpu_idle(void) | ||
86 | { | ||
87 | BUG_ON(NULL == ppc_md.idle_loop); | ||
88 | ppc_md.idle_loop(); | ||
89 | } | ||
90 | |||
91 | int powersave_nap; | ||
92 | |||
93 | #ifdef CONFIG_SYSCTL | ||
94 | /* | ||
95 | * Register the sysctl to set/clear powersave_nap. | ||
96 | */ | ||
97 | static ctl_table powersave_nap_ctl_table[]={ | ||
98 | { | ||
99 | .ctl_name = KERN_PPC_POWERSAVE_NAP, | ||
100 | .procname = "powersave-nap", | ||
101 | .data = &powersave_nap, | ||
102 | .maxlen = sizeof(int), | ||
103 | .mode = 0644, | ||
104 | .proc_handler = &proc_dointvec, | ||
105 | }, | ||
106 | { 0, }, | ||
107 | }; | ||
108 | static ctl_table powersave_nap_sysctl_root[] = { | ||
109 | { 1, "kernel", NULL, 0, 0755, powersave_nap_ctl_table, }, | ||
110 | { 0,}, | ||
111 | }; | ||
112 | |||
113 | static int __init | ||
114 | register_powersave_nap_sysctl(void) | ||
115 | { | ||
116 | register_sysctl_table(powersave_nap_sysctl_root, 0); | ||
117 | |||
118 | return 0; | ||
119 | } | ||
120 | __initcall(register_powersave_nap_sysctl); | ||
121 | #endif | ||
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index f6d84a75ed26..624a983a9676 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
@@ -27,14 +27,6 @@ | |||
27 | 27 | ||
28 | .text | 28 | .text |
29 | 29 | ||
30 | .align 5 | ||
31 | _GLOBAL(__delay) | ||
32 | cmpwi 0,r3,0 | ||
33 | mtctr r3 | ||
34 | beqlr | ||
35 | 1: bdnz 1b | ||
36 | blr | ||
37 | |||
38 | /* | 30 | /* |
39 | * This returns the high 64 bits of the product of two 64-bit numbers. | 31 | * This returns the high 64 bits of the product of two 64-bit numbers. |
40 | */ | 32 | */ |
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c new file mode 100644 index 000000000000..c0fcd29918ce --- /dev/null +++ b/arch/powerpc/kernel/nvram_64.c | |||
@@ -0,0 +1,742 @@ | |||
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 | * /dev/nvram driver for PPC64 | ||
10 | * | ||
11 | * This perhaps should live in drivers/char | ||
12 | * | ||
13 | * TODO: Split the /dev/nvram part (that one can use | ||
14 | * drivers/char/generic_nvram.c) from the arch & partition | ||
15 | * parsing code. | ||
16 | */ | ||
17 | |||
18 | #include <linux/module.h> | ||
19 | |||
20 | #include <linux/types.h> | ||
21 | #include <linux/errno.h> | ||
22 | #include <linux/fs.h> | ||
23 | #include <linux/miscdevice.h> | ||
24 | #include <linux/fcntl.h> | ||
25 | #include <linux/nvram.h> | ||
26 | #include <linux/init.h> | ||
27 | #include <linux/slab.h> | ||
28 | #include <linux/spinlock.h> | ||
29 | #include <asm/uaccess.h> | ||
30 | #include <asm/nvram.h> | ||
31 | #include <asm/rtas.h> | ||
32 | #include <asm/prom.h> | ||
33 | #include <asm/machdep.h> | ||
34 | |||
35 | #undef DEBUG_NVRAM | ||
36 | |||
37 | static int nvram_scan_partitions(void); | ||
38 | static int nvram_setup_partition(void); | ||
39 | static int nvram_create_os_partition(void); | ||
40 | static int nvram_remove_os_partition(void); | ||
41 | |||
42 | static struct nvram_partition * nvram_part; | ||
43 | static long nvram_error_log_index = -1; | ||
44 | static long nvram_error_log_size = 0; | ||
45 | |||
46 | int no_logging = 1; /* Until we initialize everything, | ||
47 | * make sure we don't try logging | ||
48 | * anything */ | ||
49 | |||
50 | extern volatile int error_log_cnt; | ||
51 | |||
52 | struct err_log_info { | ||
53 | int error_type; | ||
54 | unsigned int seq_num; | ||
55 | }; | ||
56 | |||
57 | static loff_t dev_nvram_llseek(struct file *file, loff_t offset, int origin) | ||
58 | { | ||
59 | int size; | ||
60 | |||
61 | if (ppc_md.nvram_size == NULL) | ||
62 | return -ENODEV; | ||
63 | size = ppc_md.nvram_size(); | ||
64 | |||
65 | switch (origin) { | ||
66 | case 1: | ||
67 | offset += file->f_pos; | ||
68 | break; | ||
69 | case 2: | ||
70 | offset += size; | ||
71 | break; | ||
72 | } | ||
73 | if (offset < 0) | ||
74 | return -EINVAL; | ||
75 | file->f_pos = offset; | ||
76 | return file->f_pos; | ||
77 | } | ||
78 | |||
79 | |||
80 | static ssize_t dev_nvram_read(struct file *file, char __user *buf, | ||
81 | size_t count, loff_t *ppos) | ||
82 | { | ||
83 | ssize_t len; | ||
84 | char *tmp_buffer; | ||
85 | int size; | ||
86 | |||
87 | if (ppc_md.nvram_size == NULL) | ||
88 | return -ENODEV; | ||
89 | size = ppc_md.nvram_size(); | ||
90 | |||
91 | if (!access_ok(VERIFY_WRITE, buf, count)) | ||
92 | return -EFAULT; | ||
93 | if (*ppos >= size) | ||
94 | return 0; | ||
95 | if (count > size) | ||
96 | count = size; | ||
97 | |||
98 | tmp_buffer = (char *) kmalloc(count, GFP_KERNEL); | ||
99 | if (!tmp_buffer) { | ||
100 | printk(KERN_ERR "dev_read_nvram: kmalloc failed\n"); | ||
101 | return -ENOMEM; | ||
102 | } | ||
103 | |||
104 | len = ppc_md.nvram_read(tmp_buffer, count, ppos); | ||
105 | if ((long)len <= 0) { | ||
106 | kfree(tmp_buffer); | ||
107 | return len; | ||
108 | } | ||
109 | |||
110 | if (copy_to_user(buf, tmp_buffer, len)) { | ||
111 | kfree(tmp_buffer); | ||
112 | return -EFAULT; | ||
113 | } | ||
114 | |||
115 | kfree(tmp_buffer); | ||
116 | return len; | ||
117 | |||
118 | } | ||
119 | |||
120 | static ssize_t dev_nvram_write(struct file *file, const char __user *buf, | ||
121 | size_t count, loff_t *ppos) | ||
122 | { | ||
123 | ssize_t len; | ||
124 | char * tmp_buffer; | ||
125 | int size; | ||
126 | |||
127 | if (ppc_md.nvram_size == NULL) | ||
128 | return -ENODEV; | ||
129 | size = ppc_md.nvram_size(); | ||
130 | |||
131 | if (!access_ok(VERIFY_READ, buf, count)) | ||
132 | return -EFAULT; | ||
133 | if (*ppos >= size) | ||
134 | return 0; | ||
135 | if (count > size) | ||
136 | count = size; | ||
137 | |||
138 | tmp_buffer = (char *) kmalloc(count, GFP_KERNEL); | ||
139 | if (!tmp_buffer) { | ||
140 | printk(KERN_ERR "dev_nvram_write: kmalloc failed\n"); | ||
141 | return -ENOMEM; | ||
142 | } | ||
143 | |||
144 | if (copy_from_user(tmp_buffer, buf, count)) { | ||
145 | kfree(tmp_buffer); | ||
146 | return -EFAULT; | ||
147 | } | ||
148 | |||
149 | len = ppc_md.nvram_write(tmp_buffer, count, ppos); | ||
150 | if ((long)len <= 0) { | ||
151 | kfree(tmp_buffer); | ||
152 | return len; | ||
153 | } | ||
154 | |||
155 | kfree(tmp_buffer); | ||
156 | return len; | ||
157 | } | ||
158 | |||
159 | static int dev_nvram_ioctl(struct inode *inode, struct file *file, | ||
160 | unsigned int cmd, unsigned long arg) | ||
161 | { | ||
162 | switch(cmd) { | ||
163 | #ifdef CONFIG_PPC_PMAC | ||
164 | case OBSOLETE_PMAC_NVRAM_GET_OFFSET: | ||
165 | printk(KERN_WARNING "nvram: Using obsolete PMAC_NVRAM_GET_OFFSET ioctl\n"); | ||
166 | case IOC_NVRAM_GET_OFFSET: { | ||
167 | int part, offset; | ||
168 | |||
169 | if (_machine != PLATFORM_POWERMAC) | ||
170 | return -EINVAL; | ||
171 | if (copy_from_user(&part, (void __user*)arg, sizeof(part)) != 0) | ||
172 | return -EFAULT; | ||
173 | if (part < pmac_nvram_OF || part > pmac_nvram_NR) | ||
174 | return -EINVAL; | ||
175 | offset = pmac_get_partition(part); | ||
176 | if (offset < 0) | ||
177 | return offset; | ||
178 | if (copy_to_user((void __user*)arg, &offset, sizeof(offset)) != 0) | ||
179 | return -EFAULT; | ||
180 | return 0; | ||
181 | } | ||
182 | #endif /* CONFIG_PPC_PMAC */ | ||
183 | } | ||
184 | return -EINVAL; | ||
185 | } | ||
186 | |||
187 | struct file_operations nvram_fops = { | ||
188 | .owner = THIS_MODULE, | ||
189 | .llseek = dev_nvram_llseek, | ||
190 | .read = dev_nvram_read, | ||
191 | .write = dev_nvram_write, | ||
192 | .ioctl = dev_nvram_ioctl, | ||
193 | }; | ||
194 | |||
195 | static struct miscdevice nvram_dev = { | ||
196 | NVRAM_MINOR, | ||
197 | "nvram", | ||
198 | &nvram_fops | ||
199 | }; | ||
200 | |||
201 | |||
202 | #ifdef DEBUG_NVRAM | ||
203 | static void nvram_print_partitions(char * label) | ||
204 | { | ||
205 | struct list_head * p; | ||
206 | struct nvram_partition * tmp_part; | ||
207 | |||
208 | printk(KERN_WARNING "--------%s---------\n", label); | ||
209 | printk(KERN_WARNING "indx\t\tsig\tchks\tlen\tname\n"); | ||
210 | list_for_each(p, &nvram_part->partition) { | ||
211 | tmp_part = list_entry(p, struct nvram_partition, partition); | ||
212 | printk(KERN_WARNING "%d \t%02x\t%02x\t%d\t%s\n", | ||
213 | tmp_part->index, tmp_part->header.signature, | ||
214 | tmp_part->header.checksum, tmp_part->header.length, | ||
215 | tmp_part->header.name); | ||
216 | } | ||
217 | } | ||
218 | #endif | ||
219 | |||
220 | |||
221 | static int nvram_write_header(struct nvram_partition * part) | ||
222 | { | ||
223 | loff_t tmp_index; | ||
224 | int rc; | ||
225 | |||
226 | tmp_index = part->index; | ||
227 | rc = ppc_md.nvram_write((char *)&part->header, NVRAM_HEADER_LEN, &tmp_index); | ||
228 | |||
229 | return rc; | ||
230 | } | ||
231 | |||
232 | |||
233 | static unsigned char nvram_checksum(struct nvram_header *p) | ||
234 | { | ||
235 | unsigned int c_sum, c_sum2; | ||
236 | unsigned short *sp = (unsigned short *)p->name; /* assume 6 shorts */ | ||
237 | c_sum = p->signature + p->length + sp[0] + sp[1] + sp[2] + sp[3] + sp[4] + sp[5]; | ||
238 | |||
239 | /* The sum may have spilled into the 3rd byte. Fold it back. */ | ||
240 | c_sum = ((c_sum & 0xffff) + (c_sum >> 16)) & 0xffff; | ||
241 | /* The sum cannot exceed 2 bytes. Fold it into a checksum */ | ||
242 | c_sum2 = (c_sum >> 8) + (c_sum << 8); | ||
243 | c_sum = ((c_sum + c_sum2) >> 8) & 0xff; | ||
244 | return c_sum; | ||
245 | } | ||
246 | |||
247 | |||
248 | /* | ||
249 | * Find an nvram partition, sig can be 0 for any | ||
250 | * partition or name can be NULL for any name, else | ||
251 | * tries to match both | ||
252 | */ | ||
253 | struct nvram_partition *nvram_find_partition(int sig, const char *name) | ||
254 | { | ||
255 | struct nvram_partition * part; | ||
256 | struct list_head * p; | ||
257 | |||
258 | list_for_each(p, &nvram_part->partition) { | ||
259 | part = list_entry(p, struct nvram_partition, partition); | ||
260 | |||
261 | if (sig && part->header.signature != sig) | ||
262 | continue; | ||
263 | if (name && 0 != strncmp(name, part->header.name, 12)) | ||
264 | continue; | ||
265 | return part; | ||
266 | } | ||
267 | return NULL; | ||
268 | } | ||
269 | EXPORT_SYMBOL(nvram_find_partition); | ||
270 | |||
271 | |||
272 | static int nvram_remove_os_partition(void) | ||
273 | { | ||
274 | struct list_head *i; | ||
275 | struct list_head *j; | ||
276 | struct nvram_partition * part; | ||
277 | struct nvram_partition * cur_part; | ||
278 | int rc; | ||
279 | |||
280 | list_for_each(i, &nvram_part->partition) { | ||
281 | part = list_entry(i, struct nvram_partition, partition); | ||
282 | if (part->header.signature != NVRAM_SIG_OS) | ||
283 | continue; | ||
284 | |||
285 | /* Make os partition a free partition */ | ||
286 | part->header.signature = NVRAM_SIG_FREE; | ||
287 | sprintf(part->header.name, "wwwwwwwwwwww"); | ||
288 | part->header.checksum = nvram_checksum(&part->header); | ||
289 | |||
290 | /* Merge contiguous free partitions backwards */ | ||
291 | list_for_each_prev(j, &part->partition) { | ||
292 | cur_part = list_entry(j, struct nvram_partition, partition); | ||
293 | if (cur_part == nvram_part || cur_part->header.signature != NVRAM_SIG_FREE) { | ||
294 | break; | ||
295 | } | ||
296 | |||
297 | part->header.length += cur_part->header.length; | ||
298 | part->header.checksum = nvram_checksum(&part->header); | ||
299 | part->index = cur_part->index; | ||
300 | |||
301 | list_del(&cur_part->partition); | ||
302 | kfree(cur_part); | ||
303 | j = &part->partition; /* fixup our loop */ | ||
304 | } | ||
305 | |||
306 | /* Merge contiguous free partitions forwards */ | ||
307 | list_for_each(j, &part->partition) { | ||
308 | cur_part = list_entry(j, struct nvram_partition, partition); | ||
309 | if (cur_part == nvram_part || cur_part->header.signature != NVRAM_SIG_FREE) { | ||
310 | break; | ||
311 | } | ||
312 | |||
313 | part->header.length += cur_part->header.length; | ||
314 | part->header.checksum = nvram_checksum(&part->header); | ||
315 | |||
316 | list_del(&cur_part->partition); | ||
317 | kfree(cur_part); | ||
318 | j = &part->partition; /* fixup our loop */ | ||
319 | } | ||
320 | |||
321 | rc = nvram_write_header(part); | ||
322 | if (rc <= 0) { | ||
323 | printk(KERN_ERR "nvram_remove_os_partition: nvram_write failed (%d)\n", rc); | ||
324 | return rc; | ||
325 | } | ||
326 | |||
327 | } | ||
328 | |||
329 | return 0; | ||
330 | } | ||
331 | |||
332 | /* nvram_create_os_partition | ||
333 | * | ||
334 | * Create a OS linux partition to buffer error logs. | ||
335 | * Will create a partition starting at the first free | ||
336 | * space found if space has enough room. | ||
337 | */ | ||
338 | static int nvram_create_os_partition(void) | ||
339 | { | ||
340 | struct nvram_partition *part; | ||
341 | struct nvram_partition *new_part; | ||
342 | struct nvram_partition *free_part = NULL; | ||
343 | int seq_init[2] = { 0, 0 }; | ||
344 | loff_t tmp_index; | ||
345 | long size = 0; | ||
346 | int rc; | ||
347 | |||
348 | /* Find a free partition that will give us the maximum needed size | ||
349 | If can't find one that will give us the minimum size needed */ | ||
350 | list_for_each_entry(part, &nvram_part->partition, partition) { | ||
351 | if (part->header.signature != NVRAM_SIG_FREE) | ||
352 | continue; | ||
353 | |||
354 | if (part->header.length >= NVRAM_MAX_REQ) { | ||
355 | size = NVRAM_MAX_REQ; | ||
356 | free_part = part; | ||
357 | break; | ||
358 | } | ||
359 | if (!size && part->header.length >= NVRAM_MIN_REQ) { | ||
360 | size = NVRAM_MIN_REQ; | ||
361 | free_part = part; | ||
362 | } | ||
363 | } | ||
364 | if (!size) | ||
365 | return -ENOSPC; | ||
366 | |||
367 | /* Create our OS partition */ | ||
368 | new_part = kmalloc(sizeof(*new_part), GFP_KERNEL); | ||
369 | if (!new_part) { | ||
370 | printk(KERN_ERR "nvram_create_os_partition: kmalloc failed\n"); | ||
371 | return -ENOMEM; | ||
372 | } | ||
373 | |||
374 | new_part->index = free_part->index; | ||
375 | new_part->header.signature = NVRAM_SIG_OS; | ||
376 | new_part->header.length = size; | ||
377 | strcpy(new_part->header.name, "ppc64,linux"); | ||
378 | new_part->header.checksum = nvram_checksum(&new_part->header); | ||
379 | |||
380 | rc = nvram_write_header(new_part); | ||
381 | if (rc <= 0) { | ||
382 | printk(KERN_ERR "nvram_create_os_partition: nvram_write_header \ | ||
383 | failed (%d)\n", rc); | ||
384 | return rc; | ||
385 | } | ||
386 | |||
387 | /* make sure and initialize to zero the sequence number and the error | ||
388 | type logged */ | ||
389 | tmp_index = new_part->index + NVRAM_HEADER_LEN; | ||
390 | rc = ppc_md.nvram_write((char *)&seq_init, sizeof(seq_init), &tmp_index); | ||
391 | if (rc <= 0) { | ||
392 | printk(KERN_ERR "nvram_create_os_partition: nvram_write " | ||
393 | "failed (%d)\n", rc); | ||
394 | return rc; | ||
395 | } | ||
396 | |||
397 | nvram_error_log_index = new_part->index + NVRAM_HEADER_LEN; | ||
398 | nvram_error_log_size = ((part->header.length - 1) * | ||
399 | NVRAM_BLOCK_LEN) - sizeof(struct err_log_info); | ||
400 | |||
401 | list_add_tail(&new_part->partition, &free_part->partition); | ||
402 | |||
403 | if (free_part->header.length <= size) { | ||
404 | list_del(&free_part->partition); | ||
405 | kfree(free_part); | ||
406 | return 0; | ||
407 | } | ||
408 | |||
409 | /* Adjust the partition we stole the space from */ | ||
410 | free_part->index += size * NVRAM_BLOCK_LEN; | ||
411 | free_part->header.length -= size; | ||
412 | free_part->header.checksum = nvram_checksum(&free_part->header); | ||
413 | |||
414 | rc = nvram_write_header(free_part); | ||
415 | if (rc <= 0) { | ||
416 | printk(KERN_ERR "nvram_create_os_partition: nvram_write_header " | ||
417 | "failed (%d)\n", rc); | ||
418 | return rc; | ||
419 | } | ||
420 | |||
421 | return 0; | ||
422 | } | ||
423 | |||
424 | |||
425 | /* nvram_setup_partition | ||
426 | * | ||
427 | * This will setup the partition we need for buffering the | ||
428 | * error logs and cleanup partitions if needed. | ||
429 | * | ||
430 | * The general strategy is the following: | ||
431 | * 1.) If there is ppc64,linux partition large enough then use it. | ||
432 | * 2.) If there is not a ppc64,linux partition large enough, search | ||
433 | * for a free partition that is large enough. | ||
434 | * 3.) If there is not a free partition large enough remove | ||
435 | * _all_ OS partitions and consolidate the space. | ||
436 | * 4.) Will first try getting a chunk that will satisfy the maximum | ||
437 | * error log size (NVRAM_MAX_REQ). | ||
438 | * 5.) If the max chunk cannot be allocated then try finding a chunk | ||
439 | * that will satisfy the minum needed (NVRAM_MIN_REQ). | ||
440 | */ | ||
441 | static int nvram_setup_partition(void) | ||
442 | { | ||
443 | struct list_head * p; | ||
444 | struct nvram_partition * part; | ||
445 | int rc; | ||
446 | |||
447 | /* For now, we don't do any of this on pmac, until I | ||
448 | * have figured out if it's worth killing some unused stuffs | ||
449 | * in our nvram, as Apple defined partitions use pretty much | ||
450 | * all of the space | ||
451 | */ | ||
452 | if (_machine == PLATFORM_POWERMAC) | ||
453 | return -ENOSPC; | ||
454 | |||
455 | /* see if we have an OS partition that meets our needs. | ||
456 | will try getting the max we need. If not we'll delete | ||
457 | partitions and try again. */ | ||
458 | list_for_each(p, &nvram_part->partition) { | ||
459 | part = list_entry(p, struct nvram_partition, partition); | ||
460 | if (part->header.signature != NVRAM_SIG_OS) | ||
461 | continue; | ||
462 | |||
463 | if (strcmp(part->header.name, "ppc64,linux")) | ||
464 | continue; | ||
465 | |||
466 | if (part->header.length >= NVRAM_MIN_REQ) { | ||
467 | /* found our partition */ | ||
468 | nvram_error_log_index = part->index + NVRAM_HEADER_LEN; | ||
469 | nvram_error_log_size = ((part->header.length - 1) * | ||
470 | NVRAM_BLOCK_LEN) - sizeof(struct err_log_info); | ||
471 | return 0; | ||
472 | } | ||
473 | } | ||
474 | |||
475 | /* try creating a partition with the free space we have */ | ||
476 | rc = nvram_create_os_partition(); | ||
477 | if (!rc) { | ||
478 | return 0; | ||
479 | } | ||
480 | |||
481 | /* need to free up some space */ | ||
482 | rc = nvram_remove_os_partition(); | ||
483 | if (rc) { | ||
484 | return rc; | ||
485 | } | ||
486 | |||
487 | /* create a partition in this new space */ | ||
488 | rc = nvram_create_os_partition(); | ||
489 | if (rc) { | ||
490 | printk(KERN_ERR "nvram_create_os_partition: Could not find a " | ||
491 | "NVRAM partition large enough\n"); | ||
492 | return rc; | ||
493 | } | ||
494 | |||
495 | return 0; | ||
496 | } | ||
497 | |||
498 | |||
499 | static int nvram_scan_partitions(void) | ||
500 | { | ||
501 | loff_t cur_index = 0; | ||
502 | struct nvram_header phead; | ||
503 | struct nvram_partition * tmp_part; | ||
504 | unsigned char c_sum; | ||
505 | char * header; | ||
506 | int total_size; | ||
507 | int err; | ||
508 | |||
509 | if (ppc_md.nvram_size == NULL) | ||
510 | return -ENODEV; | ||
511 | total_size = ppc_md.nvram_size(); | ||
512 | |||
513 | header = (char *) kmalloc(NVRAM_HEADER_LEN, GFP_KERNEL); | ||
514 | if (!header) { | ||
515 | printk(KERN_ERR "nvram_scan_partitions: Failed kmalloc\n"); | ||
516 | return -ENOMEM; | ||
517 | } | ||
518 | |||
519 | while (cur_index < total_size) { | ||
520 | |||
521 | err = ppc_md.nvram_read(header, NVRAM_HEADER_LEN, &cur_index); | ||
522 | if (err != NVRAM_HEADER_LEN) { | ||
523 | printk(KERN_ERR "nvram_scan_partitions: Error parsing " | ||
524 | "nvram partitions\n"); | ||
525 | goto out; | ||
526 | } | ||
527 | |||
528 | cur_index -= NVRAM_HEADER_LEN; /* nvram_read will advance us */ | ||
529 | |||
530 | memcpy(&phead, header, NVRAM_HEADER_LEN); | ||
531 | |||
532 | err = 0; | ||
533 | c_sum = nvram_checksum(&phead); | ||
534 | if (c_sum != phead.checksum) { | ||
535 | printk(KERN_WARNING "WARNING: nvram partition checksum" | ||
536 | " was %02x, should be %02x!\n", | ||
537 | phead.checksum, c_sum); | ||
538 | printk(KERN_WARNING "Terminating nvram partition scan\n"); | ||
539 | goto out; | ||
540 | } | ||
541 | if (!phead.length) { | ||
542 | printk(KERN_WARNING "WARNING: nvram corruption " | ||
543 | "detected: 0-length partition\n"); | ||
544 | goto out; | ||
545 | } | ||
546 | tmp_part = (struct nvram_partition *) | ||
547 | kmalloc(sizeof(struct nvram_partition), GFP_KERNEL); | ||
548 | err = -ENOMEM; | ||
549 | if (!tmp_part) { | ||
550 | printk(KERN_ERR "nvram_scan_partitions: kmalloc failed\n"); | ||
551 | goto out; | ||
552 | } | ||
553 | |||
554 | memcpy(&tmp_part->header, &phead, NVRAM_HEADER_LEN); | ||
555 | tmp_part->index = cur_index; | ||
556 | list_add_tail(&tmp_part->partition, &nvram_part->partition); | ||
557 | |||
558 | cur_index += phead.length * NVRAM_BLOCK_LEN; | ||
559 | } | ||
560 | err = 0; | ||
561 | |||
562 | out: | ||
563 | kfree(header); | ||
564 | return err; | ||
565 | } | ||
566 | |||
567 | static int __init nvram_init(void) | ||
568 | { | ||
569 | int error; | ||
570 | int rc; | ||
571 | |||
572 | if (ppc_md.nvram_size == NULL || ppc_md.nvram_size() <= 0) | ||
573 | return -ENODEV; | ||
574 | |||
575 | rc = misc_register(&nvram_dev); | ||
576 | if (rc != 0) { | ||
577 | printk(KERN_ERR "nvram_init: failed to register device\n"); | ||
578 | return rc; | ||
579 | } | ||
580 | |||
581 | /* initialize our anchor for the nvram partition list */ | ||
582 | nvram_part = (struct nvram_partition *) kmalloc(sizeof(struct nvram_partition), GFP_KERNEL); | ||
583 | if (!nvram_part) { | ||
584 | printk(KERN_ERR "nvram_init: Failed kmalloc\n"); | ||
585 | return -ENOMEM; | ||
586 | } | ||
587 | INIT_LIST_HEAD(&nvram_part->partition); | ||
588 | |||
589 | /* Get all the NVRAM partitions */ | ||
590 | error = nvram_scan_partitions(); | ||
591 | if (error) { | ||
592 | printk(KERN_ERR "nvram_init: Failed nvram_scan_partitions\n"); | ||
593 | return error; | ||
594 | } | ||
595 | |||
596 | if(nvram_setup_partition()) | ||
597 | printk(KERN_WARNING "nvram_init: Could not find nvram partition" | ||
598 | " for nvram buffered error logging.\n"); | ||
599 | |||
600 | #ifdef DEBUG_NVRAM | ||
601 | nvram_print_partitions("NVRAM Partitions"); | ||
602 | #endif | ||
603 | |||
604 | return rc; | ||
605 | } | ||
606 | |||
607 | void __exit nvram_cleanup(void) | ||
608 | { | ||
609 | misc_deregister( &nvram_dev ); | ||
610 | } | ||
611 | |||
612 | |||
613 | #ifdef CONFIG_PPC_PSERIES | ||
614 | |||
615 | /* nvram_write_error_log | ||
616 | * | ||
617 | * We need to buffer the error logs into nvram to ensure that we have | ||
618 | * the failure information to decode. If we have a severe error there | ||
619 | * is no way to guarantee that the OS or the machine is in a state to | ||
620 | * get back to user land and write the error to disk. For example if | ||
621 | * the SCSI device driver causes a Machine Check by writing to a bad | ||
622 | * IO address, there is no way of guaranteeing that the device driver | ||
623 | * is in any state that is would also be able to write the error data | ||
624 | * captured to disk, thus we buffer it in NVRAM for analysis on the | ||
625 | * next boot. | ||
626 | * | ||
627 | * In NVRAM the partition containing the error log buffer will looks like: | ||
628 | * Header (in bytes): | ||
629 | * +-----------+----------+--------+------------+------------------+ | ||
630 | * | signature | checksum | length | name | data | | ||
631 | * |0 |1 |2 3|4 15|16 length-1| | ||
632 | * +-----------+----------+--------+------------+------------------+ | ||
633 | * | ||
634 | * The 'data' section would look like (in bytes): | ||
635 | * +--------------+------------+-----------------------------------+ | ||
636 | * | event_logged | sequence # | error log | | ||
637 | * |0 3|4 7|8 nvram_error_log_size-1| | ||
638 | * +--------------+------------+-----------------------------------+ | ||
639 | * | ||
640 | * event_logged: 0 if event has not been logged to syslog, 1 if it has | ||
641 | * sequence #: The unique sequence # for each event. (until it wraps) | ||
642 | * error log: The error log from event_scan | ||
643 | */ | ||
644 | int nvram_write_error_log(char * buff, int length, unsigned int err_type) | ||
645 | { | ||
646 | int rc; | ||
647 | loff_t tmp_index; | ||
648 | struct err_log_info info; | ||
649 | |||
650 | if (no_logging) { | ||
651 | return -EPERM; | ||
652 | } | ||
653 | |||
654 | if (nvram_error_log_index == -1) { | ||
655 | return -ESPIPE; | ||
656 | } | ||
657 | |||
658 | if (length > nvram_error_log_size) { | ||
659 | length = nvram_error_log_size; | ||
660 | } | ||
661 | |||
662 | info.error_type = err_type; | ||
663 | info.seq_num = error_log_cnt; | ||
664 | |||
665 | tmp_index = nvram_error_log_index; | ||
666 | |||
667 | rc = ppc_md.nvram_write((char *)&info, sizeof(struct err_log_info), &tmp_index); | ||
668 | if (rc <= 0) { | ||
669 | printk(KERN_ERR "nvram_write_error_log: Failed nvram_write (%d)\n", rc); | ||
670 | return rc; | ||
671 | } | ||
672 | |||
673 | rc = ppc_md.nvram_write(buff, length, &tmp_index); | ||
674 | if (rc <= 0) { | ||
675 | printk(KERN_ERR "nvram_write_error_log: Failed nvram_write (%d)\n", rc); | ||
676 | return rc; | ||
677 | } | ||
678 | |||
679 | return 0; | ||
680 | } | ||
681 | |||
682 | /* nvram_read_error_log | ||
683 | * | ||
684 | * Reads nvram for error log for at most 'length' | ||
685 | */ | ||
686 | int nvram_read_error_log(char * buff, int length, unsigned int * err_type) | ||
687 | { | ||
688 | int rc; | ||
689 | loff_t tmp_index; | ||
690 | struct err_log_info info; | ||
691 | |||
692 | if (nvram_error_log_index == -1) | ||
693 | return -1; | ||
694 | |||
695 | if (length > nvram_error_log_size) | ||
696 | length = nvram_error_log_size; | ||
697 | |||
698 | tmp_index = nvram_error_log_index; | ||
699 | |||
700 | rc = ppc_md.nvram_read((char *)&info, sizeof(struct err_log_info), &tmp_index); | ||
701 | if (rc <= 0) { | ||
702 | printk(KERN_ERR "nvram_read_error_log: Failed nvram_read (%d)\n", rc); | ||
703 | return rc; | ||
704 | } | ||
705 | |||
706 | rc = ppc_md.nvram_read(buff, length, &tmp_index); | ||
707 | if (rc <= 0) { | ||
708 | printk(KERN_ERR "nvram_read_error_log: Failed nvram_read (%d)\n", rc); | ||
709 | return rc; | ||
710 | } | ||
711 | |||
712 | error_log_cnt = info.seq_num; | ||
713 | *err_type = info.error_type; | ||
714 | |||
715 | return 0; | ||
716 | } | ||
717 | |||
718 | /* This doesn't actually zero anything, but it sets the event_logged | ||
719 | * word to tell that this event is safely in syslog. | ||
720 | */ | ||
721 | int nvram_clear_error_log(void) | ||
722 | { | ||
723 | loff_t tmp_index; | ||
724 | int clear_word = ERR_FLAG_ALREADY_LOGGED; | ||
725 | int rc; | ||
726 | |||
727 | tmp_index = nvram_error_log_index; | ||
728 | |||
729 | rc = ppc_md.nvram_write((char *)&clear_word, sizeof(int), &tmp_index); | ||
730 | if (rc <= 0) { | ||
731 | printk(KERN_ERR "nvram_clear_error_log: Failed nvram_write (%d)\n", rc); | ||
732 | return rc; | ||
733 | } | ||
734 | |||
735 | return 0; | ||
736 | } | ||
737 | |||
738 | #endif /* CONFIG_PPC_PSERIES */ | ||
739 | |||
740 | module_init(nvram_init); | ||
741 | module_exit(nvram_cleanup); | ||
742 | MODULE_LICENSE("GPL"); | ||
diff --git a/arch/powerpc/kernel/rtas-rtc.c b/arch/powerpc/kernel/rtas-rtc.c index 7b948662704c..635d3b9a8811 100644 --- a/arch/powerpc/kernel/rtas-rtc.c +++ b/arch/powerpc/kernel/rtas-rtc.c | |||
@@ -15,7 +15,7 @@ unsigned long __init rtas_get_boot_time(void) | |||
15 | { | 15 | { |
16 | int ret[8]; | 16 | int ret[8]; |
17 | int error, wait_time; | 17 | int error, wait_time; |
18 | unsigned long max_wait_tb; | 18 | u64 max_wait_tb; |
19 | 19 | ||
20 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; | 20 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; |
21 | do { | 21 | do { |
@@ -45,7 +45,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) | |||
45 | { | 45 | { |
46 | int ret[8]; | 46 | int ret[8]; |
47 | int error, wait_time; | 47 | int error, wait_time; |
48 | unsigned long max_wait_tb; | 48 | u64 max_wait_tb; |
49 | 49 | ||
50 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; | 50 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; |
51 | do { | 51 | do { |
@@ -80,7 +80,7 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm) | |||
80 | int rtas_set_rtc_time(struct rtc_time *tm) | 80 | int rtas_set_rtc_time(struct rtc_time *tm) |
81 | { | 81 | { |
82 | int error, wait_time; | 82 | int error, wait_time; |
83 | unsigned long max_wait_tb; | 83 | u64 max_wait_tb; |
84 | 84 | ||
85 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; | 85 | max_wait_tb = get_tb() + tb_ticks_per_usec * 1000 * MAX_RTC_WAIT; |
86 | do { | 86 | do { |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 070b4b458aaf..de8479769bb7 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -130,6 +130,34 @@ unsigned long tb_last_stamp; | |||
130 | */ | 130 | */ |
131 | DEFINE_PER_CPU(unsigned long, last_jiffy); | 131 | DEFINE_PER_CPU(unsigned long, last_jiffy); |
132 | 132 | ||
133 | void __delay(unsigned long loops) | ||
134 | { | ||
135 | unsigned long start; | ||
136 | int diff; | ||
137 | |||
138 | if (__USE_RTC()) { | ||
139 | start = get_rtcl(); | ||
140 | do { | ||
141 | /* the RTCL register wraps at 1000000000 */ | ||
142 | diff = get_rtcl() - start; | ||
143 | if (diff < 0) | ||
144 | diff += 1000000000; | ||
145 | } while (diff < loops); | ||
146 | } else { | ||
147 | start = get_tbl(); | ||
148 | while (get_tbl() - start < loops) | ||
149 | HMT_low(); | ||
150 | HMT_medium(); | ||
151 | } | ||
152 | } | ||
153 | EXPORT_SYMBOL(__delay); | ||
154 | |||
155 | void udelay(unsigned long usecs) | ||
156 | { | ||
157 | __delay(tb_ticks_per_usec * usecs); | ||
158 | } | ||
159 | EXPORT_SYMBOL(udelay); | ||
160 | |||
133 | static __inline__ void timer_check_rtc(void) | 161 | static __inline__ void timer_check_rtc(void) |
134 | { | 162 | { |
135 | /* | 163 | /* |
diff --git a/arch/powerpc/platforms/chrp/setup.c b/arch/powerpc/platforms/chrp/setup.c index 4099ddab9205..dda5f2c72c25 100644 --- a/arch/powerpc/platforms/chrp/setup.c +++ b/arch/powerpc/platforms/chrp/setup.c | |||
@@ -257,6 +257,13 @@ void __init chrp_setup_arch(void) | |||
257 | if (rtas_token("display-character") >= 0) | 257 | if (rtas_token("display-character") >= 0) |
258 | ppc_md.progress = rtas_progress; | 258 | ppc_md.progress = rtas_progress; |
259 | 259 | ||
260 | /* use RTAS time-of-day routines if available */ | ||
261 | if (rtas_token("get-time-of-day") != RTAS_UNKNOWN_SERVICE) { | ||
262 | ppc_md.get_boot_time = rtas_get_boot_time; | ||
263 | ppc_md.get_rtc_time = rtas_get_rtc_time; | ||
264 | ppc_md.set_rtc_time = rtas_set_rtc_time; | ||
265 | } | ||
266 | |||
260 | #ifdef CONFIG_BOOTX_TEXT | 267 | #ifdef CONFIG_BOOTX_TEXT |
261 | if (ppc_md.progress == NULL && boot_text_mapped) | 268 | if (ppc_md.progress == NULL && boot_text_mapped) |
262 | ppc_md.progress = btext_progress; | 269 | ppc_md.progress = btext_progress; |
@@ -505,9 +512,11 @@ void __init chrp_init(void) | |||
505 | ppc_md.halt = rtas_halt; | 512 | ppc_md.halt = rtas_halt; |
506 | 513 | ||
507 | ppc_md.time_init = chrp_time_init; | 514 | ppc_md.time_init = chrp_time_init; |
515 | ppc_md.calibrate_decr = chrp_calibrate_decr; | ||
516 | |||
517 | /* this may get overridden with rtas routines later... */ | ||
508 | ppc_md.set_rtc_time = chrp_set_rtc_time; | 518 | ppc_md.set_rtc_time = chrp_set_rtc_time; |
509 | ppc_md.get_rtc_time = chrp_get_rtc_time; | 519 | ppc_md.get_rtc_time = chrp_get_rtc_time; |
510 | ppc_md.calibrate_decr = chrp_calibrate_decr; | ||
511 | 520 | ||
512 | #ifdef CONFIG_SMP | 521 | #ifdef CONFIG_SMP |
513 | smp_ops = &chrp_smp_ops; | 522 | smp_ops = &chrp_smp_ops; |
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c index bb2315997d45..b616053bc331 100644 --- a/arch/powerpc/platforms/chrp/smp.c +++ b/arch/powerpc/platforms/chrp/smp.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <asm/machdep.h> | 34 | #include <asm/machdep.h> |
35 | #include <asm/smp.h> | 35 | #include <asm/smp.h> |
36 | #include <asm/mpic.h> | 36 | #include <asm/mpic.h> |
37 | #include <asm/rtas.h> | ||
37 | 38 | ||
38 | static void __devinit smp_chrp_kick_cpu(int nr) | 39 | static void __devinit smp_chrp_kick_cpu(int nr) |
39 | { | 40 | { |
diff --git a/arch/powerpc/platforms/chrp/time.c b/arch/powerpc/platforms/chrp/time.c index 9e53535ddb82..737ee5d9f0aa 100644 --- a/arch/powerpc/platforms/chrp/time.c +++ b/arch/powerpc/platforms/chrp/time.c | |||
@@ -87,7 +87,6 @@ int chrp_set_rtc_time(struct rtc_time *tmarg) | |||
87 | 87 | ||
88 | chrp_cmos_clock_write((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); | 88 | chrp_cmos_clock_write((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); |
89 | 89 | ||
90 | tm.tm_year -= 1900; | ||
91 | if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) { | 90 | if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) { |
92 | BIN_TO_BCD(tm.tm_sec); | 91 | BIN_TO_BCD(tm.tm_sec); |
93 | BIN_TO_BCD(tm.tm_min); | 92 | BIN_TO_BCD(tm.tm_min); |
@@ -156,7 +155,7 @@ void chrp_get_rtc_time(struct rtc_time *tm) | |||
156 | BCD_TO_BIN(mon); | 155 | BCD_TO_BIN(mon); |
157 | BCD_TO_BIN(year); | 156 | BCD_TO_BIN(year); |
158 | } | 157 | } |
159 | if ((year += 1900) < 1970) | 158 | if (year < 70) |
160 | year += 100; | 159 | year += 100; |
161 | tm->tm_sec = sec; | 160 | tm->tm_sec = sec; |
162 | tm->tm_min = min; | 161 | tm->tm_min = min; |
diff --git a/arch/powerpc/platforms/maple/time.c b/arch/powerpc/platforms/maple/time.c index 40fc07a8e606..15846cc938ac 100644 --- a/arch/powerpc/platforms/maple/time.c +++ b/arch/powerpc/platforms/maple/time.c | |||
@@ -158,6 +158,11 @@ int maple_set_rtc_time(struct rtc_time *tm) | |||
158 | return 0; | 158 | return 0; |
159 | } | 159 | } |
160 | 160 | ||
161 | static struct resource rtc_iores = { | ||
162 | .name = "rtc", | ||
163 | .flags = IORESOURCE_BUSY, | ||
164 | }; | ||
165 | |||
161 | unsigned long __init maple_get_boot_time(void) | 166 | unsigned long __init maple_get_boot_time(void) |
162 | { | 167 | { |
163 | struct rtc_time tm; | 168 | struct rtc_time tm; |
@@ -172,7 +177,11 @@ unsigned long __init maple_get_boot_time(void) | |||
172 | printk(KERN_INFO "Maple: No device node for RTC, assuming " | 177 | printk(KERN_INFO "Maple: No device node for RTC, assuming " |
173 | "legacy address (0x%x)\n", maple_rtc_addr); | 178 | "legacy address (0x%x)\n", maple_rtc_addr); |
174 | } | 179 | } |
175 | 180 | ||
181 | rtc_iores.start = maple_rtc_addr; | ||
182 | rtc_iores.end = maple_rtc_addr + 7; | ||
183 | request_resource(&ioport_resource, &rtc_iores); | ||
184 | |||
176 | maple_get_rtc_time(&tm); | 185 | maple_get_rtc_time(&tm); |
177 | return mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, | 186 | return mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, |
178 | tm.tm_hour, tm.tm_min, tm.tm_sec); | 187 | tm.tm_hour, tm.tm_min, tm.tm_sec); |
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index 79de2310e70b..c8d2a40dc5b4 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -86,7 +86,8 @@ static int ibm_read_slot_reset_state; | |||
86 | static int ibm_read_slot_reset_state2; | 86 | static int ibm_read_slot_reset_state2; |
87 | static int ibm_slot_error_detail; | 87 | static int ibm_slot_error_detail; |
88 | 88 | ||
89 | static int eeh_subsystem_enabled; | 89 | int eeh_subsystem_enabled; |
90 | EXPORT_SYMBOL(eeh_subsystem_enabled); | ||
90 | 91 | ||
91 | /* Lock to avoid races due to multiple reports of an error */ | 92 | /* Lock to avoid races due to multiple reports of an error */ |
92 | static DEFINE_SPINLOCK(confirm_error_lock); | 93 | static DEFINE_SPINLOCK(confirm_error_lock); |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index b9d9732b2e06..4a465f067ede 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
@@ -504,7 +504,7 @@ static void pseries_dedicated_idle(void) | |||
504 | lpaca->lppaca.idle = 1; | 504 | lpaca->lppaca.idle = 1; |
505 | 505 | ||
506 | if (!need_resched()) { | 506 | if (!need_resched()) { |
507 | start_snooze = __get_tb() + | 507 | start_snooze = get_tb() + |
508 | *smt_snooze_delay * tb_ticks_per_usec; | 508 | *smt_snooze_delay * tb_ticks_per_usec; |
509 | 509 | ||
510 | while (!need_resched() && !cpu_is_offline(cpu)) { | 510 | while (!need_resched() && !cpu_is_offline(cpu)) { |
@@ -518,7 +518,7 @@ static void pseries_dedicated_idle(void) | |||
518 | HMT_very_low(); | 518 | HMT_very_low(); |
519 | 519 | ||
520 | if (*smt_snooze_delay != 0 && | 520 | if (*smt_snooze_delay != 0 && |
521 | __get_tb() > start_snooze) { | 521 | get_tb() > start_snooze) { |
522 | HMT_medium(); | 522 | HMT_medium(); |
523 | dedicated_idle_sleep(cpu); | 523 | dedicated_idle_sleep(cpu); |
524 | } | 524 | } |