diff options
Diffstat (limited to 'include/asm-powerpc')
45 files changed, 371 insertions, 172 deletions
diff --git a/include/asm-powerpc/Kbuild b/include/asm-powerpc/Kbuild index 04ce8f8a2ee7..5ab7d7fe198c 100644 --- a/include/asm-powerpc/Kbuild +++ b/include/asm-powerpc/Kbuild | |||
@@ -29,7 +29,6 @@ unifdef-y += elf.h | |||
29 | unifdef-y += nvram.h | 29 | unifdef-y += nvram.h |
30 | unifdef-y += param.h | 30 | unifdef-y += param.h |
31 | unifdef-y += posix_types.h | 31 | unifdef-y += posix_types.h |
32 | unifdef-y += ptrace.h | ||
33 | unifdef-y += seccomp.h | 32 | unifdef-y += seccomp.h |
34 | unifdef-y += signal.h | 33 | unifdef-y += signal.h |
35 | unifdef-y += spu_info.h | 34 | unifdef-y += spu_info.h |
diff --git a/include/asm-powerpc/asm-compat.h b/include/asm-powerpc/asm-compat.h index 8ec2e1da68bf..8f0fe7971949 100644 --- a/include/asm-powerpc/asm-compat.h +++ b/include/asm-powerpc/asm-compat.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #define PPC_STL stringify_in_c(std) | 22 | #define PPC_STL stringify_in_c(std) |
23 | #define PPC_LCMPI stringify_in_c(cmpdi) | 23 | #define PPC_LCMPI stringify_in_c(cmpdi) |
24 | #define PPC_LONG stringify_in_c(.llong) | 24 | #define PPC_LONG stringify_in_c(.llong) |
25 | #define PPC_LONG_ALIGN stringify_in_c(.balign 8) | ||
25 | #define PPC_TLNEI stringify_in_c(tdnei) | 26 | #define PPC_TLNEI stringify_in_c(tdnei) |
26 | #define PPC_LLARX stringify_in_c(ldarx) | 27 | #define PPC_LLARX stringify_in_c(ldarx) |
27 | #define PPC_STLCX stringify_in_c(stdcx.) | 28 | #define PPC_STLCX stringify_in_c(stdcx.) |
@@ -43,6 +44,7 @@ | |||
43 | #define PPC_STL stringify_in_c(stw) | 44 | #define PPC_STL stringify_in_c(stw) |
44 | #define PPC_LCMPI stringify_in_c(cmpwi) | 45 | #define PPC_LCMPI stringify_in_c(cmpwi) |
45 | #define PPC_LONG stringify_in_c(.long) | 46 | #define PPC_LONG stringify_in_c(.long) |
47 | #define PPC_LONG_ALIGN stringify_in_c(.balign 4) | ||
46 | #define PPC_TLNEI stringify_in_c(twnei) | 48 | #define PPC_TLNEI stringify_in_c(twnei) |
47 | #define PPC_LLARX stringify_in_c(lwarx) | 49 | #define PPC_LLARX stringify_in_c(lwarx) |
48 | #define PPC_STLCX stringify_in_c(stwcx.) | 50 | #define PPC_STLCX stringify_in_c(stwcx.) |
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index 2a3e9075a5a0..ef8a248dfd55 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -127,6 +127,8 @@ extern struct cpu_spec *identify_cpu(unsigned long offset, unsigned int pvr); | |||
127 | extern void do_feature_fixups(unsigned long value, void *fixup_start, | 127 | extern void do_feature_fixups(unsigned long value, void *fixup_start, |
128 | void *fixup_end); | 128 | void *fixup_end); |
129 | 129 | ||
130 | extern const char *powerpc_base_platform; | ||
131 | |||
130 | #endif /* __ASSEMBLY__ */ | 132 | #endif /* __ASSEMBLY__ */ |
131 | 133 | ||
132 | /* CPU kernel features */ | 134 | /* CPU kernel features */ |
diff --git a/include/asm-powerpc/dma-mapping.h b/include/asm-powerpc/dma-mapping.h index 74c549780987..c7ca45f97dd2 100644 --- a/include/asm-powerpc/dma-mapping.h +++ b/include/asm-powerpc/dma-mapping.h | |||
@@ -415,7 +415,7 @@ static inline void dma_sync_sg_for_device(struct device *dev, | |||
415 | __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); | 415 | __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); |
416 | } | 416 | } |
417 | 417 | ||
418 | static inline int dma_mapping_error(dma_addr_t dma_addr) | 418 | static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) |
419 | { | 419 | { |
420 | #ifdef CONFIG_PPC64 | 420 | #ifdef CONFIG_PPC64 |
421 | return (dma_addr == DMA_ERROR_CODE); | 421 | return (dma_addr == DMA_ERROR_CODE); |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index 89664675b469..80d1f399ee51 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -217,6 +217,14 @@ typedef elf_vrregset_t elf_fpxregset_t; | |||
217 | 217 | ||
218 | #define ELF_PLATFORM (cur_cpu_spec->platform) | 218 | #define ELF_PLATFORM (cur_cpu_spec->platform) |
219 | 219 | ||
220 | /* While ELF_PLATFORM indicates the ISA supported by the platform, it | ||
221 | * may not accurately reflect the underlying behavior of the hardware | ||
222 | * (as in the case of running in Power5+ compatibility mode on a | ||
223 | * Power6 machine). ELF_BASE_PLATFORM allows ld.so to load libraries | ||
224 | * that are tuned for the real hardware. | ||
225 | */ | ||
226 | #define ELF_BASE_PLATFORM (powerpc_base_platform) | ||
227 | |||
220 | #ifdef __powerpc64__ | 228 | #ifdef __powerpc64__ |
221 | # define ELF_PLAT_INIT(_r, load_addr) do { \ | 229 | # define ELF_PLAT_INIT(_r, load_addr) do { \ |
222 | _r->gpr[2] = load_addr; \ | 230 | _r->gpr[2] = load_addr; \ |
diff --git a/include/asm-powerpc/firmware.h b/include/asm-powerpc/firmware.h index ef328995ba9d..3a179827528d 100644 --- a/include/asm-powerpc/firmware.h +++ b/include/asm-powerpc/firmware.h | |||
@@ -46,6 +46,7 @@ | |||
46 | #define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000) | 46 | #define FW_FEATURE_PS3_LV1 ASM_CONST(0x0000000000800000) |
47 | #define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000) | 47 | #define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000) |
48 | #define FW_FEATURE_BULK_REMOVE ASM_CONST(0x0000000002000000) | 48 | #define FW_FEATURE_BULK_REMOVE ASM_CONST(0x0000000002000000) |
49 | #define FW_FEATURE_CMO ASM_CONST(0x0000000004000000) | ||
49 | 50 | ||
50 | #ifndef __ASSEMBLY__ | 51 | #ifndef __ASSEMBLY__ |
51 | 52 | ||
@@ -58,7 +59,7 @@ enum { | |||
58 | FW_FEATURE_MIGRATE | FW_FEATURE_PERFMON | FW_FEATURE_CRQ | | 59 | FW_FEATURE_MIGRATE | FW_FEATURE_PERFMON | FW_FEATURE_CRQ | |
59 | FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN | | 60 | FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN | |
60 | FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE | | 61 | FW_FEATURE_BULK | FW_FEATURE_XDABR | FW_FEATURE_MULTITCE | |
61 | FW_FEATURE_SPLPAR | FW_FEATURE_LPAR, | 62 | FW_FEATURE_SPLPAR | FW_FEATURE_LPAR | FW_FEATURE_CMO, |
62 | FW_FEATURE_PSERIES_ALWAYS = 0, | 63 | FW_FEATURE_PSERIES_ALWAYS = 0, |
63 | FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, | 64 | FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, |
64 | FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, | 65 | FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, |
diff --git a/include/asm-powerpc/gpio.h b/include/asm-powerpc/gpio.h index 77ad3a890f30..ea04632399d8 100644 --- a/include/asm-powerpc/gpio.h +++ b/include/asm-powerpc/gpio.h | |||
@@ -17,7 +17,7 @@ | |||
17 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
18 | #include <asm-generic/gpio.h> | 18 | #include <asm-generic/gpio.h> |
19 | 19 | ||
20 | #ifdef CONFIG_HAVE_GPIO_LIB | 20 | #ifdef CONFIG_GPIOLIB |
21 | 21 | ||
22 | /* | 22 | /* |
23 | * We don't (yet) implement inlined/rapid versions for on-chip gpios. | 23 | * We don't (yet) implement inlined/rapid versions for on-chip gpios. |
@@ -51,6 +51,6 @@ static inline int irq_to_gpio(unsigned int irq) | |||
51 | return -EINVAL; | 51 | return -EINVAL; |
52 | } | 52 | } |
53 | 53 | ||
54 | #endif /* CONFIG_HAVE_GPIO_LIB */ | 54 | #endif /* CONFIG_GPIOLIB */ |
55 | 55 | ||
56 | #endif /* __ASM_POWERPC_GPIO_H */ | 56 | #endif /* __ASM_POWERPC_GPIO_H */ |
diff --git a/include/asm-powerpc/hugetlb.h b/include/asm-powerpc/hugetlb.h index be32ff02f4a0..26f0d0ab27a5 100644 --- a/include/asm-powerpc/hugetlb.h +++ b/include/asm-powerpc/hugetlb.h | |||
@@ -7,7 +7,7 @@ | |||
7 | int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, | 7 | int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, |
8 | unsigned long len); | 8 | unsigned long len); |
9 | 9 | ||
10 | void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long addr, | 10 | void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, |
11 | unsigned long end, unsigned long floor, | 11 | unsigned long end, unsigned long floor, |
12 | unsigned long ceiling); | 12 | unsigned long ceiling); |
13 | 13 | ||
@@ -21,11 +21,13 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | |||
21 | * If the arch doesn't supply something else, assume that hugepage | 21 | * If the arch doesn't supply something else, assume that hugepage |
22 | * size aligned regions are ok without further preparation. | 22 | * size aligned regions are ok without further preparation. |
23 | */ | 23 | */ |
24 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | 24 | static inline int prepare_hugepage_range(struct file *file, |
25 | unsigned long addr, unsigned long len) | ||
25 | { | 26 | { |
26 | if (len & ~HPAGE_MASK) | 27 | struct hstate *h = hstate_file(file); |
28 | if (len & ~huge_page_mask(h)) | ||
27 | return -EINVAL; | 29 | return -EINVAL; |
28 | if (addr & ~HPAGE_MASK) | 30 | if (addr & ~huge_page_mask(h)) |
29 | return -EINVAL; | 31 | return -EINVAL; |
30 | return 0; | 32 | return 0; |
31 | } | 33 | } |
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index bf6cd7cb996c..fbe2932fa9e9 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -92,6 +92,11 @@ | |||
92 | #define H_EXACT (1UL<<(63-24)) /* Use exact PTE or return H_PTEG_FULL */ | 92 | #define H_EXACT (1UL<<(63-24)) /* Use exact PTE or return H_PTEG_FULL */ |
93 | #define H_R_XLATE (1UL<<(63-25)) /* include a valid logical page num in the pte if the valid bit is set */ | 93 | #define H_R_XLATE (1UL<<(63-25)) /* include a valid logical page num in the pte if the valid bit is set */ |
94 | #define H_READ_4 (1UL<<(63-26)) /* Return 4 PTEs */ | 94 | #define H_READ_4 (1UL<<(63-26)) /* Return 4 PTEs */ |
95 | #define H_PAGE_STATE_CHANGE (1UL<<(63-28)) | ||
96 | #define H_PAGE_UNUSED ((1UL<<(63-29)) | (1UL<<(63-30))) | ||
97 | #define H_PAGE_SET_UNUSED (H_PAGE_STATE_CHANGE | H_PAGE_UNUSED) | ||
98 | #define H_PAGE_SET_LOANED (H_PAGE_SET_UNUSED | (1UL<<(63-31))) | ||
99 | #define H_PAGE_SET_ACTIVE H_PAGE_STATE_CHANGE | ||
95 | #define H_AVPN (1UL<<(63-32)) /* An avpn is provided as a sanity test */ | 100 | #define H_AVPN (1UL<<(63-32)) /* An avpn is provided as a sanity test */ |
96 | #define H_ANDCOND (1UL<<(63-33)) | 101 | #define H_ANDCOND (1UL<<(63-33)) |
97 | #define H_ICACHE_INVALIDATE (1UL<<(63-40)) /* icbi, etc. (ignored for IO pages) */ | 102 | #define H_ICACHE_INVALIDATE (1UL<<(63-40)) /* icbi, etc. (ignored for IO pages) */ |
@@ -210,7 +215,9 @@ | |||
210 | #define H_JOIN 0x298 | 215 | #define H_JOIN 0x298 |
211 | #define H_VASI_STATE 0x2A4 | 216 | #define H_VASI_STATE 0x2A4 |
212 | #define H_ENABLE_CRQ 0x2B0 | 217 | #define H_ENABLE_CRQ 0x2B0 |
213 | #define MAX_HCALL_OPCODE H_ENABLE_CRQ | 218 | #define H_SET_MPP 0x2D0 |
219 | #define H_GET_MPP 0x2D4 | ||
220 | #define MAX_HCALL_OPCODE H_GET_MPP | ||
214 | 221 | ||
215 | #ifndef __ASSEMBLY__ | 222 | #ifndef __ASSEMBLY__ |
216 | 223 | ||
@@ -270,6 +277,20 @@ struct hcall_stats { | |||
270 | }; | 277 | }; |
271 | #define HCALL_STAT_ARRAY_SIZE ((MAX_HCALL_OPCODE >> 2) + 1) | 278 | #define HCALL_STAT_ARRAY_SIZE ((MAX_HCALL_OPCODE >> 2) + 1) |
272 | 279 | ||
280 | struct hvcall_mpp_data { | ||
281 | unsigned long entitled_mem; | ||
282 | unsigned long mapped_mem; | ||
283 | unsigned short group_num; | ||
284 | unsigned short pool_num; | ||
285 | unsigned char mem_weight; | ||
286 | unsigned char unallocated_mem_weight; | ||
287 | unsigned long unallocated_entitlement; /* value in bytes */ | ||
288 | unsigned long pool_size; | ||
289 | signed long loan_request; | ||
290 | unsigned long backing_mem; | ||
291 | }; | ||
292 | |||
293 | int h_get_mpp(struct hvcall_mpp_data *); | ||
273 | #endif /* __ASSEMBLY__ */ | 294 | #endif /* __ASSEMBLY__ */ |
274 | #endif /* __KERNEL__ */ | 295 | #endif /* __KERNEL__ */ |
275 | #endif /* _ASM_POWERPC_HVCALL_H */ | 296 | #endif /* _ASM_POWERPC_HVCALL_H */ |
diff --git a/include/asm-powerpc/ide.h b/include/asm-powerpc/ide.h index 3d90bf7d3d73..1aaf27be8741 100644 --- a/include/asm-powerpc/ide.h +++ b/include/asm-powerpc/ide.h | |||
@@ -14,14 +14,6 @@ | |||
14 | #endif | 14 | #endif |
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | 16 | ||
17 | #ifndef MAX_HWIFS | ||
18 | #ifdef __powerpc64__ | ||
19 | #define MAX_HWIFS 10 | ||
20 | #else | ||
21 | #define MAX_HWIFS 8 | ||
22 | #endif | ||
23 | #endif | ||
24 | |||
25 | #define __ide_mm_insw(p, a, c) readsw((void __iomem *)(p), (a), (c)) | 17 | #define __ide_mm_insw(p, a, c) readsw((void __iomem *)(p), (a), (c)) |
26 | #define __ide_mm_insl(p, a, c) readsl((void __iomem *)(p), (a), (c)) | 18 | #define __ide_mm_insl(p, a, c) readsl((void __iomem *)(p), (a), (c)) |
27 | #define __ide_mm_outsw(p, a, c) writesw((void __iomem *)(p), (a), (c)) | 19 | #define __ide_mm_outsw(p, a, c) writesw((void __iomem *)(p), (a), (c)) |
@@ -40,16 +32,6 @@ static __inline__ int ide_default_irq(unsigned long base) | |||
40 | case 0x170: return 15; | 32 | case 0x170: return 15; |
41 | } | 33 | } |
42 | #endif | 34 | #endif |
43 | #ifdef CONFIG_PPC_PREP | ||
44 | switch (base) { | ||
45 | case 0x1f0: return 13; | ||
46 | case 0x170: return 13; | ||
47 | case 0x1e8: return 11; | ||
48 | case 0x168: return 10; | ||
49 | case 0xfff0: return 14; /* MCP(N)750 ide0 */ | ||
50 | case 0xffe0: return 15; /* MCP(N)750 ide1 */ | ||
51 | } | ||
52 | #endif | ||
53 | return 0; | 35 | return 0; |
54 | } | 36 | } |
55 | 37 | ||
@@ -62,14 +44,6 @@ static __inline__ unsigned long ide_default_io_base(int index) | |||
62 | case 1: return 0x170; | 44 | case 1: return 0x170; |
63 | } | 45 | } |
64 | #endif | 46 | #endif |
65 | #ifdef CONFIG_PPC_PREP | ||
66 | switch (index) { | ||
67 | case 0: return 0x1f0; | ||
68 | case 1: return 0x170; | ||
69 | case 2: return 0x1e8; | ||
70 | case 3: return 0x168; | ||
71 | } | ||
72 | #endif | ||
73 | return 0; | 47 | return 0; |
74 | } | 48 | } |
75 | 49 | ||
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 8b627823f5f9..77c7fa025e65 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -617,7 +617,8 @@ static inline void iosync(void) | |||
617 | * and can be hooked by the platform via ppc_md | 617 | * and can be hooked by the platform via ppc_md |
618 | * | 618 | * |
619 | * * ioremap_flags allows to specify the page flags as an argument and can | 619 | * * ioremap_flags allows to specify the page flags as an argument and can |
620 | * also be hooked by the platform via ppc_md | 620 | * also be hooked by the platform via ppc_md. ioremap_prot is the exact |
621 | * same thing as ioremap_flags. | ||
621 | * | 622 | * |
622 | * * ioremap_nocache is identical to ioremap | 623 | * * ioremap_nocache is identical to ioremap |
623 | * | 624 | * |
@@ -639,6 +640,8 @@ extern void __iomem *ioremap(phys_addr_t address, unsigned long size); | |||
639 | extern void __iomem *ioremap_flags(phys_addr_t address, unsigned long size, | 640 | extern void __iomem *ioremap_flags(phys_addr_t address, unsigned long size, |
640 | unsigned long flags); | 641 | unsigned long flags); |
641 | #define ioremap_nocache(addr, size) ioremap((addr), (size)) | 642 | #define ioremap_nocache(addr, size) ioremap((addr), (size)) |
643 | #define ioremap_prot(addr, size, prot) ioremap_flags((addr), (size), (prot)) | ||
644 | |||
642 | extern void iounmap(volatile void __iomem *addr); | 645 | extern void iounmap(volatile void __iomem *addr); |
643 | 646 | ||
644 | extern void __iomem *__ioremap(phys_addr_t, unsigned long size, | 647 | extern void __iomem *__ioremap(phys_addr_t, unsigned long size, |
diff --git a/include/asm-powerpc/kgdb.h b/include/asm-powerpc/kgdb.h index b617dac82969..1399caf719ae 100644 --- a/include/asm-powerpc/kgdb.h +++ b/include/asm-powerpc/kgdb.h | |||
@@ -1,57 +1,65 @@ | |||
1 | /* | 1 | /* |
2 | * kgdb.h: Defines and declarations for serial line source level | 2 | * include/asm-powerpc/kgdb.h |
3 | * remote debugging of the Linux kernel using gdb. | ||
4 | * | 3 | * |
4 | * The PowerPC (32/64) specific defines / externs for KGDB. Based on | ||
5 | * the previous 32bit and 64bit specific files, which had the following | ||
6 | * copyrights: | ||
7 | * | ||
8 | * PPC64 Mods (C) 2005 Frank Rowand (frowand@mvista.com) | ||
9 | * PPC Mods (C) 2004 Tom Rini (trini@mvista.com) | ||
10 | * PPC Mods (C) 2003 John Whitney (john.whitney@timesys.com) | ||
5 | * PPC Mods (C) 1998 Michael Tesch (tesch@cs.wisc.edu) | 11 | * PPC Mods (C) 1998 Michael Tesch (tesch@cs.wisc.edu) |
6 | * | 12 | * |
13 | * | ||
7 | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | 14 | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) |
15 | * Author: Tom Rini <trini@kernel.crashing.org> | ||
16 | * | ||
17 | * 2006 (c) MontaVista Software, Inc. This file is licensed under | ||
18 | * the terms of the GNU General Public License version 2. This program | ||
19 | * is licensed "as is" without any warranty of any kind, whether express | ||
20 | * or implied. | ||
8 | */ | 21 | */ |
9 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
10 | #ifndef _PPC_KGDB_H | 23 | #ifndef __POWERPC_KGDB_H__ |
11 | #define _PPC_KGDB_H | 24 | #define __POWERPC_KGDB_H__ |
12 | 25 | ||
13 | #ifndef __ASSEMBLY__ | 26 | #ifndef __ASSEMBLY__ |
14 | 27 | ||
15 | /* Things specific to the gen550 backend. */ | 28 | #define BREAK_INSTR_SIZE 4 |
16 | struct uart_port; | 29 | #define BUFMAX ((NUMREGBYTES * 2) + 512) |
17 | 30 | #define OUTBUFMAX ((NUMREGBYTES * 2) + 512) | |
18 | extern void gen550_progress(char *, unsigned short); | 31 | static inline void arch_kgdb_breakpoint(void) |
19 | extern void gen550_kgdb_map_scc(void); | 32 | { |
20 | extern void gen550_init(int, struct uart_port *); | 33 | asm(".long 0x7d821008"); /* twge r2, r2 */ |
21 | 34 | } | |
22 | /* Things specific to the pmac backend. */ | 35 | #define CACHE_FLUSH_IS_SAFE 1 |
23 | extern void zs_kgdb_hook(int tty_num); | ||
24 | |||
25 | /* To init the kgdb engine. (called by serial hook)*/ | ||
26 | extern void set_debug_traps(void); | ||
27 | |||
28 | /* To enter the debugger explicitly. */ | ||
29 | extern void breakpoint(void); | ||
30 | |||
31 | /* For taking exceptions | ||
32 | * these are defined in traps.c | ||
33 | */ | ||
34 | extern int (*debugger)(struct pt_regs *regs); | ||
35 | extern int (*debugger_bpt)(struct pt_regs *regs); | ||
36 | extern int (*debugger_sstep)(struct pt_regs *regs); | ||
37 | extern int (*debugger_iabr_match)(struct pt_regs *regs); | ||
38 | extern int (*debugger_dabr_match)(struct pt_regs *regs); | ||
39 | extern void (*debugger_fault_handler)(struct pt_regs *regs); | ||
40 | |||
41 | /* What we bring to the party */ | ||
42 | int kgdb_bpt(struct pt_regs *regs); | ||
43 | int kgdb_sstep(struct pt_regs *regs); | ||
44 | void kgdb(struct pt_regs *regs); | ||
45 | int kgdb_iabr_match(struct pt_regs *regs); | ||
46 | int kgdb_dabr_match(struct pt_regs *regs); | ||
47 | 36 | ||
37 | /* The number bytes of registers we have to save depends on a few | ||
38 | * things. For 64bit we default to not including vector registers and | ||
39 | * vector state registers. */ | ||
40 | #ifdef CONFIG_PPC64 | ||
48 | /* | 41 | /* |
49 | * external low-level support routines (ie macserial.c) | 42 | * 64 bit (8 byte) registers: |
43 | * 32 gpr, 32 fpr, nip, msr, link, ctr | ||
44 | * 32 bit (4 byte) registers: | ||
45 | * ccr, xer, fpscr | ||
50 | */ | 46 | */ |
51 | extern void kgdb_interruptible(int); /* control interrupts from serial */ | 47 | #define NUMREGBYTES ((68 * 8) + (3 * 4)) |
52 | extern void putDebugChar(char); /* write a single character */ | 48 | #define NUMCRITREGBYTES 184 |
53 | extern char getDebugChar(void); /* read and return a single char */ | 49 | #else /* CONFIG_PPC32 */ |
54 | 50 | /* On non-E500 family PPC32 we determine the size by picking the last | |
51 | * register we need, but on E500 we skip sections so we list what we | ||
52 | * need to store, and add it up. */ | ||
53 | #ifndef CONFIG_E500 | ||
54 | #define MAXREG (PT_FPSCR+1) | ||
55 | #else | ||
56 | /* 32 GPRs (8 bytes), nip, msr, ccr, link, ctr, xer, acc (8 bytes), spefscr*/ | ||
57 | #define MAXREG ((32*2)+6+2+1) | ||
58 | #endif | ||
59 | #define NUMREGBYTES (MAXREG * sizeof(int)) | ||
60 | /* CR/LR, R1, R2, R13-R31 inclusive. */ | ||
61 | #define NUMCRITREGBYTES (23 * sizeof(int)) | ||
62 | #endif /* 32/64 */ | ||
55 | #endif /* !(__ASSEMBLY__) */ | 63 | #endif /* !(__ASSEMBLY__) */ |
56 | #endif /* !(_PPC_KGDB_H) */ | 64 | #endif /* !__POWERPC_KGDB_H__ */ |
57 | #endif /* __KERNEL__ */ | 65 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/kvm_host.h b/include/asm-powerpc/kvm_host.h index 81a69d711017..2655e2a4831e 100644 --- a/include/asm-powerpc/kvm_host.h +++ b/include/asm-powerpc/kvm_host.h | |||
@@ -31,6 +31,8 @@ | |||
31 | /* memory slots that does not exposed to userspace */ | 31 | /* memory slots that does not exposed to userspace */ |
32 | #define KVM_PRIVATE_MEM_SLOTS 4 | 32 | #define KVM_PRIVATE_MEM_SLOTS 4 |
33 | 33 | ||
34 | #define KVM_COALESCED_MMIO_PAGE_OFFSET 1 | ||
35 | |||
34 | /* We don't currently support large pages. */ | 36 | /* We don't currently support large pages. */ |
35 | #define KVM_PAGES_PER_HPAGE (1<<31) | 37 | #define KVM_PAGES_PER_HPAGE (1<<31) |
36 | 38 | ||
diff --git a/include/asm-powerpc/kvm_ppc.h b/include/asm-powerpc/kvm_ppc.h index 5a21115228af..a8b068792260 100644 --- a/include/asm-powerpc/kvm_ppc.h +++ b/include/asm-powerpc/kvm_ppc.h | |||
@@ -61,7 +61,8 @@ extern int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu); | |||
61 | 61 | ||
62 | extern void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, | 62 | extern void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, |
63 | u64 asid, u32 flags); | 63 | u64 asid, u32 flags); |
64 | extern void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, u64 eaddr, u64 asid); | 64 | extern void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, gva_t eaddr, |
65 | gva_t eend, u32 asid); | ||
65 | extern void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode); | 66 | extern void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode); |
66 | 67 | ||
67 | extern void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu); | 68 | extern void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu); |
diff --git a/include/asm-powerpc/lppaca.h b/include/asm-powerpc/lppaca.h index 567ed92cd91f..2fe268b10333 100644 --- a/include/asm-powerpc/lppaca.h +++ b/include/asm-powerpc/lppaca.h | |||
@@ -125,7 +125,10 @@ struct lppaca { | |||
125 | // NOTE: This value will ALWAYS be zero for dedicated processors and | 125 | // NOTE: This value will ALWAYS be zero for dedicated processors and |
126 | // will NEVER be zero for shared processors (ie, initialized to a 1). | 126 | // will NEVER be zero for shared processors (ie, initialized to a 1). |
127 | volatile u32 yield_count; // PLIC increments each dispatchx00-x03 | 127 | volatile u32 yield_count; // PLIC increments each dispatchx00-x03 |
128 | u8 reserved6[124]; // Reserved x04-x7F | 128 | u32 reserved6; |
129 | volatile u64 cmo_faults; // CMO page fault count x08-x0F | ||
130 | volatile u64 cmo_fault_time; // CMO page fault time x10-x17 | ||
131 | u8 reserved7[104]; // Reserved x18-x7F | ||
129 | 132 | ||
130 | //============================================================================= | 133 | //============================================================================= |
131 | // CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data | 134 | // CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data |
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index 989922621e35..893aafd87fde 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
@@ -76,11 +76,12 @@ struct machdep_calls { | |||
76 | * destroyed as well */ | 76 | * destroyed as well */ |
77 | void (*hpte_clear_all)(void); | 77 | void (*hpte_clear_all)(void); |
78 | 78 | ||
79 | void (*tce_build)(struct iommu_table * tbl, | 79 | int (*tce_build)(struct iommu_table *tbl, |
80 | long index, | 80 | long index, |
81 | long npages, | 81 | long npages, |
82 | unsigned long uaddr, | 82 | unsigned long uaddr, |
83 | enum dma_data_direction direction); | 83 | enum dma_data_direction direction, |
84 | struct dma_attrs *attrs); | ||
84 | void (*tce_free)(struct iommu_table *tbl, | 85 | void (*tce_free)(struct iommu_table *tbl, |
85 | long index, | 86 | long index, |
86 | long npages); | 87 | long npages); |
diff --git a/include/asm-powerpc/mmu-hash64.h b/include/asm-powerpc/mmu-hash64.h index d1dc16afb118..19c7a9403490 100644 --- a/include/asm-powerpc/mmu-hash64.h +++ b/include/asm-powerpc/mmu-hash64.h | |||
@@ -194,9 +194,9 @@ extern int mmu_ci_restrictions; | |||
194 | 194 | ||
195 | #ifdef CONFIG_HUGETLB_PAGE | 195 | #ifdef CONFIG_HUGETLB_PAGE |
196 | /* | 196 | /* |
197 | * The page size index of the huge pages for use by hugetlbfs | 197 | * The page size indexes of the huge pages for use by hugetlbfs |
198 | */ | 198 | */ |
199 | extern int mmu_huge_psize; | 199 | extern unsigned int mmu_huge_psizes[MMU_PAGE_COUNT]; |
200 | 200 | ||
201 | #endif /* CONFIG_HUGETLB_PAGE */ | 201 | #endif /* CONFIG_HUGETLB_PAGE */ |
202 | 202 | ||
@@ -281,6 +281,8 @@ extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | |||
281 | unsigned long pstart, unsigned long mode, | 281 | unsigned long pstart, unsigned long mode, |
282 | int psize, int ssize); | 282 | int psize, int ssize); |
283 | extern void set_huge_psize(int psize); | 283 | extern void set_huge_psize(int psize); |
284 | extern void add_gpage(unsigned long addr, unsigned long page_size, | ||
285 | unsigned long number_of_pages); | ||
284 | extern void demote_segment_4k(struct mm_struct *mm, unsigned long addr); | 286 | extern void demote_segment_4k(struct mm_struct *mm, unsigned long addr); |
285 | 287 | ||
286 | extern void htab_initialize(void); | 288 | extern void htab_initialize(void); |
diff --git a/include/asm-powerpc/mpc52xx_psc.h b/include/asm-powerpc/mpc52xx_psc.h index 710c5d36efaa..8917ed630565 100644 --- a/include/asm-powerpc/mpc52xx_psc.h +++ b/include/asm-powerpc/mpc52xx_psc.h | |||
@@ -60,10 +60,12 @@ | |||
60 | #define MPC52xx_PSC_RXTX_FIFO_ALARM 0x0002 | 60 | #define MPC52xx_PSC_RXTX_FIFO_ALARM 0x0002 |
61 | #define MPC52xx_PSC_RXTX_FIFO_EMPTY 0x0001 | 61 | #define MPC52xx_PSC_RXTX_FIFO_EMPTY 0x0001 |
62 | 62 | ||
63 | /* PSC interrupt mask bits */ | 63 | /* PSC interrupt status/mask bits */ |
64 | #define MPC52xx_PSC_IMR_TXRDY 0x0100 | 64 | #define MPC52xx_PSC_IMR_TXRDY 0x0100 |
65 | #define MPC52xx_PSC_IMR_RXRDY 0x0200 | 65 | #define MPC52xx_PSC_IMR_RXRDY 0x0200 |
66 | #define MPC52xx_PSC_IMR_DB 0x0400 | 66 | #define MPC52xx_PSC_IMR_DB 0x0400 |
67 | #define MPC52xx_PSC_IMR_TXEMP 0x0800 | ||
68 | #define MPC52xx_PSC_IMR_ORERR 0x1000 | ||
67 | #define MPC52xx_PSC_IMR_IPC 0x8000 | 69 | #define MPC52xx_PSC_IMR_IPC 0x8000 |
68 | 70 | ||
69 | /* PSC input port change bit */ | 71 | /* PSC input port change bit */ |
@@ -92,6 +94,34 @@ | |||
92 | 94 | ||
93 | #define MPC52xx_PSC_RFNUM_MASK 0x01ff | 95 | #define MPC52xx_PSC_RFNUM_MASK 0x01ff |
94 | 96 | ||
97 | #define MPC52xx_PSC_SICR_DTS1 (1 << 29) | ||
98 | #define MPC52xx_PSC_SICR_SHDR (1 << 28) | ||
99 | #define MPC52xx_PSC_SICR_SIM_MASK (0xf << 24) | ||
100 | #define MPC52xx_PSC_SICR_SIM_UART (0x0 << 24) | ||
101 | #define MPC52xx_PSC_SICR_SIM_UART_DCD (0x8 << 24) | ||
102 | #define MPC52xx_PSC_SICR_SIM_CODEC_8 (0x1 << 24) | ||
103 | #define MPC52xx_PSC_SICR_SIM_CODEC_16 (0x2 << 24) | ||
104 | #define MPC52xx_PSC_SICR_SIM_AC97 (0x3 << 24) | ||
105 | #define MPC52xx_PSC_SICR_SIM_SIR (0x8 << 24) | ||
106 | #define MPC52xx_PSC_SICR_SIM_SIR_DCD (0xc << 24) | ||
107 | #define MPC52xx_PSC_SICR_SIM_MIR (0x5 << 24) | ||
108 | #define MPC52xx_PSC_SICR_SIM_FIR (0x6 << 24) | ||
109 | #define MPC52xx_PSC_SICR_SIM_CODEC_24 (0x7 << 24) | ||
110 | #define MPC52xx_PSC_SICR_SIM_CODEC_32 (0xf << 24) | ||
111 | #define MPC52xx_PSC_SICR_GENCLK (1 << 23) | ||
112 | #define MPC52xx_PSC_SICR_I2S (1 << 22) | ||
113 | #define MPC52xx_PSC_SICR_CLKPOL (1 << 21) | ||
114 | #define MPC52xx_PSC_SICR_SYNCPOL (1 << 20) | ||
115 | #define MPC52xx_PSC_SICR_CELLSLAVE (1 << 19) | ||
116 | #define MPC52xx_PSC_SICR_CELL2XCLK (1 << 18) | ||
117 | #define MPC52xx_PSC_SICR_ESAI (1 << 17) | ||
118 | #define MPC52xx_PSC_SICR_ENAC97 (1 << 16) | ||
119 | #define MPC52xx_PSC_SICR_SPI (1 << 15) | ||
120 | #define MPC52xx_PSC_SICR_MSTR (1 << 14) | ||
121 | #define MPC52xx_PSC_SICR_CPOL (1 << 13) | ||
122 | #define MPC52xx_PSC_SICR_CPHA (1 << 12) | ||
123 | #define MPC52xx_PSC_SICR_USEEOF (1 << 11) | ||
124 | #define MPC52xx_PSC_SICR_DISABLEEOF (1 << 10) | ||
95 | 125 | ||
96 | /* Structure of the hardware registers */ | 126 | /* Structure of the hardware registers */ |
97 | struct mpc52xx_psc { | 127 | struct mpc52xx_psc { |
@@ -132,8 +162,12 @@ struct mpc52xx_psc { | |||
132 | u8 reserved5[3]; | 162 | u8 reserved5[3]; |
133 | u8 ctlr; /* PSC + 0x1c */ | 163 | u8 ctlr; /* PSC + 0x1c */ |
134 | u8 reserved6[3]; | 164 | u8 reserved6[3]; |
135 | u16 ccr; /* PSC + 0x20 */ | 165 | /* BitClkDiv field of CCR is byte swapped in |
136 | u8 reserved7[14]; | 166 | * the hardware for mpc5200/b compatibility */ |
167 | u32 ccr; /* PSC + 0x20 */ | ||
168 | u32 ac97_slots; /* PSC + 0x24 */ | ||
169 | u32 ac97_cmd; /* PSC + 0x28 */ | ||
170 | u32 ac97_data; /* PSC + 0x2c */ | ||
137 | u8 ivr; /* PSC + 0x30 */ | 171 | u8 ivr; /* PSC + 0x30 */ |
138 | u8 reserved8[3]; | 172 | u8 reserved8[3]; |
139 | u8 ip; /* PSC + 0x34 */ | 173 | u8 ip; /* PSC + 0x34 */ |
diff --git a/include/asm-powerpc/namei.h b/include/asm-powerpc/namei.h deleted file mode 100644 index 657443474a6a..000000000000 --- a/include/asm-powerpc/namei.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef _ASM_POWERPC_NAMEI_H | ||
2 | #define _ASM_POWERPC_NAMEI_H | ||
3 | |||
4 | #ifdef __KERNEL__ | ||
5 | |||
6 | /* | ||
7 | * Adapted from include/asm-alpha/namei.h | ||
8 | * | ||
9 | * Included from fs/namei.c | ||
10 | */ | ||
11 | |||
12 | /* This dummy routine maybe changed to something useful | ||
13 | * for /usr/gnemul/ emulation stuff. | ||
14 | * Look at asm-sparc/namei.h for details. | ||
15 | */ | ||
16 | |||
17 | #define __emul_prefix() NULL | ||
18 | |||
19 | #endif /* __KERNEL__ */ | ||
20 | #endif /* _ASM_POWERPC_NAMEI_H */ | ||
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index cffdf0eb0df6..e088545cb3f5 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h | |||
@@ -119,9 +119,6 @@ extern phys_addr_t kernstart_addr; | |||
119 | /* align addr on a size boundary - adjust address up if needed */ | 119 | /* align addr on a size boundary - adjust address up if needed */ |
120 | #define _ALIGN(addr,size) _ALIGN_UP(addr,size) | 120 | #define _ALIGN(addr,size) _ALIGN_UP(addr,size) |
121 | 121 | ||
122 | /* to align the pointer to the (next) page boundary */ | ||
123 | #define PAGE_ALIGN(addr) _ALIGN(addr, PAGE_SIZE) | ||
124 | |||
125 | /* | 122 | /* |
126 | * Don't compare things with KERNELBASE or PAGE_OFFSET to test for | 123 | * Don't compare things with KERNELBASE or PAGE_OFFSET to test for |
127 | * "kernelness", use is_kernel_addr() - it should do what you want. | 124 | * "kernelness", use is_kernel_addr() - it should do what you want. |
diff --git a/include/asm-powerpc/page_64.h b/include/asm-powerpc/page_64.h index 02fd80710e9d..043bfdfe4f73 100644 --- a/include/asm-powerpc/page_64.h +++ b/include/asm-powerpc/page_64.h | |||
@@ -90,6 +90,7 @@ extern unsigned int HPAGE_SHIFT; | |||
90 | #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) | 90 | #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) |
91 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) | 91 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) |
92 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 92 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
93 | #define HUGE_MAX_HSTATE 3 | ||
93 | 94 | ||
94 | #endif /* __ASSEMBLY__ */ | 95 | #endif /* __ASSEMBLY__ */ |
95 | 96 | ||
diff --git a/include/asm-powerpc/pgalloc-64.h b/include/asm-powerpc/pgalloc-64.h index 68980990f62a..812a1d8f35cb 100644 --- a/include/asm-powerpc/pgalloc-64.h +++ b/include/asm-powerpc/pgalloc-64.h | |||
@@ -22,7 +22,7 @@ extern struct kmem_cache *pgtable_cache[]; | |||
22 | #define PUD_CACHE_NUM 1 | 22 | #define PUD_CACHE_NUM 1 |
23 | #define PMD_CACHE_NUM 1 | 23 | #define PMD_CACHE_NUM 1 |
24 | #define HUGEPTE_CACHE_NUM 2 | 24 | #define HUGEPTE_CACHE_NUM 2 |
25 | #define PTE_NONCACHE_NUM 3 /* from GFP rather than kmem_cache */ | 25 | #define PTE_NONCACHE_NUM 7 /* from GFP rather than kmem_cache */ |
26 | 26 | ||
27 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 27 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
28 | { | 28 | { |
@@ -119,7 +119,7 @@ static inline void pte_free(struct mm_struct *mm, pgtable_t ptepage) | |||
119 | __free_page(ptepage); | 119 | __free_page(ptepage); |
120 | } | 120 | } |
121 | 121 | ||
122 | #define PGF_CACHENUM_MASK 0x3 | 122 | #define PGF_CACHENUM_MASK 0x7 |
123 | 123 | ||
124 | typedef struct pgtable_free { | 124 | typedef struct pgtable_free { |
125 | unsigned long val; | 125 | unsigned long val; |
diff --git a/include/asm-powerpc/pgtable-4k.h b/include/asm-powerpc/pgtable-4k.h index fd2090dc1dce..6b18ba9d2d85 100644 --- a/include/asm-powerpc/pgtable-4k.h +++ b/include/asm-powerpc/pgtable-4k.h | |||
@@ -46,11 +46,16 @@ | |||
46 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ | 46 | #define _PAGE_GROUP_IX 0x7000 /* software: HPTE index within group */ |
47 | #define _PAGE_F_SECOND _PAGE_SECONDARY | 47 | #define _PAGE_F_SECOND _PAGE_SECONDARY |
48 | #define _PAGE_F_GIX _PAGE_GROUP_IX | 48 | #define _PAGE_F_GIX _PAGE_GROUP_IX |
49 | #define _PAGE_SPECIAL 0x10000 /* software: special page */ | ||
50 | #define __HAVE_ARCH_PTE_SPECIAL | ||
49 | 51 | ||
50 | /* PTE flags to conserve for HPTE identification */ | 52 | /* PTE flags to conserve for HPTE identification */ |
51 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | \ | 53 | #define _PAGE_HPTEFLAGS (_PAGE_BUSY | _PAGE_HASHPTE | \ |
52 | _PAGE_SECONDARY | _PAGE_GROUP_IX) | 54 | _PAGE_SECONDARY | _PAGE_GROUP_IX) |
53 | 55 | ||
56 | /* There is no 4K PFN hack on 4K pages */ | ||
57 | #define _PAGE_4K_PFN 0 | ||
58 | |||
54 | /* PAGE_MASK gives the right answer below, but only by accident */ | 59 | /* PAGE_MASK gives the right answer below, but only by accident */ |
55 | /* It should be preserving the high 48 bits and then specifically */ | 60 | /* It should be preserving the high 48 bits and then specifically */ |
56 | /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */ | 61 | /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */ |
diff --git a/include/asm-powerpc/pgtable-64k.h b/include/asm-powerpc/pgtable-64k.h index c5007712473f..07b0d8f09cb6 100644 --- a/include/asm-powerpc/pgtable-64k.h +++ b/include/asm-powerpc/pgtable-64k.h | |||
@@ -70,6 +70,8 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
70 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 70 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
71 | 71 | ||
72 | /* Additional PTE bits (don't change without checking asm in hash_low.S) */ | 72 | /* Additional PTE bits (don't change without checking asm in hash_low.S) */ |
73 | #define __HAVE_ARCH_PTE_SPECIAL | ||
74 | #define _PAGE_SPECIAL 0x00000400 /* software: special page */ | ||
73 | #define _PAGE_HPTE_SUB 0x0ffff000 /* combo only: sub pages HPTE bits */ | 75 | #define _PAGE_HPTE_SUB 0x0ffff000 /* combo only: sub pages HPTE bits */ |
74 | #define _PAGE_HPTE_SUB0 0x08000000 /* combo only: first sub page */ | 76 | #define _PAGE_HPTE_SUB0 0x08000000 /* combo only: first sub page */ |
75 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ | 77 | #define _PAGE_COMBO 0x10000000 /* this is a combo 4k page */ |
@@ -138,7 +140,7 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd) | |||
138 | unsigned __split = (psize == MMU_PAGE_4K || \ | 140 | unsigned __split = (psize == MMU_PAGE_4K || \ |
139 | psize == MMU_PAGE_64K_AP); \ | 141 | psize == MMU_PAGE_64K_AP); \ |
140 | shift = mmu_psize_defs[psize].shift; \ | 142 | shift = mmu_psize_defs[psize].shift; \ |
141 | for (index = 0; va < __end; index++, va += (1 << shift)) { \ | 143 | for (index = 0; va < __end; index++, va += (1L << shift)) { \ |
142 | if (!__split || __rpte_sub_valid(rpte, index)) do { \ | 144 | if (!__split || __rpte_sub_valid(rpte, index)) do { \ |
143 | 145 | ||
144 | #define pte_iterate_hashed_end() } while(0); } } while(0) | 146 | #define pte_iterate_hashed_end() } while(0); } } while(0) |
diff --git a/include/asm-powerpc/pgtable-ppc32.h b/include/asm-powerpc/pgtable-ppc32.h index 73015f0139de..6fe39e327047 100644 --- a/include/asm-powerpc/pgtable-ppc32.h +++ b/include/asm-powerpc/pgtable-ppc32.h | |||
@@ -295,10 +295,10 @@ extern int icache_44x_need_flush; | |||
295 | #define _PAGE_PRESENT 0x00001 /* S: PTE contains a translation */ | 295 | #define _PAGE_PRESENT 0x00001 /* S: PTE contains a translation */ |
296 | #define _PAGE_USER 0x00002 /* S: User page (maps to UR) */ | 296 | #define _PAGE_USER 0x00002 /* S: User page (maps to UR) */ |
297 | #define _PAGE_FILE 0x00002 /* S: when !present: nonlinear file mapping */ | 297 | #define _PAGE_FILE 0x00002 /* S: when !present: nonlinear file mapping */ |
298 | #define _PAGE_ACCESSED 0x00004 /* S: Page referenced */ | 298 | #define _PAGE_RW 0x00004 /* S: Write permission (SW) */ |
299 | #define _PAGE_HWWRITE 0x00008 /* H: Dirty & RW, set in exception */ | 299 | #define _PAGE_DIRTY 0x00008 /* S: Page dirty */ |
300 | #define _PAGE_RW 0x00010 /* S: Write permission */ | 300 | #define _PAGE_HWEXEC 0x00010 /* H: SX permission */ |
301 | #define _PAGE_HWEXEC 0x00020 /* H: UX permission */ | 301 | #define _PAGE_ACCESSED 0x00020 /* S: Page referenced */ |
302 | 302 | ||
303 | #define _PAGE_ENDIAN 0x00040 /* H: E bit */ | 303 | #define _PAGE_ENDIAN 0x00040 /* H: E bit */ |
304 | #define _PAGE_GUARDED 0x00080 /* H: G bit */ | 304 | #define _PAGE_GUARDED 0x00080 /* H: G bit */ |
@@ -307,21 +307,14 @@ extern int icache_44x_need_flush; | |||
307 | #define _PAGE_WRITETHRU 0x00400 /* H: W bit */ | 307 | #define _PAGE_WRITETHRU 0x00400 /* H: W bit */ |
308 | 308 | ||
309 | #ifdef CONFIG_PTE_64BIT | 309 | #ifdef CONFIG_PTE_64BIT |
310 | #define _PAGE_DIRTY 0x08000 /* S: Page dirty */ | ||
311 | |||
312 | /* ERPN in a PTE never gets cleared, ignore it */ | 310 | /* ERPN in a PTE never gets cleared, ignore it */ |
313 | #define _PTE_NONE_MASK 0xffffffffffff0000ULL | 311 | #define _PTE_NONE_MASK 0xffffffffffff0000ULL |
314 | #else | ||
315 | #define _PAGE_DIRTY 0x00800 /* S: Page dirty */ | ||
316 | #endif | 312 | #endif |
317 | 313 | ||
318 | #define _PMD_PRESENT 0 | 314 | #define _PMD_PRESENT 0 |
319 | #define _PMD_PRESENT_MASK (PAGE_MASK) | 315 | #define _PMD_PRESENT_MASK (PAGE_MASK) |
320 | #define _PMD_BAD (~PAGE_MASK) | 316 | #define _PMD_BAD (~PAGE_MASK) |
321 | 317 | ||
322 | /* Until my rework is finished, FSL BookE still needs atomic PTE updates */ | ||
323 | #define PTE_ATOMIC_UPDATES 1 | ||
324 | |||
325 | #elif defined(CONFIG_8xx) | 318 | #elif defined(CONFIG_8xx) |
326 | /* Definitions for 8xx embedded chips. */ | 319 | /* Definitions for 8xx embedded chips. */ |
327 | #define _PAGE_PRESENT 0x0001 /* Page is valid */ | 320 | #define _PAGE_PRESENT 0x0001 /* Page is valid */ |
@@ -402,6 +395,15 @@ extern int icache_44x_need_flush; | |||
402 | #ifndef _PAGE_EXEC | 395 | #ifndef _PAGE_EXEC |
403 | #define _PAGE_EXEC 0 | 396 | #define _PAGE_EXEC 0 |
404 | #endif | 397 | #endif |
398 | #ifndef _PAGE_ENDIAN | ||
399 | #define _PAGE_ENDIAN 0 | ||
400 | #endif | ||
401 | #ifndef _PAGE_COHERENT | ||
402 | #define _PAGE_COHERENT 0 | ||
403 | #endif | ||
404 | #ifndef _PAGE_WRITETHRU | ||
405 | #define _PAGE_WRITETHRU 0 | ||
406 | #endif | ||
405 | #ifndef _PMD_PRESENT_MASK | 407 | #ifndef _PMD_PRESENT_MASK |
406 | #define _PMD_PRESENT_MASK _PMD_PRESENT | 408 | #define _PMD_PRESENT_MASK _PMD_PRESENT |
407 | #endif | 409 | #endif |
@@ -412,6 +414,12 @@ extern int icache_44x_need_flush; | |||
412 | 414 | ||
413 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) | 415 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY) |
414 | 416 | ||
417 | |||
418 | #define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \ | ||
419 | _PAGE_WRITETHRU | _PAGE_ENDIAN | \ | ||
420 | _PAGE_USER | _PAGE_ACCESSED | \ | ||
421 | _PAGE_RW | _PAGE_HWWRITE | _PAGE_DIRTY | \ | ||
422 | _PAGE_EXEC | _PAGE_HWEXEC) | ||
415 | /* | 423 | /* |
416 | * Note: the _PAGE_COHERENT bit automatically gets set in the hardware | 424 | * Note: the _PAGE_COHERENT bit automatically gets set in the hardware |
417 | * PTE if CONFIG_SMP is defined (hash_page does this); there is no need | 425 | * PTE if CONFIG_SMP is defined (hash_page does this); there is no need |
@@ -545,6 +553,10 @@ static inline pte_t pte_mkyoung(pte_t pte) { | |||
545 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 553 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
546 | static inline pte_t pte_mkspecial(pte_t pte) { | 554 | static inline pte_t pte_mkspecial(pte_t pte) { |
547 | return pte; } | 555 | return pte; } |
556 | static inline unsigned long pte_pgprot(pte_t pte) | ||
557 | { | ||
558 | return __pgprot(pte_val(pte)) & PAGE_PROT_BITS; | ||
559 | } | ||
548 | 560 | ||
549 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 561 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
550 | { | 562 | { |
diff --git a/include/asm-powerpc/pgtable-ppc64.h b/include/asm-powerpc/pgtable-ppc64.h index ab98a9c80b28..5fc78c0be302 100644 --- a/include/asm-powerpc/pgtable-ppc64.h +++ b/include/asm-powerpc/pgtable-ppc64.h | |||
@@ -117,6 +117,10 @@ | |||
117 | #define PAGE_AGP __pgprot(_PAGE_BASE | _PAGE_WRENABLE | _PAGE_NO_CACHE) | 117 | #define PAGE_AGP __pgprot(_PAGE_BASE | _PAGE_WRENABLE | _PAGE_NO_CACHE) |
118 | #define HAVE_PAGE_AGP | 118 | #define HAVE_PAGE_AGP |
119 | 119 | ||
120 | #define PAGE_PROT_BITS __pgprot(_PAGE_GUARDED | _PAGE_COHERENT | \ | ||
121 | _PAGE_NO_CACHE | _PAGE_WRITETHRU | \ | ||
122 | _PAGE_4K_PFN | _PAGE_RW | _PAGE_USER | \ | ||
123 | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_EXEC) | ||
120 | /* PTEIDX nibble */ | 124 | /* PTEIDX nibble */ |
121 | #define _PTEIDX_SECONDARY 0x8 | 125 | #define _PTEIDX_SECONDARY 0x8 |
122 | #define _PTEIDX_GROUP_IX 0x7 | 126 | #define _PTEIDX_GROUP_IX 0x7 |
@@ -241,7 +245,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW;} | |||
241 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;} | 245 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;} |
242 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;} | 246 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;} |
243 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE;} | 247 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE;} |
244 | static inline int pte_special(pte_t pte) { return 0; } | 248 | static inline int pte_special(pte_t pte) { return pte_val(pte) & _PAGE_SPECIAL; } |
245 | 249 | ||
246 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } | 250 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } |
247 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } | 251 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } |
@@ -261,7 +265,11 @@ static inline pte_t pte_mkyoung(pte_t pte) { | |||
261 | static inline pte_t pte_mkhuge(pte_t pte) { | 265 | static inline pte_t pte_mkhuge(pte_t pte) { |
262 | return pte; } | 266 | return pte; } |
263 | static inline pte_t pte_mkspecial(pte_t pte) { | 267 | static inline pte_t pte_mkspecial(pte_t pte) { |
264 | return pte; } | 268 | pte_val(pte) |= _PAGE_SPECIAL; return pte; } |
269 | static inline unsigned long pte_pgprot(pte_t pte) | ||
270 | { | ||
271 | return __pgprot(pte_val(pte)) & PAGE_PROT_BITS; | ||
272 | } | ||
265 | 273 | ||
266 | /* Atomic PTE updates */ | 274 | /* Atomic PTE updates */ |
267 | static inline unsigned long pte_update(struct mm_struct *mm, | 275 | static inline unsigned long pte_update(struct mm_struct *mm, |
diff --git a/include/asm-powerpc/pgtable.h b/include/asm-powerpc/pgtable.h index d18ffe7bc7c4..dbb8ca172e44 100644 --- a/include/asm-powerpc/pgtable.h +++ b/include/asm-powerpc/pgtable.h | |||
@@ -38,6 +38,19 @@ extern void paging_init(void); | |||
38 | remap_pfn_range(vma, vaddr, pfn, size, prot) | 38 | remap_pfn_range(vma, vaddr, pfn, size, prot) |
39 | 39 | ||
40 | #include <asm-generic/pgtable.h> | 40 | #include <asm-generic/pgtable.h> |
41 | |||
42 | |||
43 | /* | ||
44 | * This gets called at the end of handling a page fault, when | ||
45 | * the kernel has put a new PTE into the page table for the process. | ||
46 | * We use it to ensure coherency between the i-cache and d-cache | ||
47 | * for the page which has just been mapped in. | ||
48 | * On machines which use an MMU hash table, we use this to put a | ||
49 | * corresponding HPTE into the hash table ahead of time, instead of | ||
50 | * waiting for the inevitable extra hash-table miss exception. | ||
51 | */ | ||
52 | extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); | ||
53 | |||
41 | #endif /* __ASSEMBLY__ */ | 54 | #endif /* __ASSEMBLY__ */ |
42 | 55 | ||
43 | #endif /* __KERNEL__ */ | 56 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/pmi.h b/include/asm-powerpc/pmi.h index e1dc090748df..b4e91fbf5081 100644 --- a/include/asm-powerpc/pmi.h +++ b/include/asm-powerpc/pmi.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #ifdef __KERNEL__ | 30 | #ifdef __KERNEL__ |
31 | 31 | ||
32 | #define PMI_TYPE_FREQ_CHANGE 0x01 | 32 | #define PMI_TYPE_FREQ_CHANGE 0x01 |
33 | #define PMI_TYPE_POWER_BUTTON 0x02 | ||
33 | #define PMI_READ_TYPE 0 | 34 | #define PMI_READ_TYPE 0 |
34 | #define PMI_READ_DATA0 1 | 35 | #define PMI_READ_DATA0 1 |
35 | #define PMI_READ_DATA1 2 | 36 | #define PMI_READ_DATA1 2 |
diff --git a/include/asm-powerpc/ps3.h b/include/asm-powerpc/ps3.h index 81ffe3b3c1ce..f9e34c493cbb 100644 --- a/include/asm-powerpc/ps3.h +++ b/include/asm-powerpc/ps3.h | |||
@@ -337,12 +337,18 @@ enum ps3_system_bus_device_type { | |||
337 | PS3_DEVICE_TYPE_LPM, | 337 | PS3_DEVICE_TYPE_LPM, |
338 | }; | 338 | }; |
339 | 339 | ||
340 | enum ps3_match_sub_id { | ||
341 | /* for PS3_MATCH_ID_GRAPHICS */ | ||
342 | PS3_MATCH_SUB_ID_FB = 1, | ||
343 | }; | ||
344 | |||
340 | /** | 345 | /** |
341 | * struct ps3_system_bus_device - a device on the system bus | 346 | * struct ps3_system_bus_device - a device on the system bus |
342 | */ | 347 | */ |
343 | 348 | ||
344 | struct ps3_system_bus_device { | 349 | struct ps3_system_bus_device { |
345 | enum ps3_match_id match_id; | 350 | enum ps3_match_id match_id; |
351 | enum ps3_match_sub_id match_sub_id; | ||
346 | enum ps3_system_bus_device_type dev_type; | 352 | enum ps3_system_bus_device_type dev_type; |
347 | 353 | ||
348 | u64 bus_id; /* SB */ | 354 | u64 bus_id; /* SB */ |
@@ -371,6 +377,7 @@ int ps3_close_hv_device(struct ps3_system_bus_device *dev); | |||
371 | 377 | ||
372 | struct ps3_system_bus_driver { | 378 | struct ps3_system_bus_driver { |
373 | enum ps3_match_id match_id; | 379 | enum ps3_match_id match_id; |
380 | enum ps3_match_sub_id match_sub_id; | ||
374 | struct device_driver core; | 381 | struct device_driver core; |
375 | int (*probe)(struct ps3_system_bus_device *); | 382 | int (*probe)(struct ps3_system_bus_device *); |
376 | int (*remove)(struct ps3_system_bus_device *); | 383 | int (*remove)(struct ps3_system_bus_device *); |
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h index 3d6e31024e56..734e0754fb9b 100644 --- a/include/asm-powerpc/ptrace.h +++ b/include/asm-powerpc/ptrace.h | |||
@@ -84,6 +84,7 @@ struct pt_regs { | |||
84 | #ifndef __ASSEMBLY__ | 84 | #ifndef __ASSEMBLY__ |
85 | 85 | ||
86 | #define instruction_pointer(regs) ((regs)->nip) | 86 | #define instruction_pointer(regs) ((regs)->nip) |
87 | #define user_stack_pointer(regs) ((regs)->gpr[1]) | ||
87 | #define regs_return_value(regs) ((regs)->gpr[3]) | 88 | #define regs_return_value(regs) ((regs)->gpr[3]) |
88 | 89 | ||
89 | #ifdef CONFIG_SMP | 90 | #ifdef CONFIG_SMP |
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index bbccadfee0d6..c6d1ab650778 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
@@ -155,10 +155,12 @@ | |||
155 | #define CTRL_RUNLATCH 0x1 | 155 | #define CTRL_RUNLATCH 0x1 |
156 | #define SPRN_DABR 0x3F5 /* Data Address Breakpoint Register */ | 156 | #define SPRN_DABR 0x3F5 /* Data Address Breakpoint Register */ |
157 | #define DABR_TRANSLATION (1UL << 2) | 157 | #define DABR_TRANSLATION (1UL << 2) |
158 | #define SPRN_DABR2 0x13D /* e300 */ | ||
158 | #define SPRN_DABRX 0x3F7 /* Data Address Breakpoint Register Extension */ | 159 | #define SPRN_DABRX 0x3F7 /* Data Address Breakpoint Register Extension */ |
159 | #define DABRX_USER (1UL << 0) | 160 | #define DABRX_USER (1UL << 0) |
160 | #define DABRX_KERNEL (1UL << 1) | 161 | #define DABRX_KERNEL (1UL << 1) |
161 | #define SPRN_DAR 0x013 /* Data Address Register */ | 162 | #define SPRN_DAR 0x013 /* Data Address Register */ |
163 | #define SPRN_DBCR 0x136 /* e300 Data Breakpoint Control Reg */ | ||
162 | #define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ | 164 | #define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ |
163 | #define DSISR_NOHPTE 0x40000000 /* no translation found */ | 165 | #define DSISR_NOHPTE 0x40000000 /* no translation found */ |
164 | #define DSISR_PROTFAULT 0x08000000 /* protection fault */ | 166 | #define DSISR_PROTFAULT 0x08000000 /* protection fault */ |
@@ -264,6 +266,8 @@ | |||
264 | #define HID1_PS (1<<16) /* 750FX PLL selection */ | 266 | #define HID1_PS (1<<16) /* 750FX PLL selection */ |
265 | #define SPRN_HID2 0x3F8 /* Hardware Implementation Register 2 */ | 267 | #define SPRN_HID2 0x3F8 /* Hardware Implementation Register 2 */ |
266 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ | 268 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ |
269 | #define SPRN_IABR2 0x3FA /* 83xx */ | ||
270 | #define SPRN_IBCR 0x135 /* 83xx Insn Breakpoint Control Reg */ | ||
267 | #define SPRN_HID4 0x3F4 /* 970 HID4 */ | 271 | #define SPRN_HID4 0x3F4 /* 970 HID4 */ |
268 | #define SPRN_HID5 0x3F6 /* 970 HID5 */ | 272 | #define SPRN_HID5 0x3F6 /* 970 HID5 */ |
269 | #define SPRN_HID6 0x3F9 /* BE HID 6 */ | 273 | #define SPRN_HID6 0x3F9 /* BE HID 6 */ |
diff --git a/include/asm-powerpc/semaphore.h b/include/asm-powerpc/semaphore.h deleted file mode 100644 index d9b2034ed1d2..000000000000 --- a/include/asm-powerpc/semaphore.h +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | #include <linux/semaphore.h> | ||
diff --git a/include/asm-powerpc/signal.h b/include/asm-powerpc/signal.h index a8c7babf4950..a7360cdd99eb 100644 --- a/include/asm-powerpc/signal.h +++ b/include/asm-powerpc/signal.h | |||
@@ -122,8 +122,7 @@ typedef struct sigaltstack { | |||
122 | 122 | ||
123 | #ifdef __KERNEL__ | 123 | #ifdef __KERNEL__ |
124 | struct pt_regs; | 124 | struct pt_regs; |
125 | extern int do_signal(sigset_t *oldset, struct pt_regs *regs); | 125 | extern void do_signal(struct pt_regs *regs, unsigned long thread_info_flags); |
126 | extern int do_signal32(sigset_t *oldset, struct pt_regs *regs); | ||
127 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) | 126 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) |
128 | #endif /* __KERNEL__ */ | 127 | #endif /* __KERNEL__ */ |
129 | 128 | ||
diff --git a/include/asm-powerpc/smp.h b/include/asm-powerpc/smp.h index 416d4c288cea..4d28e1e4521b 100644 --- a/include/asm-powerpc/smp.h +++ b/include/asm-powerpc/smp.h | |||
@@ -62,6 +62,8 @@ extern int smp_hw_index[]; | |||
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); | 64 | DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); |
65 | DECLARE_PER_CPU(cpumask_t, cpu_core_map); | ||
66 | extern int cpu_to_core_id(int cpu); | ||
65 | 67 | ||
66 | /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers. | 68 | /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers. |
67 | * | 69 | * |
diff --git a/include/asm-powerpc/syscall.h b/include/asm-powerpc/syscall.h new file mode 100644 index 000000000000..efa7f0b879f3 --- /dev/null +++ b/include/asm-powerpc/syscall.h | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * Access to user system call parameters and results | ||
3 | * | ||
4 | * Copyright (C) 2008 Red Hat, Inc. All rights reserved. | ||
5 | * | ||
6 | * This copyrighted material is made available to anyone wishing to use, | ||
7 | * modify, copy, or redistribute it subject to the terms and conditions | ||
8 | * of the GNU General Public License v.2. | ||
9 | * | ||
10 | * See asm-generic/syscall.h for descriptions of what we must do here. | ||
11 | */ | ||
12 | |||
13 | #ifndef _ASM_SYSCALL_H | ||
14 | #define _ASM_SYSCALL_H 1 | ||
15 | |||
16 | #include <linux/sched.h> | ||
17 | |||
18 | static inline long syscall_get_nr(struct task_struct *task, | ||
19 | struct pt_regs *regs) | ||
20 | { | ||
21 | return TRAP(regs) == 0xc00 ? regs->gpr[0] : -1L; | ||
22 | } | ||
23 | |||
24 | static inline void syscall_rollback(struct task_struct *task, | ||
25 | struct pt_regs *regs) | ||
26 | { | ||
27 | regs->gpr[3] = regs->orig_gpr3; | ||
28 | } | ||
29 | |||
30 | static inline long syscall_get_error(struct task_struct *task, | ||
31 | struct pt_regs *regs) | ||
32 | { | ||
33 | return (regs->ccr & 0x1000) ? -regs->gpr[3] : 0; | ||
34 | } | ||
35 | |||
36 | static inline long syscall_get_return_value(struct task_struct *task, | ||
37 | struct pt_regs *regs) | ||
38 | { | ||
39 | return regs->gpr[3]; | ||
40 | } | ||
41 | |||
42 | static inline void syscall_set_return_value(struct task_struct *task, | ||
43 | struct pt_regs *regs, | ||
44 | int error, long val) | ||
45 | { | ||
46 | if (error) { | ||
47 | regs->ccr |= 0x1000L; | ||
48 | regs->gpr[3] = -error; | ||
49 | } else { | ||
50 | regs->ccr &= ~0x1000L; | ||
51 | regs->gpr[3] = val; | ||
52 | } | ||
53 | } | ||
54 | |||
55 | static inline void syscall_get_arguments(struct task_struct *task, | ||
56 | struct pt_regs *regs, | ||
57 | unsigned int i, unsigned int n, | ||
58 | unsigned long *args) | ||
59 | { | ||
60 | BUG_ON(i + n > 6); | ||
61 | #ifdef CONFIG_PPC64 | ||
62 | if (test_tsk_thread_flag(task, TIF_32BIT)) { | ||
63 | /* | ||
64 | * Zero-extend 32-bit argument values. The high bits are | ||
65 | * garbage ignored by the actual syscall dispatch. | ||
66 | */ | ||
67 | while (n-- > 0) | ||
68 | args[n] = (u32) regs->gpr[3 + i + n]; | ||
69 | return; | ||
70 | } | ||
71 | #endif | ||
72 | memcpy(args, ®s->gpr[3 + i], n * sizeof(args[0])); | ||
73 | } | ||
74 | |||
75 | static inline void syscall_set_arguments(struct task_struct *task, | ||
76 | struct pt_regs *regs, | ||
77 | unsigned int i, unsigned int n, | ||
78 | const unsigned long *args) | ||
79 | { | ||
80 | BUG_ON(i + n > 6); | ||
81 | memcpy(®s->gpr[3 + i], args, n * sizeof(args[0])); | ||
82 | } | ||
83 | |||
84 | #endif /* _ASM_SYSCALL_H */ | ||
diff --git a/include/asm-powerpc/syscalls.h b/include/asm-powerpc/syscalls.h index 2b8a458f990a..eb8eb400c664 100644 --- a/include/asm-powerpc/syscalls.h +++ b/include/asm-powerpc/syscalls.h | |||
@@ -31,6 +31,7 @@ asmlinkage int sys_vfork(unsigned long p1, unsigned long p2, | |||
31 | unsigned long p3, unsigned long p4, unsigned long p5, | 31 | unsigned long p3, unsigned long p4, unsigned long p5, |
32 | unsigned long p6, struct pt_regs *regs); | 32 | unsigned long p6, struct pt_regs *regs); |
33 | asmlinkage long sys_pipe(int __user *fildes); | 33 | asmlinkage long sys_pipe(int __user *fildes); |
34 | asmlinkage long sys_pipe2(int __user *fildes, int flags); | ||
34 | asmlinkage long sys_rt_sigaction(int sig, | 35 | asmlinkage long sys_rt_sigaction(int sig, |
35 | const struct sigaction __user *act, | 36 | const struct sigaction __user *act, |
36 | struct sigaction __user *oact, size_t sigsetsize); | 37 | struct sigaction __user *oact, size_t sigsetsize); |
diff --git a/include/asm-powerpc/systbl.h b/include/asm-powerpc/systbl.h index ae7085c65692..e084272ed1c2 100644 --- a/include/asm-powerpc/systbl.h +++ b/include/asm-powerpc/systbl.h | |||
@@ -316,3 +316,9 @@ COMPAT_SYS(fallocate) | |||
316 | SYSCALL(subpage_prot) | 316 | SYSCALL(subpage_prot) |
317 | COMPAT_SYS_SPU(timerfd_settime) | 317 | COMPAT_SYS_SPU(timerfd_settime) |
318 | COMPAT_SYS_SPU(timerfd_gettime) | 318 | COMPAT_SYS_SPU(timerfd_gettime) |
319 | COMPAT_SYS_SPU(signalfd4) | ||
320 | SYSCALL_SPU(eventfd2) | ||
321 | SYSCALL_SPU(epoll_create1) | ||
322 | SYSCALL_SPU(dup3) | ||
323 | SYSCALL_SPU(pipe2) | ||
324 | SYSCALL(inotify_init1) | ||
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index e6e25e2364eb..d6648c143322 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
@@ -110,6 +110,8 @@ static inline int debugger_fault_handler(struct pt_regs *regs) { return 0; } | |||
110 | #endif | 110 | #endif |
111 | 111 | ||
112 | extern int set_dabr(unsigned long dabr); | 112 | extern int set_dabr(unsigned long dabr); |
113 | extern void do_dabr(struct pt_regs *regs, unsigned long address, | ||
114 | unsigned long error_code); | ||
113 | extern void print_backtrace(unsigned long *); | 115 | extern void print_backtrace(unsigned long *); |
114 | extern void show_regs(struct pt_regs * regs); | 116 | extern void show_regs(struct pt_regs * regs); |
115 | extern void flush_instruction_cache(void); | 117 | extern void flush_instruction_cache(void); |
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h index b705c2a7651a..9665a26a253a 100644 --- a/include/asm-powerpc/thread_info.h +++ b/include/asm-powerpc/thread_info.h | |||
@@ -66,20 +66,12 @@ struct thread_info { | |||
66 | 66 | ||
67 | #if THREAD_SHIFT >= PAGE_SHIFT | 67 | #if THREAD_SHIFT >= PAGE_SHIFT |
68 | 68 | ||
69 | #define THREAD_ORDER (THREAD_SHIFT - PAGE_SHIFT) | 69 | #define THREAD_SIZE_ORDER (THREAD_SHIFT - PAGE_SHIFT) |
70 | |||
71 | #ifdef CONFIG_DEBUG_STACK_USAGE | ||
72 | #define alloc_thread_info(tsk) \ | ||
73 | ((struct thread_info *)__get_free_pages(GFP_KERNEL | \ | ||
74 | __GFP_ZERO, THREAD_ORDER)) | ||
75 | #else | ||
76 | #define alloc_thread_info(tsk) \ | ||
77 | ((struct thread_info *)__get_free_pages(GFP_KERNEL, THREAD_ORDER)) | ||
78 | #endif | ||
79 | #define free_thread_info(ti) free_pages((unsigned long)ti, THREAD_ORDER) | ||
80 | 70 | ||
81 | #else /* THREAD_SHIFT < PAGE_SHIFT */ | 71 | #else /* THREAD_SHIFT < PAGE_SHIFT */ |
82 | 72 | ||
73 | #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR | ||
74 | |||
83 | extern struct thread_info *alloc_thread_info(struct task_struct *tsk); | 75 | extern struct thread_info *alloc_thread_info(struct task_struct *tsk); |
84 | extern void free_thread_info(struct thread_info *ti); | 76 | extern void free_thread_info(struct thread_info *ti); |
85 | 77 | ||
@@ -116,6 +108,7 @@ static inline struct thread_info *current_thread_info(void) | |||
116 | #define TIF_SECCOMP 10 /* secure computing */ | 108 | #define TIF_SECCOMP 10 /* secure computing */ |
117 | #define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ | 109 | #define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */ |
118 | #define TIF_NOERROR 12 /* Force successful syscall return */ | 110 | #define TIF_NOERROR 12 /* Force successful syscall return */ |
111 | #define TIF_NOTIFY_RESUME 13 /* callback before returning to user */ | ||
119 | #define TIF_FREEZE 14 /* Freezing for suspend */ | 112 | #define TIF_FREEZE 14 /* Freezing for suspend */ |
120 | #define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ | 113 | #define TIF_RUNLATCH 15 /* Is the runlatch enabled? */ |
121 | #define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ | 114 | #define TIF_ABI_PENDING 16 /* 32/64 bit switch needed */ |
@@ -133,12 +126,14 @@ static inline struct thread_info *current_thread_info(void) | |||
133 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) | 126 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) |
134 | #define _TIF_RESTOREALL (1<<TIF_RESTOREALL) | 127 | #define _TIF_RESTOREALL (1<<TIF_RESTOREALL) |
135 | #define _TIF_NOERROR (1<<TIF_NOERROR) | 128 | #define _TIF_NOERROR (1<<TIF_NOERROR) |
129 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | ||
136 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 130 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
137 | #define _TIF_RUNLATCH (1<<TIF_RUNLATCH) | 131 | #define _TIF_RUNLATCH (1<<TIF_RUNLATCH) |
138 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) | 132 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) |
139 | #define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP) | 133 | #define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP) |
140 | 134 | ||
141 | #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED) | 135 | #define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \ |
136 | _TIF_NOTIFY_RESUME) | ||
142 | #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) | 137 | #define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR) |
143 | 138 | ||
144 | /* Bits in local_flags */ | 139 | /* Bits in local_flags */ |
diff --git a/include/asm-powerpc/tlbflush.h b/include/asm-powerpc/tlbflush.h index 5c9108147644..361cd5c7a32b 100644 --- a/include/asm-powerpc/tlbflush.h +++ b/include/asm-powerpc/tlbflush.h | |||
@@ -162,16 +162,5 @@ extern void __flush_hash_table_range(struct mm_struct *mm, unsigned long start, | |||
162 | 162 | ||
163 | #endif | 163 | #endif |
164 | 164 | ||
165 | /* | ||
166 | * This gets called at the end of handling a page fault, when | ||
167 | * the kernel has put a new PTE into the page table for the process. | ||
168 | * We use it to ensure coherency between the i-cache and d-cache | ||
169 | * for the page which has just been mapped in. | ||
170 | * On machines which use an MMU hash table, we use this to put a | ||
171 | * corresponding HPTE into the hash table ahead of time, instead of | ||
172 | * waiting for the inevitable extra hash-table miss exception. | ||
173 | */ | ||
174 | extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); | ||
175 | |||
176 | #endif /*__KERNEL__ */ | 165 | #endif /*__KERNEL__ */ |
177 | #endif /* _ASM_POWERPC_TLBFLUSH_H */ | 166 | #endif /* _ASM_POWERPC_TLBFLUSH_H */ |
diff --git a/include/asm-powerpc/topology.h b/include/asm-powerpc/topology.h index 100c6fbfc587..c32da6f97999 100644 --- a/include/asm-powerpc/topology.h +++ b/include/asm-powerpc/topology.h | |||
@@ -108,6 +108,8 @@ static inline void sysfs_remove_device_from_node(struct sys_device *dev, | |||
108 | #include <asm/smp.h> | 108 | #include <asm/smp.h> |
109 | 109 | ||
110 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) | 110 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) |
111 | #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) | ||
112 | #define topology_core_id(cpu) (cpu_to_core_id(cpu)) | ||
111 | #endif | 113 | #endif |
112 | #endif | 114 | #endif |
113 | 115 | ||
diff --git a/include/asm-powerpc/uaccess.h b/include/asm-powerpc/uaccess.h index 1a0736f8803f..bd0fb8495154 100644 --- a/include/asm-powerpc/uaccess.h +++ b/include/asm-powerpc/uaccess.h | |||
@@ -6,6 +6,7 @@ | |||
6 | 6 | ||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
9 | #include <asm/asm-compat.h> | ||
9 | #include <asm/processor.h> | 10 | #include <asm/processor.h> |
10 | #include <asm/page.h> | 11 | #include <asm/page.h> |
11 | 12 | ||
@@ -141,12 +142,11 @@ extern long __put_user_bad(void); | |||
141 | " b 2b\n" \ | 142 | " b 2b\n" \ |
142 | ".previous\n" \ | 143 | ".previous\n" \ |
143 | ".section __ex_table,\"a\"\n" \ | 144 | ".section __ex_table,\"a\"\n" \ |
144 | " .balign %5\n" \ | 145 | PPC_LONG_ALIGN "\n" \ |
145 | PPC_LONG "1b,3b\n" \ | 146 | PPC_LONG "1b,3b\n" \ |
146 | ".previous" \ | 147 | ".previous" \ |
147 | : "=r" (err) \ | 148 | : "=r" (err) \ |
148 | : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err),\ | 149 | : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err)) |
149 | "i"(sizeof(unsigned long))) | ||
150 | 150 | ||
151 | #ifdef __powerpc64__ | 151 | #ifdef __powerpc64__ |
152 | #define __put_user_asm2(x, ptr, retval) \ | 152 | #define __put_user_asm2(x, ptr, retval) \ |
@@ -162,13 +162,12 @@ extern long __put_user_bad(void); | |||
162 | " b 3b\n" \ | 162 | " b 3b\n" \ |
163 | ".previous\n" \ | 163 | ".previous\n" \ |
164 | ".section __ex_table,\"a\"\n" \ | 164 | ".section __ex_table,\"a\"\n" \ |
165 | " .balign %5\n" \ | 165 | PPC_LONG_ALIGN "\n" \ |
166 | PPC_LONG "1b,4b\n" \ | 166 | PPC_LONG "1b,4b\n" \ |
167 | PPC_LONG "2b,4b\n" \ | 167 | PPC_LONG "2b,4b\n" \ |
168 | ".previous" \ | 168 | ".previous" \ |
169 | : "=r" (err) \ | 169 | : "=r" (err) \ |
170 | : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err),\ | 170 | : "r" (x), "b" (addr), "i" (-EFAULT), "0" (err)) |
171 | "i"(sizeof(unsigned long))) | ||
172 | #endif /* __powerpc64__ */ | 171 | #endif /* __powerpc64__ */ |
173 | 172 | ||
174 | #define __put_user_size(x, ptr, size, retval) \ | 173 | #define __put_user_size(x, ptr, size, retval) \ |
@@ -226,12 +225,11 @@ extern long __get_user_bad(void); | |||
226 | " b 2b\n" \ | 225 | " b 2b\n" \ |
227 | ".previous\n" \ | 226 | ".previous\n" \ |
228 | ".section __ex_table,\"a\"\n" \ | 227 | ".section __ex_table,\"a\"\n" \ |
229 | " .balign %5\n" \ | 228 | PPC_LONG_ALIGN "\n" \ |
230 | PPC_LONG "1b,3b\n" \ | 229 | PPC_LONG "1b,3b\n" \ |
231 | ".previous" \ | 230 | ".previous" \ |
232 | : "=r" (err), "=r" (x) \ | 231 | : "=r" (err), "=r" (x) \ |
233 | : "b" (addr), "i" (-EFAULT), "0" (err), \ | 232 | : "b" (addr), "i" (-EFAULT), "0" (err)) |
234 | "i"(sizeof(unsigned long))) | ||
235 | 233 | ||
236 | #ifdef __powerpc64__ | 234 | #ifdef __powerpc64__ |
237 | #define __get_user_asm2(x, addr, err) \ | 235 | #define __get_user_asm2(x, addr, err) \ |
@@ -249,13 +247,12 @@ extern long __get_user_bad(void); | |||
249 | " b 3b\n" \ | 247 | " b 3b\n" \ |
250 | ".previous\n" \ | 248 | ".previous\n" \ |
251 | ".section __ex_table,\"a\"\n" \ | 249 | ".section __ex_table,\"a\"\n" \ |
252 | " .balign %5\n" \ | 250 | PPC_LONG_ALIGN "\n" \ |
253 | PPC_LONG "1b,4b\n" \ | 251 | PPC_LONG "1b,4b\n" \ |
254 | PPC_LONG "2b,4b\n" \ | 252 | PPC_LONG "2b,4b\n" \ |
255 | ".previous" \ | 253 | ".previous" \ |
256 | : "=r" (err), "=&r" (x) \ | 254 | : "=r" (err), "=&r" (x) \ |
257 | : "b" (addr), "i" (-EFAULT), "0" (err), \ | 255 | : "b" (addr), "i" (-EFAULT), "0" (err)) |
258 | "i"(sizeof(unsigned long))) | ||
259 | #endif /* __powerpc64__ */ | 256 | #endif /* __powerpc64__ */ |
260 | 257 | ||
261 | #define __get_user_size(x, ptr, size, retval) \ | 258 | #define __get_user_size(x, ptr, size, retval) \ |
diff --git a/include/asm-powerpc/ucc_fast.h b/include/asm-powerpc/ucc_fast.h index f529f70b1d82..fce16abe7ee1 100644 --- a/include/asm-powerpc/ucc_fast.h +++ b/include/asm-powerpc/ucc_fast.h | |||
@@ -156,11 +156,11 @@ struct ucc_fast_info { | |||
156 | 156 | ||
157 | struct ucc_fast_private { | 157 | struct ucc_fast_private { |
158 | struct ucc_fast_info *uf_info; | 158 | struct ucc_fast_info *uf_info; |
159 | struct ucc_fast *uf_regs; /* a pointer to memory map of UCC regs. */ | 159 | struct ucc_fast __iomem *uf_regs; /* a pointer to the UCC regs. */ |
160 | u32 *p_ucce; /* a pointer to the event register in memory. */ | 160 | u32 __iomem *p_ucce; /* a pointer to the event register in memory. */ |
161 | u32 *p_uccm; /* a pointer to the mask register in memory. */ | 161 | u32 __iomem *p_uccm; /* a pointer to the mask register in memory. */ |
162 | #ifdef CONFIG_UGETH_TX_ON_DEMAND | 162 | #ifdef CONFIG_UGETH_TX_ON_DEMAND |
163 | u16 *p_utodr; /* pointer to the transmit on demand register */ | 163 | u16 __iomem *p_utodr; /* pointer to the transmit on demand register */ |
164 | #endif | 164 | #endif |
165 | int enabled_tx; /* Whether channel is enabled for Tx (ENT) */ | 165 | int enabled_tx; /* Whether channel is enabled for Tx (ENT) */ |
166 | int enabled_rx; /* Whether channel is enabled for Rx (ENR) */ | 166 | int enabled_rx; /* Whether channel is enabled for Rx (ENR) */ |
diff --git a/include/asm-powerpc/unistd.h b/include/asm-powerpc/unistd.h index ce91bb662063..e07d0c76ed77 100644 --- a/include/asm-powerpc/unistd.h +++ b/include/asm-powerpc/unistd.h | |||
@@ -335,10 +335,16 @@ | |||
335 | #define __NR_subpage_prot 310 | 335 | #define __NR_subpage_prot 310 |
336 | #define __NR_timerfd_settime 311 | 336 | #define __NR_timerfd_settime 311 |
337 | #define __NR_timerfd_gettime 312 | 337 | #define __NR_timerfd_gettime 312 |
338 | #define __NR_signalfd4 313 | ||
339 | #define __NR_eventfd2 314 | ||
340 | #define __NR_epoll_create1 315 | ||
341 | #define __NR_dup3 316 | ||
342 | #define __NR_pipe2 317 | ||
343 | #define __NR_inotify_init1 318 | ||
338 | 344 | ||
339 | #ifdef __KERNEL__ | 345 | #ifdef __KERNEL__ |
340 | 346 | ||
341 | #define __NR_syscalls 313 | 347 | #define __NR_syscalls 319 |
342 | 348 | ||
343 | #define __NR__exit __NR_exit | 349 | #define __NR__exit __NR_exit |
344 | #define NR_syscalls __NR_syscalls | 350 | #define NR_syscalls __NR_syscalls |
diff --git a/include/asm-powerpc/vio.h b/include/asm-powerpc/vio.h index 56512a968dab..0a290a195946 100644 --- a/include/asm-powerpc/vio.h +++ b/include/asm-powerpc/vio.h | |||
@@ -39,16 +39,32 @@ | |||
39 | #define VIO_IRQ_DISABLE 0UL | 39 | #define VIO_IRQ_DISABLE 0UL |
40 | #define VIO_IRQ_ENABLE 1UL | 40 | #define VIO_IRQ_ENABLE 1UL |
41 | 41 | ||
42 | /* | ||
43 | * VIO CMO minimum entitlement for all devices and spare entitlement | ||
44 | */ | ||
45 | #define VIO_CMO_MIN_ENT 1562624 | ||
46 | |||
42 | struct iommu_table; | 47 | struct iommu_table; |
43 | 48 | ||
44 | /* | 49 | /** |
45 | * The vio_dev structure is used to describe virtual I/O devices. | 50 | * vio_dev - This structure is used to describe virtual I/O devices. |
51 | * | ||
52 | * @desired: set from return of driver's get_desired_dma() function | ||
53 | * @entitled: bytes of IO data that has been reserved for this device. | ||
54 | * @allocated: bytes of IO data currently in use by the device. | ||
55 | * @allocs_failed: number of DMA failures due to insufficient entitlement. | ||
46 | */ | 56 | */ |
47 | struct vio_dev { | 57 | struct vio_dev { |
48 | const char *name; | 58 | const char *name; |
49 | const char *type; | 59 | const char *type; |
50 | uint32_t unit_address; | 60 | uint32_t unit_address; |
51 | unsigned int irq; | 61 | unsigned int irq; |
62 | struct { | ||
63 | size_t desired; | ||
64 | size_t entitled; | ||
65 | size_t allocated; | ||
66 | atomic_t allocs_failed; | ||
67 | } cmo; | ||
52 | struct device dev; | 68 | struct device dev; |
53 | }; | 69 | }; |
54 | 70 | ||
@@ -56,12 +72,19 @@ struct vio_driver { | |||
56 | const struct vio_device_id *id_table; | 72 | const struct vio_device_id *id_table; |
57 | int (*probe)(struct vio_dev *dev, const struct vio_device_id *id); | 73 | int (*probe)(struct vio_dev *dev, const struct vio_device_id *id); |
58 | int (*remove)(struct vio_dev *dev); | 74 | int (*remove)(struct vio_dev *dev); |
75 | /* A driver must have a get_desired_dma() function to | ||
76 | * be loaded in a CMO environment if it uses DMA. | ||
77 | */ | ||
78 | unsigned long (*get_desired_dma)(struct vio_dev *dev); | ||
59 | struct device_driver driver; | 79 | struct device_driver driver; |
60 | }; | 80 | }; |
61 | 81 | ||
62 | extern int vio_register_driver(struct vio_driver *drv); | 82 | extern int vio_register_driver(struct vio_driver *drv); |
63 | extern void vio_unregister_driver(struct vio_driver *drv); | 83 | extern void vio_unregister_driver(struct vio_driver *drv); |
64 | 84 | ||
85 | extern int vio_cmo_entitlement_update(size_t); | ||
86 | extern void vio_cmo_set_dev_desired(struct vio_dev *viodev, size_t desired); | ||
87 | |||
65 | extern void __devinit vio_unregister_device(struct vio_dev *dev); | 88 | extern void __devinit vio_unregister_device(struct vio_dev *dev); |
66 | 89 | ||
67 | struct device_node; | 90 | struct device_node; |