diff options
Diffstat (limited to 'include')
278 files changed, 4413 insertions, 3378 deletions
diff --git a/include/asm-arm/arch-pxa/udc.h b/include/asm-arm/arch-pxa/udc.h index 30548a30c773..121cd241115d 100644 --- a/include/asm-arm/arch-pxa/udc.h +++ b/include/asm-arm/arch-pxa/udc.h | |||
@@ -12,6 +12,14 @@ struct pxa2xx_udc_mach_info { | |||
12 | void (*udc_command)(int cmd); | 12 | void (*udc_command)(int cmd); |
13 | #define PXA2XX_UDC_CMD_CONNECT 0 /* let host see us */ | 13 | #define PXA2XX_UDC_CMD_CONNECT 0 /* let host see us */ |
14 | #define PXA2XX_UDC_CMD_DISCONNECT 1 /* so host won't see us */ | 14 | #define PXA2XX_UDC_CMD_DISCONNECT 1 /* so host won't see us */ |
15 | |||
16 | /* Boards following the design guidelines in the developer's manual, | ||
17 | * with on-chip GPIOs not Lubbock's wierd hardware, can have a sane | ||
18 | * VBUS IRQ and omit the methods above. Store the GPIO number | ||
19 | * here; for GPIO 0, also mask in one of the pxa_gpio_mode() bits. | ||
20 | */ | ||
21 | u16 gpio_vbus; /* high == vbus present */ | ||
22 | u16 gpio_pullup; /* high == pullup activated */ | ||
15 | }; | 23 | }; |
16 | 24 | ||
17 | extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); | 25 | extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info); |
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h index 1e891f860ef3..2ab4078334bf 100644 --- a/include/asm-arm/unistd.h +++ b/include/asm-arm/unistd.h | |||
@@ -377,6 +377,7 @@ | |||
377 | #endif | 377 | #endif |
378 | 378 | ||
379 | #ifdef __KERNEL__ | 379 | #ifdef __KERNEL__ |
380 | #include <linux/err.h> | ||
380 | #include <linux/linkage.h> | 381 | #include <linux/linkage.h> |
381 | 382 | ||
382 | #define __sys2(x) #x | 383 | #define __sys2(x) #x |
@@ -396,7 +397,7 @@ | |||
396 | 397 | ||
397 | #define __syscall_return(type, res) \ | 398 | #define __syscall_return(type, res) \ |
398 | do { \ | 399 | do { \ |
399 | if ((unsigned long)(res) >= (unsigned long)(-129)) { \ | 400 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
400 | errno = -(res); \ | 401 | errno = -(res); \ |
401 | res = -1; \ | 402 | res = -1; \ |
402 | } \ | 403 | } \ |
diff --git a/include/asm-arm26/unistd.h b/include/asm-arm26/unistd.h index 70eb6d91cfd0..c6d2436c9d34 100644 --- a/include/asm-arm26/unistd.h +++ b/include/asm-arm26/unistd.h | |||
@@ -311,6 +311,7 @@ | |||
311 | #define __ARM_NR_usr26 (__ARM_NR_BASE+3) | 311 | #define __ARM_NR_usr26 (__ARM_NR_BASE+3) |
312 | 312 | ||
313 | #ifdef __KERNEL__ | 313 | #ifdef __KERNEL__ |
314 | #include <linux/err.h> | ||
314 | #include <linux/linkage.h> | 315 | #include <linux/linkage.h> |
315 | 316 | ||
316 | #define __sys2(x) #x | 317 | #define __sys2(x) #x |
@@ -322,7 +323,7 @@ | |||
322 | 323 | ||
323 | #define __syscall_return(type, res) \ | 324 | #define __syscall_return(type, res) \ |
324 | do { \ | 325 | do { \ |
325 | if ((unsigned long)(res) >= (unsigned long)(-125)) { \ | 326 | if ((unsigned long)(res) >= (unsigned long)-MAX_ERRNO) { \ |
326 | errno = -(res); \ | 327 | errno = -(res); \ |
327 | res = -1; \ | 328 | res = -1; \ |
328 | } \ | 329 | } \ |
diff --git a/include/asm-frv/unistd.h b/include/asm-frv/unistd.h index b80dbd839475..d104d1b91d39 100644 --- a/include/asm-frv/unistd.h +++ b/include/asm-frv/unistd.h | |||
@@ -320,6 +320,7 @@ | |||
320 | #ifdef __KERNEL__ | 320 | #ifdef __KERNEL__ |
321 | 321 | ||
322 | #define NR_syscalls 310 | 322 | #define NR_syscalls 310 |
323 | #include <linux/err.h> | ||
323 | 324 | ||
324 | /* | 325 | /* |
325 | * process the return value of a syscall, consigning it to one of two possible fates | 326 | * process the return value of a syscall, consigning it to one of two possible fates |
@@ -329,7 +330,7 @@ | |||
329 | #define __syscall_return(type, res) \ | 330 | #define __syscall_return(type, res) \ |
330 | do { \ | 331 | do { \ |
331 | unsigned long __sr2 = (res); \ | 332 | unsigned long __sr2 = (res); \ |
332 | if (__builtin_expect(__sr2 >= (unsigned long)(-4095), 0)) { \ | 333 | if (__builtin_expect(__sr2 >= (unsigned long)(-MAX_ERRNO), 0)) { \ |
333 | errno = (-__sr2); \ | 334 | errno = (-__sr2); \ |
334 | __sr2 = ~0UL; \ | 335 | __sr2 = ~0UL; \ |
335 | } \ | 336 | } \ |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 253ae1328271..69240b52f8e1 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -118,15 +118,15 @@ | |||
118 | __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ | 118 | __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ |
119 | *(__ksymtab_strings) \ | 119 | *(__ksymtab_strings) \ |
120 | } \ | 120 | } \ |
121 | __end_rodata = .; \ | ||
122 | . = ALIGN(4096); \ | ||
123 | \ | 121 | \ |
124 | /* Built-in module parameters. */ \ | 122 | /* Built-in module parameters. */ \ |
125 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ | 123 | __param : AT(ADDR(__param) - LOAD_OFFSET) { \ |
126 | VMLINUX_SYMBOL(__start___param) = .; \ | 124 | VMLINUX_SYMBOL(__start___param) = .; \ |
127 | *(__param) \ | 125 | *(__param) \ |
128 | VMLINUX_SYMBOL(__stop___param) = .; \ | 126 | VMLINUX_SYMBOL(__stop___param) = .; \ |
129 | } | 127 | } \ |
128 | __end_rodata = .; \ | ||
129 | . = ALIGN(4096); | ||
130 | 130 | ||
131 | #define SECURITY_INIT \ | 131 | #define SECURITY_INIT \ |
132 | .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ | 132 | .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ |
diff --git a/include/asm-h8300/unistd.h b/include/asm-h8300/unistd.h index 226dd596c2da..a2dd90462d80 100644 --- a/include/asm-h8300/unistd.h +++ b/include/asm-h8300/unistd.h | |||
@@ -295,14 +295,14 @@ | |||
295 | #ifdef __KERNEL__ | 295 | #ifdef __KERNEL__ |
296 | 296 | ||
297 | #define NR_syscalls 289 | 297 | #define NR_syscalls 289 |
298 | #include <linux/err.h> | ||
298 | 299 | ||
299 | 300 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see | |
300 | /* user-visible error numbers are in the range -1 - -122: see | ||
301 | <asm-m68k/errno.h> */ | 301 | <asm-m68k/errno.h> */ |
302 | 302 | ||
303 | #define __syscall_return(type, res) \ | 303 | #define __syscall_return(type, res) \ |
304 | do { \ | 304 | do { \ |
305 | if ((unsigned long)(res) >= (unsigned long)(-125)) { \ | 305 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
306 | /* avoid using res which is declared to be in register d0; \ | 306 | /* avoid using res which is declared to be in register d0; \ |
307 | errno might expand to a function call and clobber it. */ \ | 307 | errno might expand to a function call and clobber it. */ \ |
308 | int __err = -(res); \ | 308 | int __err = -(res); \ |
diff --git a/include/asm-i386/acpi.h b/include/asm-i386/acpi.h index 20f523954218..6016632d032f 100644 --- a/include/asm-i386/acpi.h +++ b/include/asm-i386/acpi.h | |||
@@ -131,21 +131,7 @@ static inline void disable_acpi(void) | |||
131 | extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq); | 131 | extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq); |
132 | 132 | ||
133 | #ifdef CONFIG_X86_IO_APIC | 133 | #ifdef CONFIG_X86_IO_APIC |
134 | extern int skip_ioapic_setup; | ||
135 | extern int acpi_skip_timer_override; | 134 | extern int acpi_skip_timer_override; |
136 | |||
137 | static inline void disable_ioapic_setup(void) | ||
138 | { | ||
139 | skip_ioapic_setup = 1; | ||
140 | } | ||
141 | |||
142 | static inline int ioapic_setup_disabled(void) | ||
143 | { | ||
144 | return skip_ioapic_setup; | ||
145 | } | ||
146 | |||
147 | #else | ||
148 | static inline void disable_ioapic_setup(void) { } | ||
149 | #endif | 135 | #endif |
150 | 136 | ||
151 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } | 137 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } |
diff --git a/include/asm-i386/alternative-asm.i b/include/asm-i386/alternative-asm.i new file mode 100644 index 000000000000..6c47e3b9484b --- /dev/null +++ b/include/asm-i386/alternative-asm.i | |||
@@ -0,0 +1,14 @@ | |||
1 | #include <linux/config.h> | ||
2 | |||
3 | #ifdef CONFIG_SMP | ||
4 | .macro LOCK_PREFIX | ||
5 | 1: lock | ||
6 | .section .smp_locks,"a" | ||
7 | .align 4 | ||
8 | .long 1b | ||
9 | .previous | ||
10 | .endm | ||
11 | #else | ||
12 | .macro LOCK_PREFIX | ||
13 | .endm | ||
14 | #endif | ||
diff --git a/include/asm-i386/apic.h b/include/asm-i386/apic.h index 2c1e371cebb6..3a42b7d6fc92 100644 --- a/include/asm-i386/apic.h +++ b/include/asm-i386/apic.h | |||
@@ -16,20 +16,8 @@ | |||
16 | #define APIC_VERBOSE 1 | 16 | #define APIC_VERBOSE 1 |
17 | #define APIC_DEBUG 2 | 17 | #define APIC_DEBUG 2 |
18 | 18 | ||
19 | extern int enable_local_apic; | ||
20 | extern int apic_verbosity; | 19 | extern int apic_verbosity; |
21 | 20 | ||
22 | static inline void lapic_disable(void) | ||
23 | { | ||
24 | enable_local_apic = -1; | ||
25 | clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); | ||
26 | } | ||
27 | |||
28 | static inline void lapic_enable(void) | ||
29 | { | ||
30 | enable_local_apic = 1; | ||
31 | } | ||
32 | |||
33 | /* | 21 | /* |
34 | * Define the default level of output to be very little | 22 | * Define the default level of output to be very little |
35 | * This can be turned up by using apic=verbose for more | 23 | * This can be turned up by using apic=verbose for more |
@@ -42,6 +30,8 @@ static inline void lapic_enable(void) | |||
42 | } while (0) | 30 | } while (0) |
43 | 31 | ||
44 | 32 | ||
33 | extern void generic_apic_probe(void); | ||
34 | |||
45 | #ifdef CONFIG_X86_LOCAL_APIC | 35 | #ifdef CONFIG_X86_LOCAL_APIC |
46 | 36 | ||
47 | /* | 37 | /* |
@@ -117,8 +107,6 @@ extern void enable_APIC_timer(void); | |||
117 | 107 | ||
118 | extern void enable_NMI_through_LVT0 (void * dummy); | 108 | extern void enable_NMI_through_LVT0 (void * dummy); |
119 | 109 | ||
120 | extern int disable_timer_pin_1; | ||
121 | |||
122 | void smp_send_timer_broadcast_ipi(struct pt_regs *regs); | 110 | void smp_send_timer_broadcast_ipi(struct pt_regs *regs); |
123 | void switch_APIC_timer_to_ipi(void *cpumask); | 111 | void switch_APIC_timer_to_ipi(void *cpumask); |
124 | void switch_ipi_to_APIC_timer(void *cpumask); | 112 | void switch_ipi_to_APIC_timer(void *cpumask); |
diff --git a/include/asm-i386/desc.h b/include/asm-i386/desc.h index 89b8b82c82b3..5874ef119ffd 100644 --- a/include/asm-i386/desc.h +++ b/include/asm-i386/desc.h | |||
@@ -33,50 +33,99 @@ static inline struct desc_struct *get_cpu_gdt_table(unsigned int cpu) | |||
33 | return (struct desc_struct *)per_cpu(cpu_gdt_descr, cpu).address; | 33 | return (struct desc_struct *)per_cpu(cpu_gdt_descr, cpu).address; |
34 | } | 34 | } |
35 | 35 | ||
36 | /* | ||
37 | * This is the ldt that every process will get unless we need | ||
38 | * something other than this. | ||
39 | */ | ||
40 | extern struct desc_struct default_ldt[]; | ||
41 | extern struct desc_struct idt_table[]; | ||
42 | extern void set_intr_gate(unsigned int irq, void * addr); | ||
43 | |||
44 | static inline void pack_descriptor(__u32 *a, __u32 *b, | ||
45 | unsigned long base, unsigned long limit, unsigned char type, unsigned char flags) | ||
46 | { | ||
47 | *a = ((base & 0xffff) << 16) | (limit & 0xffff); | ||
48 | *b = (base & 0xff000000) | ((base & 0xff0000) >> 16) | | ||
49 | (limit & 0x000f0000) | ((type & 0xff) << 8) | ((flags & 0xf) << 20); | ||
50 | } | ||
51 | |||
52 | static inline void pack_gate(__u32 *a, __u32 *b, | ||
53 | unsigned long base, unsigned short seg, unsigned char type, unsigned char flags) | ||
54 | { | ||
55 | *a = (seg << 16) | (base & 0xffff); | ||
56 | *b = (base & 0xffff0000) | ((type & 0xff) << 8) | (flags & 0xff); | ||
57 | } | ||
58 | |||
59 | #define DESCTYPE_LDT 0x82 /* present, system, DPL-0, LDT */ | ||
60 | #define DESCTYPE_TSS 0x89 /* present, system, DPL-0, 32-bit TSS */ | ||
61 | #define DESCTYPE_TASK 0x85 /* present, system, DPL-0, task gate */ | ||
62 | #define DESCTYPE_INT 0x8e /* present, system, DPL-0, interrupt gate */ | ||
63 | #define DESCTYPE_TRAP 0x8f /* present, system, DPL-0, trap gate */ | ||
64 | #define DESCTYPE_DPL3 0x60 /* DPL-3 */ | ||
65 | #define DESCTYPE_S 0x10 /* !system */ | ||
66 | |||
36 | #define load_TR_desc() __asm__ __volatile__("ltr %w0"::"q" (GDT_ENTRY_TSS*8)) | 67 | #define load_TR_desc() __asm__ __volatile__("ltr %w0"::"q" (GDT_ENTRY_TSS*8)) |
37 | #define load_LDT_desc() __asm__ __volatile__("lldt %w0"::"q" (GDT_ENTRY_LDT*8)) | 68 | #define load_LDT_desc() __asm__ __volatile__("lldt %w0"::"q" (GDT_ENTRY_LDT*8)) |
38 | 69 | ||
39 | #define load_gdt(dtr) __asm__ __volatile("lgdt %0"::"m" (*dtr)) | 70 | #define load_gdt(dtr) __asm__ __volatile("lgdt %0"::"m" (*dtr)) |
40 | #define load_idt(dtr) __asm__ __volatile("lidt %0"::"m" (*dtr)) | 71 | #define load_idt(dtr) __asm__ __volatile("lidt %0"::"m" (*dtr)) |
41 | #define load_tr(tr) __asm__ __volatile("ltr %0"::"mr" (tr)) | 72 | #define load_tr(tr) __asm__ __volatile("ltr %0"::"m" (tr)) |
42 | #define load_ldt(ldt) __asm__ __volatile("lldt %0"::"mr" (ldt)) | 73 | #define load_ldt(ldt) __asm__ __volatile("lldt %0"::"m" (ldt)) |
43 | 74 | ||
44 | #define store_gdt(dtr) __asm__ ("sgdt %0":"=m" (*dtr)) | 75 | #define store_gdt(dtr) __asm__ ("sgdt %0":"=m" (*dtr)) |
45 | #define store_idt(dtr) __asm__ ("sidt %0":"=m" (*dtr)) | 76 | #define store_idt(dtr) __asm__ ("sidt %0":"=m" (*dtr)) |
46 | #define store_tr(tr) __asm__ ("str %0":"=mr" (tr)) | 77 | #define store_tr(tr) __asm__ ("str %0":"=m" (tr)) |
47 | #define store_ldt(ldt) __asm__ ("sldt %0":"=mr" (ldt)) | 78 | #define store_ldt(ldt) __asm__ ("sldt %0":"=m" (ldt)) |
48 | 79 | ||
49 | /* | 80 | #if TLS_SIZE != 24 |
50 | * This is the ldt that every process will get unless we need | 81 | # error update this code. |
51 | * something other than this. | 82 | #endif |
52 | */ | ||
53 | extern struct desc_struct default_ldt[]; | ||
54 | extern void set_intr_gate(unsigned int irq, void * addr); | ||
55 | 83 | ||
56 | #define _set_tssldt_desc(n,addr,limit,type) \ | 84 | static inline void load_TLS(struct thread_struct *t, unsigned int cpu) |
57 | __asm__ __volatile__ ("movw %w3,0(%2)\n\t" \ | ||
58 | "movw %w1,2(%2)\n\t" \ | ||
59 | "rorl $16,%1\n\t" \ | ||
60 | "movb %b1,4(%2)\n\t" \ | ||
61 | "movb %4,5(%2)\n\t" \ | ||
62 | "movb $0,6(%2)\n\t" \ | ||
63 | "movb %h1,7(%2)\n\t" \ | ||
64 | "rorl $16,%1" \ | ||
65 | : "=m"(*(n)) : "q" (addr), "r"(n), "ir"(limit), "i"(type)) | ||
66 | |||
67 | static inline void __set_tss_desc(unsigned int cpu, unsigned int entry, void *addr) | ||
68 | { | 85 | { |
69 | _set_tssldt_desc(&get_cpu_gdt_table(cpu)[entry], (int)addr, | 86 | #define C(i) get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i] |
70 | offsetof(struct tss_struct, __cacheline_filler) - 1, 0x89); | 87 | C(0); C(1); C(2); |
88 | #undef C | ||
71 | } | 89 | } |
72 | 90 | ||
73 | #define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr) | 91 | static inline void write_dt_entry(void *dt, int entry, __u32 entry_a, __u32 entry_b) |
92 | { | ||
93 | __u32 *lp = (__u32 *)((char *)dt + entry*8); | ||
94 | *lp = entry_a; | ||
95 | *(lp+1) = entry_b; | ||
96 | } | ||
97 | |||
98 | #define write_ldt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) | ||
99 | #define write_gdt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) | ||
100 | #define write_idt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) | ||
101 | |||
102 | static inline void _set_gate(int gate, unsigned int type, void *addr, unsigned short seg) | ||
103 | { | ||
104 | __u32 a, b; | ||
105 | pack_gate(&a, &b, (unsigned long)addr, seg, type, 0); | ||
106 | write_idt_entry(idt_table, gate, a, b); | ||
107 | } | ||
74 | 108 | ||
75 | static inline void set_ldt_desc(unsigned int cpu, void *addr, unsigned int size) | 109 | static inline void __set_tss_desc(unsigned int cpu, unsigned int entry, const void *addr) |
76 | { | 110 | { |
77 | _set_tssldt_desc(&get_cpu_gdt_table(cpu)[GDT_ENTRY_LDT], (int)addr, ((size << 3)-1), 0x82); | 111 | __u32 a, b; |
112 | pack_descriptor(&a, &b, (unsigned long)addr, | ||
113 | offsetof(struct tss_struct, __cacheline_filler) - 1, | ||
114 | DESCTYPE_TSS, 0); | ||
115 | write_gdt_entry(get_cpu_gdt_table(cpu), entry, a, b); | ||
78 | } | 116 | } |
79 | 117 | ||
118 | static inline void set_ldt_desc(unsigned int cpu, void *addr, unsigned int entries) | ||
119 | { | ||
120 | __u32 a, b; | ||
121 | pack_descriptor(&a, &b, (unsigned long)addr, | ||
122 | entries * sizeof(struct desc_struct) - 1, | ||
123 | DESCTYPE_LDT, 0); | ||
124 | write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_LDT, a, b); | ||
125 | } | ||
126 | |||
127 | #define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr) | ||
128 | |||
80 | #define LDT_entry_a(info) \ | 129 | #define LDT_entry_a(info) \ |
81 | ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) | 130 | ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) |
82 | 131 | ||
@@ -102,24 +151,6 @@ static inline void set_ldt_desc(unsigned int cpu, void *addr, unsigned int size) | |||
102 | (info)->seg_not_present == 1 && \ | 151 | (info)->seg_not_present == 1 && \ |
103 | (info)->useable == 0 ) | 152 | (info)->useable == 0 ) |
104 | 153 | ||
105 | static inline void write_ldt_entry(void *ldt, int entry, __u32 entry_a, __u32 entry_b) | ||
106 | { | ||
107 | __u32 *lp = (__u32 *)((char *)ldt + entry*8); | ||
108 | *lp = entry_a; | ||
109 | *(lp+1) = entry_b; | ||
110 | } | ||
111 | |||
112 | #if TLS_SIZE != 24 | ||
113 | # error update this code. | ||
114 | #endif | ||
115 | |||
116 | static inline void load_TLS(struct thread_struct *t, unsigned int cpu) | ||
117 | { | ||
118 | #define C(i) get_cpu_gdt_table(cpu)[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i] | ||
119 | C(0); C(1); C(2); | ||
120 | #undef C | ||
121 | } | ||
122 | |||
123 | static inline void clear_LDT(void) | 154 | static inline void clear_LDT(void) |
124 | { | 155 | { |
125 | int cpu = get_cpu(); | 156 | int cpu = get_cpu(); |
diff --git a/include/asm-i386/dwarf2.h b/include/asm-i386/dwarf2.h index 2280f6272f80..6d66398a307d 100644 --- a/include/asm-i386/dwarf2.h +++ b/include/asm-i386/dwarf2.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef _DWARF2_H | 1 | #ifndef _DWARF2_H |
2 | #define _DWARF2_H | 2 | #define _DWARF2_H |
3 | 3 | ||
4 | #include <linux/config.h> | ||
5 | |||
6 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
7 | #warning "asm/dwarf2.h should be only included in pure assembly files" | 5 | #warning "asm/dwarf2.h should be only included in pure assembly files" |
8 | #endif | 6 | #endif |
@@ -28,6 +26,13 @@ | |||
28 | #define CFI_RESTORE .cfi_restore | 26 | #define CFI_RESTORE .cfi_restore |
29 | #define CFI_REMEMBER_STATE .cfi_remember_state | 27 | #define CFI_REMEMBER_STATE .cfi_remember_state |
30 | #define CFI_RESTORE_STATE .cfi_restore_state | 28 | #define CFI_RESTORE_STATE .cfi_restore_state |
29 | #define CFI_UNDEFINED .cfi_undefined | ||
30 | |||
31 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | ||
32 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | ||
33 | #else | ||
34 | #define CFI_SIGNAL_FRAME | ||
35 | #endif | ||
31 | 36 | ||
32 | #else | 37 | #else |
33 | 38 | ||
@@ -48,6 +53,8 @@ | |||
48 | #define CFI_RESTORE ignore | 53 | #define CFI_RESTORE ignore |
49 | #define CFI_REMEMBER_STATE ignore | 54 | #define CFI_REMEMBER_STATE ignore |
50 | #define CFI_RESTORE_STATE ignore | 55 | #define CFI_RESTORE_STATE ignore |
56 | #define CFI_UNDEFINED ignore | ||
57 | #define CFI_SIGNAL_FRAME ignore | ||
51 | 58 | ||
52 | #endif | 59 | #endif |
53 | 60 | ||
diff --git a/include/asm-i386/e820.h b/include/asm-i386/e820.h index ca82acb8cb1f..f7514fb6e8e4 100644 --- a/include/asm-i386/e820.h +++ b/include/asm-i386/e820.h | |||
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #define E820_RAM 1 | 19 | #define E820_RAM 1 |
20 | #define E820_RESERVED 2 | 20 | #define E820_RESERVED 2 |
21 | #define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */ | 21 | #define E820_ACPI 3 |
22 | #define E820_NVS 4 | 22 | #define E820_NVS 4 |
23 | 23 | ||
24 | #define HIGH_MEMORY (1024*1024) | 24 | #define HIGH_MEMORY (1024*1024) |
diff --git a/include/asm-i386/frame.i b/include/asm-i386/frame.i new file mode 100644 index 000000000000..4d68ddce18b6 --- /dev/null +++ b/include/asm-i386/frame.i | |||
@@ -0,0 +1,24 @@ | |||
1 | #include <linux/config.h> | ||
2 | #include <asm/dwarf2.h> | ||
3 | |||
4 | /* The annotation hides the frame from the unwinder and makes it look | ||
5 | like a ordinary ebp save/restore. This avoids some special cases for | ||
6 | frame pointer later */ | ||
7 | #ifdef CONFIG_FRAME_POINTER | ||
8 | .macro FRAME | ||
9 | pushl %ebp | ||
10 | CFI_ADJUST_CFA_OFFSET 4 | ||
11 | CFI_REL_OFFSET ebp,0 | ||
12 | movl %esp,%ebp | ||
13 | .endm | ||
14 | .macro ENDFRAME | ||
15 | popl %ebp | ||
16 | CFI_ADJUST_CFA_OFFSET -4 | ||
17 | CFI_RESTORE ebp | ||
18 | .endm | ||
19 | #else | ||
20 | .macro FRAME | ||
21 | .endm | ||
22 | .macro ENDFRAME | ||
23 | .endm | ||
24 | #endif | ||
diff --git a/include/asm-i386/genapic.h b/include/asm-i386/genapic.h index b3783a32abee..8ffbb0f07457 100644 --- a/include/asm-i386/genapic.h +++ b/include/asm-i386/genapic.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _ASM_GENAPIC_H | 1 | #ifndef _ASM_GENAPIC_H |
2 | #define _ASM_GENAPIC_H 1 | 2 | #define _ASM_GENAPIC_H 1 |
3 | 3 | ||
4 | #include <asm/mpspec.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * Generic APIC driver interface. | 7 | * Generic APIC driver interface. |
6 | * | 8 | * |
@@ -63,14 +65,25 @@ struct genapic { | |||
63 | unsigned (*get_apic_id)(unsigned long x); | 65 | unsigned (*get_apic_id)(unsigned long x); |
64 | unsigned long apic_id_mask; | 66 | unsigned long apic_id_mask; |
65 | unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); | 67 | unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask); |
66 | 68 | ||
69 | #ifdef CONFIG_SMP | ||
67 | /* ipi */ | 70 | /* ipi */ |
68 | void (*send_IPI_mask)(cpumask_t mask, int vector); | 71 | void (*send_IPI_mask)(cpumask_t mask, int vector); |
69 | void (*send_IPI_allbutself)(int vector); | 72 | void (*send_IPI_allbutself)(int vector); |
70 | void (*send_IPI_all)(int vector); | 73 | void (*send_IPI_all)(int vector); |
74 | #endif | ||
71 | }; | 75 | }; |
72 | 76 | ||
73 | #define APICFUNC(x) .x = x | 77 | #define APICFUNC(x) .x = x, |
78 | |||
79 | /* More functions could be probably marked IPIFUNC and save some space | ||
80 | in UP GENERICARCH kernels, but I don't have the nerve right now | ||
81 | to untangle this mess. -AK */ | ||
82 | #ifdef CONFIG_SMP | ||
83 | #define IPIFUNC(x) APICFUNC(x) | ||
84 | #else | ||
85 | #define IPIFUNC(x) | ||
86 | #endif | ||
74 | 87 | ||
75 | #define APIC_INIT(aname, aprobe) { \ | 88 | #define APIC_INIT(aname, aprobe) { \ |
76 | .name = aname, \ | 89 | .name = aname, \ |
@@ -80,33 +93,33 @@ struct genapic { | |||
80 | .no_balance_irq = NO_BALANCE_IRQ, \ | 93 | .no_balance_irq = NO_BALANCE_IRQ, \ |
81 | .ESR_DISABLE = esr_disable, \ | 94 | .ESR_DISABLE = esr_disable, \ |
82 | .apic_destination_logical = APIC_DEST_LOGICAL, \ | 95 | .apic_destination_logical = APIC_DEST_LOGICAL, \ |
83 | APICFUNC(apic_id_registered), \ | 96 | APICFUNC(apic_id_registered) \ |
84 | APICFUNC(target_cpus), \ | 97 | APICFUNC(target_cpus) \ |
85 | APICFUNC(check_apicid_used), \ | 98 | APICFUNC(check_apicid_used) \ |
86 | APICFUNC(check_apicid_present), \ | 99 | APICFUNC(check_apicid_present) \ |
87 | APICFUNC(init_apic_ldr), \ | 100 | APICFUNC(init_apic_ldr) \ |
88 | APICFUNC(ioapic_phys_id_map), \ | 101 | APICFUNC(ioapic_phys_id_map) \ |
89 | APICFUNC(clustered_apic_check), \ | 102 | APICFUNC(clustered_apic_check) \ |
90 | APICFUNC(multi_timer_check), \ | 103 | APICFUNC(multi_timer_check) \ |
91 | APICFUNC(apicid_to_node), \ | 104 | APICFUNC(apicid_to_node) \ |
92 | APICFUNC(cpu_to_logical_apicid), \ | 105 | APICFUNC(cpu_to_logical_apicid) \ |
93 | APICFUNC(cpu_present_to_apicid), \ | 106 | APICFUNC(cpu_present_to_apicid) \ |
94 | APICFUNC(apicid_to_cpu_present), \ | 107 | APICFUNC(apicid_to_cpu_present) \ |
95 | APICFUNC(mpc_apic_id), \ | 108 | APICFUNC(mpc_apic_id) \ |
96 | APICFUNC(setup_portio_remap), \ | 109 | APICFUNC(setup_portio_remap) \ |
97 | APICFUNC(check_phys_apicid_present), \ | 110 | APICFUNC(check_phys_apicid_present) \ |
98 | APICFUNC(mpc_oem_bus_info), \ | 111 | APICFUNC(mpc_oem_bus_info) \ |
99 | APICFUNC(mpc_oem_pci_bus), \ | 112 | APICFUNC(mpc_oem_pci_bus) \ |
100 | APICFUNC(mps_oem_check), \ | 113 | APICFUNC(mps_oem_check) \ |
101 | APICFUNC(get_apic_id), \ | 114 | APICFUNC(get_apic_id) \ |
102 | .apic_id_mask = APIC_ID_MASK, \ | 115 | .apic_id_mask = APIC_ID_MASK, \ |
103 | APICFUNC(cpu_mask_to_apicid), \ | 116 | APICFUNC(cpu_mask_to_apicid) \ |
104 | APICFUNC(acpi_madt_oem_check), \ | 117 | APICFUNC(acpi_madt_oem_check) \ |
105 | APICFUNC(send_IPI_mask), \ | 118 | IPIFUNC(send_IPI_mask) \ |
106 | APICFUNC(send_IPI_allbutself), \ | 119 | IPIFUNC(send_IPI_allbutself) \ |
107 | APICFUNC(send_IPI_all), \ | 120 | IPIFUNC(send_IPI_all) \ |
108 | APICFUNC(enable_apic_mode), \ | 121 | APICFUNC(enable_apic_mode) \ |
109 | APICFUNC(phys_pkg_id), \ | 122 | APICFUNC(phys_pkg_id) \ |
110 | } | 123 | } |
111 | 124 | ||
112 | extern struct genapic *genapic; | 125 | extern struct genapic *genapic; |
diff --git a/include/asm-i386/intel_arch_perfmon.h b/include/asm-i386/intel_arch_perfmon.h index 134ea9cc5283..b52cd60a075b 100644 --- a/include/asm-i386/intel_arch_perfmon.h +++ b/include/asm-i386/intel_arch_perfmon.h | |||
@@ -14,6 +14,18 @@ | |||
14 | 14 | ||
15 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) | 15 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) |
16 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) | 16 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) |
17 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT (1 << 0) | 17 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX (0) |
18 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \ | ||
19 | (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX)) | ||
20 | |||
21 | union cpuid10_eax { | ||
22 | struct { | ||
23 | unsigned int version_id:8; | ||
24 | unsigned int num_counters:8; | ||
25 | unsigned int bit_width:8; | ||
26 | unsigned int mask_length:8; | ||
27 | } split; | ||
28 | unsigned int full; | ||
29 | }; | ||
18 | 30 | ||
19 | #endif /* X86_INTEL_ARCH_PERFMON_H */ | 31 | #endif /* X86_INTEL_ARCH_PERFMON_H */ |
diff --git a/include/asm-i386/io_apic.h b/include/asm-i386/io_apic.h index 5092e819b8a2..5d309275a1dc 100644 --- a/include/asm-i386/io_apic.h +++ b/include/asm-i386/io_apic.h | |||
@@ -188,6 +188,16 @@ static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned | |||
188 | /* 1 if "noapic" boot option passed */ | 188 | /* 1 if "noapic" boot option passed */ |
189 | extern int skip_ioapic_setup; | 189 | extern int skip_ioapic_setup; |
190 | 190 | ||
191 | static inline void disable_ioapic_setup(void) | ||
192 | { | ||
193 | skip_ioapic_setup = 1; | ||
194 | } | ||
195 | |||
196 | static inline int ioapic_setup_disabled(void) | ||
197 | { | ||
198 | return skip_ioapic_setup; | ||
199 | } | ||
200 | |||
191 | /* | 201 | /* |
192 | * If we use the IO-APIC for IRQ routing, disable automatic | 202 | * If we use the IO-APIC for IRQ routing, disable automatic |
193 | * assignment of PCI IRQ's. | 203 | * assignment of PCI IRQ's. |
@@ -206,6 +216,7 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq); | |||
206 | 216 | ||
207 | #else /* !CONFIG_X86_IO_APIC */ | 217 | #else /* !CONFIG_X86_IO_APIC */ |
208 | #define io_apic_assign_pci_irqs 0 | 218 | #define io_apic_assign_pci_irqs 0 |
219 | static inline void disable_ioapic_setup(void) { } | ||
209 | #endif | 220 | #endif |
210 | 221 | ||
211 | extern int assign_irq_vector(int irq); | 222 | extern int assign_irq_vector(int irq); |
diff --git a/include/asm-i386/kexec.h b/include/asm-i386/kexec.h index 53f0e06672dc..4dfc9f5ed031 100644 --- a/include/asm-i386/kexec.h +++ b/include/asm-i386/kexec.h | |||
@@ -1,6 +1,26 @@ | |||
1 | #ifndef _I386_KEXEC_H | 1 | #ifndef _I386_KEXEC_H |
2 | #define _I386_KEXEC_H | 2 | #define _I386_KEXEC_H |
3 | 3 | ||
4 | #define PA_CONTROL_PAGE 0 | ||
5 | #define VA_CONTROL_PAGE 1 | ||
6 | #define PA_PGD 2 | ||
7 | #define VA_PGD 3 | ||
8 | #define PA_PTE_0 4 | ||
9 | #define VA_PTE_0 5 | ||
10 | #define PA_PTE_1 6 | ||
11 | #define VA_PTE_1 7 | ||
12 | #ifdef CONFIG_X86_PAE | ||
13 | #define PA_PMD_0 8 | ||
14 | #define VA_PMD_0 9 | ||
15 | #define PA_PMD_1 10 | ||
16 | #define VA_PMD_1 11 | ||
17 | #define PAGES_NR 12 | ||
18 | #else | ||
19 | #define PAGES_NR 8 | ||
20 | #endif | ||
21 | |||
22 | #ifndef __ASSEMBLY__ | ||
23 | |||
4 | #include <asm/fixmap.h> | 24 | #include <asm/fixmap.h> |
5 | #include <asm/ptrace.h> | 25 | #include <asm/ptrace.h> |
6 | #include <asm/string.h> | 26 | #include <asm/string.h> |
@@ -72,5 +92,12 @@ static inline void crash_setup_regs(struct pt_regs *newregs, | |||
72 | newregs->eip = (unsigned long)current_text_addr(); | 92 | newregs->eip = (unsigned long)current_text_addr(); |
73 | } | 93 | } |
74 | } | 94 | } |
95 | asmlinkage NORET_TYPE void | ||
96 | relocate_kernel(unsigned long indirection_page, | ||
97 | unsigned long control_page, | ||
98 | unsigned long start_address, | ||
99 | unsigned int has_pae) ATTRIB_NORET; | ||
100 | |||
101 | #endif /* __ASSEMBLY__ */ | ||
75 | 102 | ||
76 | #endif /* _I386_KEXEC_H */ | 103 | #endif /* _I386_KEXEC_H */ |
diff --git a/include/asm-i386/mach-es7000/mach_apic.h b/include/asm-i386/mach-es7000/mach_apic.h index b5f3f0d0b2bc..26333685a7fb 100644 --- a/include/asm-i386/mach-es7000/mach_apic.h +++ b/include/asm-i386/mach-es7000/mach_apic.h | |||
@@ -123,9 +123,13 @@ extern u8 cpu_2_logical_apicid[]; | |||
123 | /* Mapping from cpu number to logical apicid */ | 123 | /* Mapping from cpu number to logical apicid */ |
124 | static inline int cpu_to_logical_apicid(int cpu) | 124 | static inline int cpu_to_logical_apicid(int cpu) |
125 | { | 125 | { |
126 | #ifdef CONFIG_SMP | ||
126 | if (cpu >= NR_CPUS) | 127 | if (cpu >= NR_CPUS) |
127 | return BAD_APICID; | 128 | return BAD_APICID; |
128 | return (int)cpu_2_logical_apicid[cpu]; | 129 | return (int)cpu_2_logical_apicid[cpu]; |
130 | #else | ||
131 | return logical_smp_processor_id(); | ||
132 | #endif | ||
129 | } | 133 | } |
130 | 134 | ||
131 | static inline int mpc_apic_id(struct mpc_config_processor *m, struct mpc_config_translation *unused) | 135 | static inline int mpc_apic_id(struct mpc_config_processor *m, struct mpc_config_translation *unused) |
diff --git a/include/asm-i386/mach-summit/mach_apic.h b/include/asm-i386/mach-summit/mach_apic.h index 9fd073286289..a81b05961595 100644 --- a/include/asm-i386/mach-summit/mach_apic.h +++ b/include/asm-i386/mach-summit/mach_apic.h | |||
@@ -46,10 +46,12 @@ extern u8 cpu_2_logical_apicid[]; | |||
46 | static inline void init_apic_ldr(void) | 46 | static inline void init_apic_ldr(void) |
47 | { | 47 | { |
48 | unsigned long val, id; | 48 | unsigned long val, id; |
49 | int i, count; | 49 | int count = 0; |
50 | u8 lid; | ||
51 | u8 my_id = (u8)hard_smp_processor_id(); | 50 | u8 my_id = (u8)hard_smp_processor_id(); |
52 | u8 my_cluster = (u8)apicid_cluster(my_id); | 51 | u8 my_cluster = (u8)apicid_cluster(my_id); |
52 | #ifdef CONFIG_SMP | ||
53 | u8 lid; | ||
54 | int i; | ||
53 | 55 | ||
54 | /* Create logical APIC IDs by counting CPUs already in cluster. */ | 56 | /* Create logical APIC IDs by counting CPUs already in cluster. */ |
55 | for (count = 0, i = NR_CPUS; --i >= 0; ) { | 57 | for (count = 0, i = NR_CPUS; --i >= 0; ) { |
@@ -57,6 +59,7 @@ static inline void init_apic_ldr(void) | |||
57 | if (lid != BAD_APICID && apicid_cluster(lid) == my_cluster) | 59 | if (lid != BAD_APICID && apicid_cluster(lid) == my_cluster) |
58 | ++count; | 60 | ++count; |
59 | } | 61 | } |
62 | #endif | ||
60 | /* We only have a 4 wide bitmap in cluster mode. If a deranged | 63 | /* We only have a 4 wide bitmap in cluster mode. If a deranged |
61 | * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */ | 64 | * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */ |
62 | BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT); | 65 | BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT); |
@@ -91,9 +94,13 @@ static inline int apicid_to_node(int logical_apicid) | |||
91 | /* Mapping from cpu number to logical apicid */ | 94 | /* Mapping from cpu number to logical apicid */ |
92 | static inline int cpu_to_logical_apicid(int cpu) | 95 | static inline int cpu_to_logical_apicid(int cpu) |
93 | { | 96 | { |
97 | #ifdef CONFIG_SMP | ||
94 | if (cpu >= NR_CPUS) | 98 | if (cpu >= NR_CPUS) |
95 | return BAD_APICID; | 99 | return BAD_APICID; |
96 | return (int)cpu_2_logical_apicid[cpu]; | 100 | return (int)cpu_2_logical_apicid[cpu]; |
101 | #else | ||
102 | return logical_smp_processor_id(); | ||
103 | #endif | ||
97 | } | 104 | } |
98 | 105 | ||
99 | static inline int cpu_present_to_apicid(int mps_cpu) | 106 | static inline int cpu_present_to_apicid(int mps_cpu) |
diff --git a/include/asm-i386/mutex.h b/include/asm-i386/mutex.h index 05a538531229..7a17d9e58ad6 100644 --- a/include/asm-i386/mutex.h +++ b/include/asm-i386/mutex.h | |||
@@ -30,14 +30,10 @@ do { \ | |||
30 | \ | 30 | \ |
31 | __asm__ __volatile__( \ | 31 | __asm__ __volatile__( \ |
32 | LOCK_PREFIX " decl (%%eax) \n" \ | 32 | LOCK_PREFIX " decl (%%eax) \n" \ |
33 | " js 2f \n" \ | 33 | " jns 1f \n" \ |
34 | " call "#fail_fn" \n" \ | ||
34 | "1: \n" \ | 35 | "1: \n" \ |
35 | \ | 36 | \ |
36 | LOCK_SECTION_START("") \ | ||
37 | "2: call "#fail_fn" \n" \ | ||
38 | " jmp 1b \n" \ | ||
39 | LOCK_SECTION_END \ | ||
40 | \ | ||
41 | :"=a" (dummy) \ | 37 | :"=a" (dummy) \ |
42 | : "a" (count) \ | 38 | : "a" (count) \ |
43 | : "memory", "ecx", "edx"); \ | 39 | : "memory", "ecx", "edx"); \ |
@@ -86,14 +82,10 @@ do { \ | |||
86 | \ | 82 | \ |
87 | __asm__ __volatile__( \ | 83 | __asm__ __volatile__( \ |
88 | LOCK_PREFIX " incl (%%eax) \n" \ | 84 | LOCK_PREFIX " incl (%%eax) \n" \ |
89 | " jle 2f \n" \ | 85 | " jg 1f \n" \ |
86 | " call "#fail_fn" \n" \ | ||
90 | "1: \n" \ | 87 | "1: \n" \ |
91 | \ | 88 | \ |
92 | LOCK_SECTION_START("") \ | ||
93 | "2: call "#fail_fn" \n" \ | ||
94 | " jmp 1b \n" \ | ||
95 | LOCK_SECTION_END \ | ||
96 | \ | ||
97 | :"=a" (dummy) \ | 89 | :"=a" (dummy) \ |
98 | : "a" (count) \ | 90 | : "a" (count) \ |
99 | : "memory", "ecx", "edx"); \ | 91 | : "memory", "ecx", "edx"); \ |
diff --git a/include/asm-i386/nmi.h b/include/asm-i386/nmi.h index 67d994799999..303bcd4592bb 100644 --- a/include/asm-i386/nmi.h +++ b/include/asm-i386/nmi.h | |||
@@ -6,32 +6,29 @@ | |||
6 | 6 | ||
7 | #include <linux/pm.h> | 7 | #include <linux/pm.h> |
8 | 8 | ||
9 | struct pt_regs; | ||
10 | |||
11 | typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu); | ||
12 | |||
13 | /** | 9 | /** |
14 | * set_nmi_callback | 10 | * do_nmi_callback |
15 | * | 11 | * |
16 | * Set a handler for an NMI. Only one handler may be | 12 | * Check to see if a callback exists and execute it. Return 1 |
17 | * set. Return 1 if the NMI was handled. | 13 | * if the handler exists and was handled successfully. |
18 | */ | 14 | */ |
19 | void set_nmi_callback(nmi_callback_t callback); | 15 | int do_nmi_callback(struct pt_regs *regs, int cpu); |
20 | 16 | ||
21 | /** | 17 | extern int nmi_watchdog_enabled; |
22 | * unset_nmi_callback | 18 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); |
23 | * | 19 | extern int avail_to_resrv_perfctr_nmi(unsigned int); |
24 | * Remove the handler previously set. | 20 | extern int reserve_perfctr_nmi(unsigned int); |
25 | */ | 21 | extern void release_perfctr_nmi(unsigned int); |
26 | void unset_nmi_callback(void); | 22 | extern int reserve_evntsel_nmi(unsigned int); |
27 | 23 | extern void release_evntsel_nmi(unsigned int); | |
28 | extern void setup_apic_nmi_watchdog (void); | 24 | |
29 | extern int reserve_lapic_nmi(void); | 25 | extern void setup_apic_nmi_watchdog (void *); |
30 | extern void release_lapic_nmi(void); | 26 | extern void stop_apic_nmi_watchdog (void *); |
31 | extern void disable_timer_nmi_watchdog(void); | 27 | extern void disable_timer_nmi_watchdog(void); |
32 | extern void enable_timer_nmi_watchdog(void); | 28 | extern void enable_timer_nmi_watchdog(void); |
33 | extern void nmi_watchdog_tick (struct pt_regs * regs); | 29 | extern int nmi_watchdog_tick (struct pt_regs * regs, unsigned reason); |
34 | 30 | ||
31 | extern atomic_t nmi_active; | ||
35 | extern unsigned int nmi_watchdog; | 32 | extern unsigned int nmi_watchdog; |
36 | #define NMI_DEFAULT -1 | 33 | #define NMI_DEFAULT -1 |
37 | #define NMI_NONE 0 | 34 | #define NMI_NONE 0 |
diff --git a/include/asm-i386/pgtable.h b/include/asm-i386/pgtable.h index 0dc051a8078b..541b3e234335 100644 --- a/include/asm-i386/pgtable.h +++ b/include/asm-i386/pgtable.h | |||
@@ -411,8 +411,6 @@ extern pte_t *lookup_address(unsigned long address); | |||
411 | static inline int set_kernel_exec(unsigned long vaddr, int enable) { return 0;} | 411 | static inline int set_kernel_exec(unsigned long vaddr, int enable) { return 0;} |
412 | #endif | 412 | #endif |
413 | 413 | ||
414 | extern void noexec_setup(const char *str); | ||
415 | |||
416 | #if defined(CONFIG_HIGHPTE) | 414 | #if defined(CONFIG_HIGHPTE) |
417 | #define pte_offset_map(dir, address) \ | 415 | #define pte_offset_map(dir, address) \ |
418 | ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + pte_index(address)) | 416 | ((pte_t *)kmap_atomic(pmd_page(*(dir)),KM_PTE0) + pte_index(address)) |
diff --git a/include/asm-i386/ptrace.h b/include/asm-i386/ptrace.h index 1910880fcd40..a4a0e5207db5 100644 --- a/include/asm-i386/ptrace.h +++ b/include/asm-i386/ptrace.h | |||
@@ -27,6 +27,7 @@ struct pt_regs { | |||
27 | #ifdef __KERNEL__ | 27 | #ifdef __KERNEL__ |
28 | 28 | ||
29 | #include <asm/vm86.h> | 29 | #include <asm/vm86.h> |
30 | #include <asm/segment.h> | ||
30 | 31 | ||
31 | struct task_struct; | 32 | struct task_struct; |
32 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code); | 33 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code); |
@@ -40,18 +41,14 @@ extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int erro | |||
40 | */ | 41 | */ |
41 | static inline int user_mode(struct pt_regs *regs) | 42 | static inline int user_mode(struct pt_regs *regs) |
42 | { | 43 | { |
43 | return (regs->xcs & 3) != 0; | 44 | return (regs->xcs & SEGMENT_RPL_MASK) == USER_RPL; |
44 | } | 45 | } |
45 | static inline int user_mode_vm(struct pt_regs *regs) | 46 | static inline int user_mode_vm(struct pt_regs *regs) |
46 | { | 47 | { |
47 | return ((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0; | 48 | return ((regs->xcs & SEGMENT_RPL_MASK) | (regs->eflags & VM_MASK)) >= USER_RPL; |
48 | } | 49 | } |
49 | #define instruction_pointer(regs) ((regs)->eip) | 50 | #define instruction_pointer(regs) ((regs)->eip) |
50 | #if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER) | ||
51 | extern unsigned long profile_pc(struct pt_regs *regs); | 51 | extern unsigned long profile_pc(struct pt_regs *regs); |
52 | #else | ||
53 | #define profile_pc(regs) instruction_pointer(regs) | ||
54 | #endif | ||
55 | #endif /* __KERNEL__ */ | 52 | #endif /* __KERNEL__ */ |
56 | 53 | ||
57 | #endif | 54 | #endif |
diff --git a/include/asm-i386/rwlock.h b/include/asm-i386/rwlock.h index 87c069ccba08..c3e5db32fa48 100644 --- a/include/asm-i386/rwlock.h +++ b/include/asm-i386/rwlock.h | |||
@@ -20,52 +20,6 @@ | |||
20 | #define RW_LOCK_BIAS 0x01000000 | 20 | #define RW_LOCK_BIAS 0x01000000 |
21 | #define RW_LOCK_BIAS_STR "0x01000000" | 21 | #define RW_LOCK_BIAS_STR "0x01000000" |
22 | 22 | ||
23 | #define __build_read_lock_ptr(rw, helper) \ | 23 | /* Code is in asm-i386/spinlock.h */ |
24 | asm volatile(LOCK_PREFIX " subl $1,(%0)\n\t" \ | ||
25 | "jns 1f\n" \ | ||
26 | "call " helper "\n\t" \ | ||
27 | "1:\n" \ | ||
28 | ::"a" (rw) : "memory") | ||
29 | |||
30 | #define __build_read_lock_const(rw, helper) \ | ||
31 | asm volatile(LOCK_PREFIX " subl $1,%0\n\t" \ | ||
32 | "jns 1f\n" \ | ||
33 | "pushl %%eax\n\t" \ | ||
34 | "leal %0,%%eax\n\t" \ | ||
35 | "call " helper "\n\t" \ | ||
36 | "popl %%eax\n\t" \ | ||
37 | "1:\n" \ | ||
38 | :"+m" (*(volatile int *)rw) : : "memory") | ||
39 | |||
40 | #define __build_read_lock(rw, helper) do { \ | ||
41 | if (__builtin_constant_p(rw)) \ | ||
42 | __build_read_lock_const(rw, helper); \ | ||
43 | else \ | ||
44 | __build_read_lock_ptr(rw, helper); \ | ||
45 | } while (0) | ||
46 | |||
47 | #define __build_write_lock_ptr(rw, helper) \ | ||
48 | asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ | ||
49 | "jz 1f\n" \ | ||
50 | "call " helper "\n\t" \ | ||
51 | "1:\n" \ | ||
52 | ::"a" (rw) : "memory") | ||
53 | |||
54 | #define __build_write_lock_const(rw, helper) \ | ||
55 | asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ | ||
56 | "jz 1f\n" \ | ||
57 | "pushl %%eax\n\t" \ | ||
58 | "leal %0,%%eax\n\t" \ | ||
59 | "call " helper "\n\t" \ | ||
60 | "popl %%eax\n\t" \ | ||
61 | "1:\n" \ | ||
62 | :"+m" (*(volatile int *)rw) : : "memory") | ||
63 | |||
64 | #define __build_write_lock(rw, helper) do { \ | ||
65 | if (__builtin_constant_p(rw)) \ | ||
66 | __build_write_lock_const(rw, helper); \ | ||
67 | else \ | ||
68 | __build_write_lock_ptr(rw, helper); \ | ||
69 | } while (0) | ||
70 | 24 | ||
71 | #endif | 25 | #endif |
diff --git a/include/asm-i386/rwsem.h b/include/asm-i386/rwsem.h index 43113f5608eb..bc598d6388e3 100644 --- a/include/asm-i386/rwsem.h +++ b/include/asm-i386/rwsem.h | |||
@@ -99,17 +99,9 @@ static inline void __down_read(struct rw_semaphore *sem) | |||
99 | __asm__ __volatile__( | 99 | __asm__ __volatile__( |
100 | "# beginning down_read\n\t" | 100 | "# beginning down_read\n\t" |
101 | LOCK_PREFIX " incl (%%eax)\n\t" /* adds 0x00000001, returns the old value */ | 101 | LOCK_PREFIX " incl (%%eax)\n\t" /* adds 0x00000001, returns the old value */ |
102 | " js 2f\n\t" /* jump if we weren't granted the lock */ | 102 | " jns 1f\n" |
103 | " call call_rwsem_down_read_failed\n" | ||
103 | "1:\n\t" | 104 | "1:\n\t" |
104 | LOCK_SECTION_START("") | ||
105 | "2:\n\t" | ||
106 | " pushl %%ecx\n\t" | ||
107 | " pushl %%edx\n\t" | ||
108 | " call rwsem_down_read_failed\n\t" | ||
109 | " popl %%edx\n\t" | ||
110 | " popl %%ecx\n\t" | ||
111 | " jmp 1b\n" | ||
112 | LOCK_SECTION_END | ||
113 | "# ending down_read\n\t" | 105 | "# ending down_read\n\t" |
114 | : "+m" (sem->count) | 106 | : "+m" (sem->count) |
115 | : "a" (sem) | 107 | : "a" (sem) |
@@ -151,15 +143,9 @@ static inline void __down_write_nested(struct rw_semaphore *sem, int subclass) | |||
151 | "# beginning down_write\n\t" | 143 | "# beginning down_write\n\t" |
152 | LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtract 0x0000ffff, returns the old value */ | 144 | LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtract 0x0000ffff, returns the old value */ |
153 | " testl %%edx,%%edx\n\t" /* was the count 0 before? */ | 145 | " testl %%edx,%%edx\n\t" /* was the count 0 before? */ |
154 | " jnz 2f\n\t" /* jump if we weren't granted the lock */ | 146 | " jz 1f\n" |
155 | "1:\n\t" | 147 | " call call_rwsem_down_write_failed\n" |
156 | LOCK_SECTION_START("") | 148 | "1:\n" |
157 | "2:\n\t" | ||
158 | " pushl %%ecx\n\t" | ||
159 | " call rwsem_down_write_failed\n\t" | ||
160 | " popl %%ecx\n\t" | ||
161 | " jmp 1b\n" | ||
162 | LOCK_SECTION_END | ||
163 | "# ending down_write" | 149 | "# ending down_write" |
164 | : "+m" (sem->count), "=d" (tmp) | 150 | : "+m" (sem->count), "=d" (tmp) |
165 | : "a" (sem), "1" (tmp) | 151 | : "a" (sem), "1" (tmp) |
@@ -193,17 +179,9 @@ static inline void __up_read(struct rw_semaphore *sem) | |||
193 | __asm__ __volatile__( | 179 | __asm__ __volatile__( |
194 | "# beginning __up_read\n\t" | 180 | "# beginning __up_read\n\t" |
195 | LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtracts 1, returns the old value */ | 181 | LOCK_PREFIX " xadd %%edx,(%%eax)\n\t" /* subtracts 1, returns the old value */ |
196 | " js 2f\n\t" /* jump if the lock is being waited upon */ | 182 | " jns 1f\n\t" |
197 | "1:\n\t" | 183 | " call call_rwsem_wake\n" |
198 | LOCK_SECTION_START("") | 184 | "1:\n" |
199 | "2:\n\t" | ||
200 | " decw %%dx\n\t" /* do nothing if still outstanding active readers */ | ||
201 | " jnz 1b\n\t" | ||
202 | " pushl %%ecx\n\t" | ||
203 | " call rwsem_wake\n\t" | ||
204 | " popl %%ecx\n\t" | ||
205 | " jmp 1b\n" | ||
206 | LOCK_SECTION_END | ||
207 | "# ending __up_read\n" | 185 | "# ending __up_read\n" |
208 | : "+m" (sem->count), "=d" (tmp) | 186 | : "+m" (sem->count), "=d" (tmp) |
209 | : "a" (sem), "1" (tmp) | 187 | : "a" (sem), "1" (tmp) |
@@ -219,17 +197,9 @@ static inline void __up_write(struct rw_semaphore *sem) | |||
219 | "# beginning __up_write\n\t" | 197 | "# beginning __up_write\n\t" |
220 | " movl %2,%%edx\n\t" | 198 | " movl %2,%%edx\n\t" |
221 | LOCK_PREFIX " xaddl %%edx,(%%eax)\n\t" /* tries to transition 0xffff0001 -> 0x00000000 */ | 199 | LOCK_PREFIX " xaddl %%edx,(%%eax)\n\t" /* tries to transition 0xffff0001 -> 0x00000000 */ |
222 | " jnz 2f\n\t" /* jump if the lock is being waited upon */ | 200 | " jz 1f\n" |
201 | " call call_rwsem_wake\n" | ||
223 | "1:\n\t" | 202 | "1:\n\t" |
224 | LOCK_SECTION_START("") | ||
225 | "2:\n\t" | ||
226 | " decw %%dx\n\t" /* did the active count reduce to 0? */ | ||
227 | " jnz 1b\n\t" /* jump back if not */ | ||
228 | " pushl %%ecx\n\t" | ||
229 | " call rwsem_wake\n\t" | ||
230 | " popl %%ecx\n\t" | ||
231 | " jmp 1b\n" | ||
232 | LOCK_SECTION_END | ||
233 | "# ending __up_write\n" | 203 | "# ending __up_write\n" |
234 | : "+m" (sem->count) | 204 | : "+m" (sem->count) |
235 | : "a" (sem), "i" (-RWSEM_ACTIVE_WRITE_BIAS) | 205 | : "a" (sem), "i" (-RWSEM_ACTIVE_WRITE_BIAS) |
@@ -244,17 +214,9 @@ static inline void __downgrade_write(struct rw_semaphore *sem) | |||
244 | __asm__ __volatile__( | 214 | __asm__ __volatile__( |
245 | "# beginning __downgrade_write\n\t" | 215 | "# beginning __downgrade_write\n\t" |
246 | LOCK_PREFIX " addl %2,(%%eax)\n\t" /* transitions 0xZZZZ0001 -> 0xYYYY0001 */ | 216 | LOCK_PREFIX " addl %2,(%%eax)\n\t" /* transitions 0xZZZZ0001 -> 0xYYYY0001 */ |
247 | " js 2f\n\t" /* jump if the lock is being waited upon */ | 217 | " jns 1f\n\t" |
218 | " call call_rwsem_downgrade_wake\n" | ||
248 | "1:\n\t" | 219 | "1:\n\t" |
249 | LOCK_SECTION_START("") | ||
250 | "2:\n\t" | ||
251 | " pushl %%ecx\n\t" | ||
252 | " pushl %%edx\n\t" | ||
253 | " call rwsem_downgrade_wake\n\t" | ||
254 | " popl %%edx\n\t" | ||
255 | " popl %%ecx\n\t" | ||
256 | " jmp 1b\n" | ||
257 | LOCK_SECTION_END | ||
258 | "# ending __downgrade_write\n" | 220 | "# ending __downgrade_write\n" |
259 | : "+m" (sem->count) | 221 | : "+m" (sem->count) |
260 | : "a" (sem), "i" (-RWSEM_WAITING_BIAS) | 222 | : "a" (sem), "i" (-RWSEM_WAITING_BIAS) |
diff --git a/include/asm-i386/segment.h b/include/asm-i386/segment.h index faf995307b9e..b7ab59685ba7 100644 --- a/include/asm-i386/segment.h +++ b/include/asm-i386/segment.h | |||
@@ -83,6 +83,11 @@ | |||
83 | 83 | ||
84 | #define GDT_SIZE (GDT_ENTRIES * 8) | 84 | #define GDT_SIZE (GDT_ENTRIES * 8) |
85 | 85 | ||
86 | /* Matches __KERNEL_CS and __USER_CS (they must be 2 entries apart) */ | ||
87 | #define SEGMENT_IS_FLAT_CODE(x) (((x) & 0xec) == GDT_ENTRY_KERNEL_CS * 8) | ||
88 | /* Matches PNP_CS32 and PNP_CS16 (they must be consecutive) */ | ||
89 | #define SEGMENT_IS_PNP_CODE(x) (((x) & 0xf4) == GDT_ENTRY_PNPBIOS_BASE * 8) | ||
90 | |||
86 | /* Simple and small GDT entries for booting only */ | 91 | /* Simple and small GDT entries for booting only */ |
87 | 92 | ||
88 | #define GDT_ENTRY_BOOT_CS 2 | 93 | #define GDT_ENTRY_BOOT_CS 2 |
@@ -112,4 +117,16 @@ | |||
112 | */ | 117 | */ |
113 | #define IDT_ENTRIES 256 | 118 | #define IDT_ENTRIES 256 |
114 | 119 | ||
120 | /* Bottom two bits of selector give the ring privilege level */ | ||
121 | #define SEGMENT_RPL_MASK 0x3 | ||
122 | /* Bit 2 is table indicator (LDT/GDT) */ | ||
123 | #define SEGMENT_TI_MASK 0x4 | ||
124 | |||
125 | /* User mode is privilege level 3 */ | ||
126 | #define USER_RPL 0x3 | ||
127 | /* LDT segment has TI set, GDT has it cleared */ | ||
128 | #define SEGMENT_LDT 0x4 | ||
129 | #define SEGMENT_GDT 0x0 | ||
130 | |||
131 | #define get_kernel_rpl() 0 | ||
115 | #endif | 132 | #endif |
diff --git a/include/asm-i386/semaphore.h b/include/asm-i386/semaphore.h index d51e800acf29..4e34a468c383 100644 --- a/include/asm-i386/semaphore.h +++ b/include/asm-i386/semaphore.h | |||
@@ -100,13 +100,10 @@ static inline void down(struct semaphore * sem) | |||
100 | __asm__ __volatile__( | 100 | __asm__ __volatile__( |
101 | "# atomic down operation\n\t" | 101 | "# atomic down operation\n\t" |
102 | LOCK_PREFIX "decl %0\n\t" /* --sem->count */ | 102 | LOCK_PREFIX "decl %0\n\t" /* --sem->count */ |
103 | "js 2f\n" | 103 | "jns 2f\n" |
104 | "1:\n" | 104 | "\tlea %0,%%eax\n\t" |
105 | LOCK_SECTION_START("") | 105 | "call __down_failed\n" |
106 | "2:\tlea %0,%%eax\n\t" | 106 | "2:" |
107 | "call __down_failed\n\t" | ||
108 | "jmp 1b\n" | ||
109 | LOCK_SECTION_END | ||
110 | :"+m" (sem->count) | 107 | :"+m" (sem->count) |
111 | : | 108 | : |
112 | :"memory","ax"); | 109 | :"memory","ax"); |
@@ -123,16 +120,13 @@ static inline int down_interruptible(struct semaphore * sem) | |||
123 | might_sleep(); | 120 | might_sleep(); |
124 | __asm__ __volatile__( | 121 | __asm__ __volatile__( |
125 | "# atomic interruptible down operation\n\t" | 122 | "# atomic interruptible down operation\n\t" |
123 | "xorl %0,%0\n\t" | ||
126 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ | 124 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
127 | "js 2f\n\t" | 125 | "jns 2f\n\t" |
128 | "xorl %0,%0\n" | 126 | "lea %1,%%eax\n\t" |
129 | "1:\n" | 127 | "call __down_failed_interruptible\n" |
130 | LOCK_SECTION_START("") | 128 | "2:" |
131 | "2:\tlea %1,%%eax\n\t" | 129 | :"=&a" (result), "+m" (sem->count) |
132 | "call __down_failed_interruptible\n\t" | ||
133 | "jmp 1b\n" | ||
134 | LOCK_SECTION_END | ||
135 | :"=a" (result), "+m" (sem->count) | ||
136 | : | 130 | : |
137 | :"memory"); | 131 | :"memory"); |
138 | return result; | 132 | return result; |
@@ -148,16 +142,13 @@ static inline int down_trylock(struct semaphore * sem) | |||
148 | 142 | ||
149 | __asm__ __volatile__( | 143 | __asm__ __volatile__( |
150 | "# atomic interruptible down operation\n\t" | 144 | "# atomic interruptible down operation\n\t" |
145 | "xorl %0,%0\n\t" | ||
151 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ | 146 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
152 | "js 2f\n\t" | 147 | "jns 2f\n\t" |
153 | "xorl %0,%0\n" | 148 | "lea %1,%%eax\n\t" |
154 | "1:\n" | ||
155 | LOCK_SECTION_START("") | ||
156 | "2:\tlea %1,%%eax\n\t" | ||
157 | "call __down_failed_trylock\n\t" | 149 | "call __down_failed_trylock\n\t" |
158 | "jmp 1b\n" | 150 | "2:\n" |
159 | LOCK_SECTION_END | 151 | :"=&a" (result), "+m" (sem->count) |
160 | :"=a" (result), "+m" (sem->count) | ||
161 | : | 152 | : |
162 | :"memory"); | 153 | :"memory"); |
163 | return result; | 154 | return result; |
@@ -166,22 +157,16 @@ static inline int down_trylock(struct semaphore * sem) | |||
166 | /* | 157 | /* |
167 | * Note! This is subtle. We jump to wake people up only if | 158 | * Note! This is subtle. We jump to wake people up only if |
168 | * the semaphore was negative (== somebody was waiting on it). | 159 | * the semaphore was negative (== somebody was waiting on it). |
169 | * The default case (no contention) will result in NO | ||
170 | * jumps for both down() and up(). | ||
171 | */ | 160 | */ |
172 | static inline void up(struct semaphore * sem) | 161 | static inline void up(struct semaphore * sem) |
173 | { | 162 | { |
174 | __asm__ __volatile__( | 163 | __asm__ __volatile__( |
175 | "# atomic up operation\n\t" | 164 | "# atomic up operation\n\t" |
176 | LOCK_PREFIX "incl %0\n\t" /* ++sem->count */ | 165 | LOCK_PREFIX "incl %0\n\t" /* ++sem->count */ |
177 | "jle 2f\n" | 166 | "jg 1f\n\t" |
178 | "1:\n" | 167 | "lea %0,%%eax\n\t" |
179 | LOCK_SECTION_START("") | 168 | "call __up_wakeup\n" |
180 | "2:\tlea %0,%%eax\n\t" | 169 | "1:" |
181 | "call __up_wakeup\n\t" | ||
182 | "jmp 1b\n" | ||
183 | LOCK_SECTION_END | ||
184 | ".subsection 0\n" | ||
185 | :"+m" (sem->count) | 170 | :"+m" (sem->count) |
186 | : | 171 | : |
187 | :"memory","ax"); | 172 | :"memory","ax"); |
diff --git a/include/asm-i386/smp.h b/include/asm-i386/smp.h index 142d10e34ade..32ac8c91d5c5 100644 --- a/include/asm-i386/smp.h +++ b/include/asm-i386/smp.h | |||
@@ -80,17 +80,12 @@ static inline int hard_smp_processor_id(void) | |||
80 | return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID)); | 80 | return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID)); |
81 | } | 81 | } |
82 | #endif | 82 | #endif |
83 | |||
84 | static __inline int logical_smp_processor_id(void) | ||
85 | { | ||
86 | /* we don't want to mark this access volatile - bad code generation */ | ||
87 | return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); | ||
88 | } | ||
89 | |||
90 | #endif | 83 | #endif |
91 | 84 | ||
92 | extern int __cpu_disable(void); | 85 | extern int __cpu_disable(void); |
93 | extern void __cpu_die(unsigned int cpu); | 86 | extern void __cpu_die(unsigned int cpu); |
87 | extern unsigned int num_processors; | ||
88 | |||
94 | #endif /* !__ASSEMBLY__ */ | 89 | #endif /* !__ASSEMBLY__ */ |
95 | 90 | ||
96 | #else /* CONFIG_SMP */ | 91 | #else /* CONFIG_SMP */ |
@@ -100,4 +95,15 @@ extern void __cpu_die(unsigned int cpu); | |||
100 | #define NO_PROC_ID 0xFF /* No processor magic marker */ | 95 | #define NO_PROC_ID 0xFF /* No processor magic marker */ |
101 | 96 | ||
102 | #endif | 97 | #endif |
98 | |||
99 | #ifndef __ASSEMBLY__ | ||
100 | #ifdef CONFIG_X86_LOCAL_APIC | ||
101 | static __inline int logical_smp_processor_id(void) | ||
102 | { | ||
103 | /* we don't want to mark this access volatile - bad code generation */ | ||
104 | return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); | ||
105 | } | ||
106 | #endif | ||
107 | #endif | ||
108 | |||
103 | #endif | 109 | #endif |
diff --git a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h index d1020363c41a..b0b3043f05e1 100644 --- a/include/asm-i386/spinlock.h +++ b/include/asm-i386/spinlock.h | |||
@@ -4,8 +4,12 @@ | |||
4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
5 | #include <asm/rwlock.h> | 5 | #include <asm/rwlock.h> |
6 | #include <asm/page.h> | 6 | #include <asm/page.h> |
7 | #include <asm/processor.h> | ||
7 | #include <linux/compiler.h> | 8 | #include <linux/compiler.h> |
8 | 9 | ||
10 | #define CLI_STRING "cli" | ||
11 | #define STI_STRING "sti" | ||
12 | |||
9 | /* | 13 | /* |
10 | * Your basic SMP spinlocks, allowing only a single CPU anywhere | 14 | * Your basic SMP spinlocks, allowing only a single CPU anywhere |
11 | * | 15 | * |
@@ -17,67 +21,64 @@ | |||
17 | * (the type definitions are in asm/spinlock_types.h) | 21 | * (the type definitions are in asm/spinlock_types.h) |
18 | */ | 22 | */ |
19 | 23 | ||
20 | #define __raw_spin_is_locked(x) \ | 24 | static inline int __raw_spin_is_locked(raw_spinlock_t *x) |
21 | (*(volatile signed char *)(&(x)->slock) <= 0) | 25 | { |
22 | 26 | return *(volatile signed char *)(&(x)->slock) <= 0; | |
23 | #define __raw_spin_lock_string \ | 27 | } |
24 | "\n1:\t" \ | ||
25 | LOCK_PREFIX " ; decb %0\n\t" \ | ||
26 | "jns 3f\n" \ | ||
27 | "2:\t" \ | ||
28 | "rep;nop\n\t" \ | ||
29 | "cmpb $0,%0\n\t" \ | ||
30 | "jle 2b\n\t" \ | ||
31 | "jmp 1b\n" \ | ||
32 | "3:\n\t" | ||
33 | |||
34 | /* | ||
35 | * NOTE: there's an irqs-on section here, which normally would have to be | ||
36 | * irq-traced, but on CONFIG_TRACE_IRQFLAGS we never use | ||
37 | * __raw_spin_lock_string_flags(). | ||
38 | */ | ||
39 | #define __raw_spin_lock_string_flags \ | ||
40 | "\n1:\t" \ | ||
41 | LOCK_PREFIX " ; decb %0\n\t" \ | ||
42 | "jns 5f\n" \ | ||
43 | "2:\t" \ | ||
44 | "testl $0x200, %1\n\t" \ | ||
45 | "jz 4f\n\t" \ | ||
46 | "sti\n" \ | ||
47 | "3:\t" \ | ||
48 | "rep;nop\n\t" \ | ||
49 | "cmpb $0, %0\n\t" \ | ||
50 | "jle 3b\n\t" \ | ||
51 | "cli\n\t" \ | ||
52 | "jmp 1b\n" \ | ||
53 | "4:\t" \ | ||
54 | "rep;nop\n\t" \ | ||
55 | "cmpb $0, %0\n\t" \ | ||
56 | "jg 1b\n\t" \ | ||
57 | "jmp 4b\n" \ | ||
58 | "5:\n\t" | ||
59 | 28 | ||
60 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 29 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
61 | { | 30 | { |
62 | asm(__raw_spin_lock_string : "+m" (lock->slock) : : "memory"); | 31 | asm volatile("\n1:\t" |
32 | LOCK_PREFIX " ; decb %0\n\t" | ||
33 | "jns 3f\n" | ||
34 | "2:\t" | ||
35 | "rep;nop\n\t" | ||
36 | "cmpb $0,%0\n\t" | ||
37 | "jle 2b\n\t" | ||
38 | "jmp 1b\n" | ||
39 | "3:\n\t" | ||
40 | : "+m" (lock->slock) : : "memory"); | ||
63 | } | 41 | } |
64 | 42 | ||
65 | /* | 43 | /* |
66 | * It is easier for the lock validator if interrupts are not re-enabled | 44 | * It is easier for the lock validator if interrupts are not re-enabled |
67 | * in the middle of a lock-acquire. This is a performance feature anyway | 45 | * in the middle of a lock-acquire. This is a performance feature anyway |
68 | * so we turn it off: | 46 | * so we turn it off: |
47 | * | ||
48 | * NOTE: there's an irqs-on section here, which normally would have to be | ||
49 | * irq-traced, but on CONFIG_TRACE_IRQFLAGS we never use this variant. | ||
69 | */ | 50 | */ |
70 | #ifndef CONFIG_PROVE_LOCKING | 51 | #ifndef CONFIG_PROVE_LOCKING |
71 | static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) | 52 | static inline void __raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags) |
72 | { | 53 | { |
73 | asm(__raw_spin_lock_string_flags : "+m" (lock->slock) : "r" (flags) : "memory"); | 54 | asm volatile( |
55 | "\n1:\t" | ||
56 | LOCK_PREFIX " ; decb %0\n\t" | ||
57 | "jns 5f\n" | ||
58 | "2:\t" | ||
59 | "testl $0x200, %1\n\t" | ||
60 | "jz 4f\n\t" | ||
61 | STI_STRING "\n" | ||
62 | "3:\t" | ||
63 | "rep;nop\n\t" | ||
64 | "cmpb $0, %0\n\t" | ||
65 | "jle 3b\n\t" | ||
66 | CLI_STRING "\n\t" | ||
67 | "jmp 1b\n" | ||
68 | "4:\t" | ||
69 | "rep;nop\n\t" | ||
70 | "cmpb $0, %0\n\t" | ||
71 | "jg 1b\n\t" | ||
72 | "jmp 4b\n" | ||
73 | "5:\n\t" | ||
74 | : "+m" (lock->slock) : "r" (flags) : "memory"); | ||
74 | } | 75 | } |
75 | #endif | 76 | #endif |
76 | 77 | ||
77 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | 78 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) |
78 | { | 79 | { |
79 | char oldval; | 80 | char oldval; |
80 | __asm__ __volatile__( | 81 | asm volatile( |
81 | "xchgb %b0,%1" | 82 | "xchgb %b0,%1" |
82 | :"=q" (oldval), "+m" (lock->slock) | 83 | :"=q" (oldval), "+m" (lock->slock) |
83 | :"0" (0) : "memory"); | 84 | :"0" (0) : "memory"); |
@@ -93,38 +94,29 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
93 | 94 | ||
94 | #if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE) | 95 | #if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE) |
95 | 96 | ||
96 | #define __raw_spin_unlock_string \ | ||
97 | "movb $1,%0" \ | ||
98 | :"+m" (lock->slock) : : "memory" | ||
99 | |||
100 | |||
101 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 97 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) |
102 | { | 98 | { |
103 | __asm__ __volatile__( | 99 | asm volatile("movb $1,%0" : "+m" (lock->slock) :: "memory"); |
104 | __raw_spin_unlock_string | ||
105 | ); | ||
106 | } | 100 | } |
107 | 101 | ||
108 | #else | 102 | #else |
109 | 103 | ||
110 | #define __raw_spin_unlock_string \ | ||
111 | "xchgb %b0, %1" \ | ||
112 | :"=q" (oldval), "+m" (lock->slock) \ | ||
113 | :"0" (oldval) : "memory" | ||
114 | |||
115 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 104 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) |
116 | { | 105 | { |
117 | char oldval = 1; | 106 | char oldval = 1; |
118 | 107 | ||
119 | __asm__ __volatile__( | 108 | asm volatile("xchgb %b0, %1" |
120 | __raw_spin_unlock_string | 109 | : "=q" (oldval), "+m" (lock->slock) |
121 | ); | 110 | : "0" (oldval) : "memory"); |
122 | } | 111 | } |
123 | 112 | ||
124 | #endif | 113 | #endif |
125 | 114 | ||
126 | #define __raw_spin_unlock_wait(lock) \ | 115 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) |
127 | do { while (__raw_spin_is_locked(lock)) cpu_relax(); } while (0) | 116 | { |
117 | while (__raw_spin_is_locked(lock)) | ||
118 | cpu_relax(); | ||
119 | } | ||
128 | 120 | ||
129 | /* | 121 | /* |
130 | * Read-write spinlocks, allowing multiple readers | 122 | * Read-write spinlocks, allowing multiple readers |
@@ -151,22 +143,36 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
151 | * read_can_lock - would read_trylock() succeed? | 143 | * read_can_lock - would read_trylock() succeed? |
152 | * @lock: the rwlock in question. | 144 | * @lock: the rwlock in question. |
153 | */ | 145 | */ |
154 | #define __raw_read_can_lock(x) ((int)(x)->lock > 0) | 146 | static inline int __raw_read_can_lock(raw_rwlock_t *x) |
147 | { | ||
148 | return (int)(x)->lock > 0; | ||
149 | } | ||
155 | 150 | ||
156 | /** | 151 | /** |
157 | * write_can_lock - would write_trylock() succeed? | 152 | * write_can_lock - would write_trylock() succeed? |
158 | * @lock: the rwlock in question. | 153 | * @lock: the rwlock in question. |
159 | */ | 154 | */ |
160 | #define __raw_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS) | 155 | static inline int __raw_write_can_lock(raw_rwlock_t *x) |
156 | { | ||
157 | return (x)->lock == RW_LOCK_BIAS; | ||
158 | } | ||
161 | 159 | ||
162 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 160 | static inline void __raw_read_lock(raw_rwlock_t *rw) |
163 | { | 161 | { |
164 | __build_read_lock(rw, "__read_lock_failed"); | 162 | asm volatile(LOCK_PREFIX " subl $1,(%0)\n\t" |
163 | "jns 1f\n" | ||
164 | "call __read_lock_failed\n\t" | ||
165 | "1:\n" | ||
166 | ::"a" (rw) : "memory"); | ||
165 | } | 167 | } |
166 | 168 | ||
167 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 169 | static inline void __raw_write_lock(raw_rwlock_t *rw) |
168 | { | 170 | { |
169 | __build_write_lock(rw, "__write_lock_failed"); | 171 | asm volatile(LOCK_PREFIX " subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" |
172 | "jz 1f\n" | ||
173 | "call __write_lock_failed\n\t" | ||
174 | "1:\n" | ||
175 | ::"a" (rw) : "memory"); | ||
170 | } | 176 | } |
171 | 177 | ||
172 | static inline int __raw_read_trylock(raw_rwlock_t *lock) | 178 | static inline int __raw_read_trylock(raw_rwlock_t *lock) |
diff --git a/include/asm-i386/stacktrace.h b/include/asm-i386/stacktrace.h new file mode 100644 index 000000000000..7d1f6a5cbfca --- /dev/null +++ b/include/asm-i386/stacktrace.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-x86_64/stacktrace.h> | |||
diff --git a/include/asm-i386/therm_throt.h b/include/asm-i386/therm_throt.h new file mode 100644 index 000000000000..399bf6026b16 --- /dev/null +++ b/include/asm-i386/therm_throt.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __ASM_I386_THERM_THROT_H__ | ||
2 | #define __ASM_I386_THERM_THROT_H__ 1 | ||
3 | |||
4 | #include <asm/atomic.h> | ||
5 | |||
6 | extern atomic_t therm_throt_en; | ||
7 | int therm_throt_process(int curr); | ||
8 | |||
9 | #endif /* __ASM_I386_THERM_THROT_H__ */ | ||
diff --git a/include/asm-i386/tlbflush.h b/include/asm-i386/tlbflush.h index d57ca5c540b6..360648b0f2b3 100644 --- a/include/asm-i386/tlbflush.h +++ b/include/asm-i386/tlbflush.h | |||
@@ -36,8 +36,6 @@ | |||
36 | : "memory"); \ | 36 | : "memory"); \ |
37 | } while (0) | 37 | } while (0) |
38 | 38 | ||
39 | extern unsigned long pgkern_mask; | ||
40 | |||
41 | # define __flush_tlb_all() \ | 39 | # define __flush_tlb_all() \ |
42 | do { \ | 40 | do { \ |
43 | if (cpu_has_pge) \ | 41 | if (cpu_has_pge) \ |
@@ -49,7 +47,7 @@ extern unsigned long pgkern_mask; | |||
49 | #define cpu_has_invlpg (boot_cpu_data.x86 > 3) | 47 | #define cpu_has_invlpg (boot_cpu_data.x86 > 3) |
50 | 48 | ||
51 | #define __flush_tlb_single(addr) \ | 49 | #define __flush_tlb_single(addr) \ |
52 | __asm__ __volatile__("invlpg %0": :"m" (*(char *) addr)) | 50 | __asm__ __volatile__("invlpg (%0)" ::"r" (addr) : "memory") |
53 | 51 | ||
54 | #ifdef CONFIG_X86_INVLPG | 52 | #ifdef CONFIG_X86_INVLPG |
55 | # define __flush_tlb_one(addr) __flush_tlb_single(addr) | 53 | # define __flush_tlb_one(addr) __flush_tlb_single(addr) |
diff --git a/include/asm-i386/tsc.h b/include/asm-i386/tsc.h index 97b828ce31e0..c13933185c1c 100644 --- a/include/asm-i386/tsc.h +++ b/include/asm-i386/tsc.h | |||
@@ -6,7 +6,6 @@ | |||
6 | #ifndef _ASM_i386_TSC_H | 6 | #ifndef _ASM_i386_TSC_H |
7 | #define _ASM_i386_TSC_H | 7 | #define _ASM_i386_TSC_H |
8 | 8 | ||
9 | #include <linux/config.h> | ||
10 | #include <asm/processor.h> | 9 | #include <asm/processor.h> |
11 | 10 | ||
12 | /* | 11 | /* |
diff --git a/include/asm-i386/unistd.h b/include/asm-i386/unistd.h index fc1c8ddae149..bd9987087adc 100644 --- a/include/asm-i386/unistd.h +++ b/include/asm-i386/unistd.h | |||
@@ -323,18 +323,20 @@ | |||
323 | #define __NR_tee 315 | 323 | #define __NR_tee 315 |
324 | #define __NR_vmsplice 316 | 324 | #define __NR_vmsplice 316 |
325 | #define __NR_move_pages 317 | 325 | #define __NR_move_pages 317 |
326 | #define __NR_getcpu 318 | ||
326 | 327 | ||
327 | #ifdef __KERNEL__ | 328 | #ifdef __KERNEL__ |
328 | 329 | ||
329 | #define NR_syscalls 318 | 330 | #define NR_syscalls 319 |
331 | #include <linux/err.h> | ||
330 | 332 | ||
331 | /* | 333 | /* |
332 | * user-visible error numbers are in the range -1 - -128: see | 334 | * user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
333 | * <asm-i386/errno.h> | 335 | * <asm-i386/errno.h> |
334 | */ | 336 | */ |
335 | #define __syscall_return(type, res) \ | 337 | #define __syscall_return(type, res) \ |
336 | do { \ | 338 | do { \ |
337 | if ((unsigned long)(res) >= (unsigned long)(-(128 + 1))) { \ | 339 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
338 | errno = -(res); \ | 340 | errno = -(res); \ |
339 | res = -1; \ | 341 | res = -1; \ |
340 | } \ | 342 | } \ |
diff --git a/include/asm-i386/unwind.h b/include/asm-i386/unwind.h index 4c1a0b968569..5031d693b89d 100644 --- a/include/asm-i386/unwind.h +++ b/include/asm-i386/unwind.h | |||
@@ -18,6 +18,7 @@ struct unwind_frame_info | |||
18 | { | 18 | { |
19 | struct pt_regs regs; | 19 | struct pt_regs regs; |
20 | struct task_struct *task; | 20 | struct task_struct *task; |
21 | unsigned call_frame:1; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | #define UNW_PC(frame) (frame)->regs.eip | 24 | #define UNW_PC(frame) (frame)->regs.eip |
@@ -28,6 +29,8 @@ struct unwind_frame_info | |||
28 | #define FRAME_LINK_OFFSET 0 | 29 | #define FRAME_LINK_OFFSET 0 |
29 | #define STACK_BOTTOM(tsk) STACK_LIMIT((tsk)->thread.esp0) | 30 | #define STACK_BOTTOM(tsk) STACK_LIMIT((tsk)->thread.esp0) |
30 | #define STACK_TOP(tsk) ((tsk)->thread.esp0) | 31 | #define STACK_TOP(tsk) ((tsk)->thread.esp0) |
32 | #else | ||
33 | #define UNW_FP(frame) ((void)(frame), 0) | ||
31 | #endif | 34 | #endif |
32 | #define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) | 35 | #define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1)) |
33 | 36 | ||
@@ -42,6 +45,10 @@ struct unwind_frame_info | |||
42 | PTREGS_INFO(edi), \ | 45 | PTREGS_INFO(edi), \ |
43 | PTREGS_INFO(eip) | 46 | PTREGS_INFO(eip) |
44 | 47 | ||
48 | #define UNW_DEFAULT_RA(raItem, dataAlign) \ | ||
49 | ((raItem).where == Memory && \ | ||
50 | !((raItem).value * (dataAlign) + 4)) | ||
51 | |||
45 | static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, | 52 | static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, |
46 | /*const*/ struct pt_regs *regs) | 53 | /*const*/ struct pt_regs *regs) |
47 | { | 54 | { |
@@ -88,6 +95,7 @@ static inline int arch_unw_user_mode(const struct unwind_frame_info *info) | |||
88 | 95 | ||
89 | #define UNW_PC(frame) ((void)(frame), 0) | 96 | #define UNW_PC(frame) ((void)(frame), 0) |
90 | #define UNW_SP(frame) ((void)(frame), 0) | 97 | #define UNW_SP(frame) ((void)(frame), 0) |
98 | #define UNW_FP(frame) ((void)(frame), 0) | ||
91 | 99 | ||
92 | static inline int arch_unw_user_mode(const void *info) | 100 | static inline int arch_unw_user_mode(const void *info) |
93 | { | 101 | { |
diff --git a/include/asm-ia64/esi.h b/include/asm-ia64/esi.h new file mode 100644 index 000000000000..84aac0e0b583 --- /dev/null +++ b/include/asm-ia64/esi.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * ESI service calls. | ||
3 | * | ||
4 | * Copyright (c) Copyright 2005-2006 Hewlett-Packard Development Company, L.P. | ||
5 | * Alex Williamson <alex.williamson@hp.com> | ||
6 | */ | ||
7 | #ifndef esi_h | ||
8 | #define esi_h | ||
9 | |||
10 | #include <linux/efi.h> | ||
11 | |||
12 | #define ESI_QUERY 0x00000001 | ||
13 | #define ESI_OPEN_HANDLE 0x02000000 | ||
14 | #define ESI_CLOSE_HANDLE 0x02000001 | ||
15 | |||
16 | enum esi_proc_type { | ||
17 | ESI_PROC_SERIALIZED, /* calls need to be serialized */ | ||
18 | ESI_PROC_MP_SAFE, /* MP-safe, but not reentrant */ | ||
19 | ESI_PROC_REENTRANT /* MP-safe and reentrant */ | ||
20 | }; | ||
21 | |||
22 | extern int ia64_esi_init (void); | ||
23 | extern struct ia64_sal_retval esi_call_phys (void *, u64 *); | ||
24 | extern int ia64_esi_call(efi_guid_t, struct ia64_sal_retval *, | ||
25 | enum esi_proc_type, | ||
26 | u64, u64, u64, u64, u64, u64, u64, u64); | ||
27 | extern int ia64_esi_call_phys(efi_guid_t, struct ia64_sal_retval *, u64, u64, | ||
28 | u64, u64, u64, u64, u64, u64); | ||
29 | |||
30 | #endif /* esi_h */ | ||
diff --git a/include/asm-ia64/futex.h b/include/asm-ia64/futex.h index 6a332a9f099c..07d77f3a8cbe 100644 --- a/include/asm-ia64/futex.h +++ b/include/asm-ia64/futex.h | |||
@@ -1,6 +1,124 @@ | |||
1 | #ifndef _ASM_FUTEX_H | 1 | #ifndef _ASM_FUTEX_H |
2 | #define _ASM_FUTEX_H | 2 | #define _ASM_FUTEX_H |
3 | 3 | ||
4 | #include <asm-generic/futex.h> | 4 | #include <linux/futex.h> |
5 | #include <asm/errno.h> | ||
6 | #include <asm/system.h> | ||
7 | #include <asm/uaccess.h> | ||
5 | 8 | ||
6 | #endif | 9 | #define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \ |
10 | do { \ | ||
11 | register unsigned long r8 __asm ("r8") = 0; \ | ||
12 | __asm__ __volatile__( \ | ||
13 | " mf;; \n" \ | ||
14 | "[1:] " insn ";; \n" \ | ||
15 | " .xdata4 \"__ex_table\", 1b-., 2f-. \n" \ | ||
16 | "[2:]" \ | ||
17 | : "+r" (r8), "=r" (oldval) \ | ||
18 | : "r" (uaddr), "r" (oparg) \ | ||
19 | : "memory"); \ | ||
20 | ret = r8; \ | ||
21 | } while (0) | ||
22 | |||
23 | #define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \ | ||
24 | do { \ | ||
25 | register unsigned long r8 __asm ("r8") = 0; \ | ||
26 | int val, newval; \ | ||
27 | do { \ | ||
28 | __asm__ __volatile__( \ | ||
29 | " mf;; \n" \ | ||
30 | "[1:] ld4 %3=[%4];; \n" \ | ||
31 | " mov %2=%3 \n" \ | ||
32 | insn ";; \n" \ | ||
33 | " mov ar.ccv=%2;; \n" \ | ||
34 | "[2:] cmpxchg4.acq %1=[%4],%3,ar.ccv;; \n" \ | ||
35 | " .xdata4 \"__ex_table\", 1b-., 3f-.\n" \ | ||
36 | " .xdata4 \"__ex_table\", 2b-., 3f-.\n" \ | ||
37 | "[3:]" \ | ||
38 | : "+r" (r8), "=r" (val), "=&r" (oldval), \ | ||
39 | "=&r" (newval) \ | ||
40 | : "r" (uaddr), "r" (oparg) \ | ||
41 | : "memory"); \ | ||
42 | if (unlikely (r8)) \ | ||
43 | break; \ | ||
44 | } while (unlikely (val != oldval)); \ | ||
45 | ret = r8; \ | ||
46 | } while (0) | ||
47 | |||
48 | static inline int | ||
49 | futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | ||
50 | { | ||
51 | int op = (encoded_op >> 28) & 7; | ||
52 | int cmp = (encoded_op >> 24) & 15; | ||
53 | int oparg = (encoded_op << 8) >> 20; | ||
54 | int cmparg = (encoded_op << 20) >> 20; | ||
55 | int oldval = 0, ret; | ||
56 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
57 | oparg = 1 << oparg; | ||
58 | |||
59 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | ||
60 | return -EFAULT; | ||
61 | |||
62 | inc_preempt_count(); | ||
63 | |||
64 | switch (op) { | ||
65 | case FUTEX_OP_SET: | ||
66 | __futex_atomic_op1("xchg4 %1=[%2],%3", ret, oldval, uaddr, | ||
67 | oparg); | ||
68 | break; | ||
69 | case FUTEX_OP_ADD: | ||
70 | __futex_atomic_op2("add %3=%3,%5", ret, oldval, uaddr, oparg); | ||
71 | break; | ||
72 | case FUTEX_OP_OR: | ||
73 | __futex_atomic_op2("or %3=%3,%5", ret, oldval, uaddr, oparg); | ||
74 | break; | ||
75 | case FUTEX_OP_ANDN: | ||
76 | __futex_atomic_op2("and %3=%3,%5", ret, oldval, uaddr, | ||
77 | ~oparg); | ||
78 | break; | ||
79 | case FUTEX_OP_XOR: | ||
80 | __futex_atomic_op2("xor %3=%3,%5", ret, oldval, uaddr, oparg); | ||
81 | break; | ||
82 | default: | ||
83 | ret = -ENOSYS; | ||
84 | } | ||
85 | |||
86 | dec_preempt_count(); | ||
87 | |||
88 | if (!ret) { | ||
89 | switch (cmp) { | ||
90 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
91 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
92 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
93 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
94 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
95 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
96 | default: ret = -ENOSYS; | ||
97 | } | ||
98 | } | ||
99 | return ret; | ||
100 | } | ||
101 | |||
102 | static inline int | ||
103 | futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval) | ||
104 | { | ||
105 | if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int))) | ||
106 | return -EFAULT; | ||
107 | |||
108 | { | ||
109 | register unsigned long r8 __asm ("r8"); | ||
110 | __asm__ __volatile__( | ||
111 | " mf;; \n" | ||
112 | " mov ar.ccv=%3;; \n" | ||
113 | "[1:] cmpxchg4.acq %0=[%1],%2,ar.ccv \n" | ||
114 | " .xdata4 \"__ex_table\", 1b-., 2f-. \n" | ||
115 | "[2:]" | ||
116 | : "=r" (r8) | ||
117 | : "r" (uaddr), "r" (newval), | ||
118 | "rO" ((long) (unsigned) oldval) | ||
119 | : "memory"); | ||
120 | return r8; | ||
121 | } | ||
122 | } | ||
123 | |||
124 | #endif /* _ASM_FUTEX_H */ | ||
diff --git a/include/asm-ia64/kprobes.h b/include/asm-ia64/kprobes.h index 938904910115..1b45b71c79b9 100644 --- a/include/asm-ia64/kprobes.h +++ b/include/asm-ia64/kprobes.h | |||
@@ -29,7 +29,8 @@ | |||
29 | #include <linux/percpu.h> | 29 | #include <linux/percpu.h> |
30 | #include <asm/break.h> | 30 | #include <asm/break.h> |
31 | 31 | ||
32 | #define MAX_INSN_SIZE 16 | 32 | #define __ARCH_WANT_KPROBES_INSN_SLOT |
33 | #define MAX_INSN_SIZE 1 | ||
33 | #define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6) | 34 | #define BREAK_INST (long)(__IA64_BREAK_KPROBE << 6) |
34 | 35 | ||
35 | typedef union cmp_inst { | 36 | typedef union cmp_inst { |
@@ -94,7 +95,7 @@ struct kprobe_ctlblk { | |||
94 | #define IP_RELATIVE_PREDICT_OPCODE (7) | 95 | #define IP_RELATIVE_PREDICT_OPCODE (7) |
95 | #define LONG_BRANCH_OPCODE (0xC) | 96 | #define LONG_BRANCH_OPCODE (0xC) |
96 | #define LONG_CALL_OPCODE (0xD) | 97 | #define LONG_CALL_OPCODE (0xD) |
97 | #define arch_remove_kprobe(p) do {} while (0) | 98 | #define flush_insn_slot(p) do { } while (0) |
98 | 99 | ||
99 | typedef struct kprobe_opcode { | 100 | typedef struct kprobe_opcode { |
100 | bundle_t bundle; | 101 | bundle_t bundle; |
@@ -108,7 +109,7 @@ struct fnptr { | |||
108 | /* Architecture specific copy of original instruction*/ | 109 | /* Architecture specific copy of original instruction*/ |
109 | struct arch_specific_insn { | 110 | struct arch_specific_insn { |
110 | /* copy of the instruction to be emulated */ | 111 | /* copy of the instruction to be emulated */ |
111 | kprobe_opcode_t insn; | 112 | kprobe_opcode_t *insn; |
112 | #define INST_FLAG_FIX_RELATIVE_IP_ADDR 1 | 113 | #define INST_FLAG_FIX_RELATIVE_IP_ADDR 1 |
113 | #define INST_FLAG_FIX_BRANCH_REG 2 | 114 | #define INST_FLAG_FIX_BRANCH_REG 2 |
114 | #define INST_FLAG_BREAK_INST 4 | 115 | #define INST_FLAG_BREAK_INST 4 |
@@ -125,6 +126,6 @@ static inline void jprobe_return(void) | |||
125 | } | 126 | } |
126 | extern void invalidate_stacked_regs(void); | 127 | extern void invalidate_stacked_regs(void); |
127 | extern void flush_register_stack(void); | 128 | extern void flush_register_stack(void); |
128 | extern void flush_insn_slot(struct kprobe *p); | 129 | extern void arch_remove_kprobe(struct kprobe *p); |
129 | 130 | ||
130 | #endif /* _ASM_KPROBES_H */ | 131 | #endif /* _ASM_KPROBES_H */ |
diff --git a/include/asm-ia64/mca_asm.h b/include/asm-ia64/mca_asm.h index 27c9203d8ce3..76203f9a8718 100644 --- a/include/asm-ia64/mca_asm.h +++ b/include/asm-ia64/mca_asm.h | |||
@@ -197,9 +197,9 @@ | |||
197 | movl temp2 = start_addr; \ | 197 | movl temp2 = start_addr; \ |
198 | ;; \ | 198 | ;; \ |
199 | mov cr.iip = temp2; \ | 199 | mov cr.iip = temp2; \ |
200 | movl gp = __gp \ | ||
200 | ;; \ | 201 | ;; \ |
201 | DATA_PA_TO_VA(sp, temp1); \ | 202 | DATA_PA_TO_VA(sp, temp1); \ |
202 | DATA_PA_TO_VA(gp, temp2); \ | ||
203 | srlz.i; \ | 203 | srlz.i; \ |
204 | ;; \ | 204 | ;; \ |
205 | nop 1; \ | 205 | nop 1; \ |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index 6a33a07b3f1d..c3b1f862e6e7 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
@@ -55,6 +55,7 @@ extern void efi_memmap_init(unsigned long *, unsigned long *); | |||
55 | extern unsigned long vmalloc_end; | 55 | extern unsigned long vmalloc_end; |
56 | extern struct page *vmem_map; | 56 | extern struct page *vmem_map; |
57 | extern int find_largest_hole (u64 start, u64 end, void *arg); | 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
58 | extern int register_active_ranges (u64 start, u64 end, void *arg); | ||
58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); | 59 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
59 | extern int vmemmap_find_next_valid_pfn(int, int); | 60 | extern int vmemmap_find_next_valid_pfn(int, int); |
60 | #else | 61 | #else |
diff --git a/include/asm-ia64/module.h b/include/asm-ia64/module.h index 85c82bd819f2..d2da61e4c49b 100644 --- a/include/asm-ia64/module.h +++ b/include/asm-ia64/module.h | |||
@@ -28,7 +28,8 @@ struct mod_arch_specific { | |||
28 | #define Elf_Ehdr Elf64_Ehdr | 28 | #define Elf_Ehdr Elf64_Ehdr |
29 | 29 | ||
30 | #define MODULE_PROC_FAMILY "ia64" | 30 | #define MODULE_PROC_FAMILY "ia64" |
31 | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY | 31 | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY \ |
32 | "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) | ||
32 | 33 | ||
33 | #define ARCH_SHF_SMALL SHF_IA_64_SHORT | 34 | #define ARCH_SHF_SMALL SHF_IA_64_SHORT |
34 | 35 | ||
diff --git a/include/asm-ia64/numa.h b/include/asm-ia64/numa.h index e0a1d173e42d..7d5e2ccc37a0 100644 --- a/include/asm-ia64/numa.h +++ b/include/asm-ia64/numa.h | |||
@@ -69,6 +69,8 @@ extern void unmap_cpu_from_node(int cpu, int nid); | |||
69 | 69 | ||
70 | 70 | ||
71 | #else /* !CONFIG_NUMA */ | 71 | #else /* !CONFIG_NUMA */ |
72 | #define map_cpu_to_node(cpu, nid) do{}while(0) | ||
73 | #define unmap_cpu_from_node(cpu, nid) do{}while(0) | ||
72 | 74 | ||
73 | #define paddr_to_nid(addr) 0 | 75 | #define paddr_to_nid(addr) 0 |
74 | 76 | ||
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 20a8d618c845..2c8fd92d0ece 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
@@ -78,6 +78,7 @@ | |||
78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ | 78 | #define PAL_VM_TR_READ 261 /* read contents of translation register */ |
79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ | 79 | #define PAL_GET_PSTATE 262 /* get the current P-state */ |
80 | #define PAL_SET_PSTATE 263 /* set the P-state */ | 80 | #define PAL_SET_PSTATE 263 /* set the P-state */ |
81 | #define PAL_BRAND_INFO 274 /* Processor branding information */ | ||
81 | 82 | ||
82 | #ifndef __ASSEMBLY__ | 83 | #ifndef __ASSEMBLY__ |
83 | 84 | ||
@@ -963,7 +964,8 @@ static inline s64 | |||
963 | ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr) | 964 | ia64_pal_cache_read (pal_cache_line_id_u_t line_id, u64 physical_addr) |
964 | { | 965 | { |
965 | struct ia64_pal_retval iprv; | 966 | struct ia64_pal_retval iprv; |
966 | PAL_CALL(iprv, PAL_CACHE_READ, line_id.pclid_data, physical_addr, 0); | 967 | PAL_CALL_PHYS_STK(iprv, PAL_CACHE_READ, line_id.pclid_data, |
968 | physical_addr, 0); | ||
967 | return iprv.status; | 969 | return iprv.status; |
968 | } | 970 | } |
969 | 971 | ||
@@ -985,7 +987,8 @@ static inline s64 | |||
985 | ia64_pal_cache_write (pal_cache_line_id_u_t line_id, u64 physical_addr, u64 data) | 987 | ia64_pal_cache_write (pal_cache_line_id_u_t line_id, u64 physical_addr, u64 data) |
986 | { | 988 | { |
987 | struct ia64_pal_retval iprv; | 989 | struct ia64_pal_retval iprv; |
988 | PAL_CALL(iprv, PAL_CACHE_WRITE, line_id.pclid_data, physical_addr, data); | 990 | PAL_CALL_PHYS_STK(iprv, PAL_CACHE_WRITE, line_id.pclid_data, |
991 | physical_addr, data); | ||
989 | return iprv.status; | 992 | return iprv.status; |
990 | } | 993 | } |
991 | 994 | ||
@@ -1133,6 +1136,15 @@ ia64_pal_set_pstate (u64 pstate_index) | |||
1133 | return iprv.status; | 1136 | return iprv.status; |
1134 | } | 1137 | } |
1135 | 1138 | ||
1139 | /* Processor branding information*/ | ||
1140 | static inline s64 | ||
1141 | ia64_pal_get_brand_info (char *brand_info) | ||
1142 | { | ||
1143 | struct ia64_pal_retval iprv; | ||
1144 | PAL_CALL_STK(iprv, PAL_BRAND_INFO, 0, (u64)brand_info, 0); | ||
1145 | return iprv.status; | ||
1146 | } | ||
1147 | |||
1136 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are | 1148 | /* Cause the processor to enter LIGHT HALT state, where prefetching and execution are |
1137 | * suspended, but cache and TLB coherency is maintained. | 1149 | * suspended, but cache and TLB coherency is maintained. |
1138 | */ | 1150 | */ |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 265f4824db0e..5830d36fd8e6 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -20,12 +20,6 @@ | |||
20 | #include <asm/ustack.h> | 20 | #include <asm/ustack.h> |
21 | 21 | ||
22 | #define IA64_NUM_DBG_REGS 8 | 22 | #define IA64_NUM_DBG_REGS 8 |
23 | /* | ||
24 | * Limits for PMC and PMD are set to less than maximum architected values | ||
25 | * but should be sufficient for a while | ||
26 | */ | ||
27 | #define IA64_NUM_PMC_REGS 64 | ||
28 | #define IA64_NUM_PMD_REGS 64 | ||
29 | 23 | ||
30 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) | 24 | #define DEFAULT_MAP_BASE __IA64_UL_CONST(0x2000000000000000) |
31 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) | 25 | #define DEFAULT_TASK_SIZE __IA64_UL_CONST(0xa000000000000000) |
@@ -163,6 +157,7 @@ struct cpuinfo_ia64 { | |||
163 | __u8 family; | 157 | __u8 family; |
164 | __u8 archrev; | 158 | __u8 archrev; |
165 | char vendor[16]; | 159 | char vendor[16]; |
160 | char *model_name; | ||
166 | 161 | ||
167 | #ifdef CONFIG_NUMA | 162 | #ifdef CONFIG_NUMA |
168 | struct ia64_node_data *node_data; | 163 | struct ia64_node_data *node_data; |
@@ -262,13 +257,9 @@ struct thread_struct { | |||
262 | # define INIT_THREAD_IA32 | 257 | # define INIT_THREAD_IA32 |
263 | #endif /* CONFIG_IA32_SUPPORT */ | 258 | #endif /* CONFIG_IA32_SUPPORT */ |
264 | #ifdef CONFIG_PERFMON | 259 | #ifdef CONFIG_PERFMON |
265 | __u64 pmcs[IA64_NUM_PMC_REGS]; | ||
266 | __u64 pmds[IA64_NUM_PMD_REGS]; | ||
267 | void *pfm_context; /* pointer to detailed PMU context */ | 260 | void *pfm_context; /* pointer to detailed PMU context */ |
268 | unsigned long pfm_needs_checking; /* when >0, pending perfmon work on kernel exit */ | 261 | unsigned long pfm_needs_checking; /* when >0, pending perfmon work on kernel exit */ |
269 | # define INIT_THREAD_PM .pmcs = {0UL, }, \ | 262 | # define INIT_THREAD_PM .pfm_context = NULL, \ |
270 | .pmds = {0UL, }, \ | ||
271 | .pfm_context = NULL, \ | ||
272 | .pfm_needs_checking = 0UL, | 263 | .pfm_needs_checking = 0UL, |
273 | #else | 264 | #else |
274 | # define INIT_THREAD_PM | 265 | # define INIT_THREAD_PM |
diff --git a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h index 74bde1c2bb1a..60fd4ae014f6 100644 --- a/include/asm-ia64/smp.h +++ b/include/asm-ia64/smp.h | |||
@@ -126,6 +126,7 @@ extern void smp_send_reschedule (int cpu); | |||
126 | extern void lock_ipi_calllock(void); | 126 | extern void lock_ipi_calllock(void); |
127 | extern void unlock_ipi_calllock(void); | 127 | extern void unlock_ipi_calllock(void); |
128 | extern void identify_siblings (struct cpuinfo_ia64 *); | 128 | extern void identify_siblings (struct cpuinfo_ia64 *); |
129 | extern int is_multithreading_enabled(void); | ||
129 | 130 | ||
130 | #else | 131 | #else |
131 | 132 | ||
diff --git a/include/asm-ia64/unistd.h b/include/asm-ia64/unistd.h index f581662c5ab8..bb0eb727dcd0 100644 --- a/include/asm-ia64/unistd.h +++ b/include/asm-ia64/unistd.h | |||
@@ -286,7 +286,8 @@ | |||
286 | /* 1294, 1295 reserved for pselect/ppoll */ | 286 | /* 1294, 1295 reserved for pselect/ppoll */ |
287 | #define __NR_unshare 1296 | 287 | #define __NR_unshare 1296 |
288 | #define __NR_splice 1297 | 288 | #define __NR_splice 1297 |
289 | /* 1298, 1299 reserved for set_robust_list/get_robust_list */ | 289 | #define __NR_set_robust_list 1298 |
290 | #define __NR_get_robust_list 1299 | ||
290 | #define __NR_sync_file_range 1300 | 291 | #define __NR_sync_file_range 1300 |
291 | #define __NR_tee 1301 | 292 | #define __NR_tee 1301 |
292 | #define __NR_vmsplice 1302 | 293 | #define __NR_vmsplice 1302 |
diff --git a/include/asm-m32r/spinlock.h b/include/asm-m32r/spinlock.h index f94c1a673569..f9f90727a4a1 100644 --- a/include/asm-m32r/spinlock.h +++ b/include/asm-m32r/spinlock.h | |||
@@ -298,7 +298,14 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
298 | ); | 298 | ); |
299 | } | 299 | } |
300 | 300 | ||
301 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | 301 | static inline int __raw_read_trylock(raw_rwlock_t *lock) |
302 | { | ||
303 | atomic_t *count = (atomic_t*)lock; | ||
304 | if (atomic_dec_return(count) >= 0) | ||
305 | return 1; | ||
306 | atomic_inc(count); | ||
307 | return 0; | ||
308 | } | ||
302 | 309 | ||
303 | static inline int __raw_write_trylock(raw_rwlock_t *lock) | 310 | static inline int __raw_write_trylock(raw_rwlock_t *lock) |
304 | { | 311 | { |
diff --git a/include/asm-m32r/system.h b/include/asm-m32r/system.h index 9e618afec6ed..4ce0619f6989 100644 --- a/include/asm-m32r/system.h +++ b/include/asm-m32r/system.h | |||
@@ -328,15 +328,15 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) | |||
328 | #define smp_rmb() rmb() | 328 | #define smp_rmb() rmb() |
329 | #define smp_wmb() wmb() | 329 | #define smp_wmb() wmb() |
330 | #define smp_read_barrier_depends() read_barrier_depends() | 330 | #define smp_read_barrier_depends() read_barrier_depends() |
331 | #define set_mb(var, value) do { (void) xchg(&var, value); } while (0) | ||
331 | #else | 332 | #else |
332 | #define smp_mb() barrier() | 333 | #define smp_mb() barrier() |
333 | #define smp_rmb() barrier() | 334 | #define smp_rmb() barrier() |
334 | #define smp_wmb() barrier() | 335 | #define smp_wmb() barrier() |
335 | #define smp_read_barrier_depends() do { } while (0) | 336 | #define smp_read_barrier_depends() do { } while (0) |
337 | #define set_mb(var, value) do { var = value; barrier(); } while (0) | ||
336 | #endif | 338 | #endif |
337 | 339 | ||
338 | #define set_mb(var, value) do { xchg(&var, value); } while (0) | ||
339 | |||
340 | #define arch_align_stack(x) (x) | 340 | #define arch_align_stack(x) (x) |
341 | 341 | ||
342 | #endif /* _ASM_M32R_SYSTEM_H */ | 342 | #endif /* _ASM_M32R_SYSTEM_H */ |
diff --git a/include/asm-m32r/unistd.h b/include/asm-m32r/unistd.h index 89f376e6229f..5c6a9ac6cf1a 100644 --- a/include/asm-m32r/unistd.h +++ b/include/asm-m32r/unistd.h | |||
@@ -296,8 +296,9 @@ | |||
296 | #ifdef __KERNEL__ | 296 | #ifdef __KERNEL__ |
297 | 297 | ||
298 | #define NR_syscalls 285 | 298 | #define NR_syscalls 285 |
299 | #include <linux/err.h> | ||
299 | 300 | ||
300 | /* user-visible error numbers are in the range -1 - -124: see | 301 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
301 | * <asm-m32r/errno.h> | 302 | * <asm-m32r/errno.h> |
302 | */ | 303 | */ |
303 | 304 | ||
@@ -305,7 +306,7 @@ | |||
305 | 306 | ||
306 | #define __syscall_return(type, res) \ | 307 | #define __syscall_return(type, res) \ |
307 | do { \ | 308 | do { \ |
308 | if ((unsigned long)(res) >= (unsigned long)(-(124 + 1))) { \ | 309 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
309 | /* Avoid using "res" which is declared to be in register r0; \ | 310 | /* Avoid using "res" which is declared to be in register r0; \ |
310 | errno might expand to a function call and clobber it. */ \ | 311 | errno might expand to a function call and clobber it. */ \ |
311 | int __err = -(res); \ | 312 | int __err = -(res); \ |
diff --git a/include/asm-m68k/unistd.h b/include/asm-m68k/unistd.h index 7c0b6296b45c..751632b904db 100644 --- a/include/asm-m68k/unistd.h +++ b/include/asm-m68k/unistd.h | |||
@@ -288,13 +288,14 @@ | |||
288 | #ifdef __KERNEL__ | 288 | #ifdef __KERNEL__ |
289 | 289 | ||
290 | #define NR_syscalls 282 | 290 | #define NR_syscalls 282 |
291 | #include <linux/err.h> | ||
291 | 292 | ||
292 | /* user-visible error numbers are in the range -1 - -124: see | 293 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
293 | <asm-m68k/errno.h> */ | 294 | <asm-m68k/errno.h> */ |
294 | 295 | ||
295 | #define __syscall_return(type, res) \ | 296 | #define __syscall_return(type, res) \ |
296 | do { \ | 297 | do { \ |
297 | if ((unsigned long)(res) >= (unsigned long)(-125)) { \ | 298 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
298 | /* avoid using res which is declared to be in register d0; \ | 299 | /* avoid using res which is declared to be in register d0; \ |
299 | errno might expand to a function call and clobber it. */ \ | 300 | errno might expand to a function call and clobber it. */ \ |
300 | int __err = -(res); \ | 301 | int __err = -(res); \ |
diff --git a/include/asm-m68knommu/unistd.h b/include/asm-m68knommu/unistd.h index 1b2abdf281e1..21fdc37c5c2c 100644 --- a/include/asm-m68knommu/unistd.h +++ b/include/asm-m68knommu/unistd.h | |||
@@ -289,13 +289,14 @@ | |||
289 | #ifdef __KERNEL__ | 289 | #ifdef __KERNEL__ |
290 | 290 | ||
291 | #define NR_syscalls 282 | 291 | #define NR_syscalls 282 |
292 | #include <linux/err.h> | ||
292 | 293 | ||
293 | /* user-visible error numbers are in the range -1 - -122: see | 294 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: see |
294 | <asm-m68k/errno.h> */ | 295 | <asm-m68k/errno.h> */ |
295 | 296 | ||
296 | #define __syscall_return(type, res) \ | 297 | #define __syscall_return(type, res) \ |
297 | do { \ | 298 | do { \ |
298 | if ((unsigned long)(res) >= (unsigned long)(-125)) { \ | 299 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
299 | /* avoid using res which is declared to be in register d0; \ | 300 | /* avoid using res which is declared to be in register d0; \ |
300 | errno might expand to a function call and clobber it. */ \ | 301 | errno might expand to a function call and clobber it. */ \ |
301 | int __err = -(res); \ | 302 | int __err = -(res); \ |
diff --git a/include/asm-mips/Kbuild b/include/asm-mips/Kbuild index c68e1680da01..7897f05e3165 100644 --- a/include/asm-mips/Kbuild +++ b/include/asm-mips/Kbuild | |||
@@ -1 +1,3 @@ | |||
1 | include include/asm-generic/Kbuild.asm | 1 | include include/asm-generic/Kbuild.asm |
2 | |||
3 | header-y += cachectl.h sgidefs.h sysmips.h | ||
diff --git a/include/asm-mips/bootinfo.h b/include/asm-mips/bootinfo.h index 3b745e76f429..78c35ec46362 100644 --- a/include/asm-mips/bootinfo.h +++ b/include/asm-mips/bootinfo.h | |||
@@ -112,8 +112,7 @@ | |||
112 | * Valid machtype for group GALILEO | 112 | * Valid machtype for group GALILEO |
113 | */ | 113 | */ |
114 | #define MACH_GROUP_GALILEO 11 /* Galileo Eval Boards */ | 114 | #define MACH_GROUP_GALILEO 11 /* Galileo Eval Boards */ |
115 | #define MACH_EV96100 0 /* EV96100 */ | 115 | #define MACH_EV64120A 0 /* EV64120A */ |
116 | #define MACH_EV64120A 1 /* EV64120A */ | ||
117 | 116 | ||
118 | /* | 117 | /* |
119 | * Valid machtype for group MOMENCO | 118 | * Valid machtype for group MOMENCO |
diff --git a/include/asm-mips/cacheflush.h b/include/asm-mips/cacheflush.h index 47bc8f6c20d2..36416fdfcf68 100644 --- a/include/asm-mips/cacheflush.h +++ b/include/asm-mips/cacheflush.h | |||
@@ -21,7 +21,6 @@ | |||
21 | * - flush_cache_range(vma, start, end) flushes a range of pages | 21 | * - flush_cache_range(vma, start, end) flushes a range of pages |
22 | * - flush_icache_range(start, end) flush a range of instructions | 22 | * - flush_icache_range(start, end) flush a range of instructions |
23 | * - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache | 23 | * - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache |
24 | * - flush_icache_page(vma, pg) flushes(invalidates) a page for icache | ||
25 | * | 24 | * |
26 | * MIPS specific flush operations: | 25 | * MIPS specific flush operations: |
27 | * | 26 | * |
@@ -39,7 +38,7 @@ extern void __flush_dcache_page(struct page *page); | |||
39 | 38 | ||
40 | static inline void flush_dcache_page(struct page *page) | 39 | static inline void flush_dcache_page(struct page *page) |
41 | { | 40 | { |
42 | if (cpu_has_dc_aliases) | 41 | if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) |
43 | __flush_dcache_page(page); | 42 | __flush_dcache_page(page); |
44 | 43 | ||
45 | } | 44 | } |
@@ -47,8 +46,13 @@ static inline void flush_dcache_page(struct page *page) | |||
47 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 46 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
48 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 47 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
49 | 48 | ||
50 | extern void (*flush_icache_page)(struct vm_area_struct *vma, | 49 | extern void (*__flush_icache_page)(struct vm_area_struct *vma, |
51 | struct page *page); | 50 | struct page *page); |
51 | static inline void flush_icache_page(struct vm_area_struct *vma, | ||
52 | struct page *page) | ||
53 | { | ||
54 | } | ||
55 | |||
52 | extern void (*flush_icache_range)(unsigned long start, unsigned long end); | 56 | extern void (*flush_icache_range)(unsigned long start, unsigned long end); |
53 | #define flush_cache_vmap(start, end) flush_cache_all() | 57 | #define flush_cache_vmap(start, end) flush_cache_all() |
54 | #define flush_cache_vunmap(start, end) flush_cache_all() | 58 | #define flush_cache_vunmap(start, end) flush_cache_all() |
@@ -60,7 +64,7 @@ static inline void copy_to_user_page(struct vm_area_struct *vma, | |||
60 | if (cpu_has_dc_aliases) | 64 | if (cpu_has_dc_aliases) |
61 | flush_cache_page(vma, vaddr, page_to_pfn(page)); | 65 | flush_cache_page(vma, vaddr, page_to_pfn(page)); |
62 | memcpy(dst, src, len); | 66 | memcpy(dst, src, len); |
63 | flush_icache_page(vma, page); | 67 | __flush_icache_page(vma, page); |
64 | } | 68 | } |
65 | 69 | ||
66 | static inline void copy_from_user_page(struct vm_area_struct *vma, | 70 | static inline void copy_from_user_page(struct vm_area_struct *vma, |
diff --git a/include/asm-mips/fcntl.h b/include/asm-mips/fcntl.h index 787220e6c1fc..00a50ec1c19f 100644 --- a/include/asm-mips/fcntl.h +++ b/include/asm-mips/fcntl.h | |||
@@ -25,8 +25,6 @@ | |||
25 | 25 | ||
26 | #define F_SETOWN 24 /* for sockets. */ | 26 | #define F_SETOWN 24 /* for sockets. */ |
27 | #define F_GETOWN 23 /* for sockets. */ | 27 | #define F_GETOWN 23 /* for sockets. */ |
28 | #define F_SETSIG 10 /* for sockets. */ | ||
29 | #define F_GETSIG 11 /* for sockets. */ | ||
30 | 28 | ||
31 | #ifndef __mips64 | 29 | #ifndef __mips64 |
32 | #define F_GETLK64 33 /* using 'struct flock64' */ | 30 | #define F_GETLK64 33 /* using 'struct flock64' */ |
diff --git a/include/asm-mips/galileo-boards/gt96100.h b/include/asm-mips/galileo-boards/gt96100.h deleted file mode 100644 index aabd1b629c19..000000000000 --- a/include/asm-mips/galileo-boards/gt96100.h +++ /dev/null | |||
@@ -1,427 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2000 MontaVista Software Inc. | ||
3 | * Author: MontaVista Software, Inc. | ||
4 | * stevel@mvista.com or source@mvista.com | ||
5 | * | ||
6 | * This program is free software; you can distribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License (Version 2) as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
13 | * for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along | ||
16 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
18 | * | ||
19 | * Register offsets of the MIPS GT96100 Advanced Communication Controller. | ||
20 | */ | ||
21 | #ifndef _GT96100_H | ||
22 | #define _GT96100_H | ||
23 | |||
24 | /* | ||
25 | * Galileo GT96100 internal register base. | ||
26 | */ | ||
27 | #define MIPS_GT96100_BASE (KSEG1ADDR(0x14000000)) | ||
28 | |||
29 | #define GT96100_WRITE(ofs, data) \ | ||
30 | *(volatile u32 *)(MIPS_GT96100_BASE+ofs) = cpu_to_le32(data) | ||
31 | #define GT96100_READ(ofs) \ | ||
32 | le32_to_cpu(*(volatile u32 *)(MIPS_GT96100_BASE+ofs)) | ||
33 | |||
34 | #define GT96100_ETH_IO_SIZE 0x4000 | ||
35 | |||
36 | /************************************************************************ | ||
37 | * Register offset addresses follow | ||
38 | ************************************************************************/ | ||
39 | |||
40 | /* CPU Interface Control Registers */ | ||
41 | #define GT96100_CPU_INTERF_CONFIG 0x000000 | ||
42 | |||
43 | /* Ethernet Ports */ | ||
44 | #define GT96100_ETH_PHY_ADDR_REG 0x080800 | ||
45 | #define GT96100_ETH_SMI_REG 0x080810 | ||
46 | /* | ||
47 | These are offsets to port 0 registers. Add GT96100_ETH_IO_SIZE to | ||
48 | get offsets to port 1 registers. | ||
49 | */ | ||
50 | #define GT96100_ETH_PORT_CONFIG 0x084800 | ||
51 | #define GT96100_ETH_PORT_CONFIG_EXT 0x084808 | ||
52 | #define GT96100_ETH_PORT_COMM 0x084810 | ||
53 | #define GT96100_ETH_PORT_STATUS 0x084818 | ||
54 | #define GT96100_ETH_SER_PARAM 0x084820 | ||
55 | #define GT96100_ETH_HASH_TBL_PTR 0x084828 | ||
56 | #define GT96100_ETH_FLOW_CNTRL_SRC_ADDR_L 0x084830 | ||
57 | #define GT96100_ETH_FLOW_CNTRL_SRC_ADDR_H 0x084838 | ||
58 | #define GT96100_ETH_SDMA_CONFIG 0x084840 | ||
59 | #define GT96100_ETH_SDMA_COMM 0x084848 | ||
60 | #define GT96100_ETH_INT_CAUSE 0x084850 | ||
61 | #define GT96100_ETH_INT_MASK 0x084858 | ||
62 | #define GT96100_ETH_1ST_RX_DESC_PTR0 0x084880 | ||
63 | #define GT96100_ETH_1ST_RX_DESC_PTR1 0x084884 | ||
64 | #define GT96100_ETH_1ST_RX_DESC_PTR2 0x084888 | ||
65 | #define GT96100_ETH_1ST_RX_DESC_PTR3 0x08488C | ||
66 | #define GT96100_ETH_CURR_RX_DESC_PTR0 0x0848A0 | ||
67 | #define GT96100_ETH_CURR_RX_DESC_PTR1 0x0848A4 | ||
68 | #define GT96100_ETH_CURR_RX_DESC_PTR2 0x0848A8 | ||
69 | #define GT96100_ETH_CURR_RX_DESC_PTR3 0x0848AC | ||
70 | #define GT96100_ETH_CURR_TX_DESC_PTR0 0x0848E0 | ||
71 | #define GT96100_ETH_CURR_TX_DESC_PTR1 0x0848E4 | ||
72 | #define GT96100_ETH_MIB_COUNT_BASE 0x085800 | ||
73 | |||
74 | /* SDMAs */ | ||
75 | #define GT96100_SDMA_GROUP_CONFIG 0x101AF0 | ||
76 | /* SDMA Group 0 */ | ||
77 | #define GT96100_SDMA_G0_CHAN0_CONFIG 0x000900 | ||
78 | #define GT96100_SDMA_G0_CHAN0_COMM 0x000908 | ||
79 | #define GT96100_SDMA_G0_CHAN0_RX_DESC_BASE 0x008900 | ||
80 | #define GT96100_SDMA_G0_CHAN0_CURR_RX_DESC_PTR 0x008910 | ||
81 | #define GT96100_SDMA_G0_CHAN0_TX_DESC_BASE 0x00C900 | ||
82 | #define GT96100_SDMA_G0_CHAN0_CURR_TX_DESC_PTR 0x00C910 | ||
83 | #define GT96100_SDMA_G0_CHAN0_1ST_TX_DESC_PTR 0x00C914 | ||
84 | #define GT96100_SDMA_G0_CHAN1_CONFIG 0x010900 | ||
85 | #define GT96100_SDMA_G0_CHAN1_COMM 0x010908 | ||
86 | #define GT96100_SDMA_G0_CHAN1_RX_DESC_BASE 0x018900 | ||
87 | #define GT96100_SDMA_G0_CHAN1_CURR_RX_DESC_PTR 0x018910 | ||
88 | #define GT96100_SDMA_G0_CHAN1_TX_DESC_BASE 0x01C900 | ||
89 | #define GT96100_SDMA_G0_CHAN1_CURR_TX_DESC_PTR 0x01C910 | ||
90 | #define GT96100_SDMA_G0_CHAN1_1ST_TX_DESC_PTR 0x01C914 | ||
91 | #define GT96100_SDMA_G0_CHAN2_CONFIG 0x020900 | ||
92 | #define GT96100_SDMA_G0_CHAN2_COMM 0x020908 | ||
93 | #define GT96100_SDMA_G0_CHAN2_RX_DESC_BASE 0x028900 | ||
94 | #define GT96100_SDMA_G0_CHAN2_CURR_RX_DESC_PTR 0x028910 | ||
95 | #define GT96100_SDMA_G0_CHAN2_TX_DESC_BASE 0x02C900 | ||
96 | #define GT96100_SDMA_G0_CHAN2_CURR_TX_DESC_PTR 0x02C910 | ||
97 | #define GT96100_SDMA_G0_CHAN2_1ST_TX_DESC_PTR 0x02C914 | ||
98 | #define GT96100_SDMA_G0_CHAN3_CONFIG 0x030900 | ||
99 | #define GT96100_SDMA_G0_CHAN3_COMM 0x030908 | ||
100 | #define GT96100_SDMA_G0_CHAN3_RX_DESC_BASE 0x038900 | ||
101 | #define GT96100_SDMA_G0_CHAN3_CURR_RX_DESC_PTR 0x038910 | ||
102 | #define GT96100_SDMA_G0_CHAN3_TX_DESC_BASE 0x03C900 | ||
103 | #define GT96100_SDMA_G0_CHAN3_CURR_TX_DESC_PTR 0x03C910 | ||
104 | #define GT96100_SDMA_G0_CHAN3_1ST_TX_DESC_PTR 0x03C914 | ||
105 | #define GT96100_SDMA_G0_CHAN4_CONFIG 0x040900 | ||
106 | #define GT96100_SDMA_G0_CHAN4_COMM 0x040908 | ||
107 | #define GT96100_SDMA_G0_CHAN4_RX_DESC_BASE 0x048900 | ||
108 | #define GT96100_SDMA_G0_CHAN4_CURR_RX_DESC_PTR 0x048910 | ||
109 | #define GT96100_SDMA_G0_CHAN4_TX_DESC_BASE 0x04C900 | ||
110 | #define GT96100_SDMA_G0_CHAN4_CURR_TX_DESC_PTR 0x04C910 | ||
111 | #define GT96100_SDMA_G0_CHAN4_1ST_TX_DESC_PTR 0x04C914 | ||
112 | #define GT96100_SDMA_G0_CHAN5_CONFIG 0x050900 | ||
113 | #define GT96100_SDMA_G0_CHAN5_COMM 0x050908 | ||
114 | #define GT96100_SDMA_G0_CHAN5_RX_DESC_BASE 0x058900 | ||
115 | #define GT96100_SDMA_G0_CHAN5_CURR_RX_DESC_PTR 0x058910 | ||
116 | #define GT96100_SDMA_G0_CHAN5_TX_DESC_BASE 0x05C900 | ||
117 | #define GT96100_SDMA_G0_CHAN5_CURR_TX_DESC_PTR 0x05C910 | ||
118 | #define GT96100_SDMA_G0_CHAN5_1ST_TX_DESC_PTR 0x05C914 | ||
119 | #define GT96100_SDMA_G0_CHAN6_CONFIG 0x060900 | ||
120 | #define GT96100_SDMA_G0_CHAN6_COMM 0x060908 | ||
121 | #define GT96100_SDMA_G0_CHAN6_RX_DESC_BASE 0x068900 | ||
122 | #define GT96100_SDMA_G0_CHAN6_CURR_RX_DESC_PTR 0x068910 | ||
123 | #define GT96100_SDMA_G0_CHAN6_TX_DESC_BASE 0x06C900 | ||
124 | #define GT96100_SDMA_G0_CHAN6_CURR_TX_DESC_PTR 0x06C910 | ||
125 | #define GT96100_SDMA_G0_CHAN6_1ST_TX_DESC_PTR 0x06C914 | ||
126 | #define GT96100_SDMA_G0_CHAN7_CONFIG 0x070900 | ||
127 | #define GT96100_SDMA_G0_CHAN7_COMM 0x070908 | ||
128 | #define GT96100_SDMA_G0_CHAN7_RX_DESC_BASE 0x078900 | ||
129 | #define GT96100_SDMA_G0_CHAN7_CURR_RX_DESC_PTR 0x078910 | ||
130 | #define GT96100_SDMA_G0_CHAN7_TX_DESC_BASE 0x07C900 | ||
131 | #define GT96100_SDMA_G0_CHAN7_CURR_TX_DESC_PTR 0x07C910 | ||
132 | #define GT96100_SDMA_G0_CHAN7_1ST_TX_DESC_PTR 0x07C914 | ||
133 | /* SDMA Group 1 */ | ||
134 | #define GT96100_SDMA_G1_CHAN0_CONFIG 0x100900 | ||
135 | #define GT96100_SDMA_G1_CHAN0_COMM 0x100908 | ||
136 | #define GT96100_SDMA_G1_CHAN0_RX_DESC_BASE 0x108900 | ||
137 | #define GT96100_SDMA_G1_CHAN0_CURR_RX_DESC_PTR 0x108910 | ||
138 | #define GT96100_SDMA_G1_CHAN0_TX_DESC_BASE 0x10C900 | ||
139 | #define GT96100_SDMA_G1_CHAN0_CURR_TX_DESC_PTR 0x10C910 | ||
140 | #define GT96100_SDMA_G1_CHAN0_1ST_TX_DESC_PTR 0x10C914 | ||
141 | #define GT96100_SDMA_G1_CHAN1_CONFIG 0x110900 | ||
142 | #define GT96100_SDMA_G1_CHAN1_COMM 0x110908 | ||
143 | #define GT96100_SDMA_G1_CHAN1_RX_DESC_BASE 0x118900 | ||
144 | #define GT96100_SDMA_G1_CHAN1_CURR_RX_DESC_PTR 0x118910 | ||
145 | #define GT96100_SDMA_G1_CHAN1_TX_DESC_BASE 0x11C900 | ||
146 | #define GT96100_SDMA_G1_CHAN1_CURR_TX_DESC_PTR 0x11C910 | ||
147 | #define GT96100_SDMA_G1_CHAN1_1ST_TX_DESC_PTR 0x11C914 | ||
148 | #define GT96100_SDMA_G1_CHAN2_CONFIG 0x120900 | ||
149 | #define GT96100_SDMA_G1_CHAN2_COMM 0x120908 | ||
150 | #define GT96100_SDMA_G1_CHAN2_RX_DESC_BASE 0x128900 | ||
151 | #define GT96100_SDMA_G1_CHAN2_CURR_RX_DESC_PTR 0x128910 | ||
152 | #define GT96100_SDMA_G1_CHAN2_TX_DESC_BASE 0x12C900 | ||
153 | #define GT96100_SDMA_G1_CHAN2_CURR_TX_DESC_PTR 0x12C910 | ||
154 | #define GT96100_SDMA_G1_CHAN2_1ST_TX_DESC_PTR 0x12C914 | ||
155 | #define GT96100_SDMA_G1_CHAN3_CONFIG 0x130900 | ||
156 | #define GT96100_SDMA_G1_CHAN3_COMM 0x130908 | ||
157 | #define GT96100_SDMA_G1_CHAN3_RX_DESC_BASE 0x138900 | ||
158 | #define GT96100_SDMA_G1_CHAN3_CURR_RX_DESC_PTR 0x138910 | ||
159 | #define GT96100_SDMA_G1_CHAN3_TX_DESC_BASE 0x13C900 | ||
160 | #define GT96100_SDMA_G1_CHAN3_CURR_TX_DESC_PTR 0x13C910 | ||
161 | #define GT96100_SDMA_G1_CHAN3_1ST_TX_DESC_PTR 0x13C914 | ||
162 | #define GT96100_SDMA_G1_CHAN4_CONFIG 0x140900 | ||
163 | #define GT96100_SDMA_G1_CHAN4_COMM 0x140908 | ||
164 | #define GT96100_SDMA_G1_CHAN4_RX_DESC_BASE 0x148900 | ||
165 | #define GT96100_SDMA_G1_CHAN4_CURR_RX_DESC_PTR 0x148910 | ||
166 | #define GT96100_SDMA_G1_CHAN4_TX_DESC_BASE 0x14C900 | ||
167 | #define GT96100_SDMA_G1_CHAN4_CURR_TX_DESC_PTR 0x14C910 | ||
168 | #define GT96100_SDMA_G1_CHAN4_1ST_TX_DESC_PTR 0x14C914 | ||
169 | #define GT96100_SDMA_G1_CHAN5_CONFIG 0x150900 | ||
170 | #define GT96100_SDMA_G1_CHAN5_COMM 0x150908 | ||
171 | #define GT96100_SDMA_G1_CHAN5_RX_DESC_BASE 0x158900 | ||
172 | #define GT96100_SDMA_G1_CHAN5_CURR_RX_DESC_PTR 0x158910 | ||
173 | #define GT96100_SDMA_G1_CHAN5_TX_DESC_BASE 0x15C900 | ||
174 | #define GT96100_SDMA_G1_CHAN5_CURR_TX_DESC_PTR 0x15C910 | ||
175 | #define GT96100_SDMA_G1_CHAN5_1ST_TX_DESC_PTR 0x15C914 | ||
176 | #define GT96100_SDMA_G1_CHAN6_CONFIG 0x160900 | ||
177 | #define GT96100_SDMA_G1_CHAN6_COMM 0x160908 | ||
178 | #define GT96100_SDMA_G1_CHAN6_RX_DESC_BASE 0x168900 | ||
179 | #define GT96100_SDMA_G1_CHAN6_CURR_RX_DESC_PTR 0x168910 | ||
180 | #define GT96100_SDMA_G1_CHAN6_TX_DESC_BASE 0x16C900 | ||
181 | #define GT96100_SDMA_G1_CHAN6_CURR_TX_DESC_PTR 0x16C910 | ||
182 | #define GT96100_SDMA_G1_CHAN6_1ST_TX_DESC_PTR 0x16C914 | ||
183 | #define GT96100_SDMA_G1_CHAN7_CONFIG 0x170900 | ||
184 | #define GT96100_SDMA_G1_CHAN7_COMM 0x170908 | ||
185 | #define GT96100_SDMA_G1_CHAN7_RX_DESC_BASE 0x178900 | ||
186 | #define GT96100_SDMA_G1_CHAN7_CURR_RX_DESC_PTR 0x178910 | ||
187 | #define GT96100_SDMA_G1_CHAN7_TX_DESC_BASE 0x17C900 | ||
188 | #define GT96100_SDMA_G1_CHAN7_CURR_TX_DESC_PTR 0x17C910 | ||
189 | #define GT96100_SDMA_G1_CHAN7_1ST_TX_DESC_PTR 0x17C914 | ||
190 | /* MPSCs */ | ||
191 | #define GT96100_MPSC0_MAIN_CONFIG_LOW 0x000A00 | ||
192 | #define GT96100_MPSC0_MAIN_CONFIG_HIGH 0x000A04 | ||
193 | #define GT96100_MPSC0_PROTOCOL_CONFIG 0x000A08 | ||
194 | #define GT96100_MPSC_CHAN0_REG1 0x000A0C | ||
195 | #define GT96100_MPSC_CHAN0_REG2 0x000A10 | ||
196 | #define GT96100_MPSC_CHAN0_REG3 0x000A14 | ||
197 | #define GT96100_MPSC_CHAN0_REG4 0x000A18 | ||
198 | #define GT96100_MPSC_CHAN0_REG5 0x000A1C | ||
199 | #define GT96100_MPSC_CHAN0_REG6 0x000A20 | ||
200 | #define GT96100_MPSC_CHAN0_REG7 0x000A24 | ||
201 | #define GT96100_MPSC_CHAN0_REG8 0x000A28 | ||
202 | #define GT96100_MPSC_CHAN0_REG9 0x000A2C | ||
203 | #define GT96100_MPSC_CHAN0_REG10 0x000A30 | ||
204 | #define GT96100_MPSC_CHAN0_REG11 0x000A34 | ||
205 | #define GT96100_MPSC1_MAIN_CONFIG_LOW 0x008A00 | ||
206 | #define GT96100_MPSC1_MAIN_CONFIG_HIGH 0x008A04 | ||
207 | #define GT96100_MPSC1_PROTOCOL_CONFIG 0x008A08 | ||
208 | #define GT96100_MPSC_CHAN1_REG1 0x008A0C | ||
209 | #define GT96100_MPSC_CHAN1_REG2 0x008A10 | ||
210 | #define GT96100_MPSC_CHAN1_REG3 0x008A14 | ||
211 | #define GT96100_MPSC_CHAN1_REG4 0x008A18 | ||
212 | #define GT96100_MPSC_CHAN1_REG5 0x008A1C | ||
213 | #define GT96100_MPSC_CHAN1_REG6 0x008A20 | ||
214 | #define GT96100_MPSC_CHAN1_REG7 0x008A24 | ||
215 | #define GT96100_MPSC_CHAN1_REG8 0x008A28 | ||
216 | #define GT96100_MPSC_CHAN1_REG9 0x008A2C | ||
217 | #define GT96100_MPSC_CHAN1_REG10 0x008A30 | ||
218 | #define GT96100_MPSC_CHAN1_REG11 0x008A34 | ||
219 | #define GT96100_MPSC2_MAIN_CONFIG_LOW 0x010A00 | ||
220 | #define GT96100_MPSC2_MAIN_CONFIG_HIGH 0x010A04 | ||
221 | #define GT96100_MPSC2_PROTOCOL_CONFIG 0x010A08 | ||
222 | #define GT96100_MPSC_CHAN2_REG1 0x010A0C | ||
223 | #define GT96100_MPSC_CHAN2_REG2 0x010A10 | ||
224 | #define GT96100_MPSC_CHAN2_REG3 0x010A14 | ||
225 | #define GT96100_MPSC_CHAN2_REG4 0x010A18 | ||
226 | #define GT96100_MPSC_CHAN2_REG5 0x010A1C | ||
227 | #define GT96100_MPSC_CHAN2_REG6 0x010A20 | ||
228 | #define GT96100_MPSC_CHAN2_REG7 0x010A24 | ||
229 | #define GT96100_MPSC_CHAN2_REG8 0x010A28 | ||
230 | #define GT96100_MPSC_CHAN2_REG9 0x010A2C | ||
231 | #define GT96100_MPSC_CHAN2_REG10 0x010A30 | ||
232 | #define GT96100_MPSC_CHAN2_REG11 0x010A34 | ||
233 | #define GT96100_MPSC3_MAIN_CONFIG_LOW 0x018A00 | ||
234 | #define GT96100_MPSC3_MAIN_CONFIG_HIGH 0x018A04 | ||
235 | #define GT96100_MPSC3_PROTOCOL_CONFIG 0x018A08 | ||
236 | #define GT96100_MPSC_CHAN3_REG1 0x018A0C | ||
237 | #define GT96100_MPSC_CHAN3_REG2 0x018A10 | ||
238 | #define GT96100_MPSC_CHAN3_REG3 0x018A14 | ||
239 | #define GT96100_MPSC_CHAN3_REG4 0x018A18 | ||
240 | #define GT96100_MPSC_CHAN3_REG5 0x018A1C | ||
241 | #define GT96100_MPSC_CHAN3_REG6 0x018A20 | ||
242 | #define GT96100_MPSC_CHAN3_REG7 0x018A24 | ||
243 | #define GT96100_MPSC_CHAN3_REG8 0x018A28 | ||
244 | #define GT96100_MPSC_CHAN3_REG9 0x018A2C | ||
245 | #define GT96100_MPSC_CHAN3_REG10 0x018A30 | ||
246 | #define GT96100_MPSC_CHAN3_REG11 0x018A34 | ||
247 | #define GT96100_MPSC4_MAIN_CONFIG_LOW 0x020A00 | ||
248 | #define GT96100_MPSC4_MAIN_CONFIG_HIGH 0x020A04 | ||
249 | #define GT96100_MPSC4_PROTOCOL_CONFIG 0x020A08 | ||
250 | #define GT96100_MPSC_CHAN4_REG1 0x020A0C | ||
251 | #define GT96100_MPSC_CHAN4_REG2 0x020A10 | ||
252 | #define GT96100_MPSC_CHAN4_REG3 0x020A14 | ||
253 | #define GT96100_MPSC_CHAN4_REG4 0x020A18 | ||
254 | #define GT96100_MPSC_CHAN4_REG5 0x020A1C | ||
255 | #define GT96100_MPSC_CHAN4_REG6 0x020A20 | ||
256 | #define GT96100_MPSC_CHAN4_REG7 0x020A24 | ||
257 | #define GT96100_MPSC_CHAN4_REG8 0x020A28 | ||
258 | #define GT96100_MPSC_CHAN4_REG9 0x020A2C | ||
259 | #define GT96100_MPSC_CHAN4_REG10 0x020A30 | ||
260 | #define GT96100_MPSC_CHAN4_REG11 0x020A34 | ||
261 | #define GT96100_MPSC5_MAIN_CONFIG_LOW 0x028A00 | ||
262 | #define GT96100_MPSC5_MAIN_CONFIG_HIGH 0x028A04 | ||
263 | #define GT96100_MPSC5_PROTOCOL_CONFIG 0x028A08 | ||
264 | #define GT96100_MPSC_CHAN5_REG1 0x028A0C | ||
265 | #define GT96100_MPSC_CHAN5_REG2 0x028A10 | ||
266 | #define GT96100_MPSC_CHAN5_REG3 0x028A14 | ||
267 | #define GT96100_MPSC_CHAN5_REG4 0x028A18 | ||
268 | #define GT96100_MPSC_CHAN5_REG5 0x028A1C | ||
269 | #define GT96100_MPSC_CHAN5_REG6 0x028A20 | ||
270 | #define GT96100_MPSC_CHAN5_REG7 0x028A24 | ||
271 | #define GT96100_MPSC_CHAN5_REG8 0x028A28 | ||
272 | #define GT96100_MPSC_CHAN5_REG9 0x028A2C | ||
273 | #define GT96100_MPSC_CHAN5_REG10 0x028A30 | ||
274 | #define GT96100_MPSC_CHAN5_REG11 0x028A34 | ||
275 | #define GT96100_MPSC6_MAIN_CONFIG_LOW 0x030A00 | ||
276 | #define GT96100_MPSC6_MAIN_CONFIG_HIGH 0x030A04 | ||
277 | #define GT96100_MPSC6_PROTOCOL_CONFIG 0x030A08 | ||
278 | #define GT96100_MPSC_CHAN6_REG1 0x030A0C | ||
279 | #define GT96100_MPSC_CHAN6_REG2 0x030A10 | ||
280 | #define GT96100_MPSC_CHAN6_REG3 0x030A14 | ||
281 | #define GT96100_MPSC_CHAN6_REG4 0x030A18 | ||
282 | #define GT96100_MPSC_CHAN6_REG5 0x030A1C | ||
283 | #define GT96100_MPSC_CHAN6_REG6 0x030A20 | ||
284 | #define GT96100_MPSC_CHAN6_REG7 0x030A24 | ||
285 | #define GT96100_MPSC_CHAN6_REG8 0x030A28 | ||
286 | #define GT96100_MPSC_CHAN6_REG9 0x030A2C | ||
287 | #define GT96100_MPSC_CHAN6_REG10 0x030A30 | ||
288 | #define GT96100_MPSC_CHAN6_REG11 0x030A34 | ||
289 | #define GT96100_MPSC7_MAIN_CONFIG_LOW 0x038A00 | ||
290 | #define GT96100_MPSC7_MAIN_CONFIG_HIGH 0x038A04 | ||
291 | #define GT96100_MPSC7_PROTOCOL_CONFIG 0x038A08 | ||
292 | #define GT96100_MPSC_CHAN7_REG1 0x038A0C | ||
293 | #define GT96100_MPSC_CHAN7_REG2 0x038A10 | ||
294 | #define GT96100_MPSC_CHAN7_REG3 0x038A14 | ||
295 | #define GT96100_MPSC_CHAN7_REG4 0x038A18 | ||
296 | #define GT96100_MPSC_CHAN7_REG5 0x038A1C | ||
297 | #define GT96100_MPSC_CHAN7_REG6 0x038A20 | ||
298 | #define GT96100_MPSC_CHAN7_REG7 0x038A24 | ||
299 | #define GT96100_MPSC_CHAN7_REG8 0x038A28 | ||
300 | #define GT96100_MPSC_CHAN7_REG9 0x038A2C | ||
301 | #define GT96100_MPSC_CHAN7_REG10 0x038A30 | ||
302 | #define GT96100_MPSC_CHAN7_REG11 0x038A34 | ||
303 | /* FlexTDMs */ | ||
304 | /* TDPR0 - Transmit Dual Port RAM. block size 0xff */ | ||
305 | #define GT96100_FXTDM0_TDPR0_BLK0_BASE 0x000B00 | ||
306 | #define GT96100_FXTDM0_TDPR0_BLK1_BASE 0x001B00 | ||
307 | #define GT96100_FXTDM0_TDPR0_BLK2_BASE 0x002B00 | ||
308 | #define GT96100_FXTDM0_TDPR0_BLK3_BASE 0x003B00 | ||
309 | /* RDPR0 - Receive Dual Port RAM. block size 0xff */ | ||
310 | #define GT96100_FXTDM0_RDPR0_BLK0_BASE 0x004B00 | ||
311 | #define GT96100_FXTDM0_RDPR0_BLK1_BASE 0x005B00 | ||
312 | #define GT96100_FXTDM0_RDPR0_BLK2_BASE 0x006B00 | ||
313 | #define GT96100_FXTDM0_RDPR0_BLK3_BASE 0x007B00 | ||
314 | #define GT96100_FXTDM0_TX_READ_PTR 0x008B00 | ||
315 | #define GT96100_FXTDM0_RX_READ_PTR 0x008B04 | ||
316 | #define GT96100_FXTDM0_CONFIG 0x008B08 | ||
317 | #define GT96100_FXTDM0_AUX_CHANA_TX 0x008B0C | ||
318 | #define GT96100_FXTDM0_AUX_CHANA_RX 0x008B10 | ||
319 | #define GT96100_FXTDM0_AUX_CHANB_TX 0x008B14 | ||
320 | #define GT96100_FXTDM0_AUX_CHANB_RX 0x008B18 | ||
321 | #define GT96100_FXTDM1_TDPR1_BLK0_BASE 0x010B00 | ||
322 | #define GT96100_FXTDM1_TDPR1_BLK1_BASE 0x011B00 | ||
323 | #define GT96100_FXTDM1_TDPR1_BLK2_BASE 0x012B00 | ||
324 | #define GT96100_FXTDM1_TDPR1_BLK3_BASE 0x013B00 | ||
325 | #define GT96100_FXTDM1_RDPR1_BLK0_BASE 0x014B00 | ||
326 | #define GT96100_FXTDM1_RDPR1_BLK1_BASE 0x015B00 | ||
327 | #define GT96100_FXTDM1_RDPR1_BLK2_BASE 0x016B00 | ||
328 | #define GT96100_FXTDM1_RDPR1_BLK3_BASE 0x017B00 | ||
329 | #define GT96100_FXTDM1_TX_READ_PTR 0x018B00 | ||
330 | #define GT96100_FXTDM1_RX_READ_PTR 0x018B04 | ||
331 | #define GT96100_FXTDM1_CONFIG 0x018B08 | ||
332 | #define GT96100_FXTDM1_AUX_CHANA_TX 0x018B0C | ||
333 | #define GT96100_FXTDM1_AUX_CHANA_RX 0x018B10 | ||
334 | #define GT96100_FLTDM1_AUX_CHANB_TX 0x018B14 | ||
335 | #define GT96100_FLTDM1_AUX_CHANB_RX 0x018B18 | ||
336 | #define GT96100_FLTDM2_TDPR2_BLK0_BASE 0x020B00 | ||
337 | #define GT96100_FLTDM2_TDPR2_BLK1_BASE 0x021B00 | ||
338 | #define GT96100_FLTDM2_TDPR2_BLK2_BASE 0x022B00 | ||
339 | #define GT96100_FLTDM2_TDPR2_BLK3_BASE 0x023B00 | ||
340 | #define GT96100_FLTDM2_RDPR2_BLK0_BASE 0x024B00 | ||
341 | #define GT96100_FLTDM2_RDPR2_BLK1_BASE 0x025B00 | ||
342 | #define GT96100_FLTDM2_RDPR2_BLK2_BASE 0x026B00 | ||
343 | #define GT96100_FLTDM2_RDPR2_BLK3_BASE 0x027B00 | ||
344 | #define GT96100_FLTDM2_TX_READ_PTR 0x028B00 | ||
345 | #define GT96100_FLTDM2_RX_READ_PTR 0x028B04 | ||
346 | #define GT96100_FLTDM2_CONFIG 0x028B08 | ||
347 | #define GT96100_FLTDM2_AUX_CHANA_TX 0x028B0C | ||
348 | #define GT96100_FLTDM2_AUX_CHANA_RX 0x028B10 | ||
349 | #define GT96100_FLTDM2_AUX_CHANB_TX 0x028B14 | ||
350 | #define GT96100_FLTDM2_AUX_CHANB_RX 0x028B18 | ||
351 | #define GT96100_FLTDM3_TDPR3_BLK0_BASE 0x030B00 | ||
352 | #define GT96100_FLTDM3_TDPR3_BLK1_BASE 0x031B00 | ||
353 | #define GT96100_FLTDM3_TDPR3_BLK2_BASE 0x032B00 | ||
354 | #define GT96100_FLTDM3_TDPR3_BLK3_BASE 0x033B00 | ||
355 | #define GT96100_FXTDM3_RDPR3_BLK0_BASE 0x034B00 | ||
356 | #define GT96100_FXTDM3_RDPR3_BLK1_BASE 0x035B00 | ||
357 | #define GT96100_FXTDM3_RDPR3_BLK2_BASE 0x036B00 | ||
358 | #define GT96100_FXTDM3_RDPR3_BLK3_BASE 0x037B00 | ||
359 | #define GT96100_FXTDM3_TX_READ_PTR 0x038B00 | ||
360 | #define GT96100_FXTDM3_RX_READ_PTR 0x038B04 | ||
361 | #define GT96100_FXTDM3_CONFIG 0x038B08 | ||
362 | #define GT96100_FXTDM3_AUX_CHANA_TX 0x038B0C | ||
363 | #define GT96100_FXTDM3_AUX_CHANA_RX 0x038B10 | ||
364 | #define GT96100_FXTDM3_AUX_CHANB_TX 0x038B14 | ||
365 | #define GT96100_FXTDM3_AUX_CHANB_RX 0x038B18 | ||
366 | /* Baud Rate Generators */ | ||
367 | #define GT96100_BRG0_CONFIG 0x102A00 | ||
368 | #define GT96100_BRG0_BAUD_TUNE 0x102A04 | ||
369 | #define GT96100_BRG1_CONFIG 0x102A08 | ||
370 | #define GT96100_BRG1_BAUD_TUNE 0x102A0C | ||
371 | #define GT96100_BRG2_CONFIG 0x102A10 | ||
372 | #define GT96100_BRG2_BAUD_TUNE 0x102A14 | ||
373 | #define GT96100_BRG3_CONFIG 0x102A18 | ||
374 | #define GT96100_BRG3_BAUD_TUNE 0x102A1C | ||
375 | #define GT96100_BRG4_CONFIG 0x102A20 | ||
376 | #define GT96100_BRG4_BAUD_TUNE 0x102A24 | ||
377 | #define GT96100_BRG5_CONFIG 0x102A28 | ||
378 | #define GT96100_BRG5_BAUD_TUNE 0x102A2C | ||
379 | #define GT96100_BRG6_CONFIG 0x102A30 | ||
380 | #define GT96100_BRG6_BAUD_TUNE 0x102A34 | ||
381 | #define GT96100_BRG7_CONFIG 0x102A38 | ||
382 | #define GT96100_BRG7_BAUD_TUNE 0x102A3C | ||
383 | /* Routing Registers */ | ||
384 | #define GT96100_ROUTE_MAIN 0x101A00 | ||
385 | #define GT96100_ROUTE_RX_CLOCK 0x101A10 | ||
386 | #define GT96100_ROUTE_TX_CLOCK 0x101A20 | ||
387 | /* General Purpose Ports */ | ||
388 | #define GT96100_GPP_CONFIG0 0x100A00 | ||
389 | #define GT96100_GPP_CONFIG1 0x100A04 | ||
390 | #define GT96100_GPP_CONFIG2 0x100A08 | ||
391 | #define GT96100_GPP_CONFIG3 0x100A0C | ||
392 | #define GT96100_GPP_IO0 0x100A20 | ||
393 | #define GT96100_GPP_IO1 0x100A24 | ||
394 | #define GT96100_GPP_IO2 0x100A28 | ||
395 | #define GT96100_GPP_IO3 0x100A2C | ||
396 | #define GT96100_GPP_DATA0 0x100A40 | ||
397 | #define GT96100_GPP_DATA1 0x100A44 | ||
398 | #define GT96100_GPP_DATA2 0x100A48 | ||
399 | #define GT96100_GPP_DATA3 0x100A4C | ||
400 | #define GT96100_GPP_LEVEL0 0x100A60 | ||
401 | #define GT96100_GPP_LEVEL1 0x100A64 | ||
402 | #define GT96100_GPP_LEVEL2 0x100A68 | ||
403 | #define GT96100_GPP_LEVEL3 0x100A6C | ||
404 | /* Watchdog */ | ||
405 | #define GT96100_WD_CONFIG 0x101A80 | ||
406 | #define GT96100_WD_VALUE 0x101A84 | ||
407 | /* Communication Unit Arbiter */ | ||
408 | #define GT96100_COMM_UNIT_ARBTR_CONFIG 0x101AC0 | ||
409 | /* PCI Arbiters */ | ||
410 | #define GT96100_PCI0_ARBTR_CONFIG 0x101AE0 | ||
411 | #define GT96100_PCI1_ARBTR_CONFIG 0x101AE4 | ||
412 | /* CIU Arbiter */ | ||
413 | #define GT96100_CIU_ARBITER_CONFIG 0x101AC0 | ||
414 | /* Interrupt Controller */ | ||
415 | #define GT96100_MAIN_CAUSE 0x000C18 | ||
416 | #define GT96100_INT0_MAIN_MASK 0x000C1C | ||
417 | #define GT96100_INT1_MAIN_MASK 0x000C24 | ||
418 | #define GT96100_HIGH_CAUSE 0x000C98 | ||
419 | #define GT96100_INT0_HIGH_MASK 0x000C9C | ||
420 | #define GT96100_INT1_HIGH_MASK 0x000CA4 | ||
421 | #define GT96100_INT0_SELECT 0x000C70 | ||
422 | #define GT96100_INT1_SELECT 0x000C74 | ||
423 | #define GT96100_SERIAL_CAUSE 0x103A00 | ||
424 | #define GT96100_SERINT0_MASK 0x103A80 | ||
425 | #define GT96100_SERINT1_MASK 0x103A88 | ||
426 | |||
427 | #endif /* _GT96100_H */ | ||
diff --git a/include/asm-mips/hazards.h b/include/asm-mips/hazards.h index 25f5e8a4177d..0fe02945feba 100644 --- a/include/asm-mips/hazards.h +++ b/include/asm-mips/hazards.h | |||
@@ -12,102 +12,95 @@ | |||
12 | 12 | ||
13 | 13 | ||
14 | #ifdef __ASSEMBLY__ | 14 | #ifdef __ASSEMBLY__ |
15 | 15 | #define ASMMACRO(name, code...) .macro name; code; .endm | |
16 | .macro _ssnop | ||
17 | sll $0, $0, 1 | ||
18 | .endm | ||
19 | |||
20 | .macro _ehb | ||
21 | sll $0, $0, 3 | ||
22 | .endm | ||
23 | |||
24 | /* | ||
25 | * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent | ||
26 | * use of the JTLB for instructions should not occur for 4 cpu cycles and use | ||
27 | * for data translations should not occur for 3 cpu cycles. | ||
28 | */ | ||
29 | #ifdef CONFIG_CPU_RM9000 | ||
30 | |||
31 | .macro mtc0_tlbw_hazard | ||
32 | .set push | ||
33 | .set mips32 | ||
34 | _ssnop; _ssnop; _ssnop; _ssnop | ||
35 | .set pop | ||
36 | .endm | ||
37 | |||
38 | .macro tlbw_eret_hazard | ||
39 | .set push | ||
40 | .set mips32 | ||
41 | _ssnop; _ssnop; _ssnop; _ssnop | ||
42 | .set pop | ||
43 | .endm | ||
44 | |||
45 | #else | 16 | #else |
46 | 17 | ||
47 | /* | 18 | #define ASMMACRO(name, code...) \ |
48 | * The taken branch will result in a two cycle penalty for the two killed | 19 | __asm__(".macro " #name "; " #code "; .endm"); \ |
49 | * instructions on R4000 / R4400. Other processors only have a single cycle | 20 | \ |
50 | * hazard so this is nice trick to have an optimal code for a range of | 21 | static inline void name(void) \ |
51 | * processors. | 22 | { \ |
52 | */ | 23 | __asm__ __volatile__ (#name); \ |
53 | .macro mtc0_tlbw_hazard | 24 | } |
54 | b . + 8 | ||
55 | .endm | ||
56 | 25 | ||
57 | .macro tlbw_eret_hazard | ||
58 | .endm | ||
59 | #endif | 26 | #endif |
60 | 27 | ||
28 | ASMMACRO(_ssnop, | ||
29 | sll $0, $0, 1 | ||
30 | ) | ||
31 | |||
32 | ASMMACRO(_ehb, | ||
33 | sll $0, $0, 3 | ||
34 | ) | ||
35 | |||
61 | /* | 36 | /* |
62 | * mtc0->mfc0 hazard | 37 | * TLB hazards |
63 | * The 24K has a 2 cycle mtc0/mfc0 execution hazard. | ||
64 | * It is a MIPS32R2 processor so ehb will clear the hazard. | ||
65 | */ | 38 | */ |
39 | #if defined(CONFIG_CPU_MIPSR2) | ||
66 | 40 | ||
67 | #ifdef CONFIG_CPU_MIPSR2 | ||
68 | /* | 41 | /* |
69 | * Use a macro for ehb unless explicit support for MIPSR2 is enabled | 42 | * MIPSR2 defines ehb for hazard avoidance |
70 | */ | 43 | */ |
71 | 44 | ||
72 | #define irq_enable_hazard \ | 45 | ASMMACRO(mtc0_tlbw_hazard, |
46 | _ehb | ||
47 | ) | ||
48 | ASMMACRO(tlbw_use_hazard, | ||
49 | _ehb | ||
50 | ) | ||
51 | ASMMACRO(tlb_probe_hazard, | ||
52 | _ehb | ||
53 | ) | ||
54 | ASMMACRO(irq_enable_hazard, | ||
55 | ) | ||
56 | ASMMACRO(irq_disable_hazard, | ||
73 | _ehb | 57 | _ehb |
74 | 58 | ) | |
75 | #define irq_disable_hazard \ | 59 | ASMMACRO(back_to_back_c0_hazard, |
76 | _ehb | 60 | _ehb |
77 | 61 | ) | |
78 | #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000) | ||
79 | |||
80 | /* | 62 | /* |
81 | * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer. | 63 | * gcc has a tradition of misscompiling the previous construct using the |
64 | * address of a label as argument to inline assembler. Gas otoh has the | ||
65 | * annoying difference between la and dla which are only usable for 32-bit | ||
66 | * rsp. 64-bit code, so can't be used without conditional compilation. | ||
67 | * The alterantive is switching the assembler to 64-bit code which happens | ||
68 | * to work right even for 32-bit code ... | ||
82 | */ | 69 | */ |
70 | #define instruction_hazard() \ | ||
71 | do { \ | ||
72 | unsigned long tmp; \ | ||
73 | \ | ||
74 | __asm__ __volatile__( \ | ||
75 | " .set mips64r2 \n" \ | ||
76 | " dla %0, 1f \n" \ | ||
77 | " jr.hb %0 \n" \ | ||
78 | " .set mips0 \n" \ | ||
79 | "1: \n" \ | ||
80 | : "=r" (tmp)); \ | ||
81 | } while (0) | ||
83 | 82 | ||
84 | #define irq_enable_hazard | 83 | #elif defined(CONFIG_CPU_R10000) |
85 | |||
86 | #define irq_disable_hazard | ||
87 | |||
88 | #else | ||
89 | 84 | ||
90 | /* | 85 | /* |
91 | * Classic MIPS needs 1 - 3 nops or ssnops | 86 | * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer. |
92 | */ | 87 | */ |
93 | #define irq_enable_hazard | ||
94 | #define irq_disable_hazard \ | ||
95 | _ssnop; _ssnop; _ssnop | ||
96 | 88 | ||
97 | #endif | 89 | ASMMACRO(mtc0_tlbw_hazard, |
98 | 90 | ) | |
99 | #else /* __ASSEMBLY__ */ | 91 | ASMMACRO(tlbw_use_hazard, |
100 | 92 | ) | |
101 | __asm__( | 93 | ASMMACRO(tlb_probe_hazard, |
102 | " .macro _ssnop \n" | 94 | ) |
103 | " sll $0, $0, 1 \n" | 95 | ASMMACRO(irq_enable_hazard, |
104 | " .endm \n" | 96 | ) |
105 | " \n" | 97 | ASMMACRO(irq_disable_hazard, |
106 | " .macro _ehb \n" | 98 | ) |
107 | " sll $0, $0, 3 \n" | 99 | ASMMACRO(back_to_back_c0_hazard, |
108 | " .endm \n"); | 100 | ) |
101 | #define instruction_hazard() do { } while (0) | ||
109 | 102 | ||
110 | #ifdef CONFIG_CPU_RM9000 | 103 | #elif defined(CONFIG_CPU_RM9000) |
111 | 104 | ||
112 | /* | 105 | /* |
113 | * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent | 106 | * RM9000 hazards. When the JTLB is updated by tlbwi or tlbwr, a subsequent |
@@ -115,176 +108,73 @@ __asm__( | |||
115 | * for data translations should not occur for 3 cpu cycles. | 108 | * for data translations should not occur for 3 cpu cycles. |
116 | */ | 109 | */ |
117 | 110 | ||
118 | #define mtc0_tlbw_hazard() \ | 111 | ASMMACRO(mtc0_tlbw_hazard, |
119 | __asm__ __volatile__( \ | 112 | _ssnop; _ssnop; _ssnop; _ssnop |
120 | " .set mips32 \n" \ | 113 | ) |
121 | " _ssnop \n" \ | 114 | ASMMACRO(tlbw_use_hazard, |
122 | " _ssnop \n" \ | 115 | _ssnop; _ssnop; _ssnop; _ssnop |
123 | " _ssnop \n" \ | 116 | ) |
124 | " _ssnop \n" \ | 117 | ASMMACRO(tlb_probe_hazard, |
125 | " .set mips0 \n") | 118 | _ssnop; _ssnop; _ssnop; _ssnop |
126 | 119 | ) | |
127 | #define tlbw_use_hazard() \ | 120 | ASMMACRO(irq_enable_hazard, |
128 | __asm__ __volatile__( \ | 121 | ) |
129 | " .set mips32 \n" \ | 122 | ASMMACRO(irq_disable_hazard, |
130 | " _ssnop \n" \ | 123 | ) |
131 | " _ssnop \n" \ | 124 | ASMMACRO(back_to_back_c0_hazard, |
132 | " _ssnop \n" \ | 125 | ) |
133 | " _ssnop \n" \ | 126 | #define instruction_hazard() do { } while (0) |
134 | " .set mips0 \n") | ||
135 | |||
136 | #else | ||
137 | |||
138 | /* | ||
139 | * Overkill warning ... | ||
140 | */ | ||
141 | #define mtc0_tlbw_hazard() \ | ||
142 | __asm__ __volatile__( \ | ||
143 | " .set noreorder \n" \ | ||
144 | " nop \n" \ | ||
145 | " nop \n" \ | ||
146 | " nop \n" \ | ||
147 | " nop \n" \ | ||
148 | " nop \n" \ | ||
149 | " nop \n" \ | ||
150 | " .set reorder \n") | ||
151 | |||
152 | #define tlbw_use_hazard() \ | ||
153 | __asm__ __volatile__( \ | ||
154 | " .set noreorder \n" \ | ||
155 | " nop \n" \ | ||
156 | " nop \n" \ | ||
157 | " nop \n" \ | ||
158 | " nop \n" \ | ||
159 | " nop \n" \ | ||
160 | " nop \n" \ | ||
161 | " .set reorder \n") | ||
162 | |||
163 | #endif | ||
164 | |||
165 | /* | ||
166 | * Interrupt enable/disable hazards | ||
167 | * Some processors have hazards when modifying | ||
168 | * the status register to change the interrupt state | ||
169 | */ | ||
170 | |||
171 | #ifdef CONFIG_CPU_MIPSR2 | ||
172 | |||
173 | __asm__(" .macro irq_enable_hazard \n" | ||
174 | " _ehb \n" | ||
175 | " .endm \n" | ||
176 | " \n" | ||
177 | " .macro irq_disable_hazard \n" | ||
178 | " _ehb \n" | ||
179 | " .endm \n"); | ||
180 | 127 | ||
181 | #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000) | 128 | #elif defined(CONFIG_CPU_SB1) |
182 | 129 | ||
183 | /* | 130 | /* |
184 | * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer. | 131 | * Mostly like R4000 for historic reasons |
185 | */ | 132 | */ |
186 | 133 | ASMMACRO(mtc0_tlbw_hazard, | |
187 | __asm__( | 134 | ) |
188 | " .macro irq_enable_hazard \n" | 135 | ASMMACRO(tlbw_use_hazard, |
189 | " .endm \n" | 136 | ) |
190 | " \n" | 137 | ASMMACRO(tlb_probe_hazard, |
191 | " .macro irq_disable_hazard \n" | 138 | ) |
192 | " .endm \n"); | 139 | ASMMACRO(irq_enable_hazard, |
140 | ) | ||
141 | ASMMACRO(irq_disable_hazard, | ||
142 | _ssnop; _ssnop; _ssnop | ||
143 | ) | ||
144 | ASMMACRO(back_to_back_c0_hazard, | ||
145 | ) | ||
146 | #define instruction_hazard() do { } while (0) | ||
193 | 147 | ||
194 | #else | 148 | #else |
195 | 149 | ||
196 | /* | 150 | /* |
197 | * Default for classic MIPS processors. Assume worst case hazards but don't | 151 | * Finally the catchall case for all other processors including R4000, R4400, |
198 | * care about the irq_enable_hazard - sooner or later the hardware will | 152 | * R4600, R4700, R5000, RM7000, NEC VR41xx etc. |
199 | * enable it and we don't care when exactly. | ||
200 | */ | ||
201 | |||
202 | __asm__( | ||
203 | " # \n" | ||
204 | " # There is a hazard but we do not care \n" | ||
205 | " # \n" | ||
206 | " .macro\tirq_enable_hazard \n" | ||
207 | " .endm \n" | ||
208 | " \n" | ||
209 | " .macro\tirq_disable_hazard \n" | ||
210 | " _ssnop \n" | ||
211 | " _ssnop \n" | ||
212 | " _ssnop \n" | ||
213 | " .endm \n"); | ||
214 | |||
215 | #endif | ||
216 | |||
217 | #define irq_enable_hazard() \ | ||
218 | __asm__ __volatile__("irq_enable_hazard") | ||
219 | #define irq_disable_hazard() \ | ||
220 | __asm__ __volatile__("irq_disable_hazard") | ||
221 | |||
222 | |||
223 | /* | ||
224 | * Back-to-back hazards - | ||
225 | * | 153 | * |
226 | * What is needed to separate a move to cp0 from a subsequent read from the | 154 | * The taken branch will result in a two cycle penalty for the two killed |
227 | * same cp0 register? | 155 | * instructions on R4000 / R4400. Other processors only have a single cycle |
228 | */ | 156 | * hazard so this is nice trick to have an optimal code for a range of |
229 | #ifdef CONFIG_CPU_MIPSR2 | 157 | * processors. |
230 | |||
231 | __asm__(" .macro back_to_back_c0_hazard \n" | ||
232 | " _ehb \n" | ||
233 | " .endm \n"); | ||
234 | |||
235 | #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000) || \ | ||
236 | defined(CONFIG_CPU_SB1) | ||
237 | |||
238 | __asm__(" .macro back_to_back_c0_hazard \n" | ||
239 | " .endm \n"); | ||
240 | |||
241 | #else | ||
242 | |||
243 | __asm__(" .macro back_to_back_c0_hazard \n" | ||
244 | " .set noreorder \n" | ||
245 | " _ssnop \n" | ||
246 | " _ssnop \n" | ||
247 | " _ssnop \n" | ||
248 | " .set reorder \n" | ||
249 | " .endm"); | ||
250 | |||
251 | #endif | ||
252 | |||
253 | #define back_to_back_c0_hazard() \ | ||
254 | __asm__ __volatile__("back_to_back_c0_hazard") | ||
255 | |||
256 | |||
257 | /* | ||
258 | * Instruction execution hazard | ||
259 | */ | ||
260 | #ifdef CONFIG_CPU_MIPSR2 | ||
261 | /* | ||
262 | * gcc has a tradition of misscompiling the previous construct using the | ||
263 | * address of a label as argument to inline assembler. Gas otoh has the | ||
264 | * annoying difference between la and dla which are only usable for 32-bit | ||
265 | * rsp. 64-bit code, so can't be used without conditional compilation. | ||
266 | * The alterantive is switching the assembler to 64-bit code which happens | ||
267 | * to work right even for 32-bit code ... | ||
268 | */ | 158 | */ |
269 | #define instruction_hazard() \ | 159 | ASMMACRO(mtc0_tlbw_hazard, |
270 | do { \ | 160 | nop |
271 | unsigned long tmp; \ | 161 | ) |
272 | \ | 162 | ASMMACRO(tlbw_use_hazard, |
273 | __asm__ __volatile__( \ | 163 | nop; nop; nop |
274 | " .set mips64r2 \n" \ | 164 | ) |
275 | " dla %0, 1f \n" \ | 165 | ASMMACRO(tlb_probe_hazard, |
276 | " jr.hb %0 \n" \ | 166 | nop; nop; nop |
277 | " .set mips0 \n" \ | 167 | ) |
278 | "1: \n" \ | 168 | ASMMACRO(irq_enable_hazard, |
279 | : "=r" (tmp)); \ | 169 | ) |
280 | } while (0) | 170 | ASMMACRO(irq_disable_hazard, |
281 | 171 | nop; nop; nop | |
282 | #else | 172 | ) |
173 | ASMMACRO(back_to_back_c0_hazard, | ||
174 | _ssnop; _ssnop; _ssnop; | ||
175 | ) | ||
283 | #define instruction_hazard() do { } while (0) | 176 | #define instruction_hazard() do { } while (0) |
284 | #endif | ||
285 | |||
286 | extern void mips_ihb(void); | ||
287 | 177 | ||
288 | #endif /* __ASSEMBLY__ */ | 178 | #endif |
289 | 179 | ||
290 | #endif /* _ASM_HAZARDS_H */ | 180 | #endif /* _ASM_HAZARDS_H */ |
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index 896550bad322..d35c61776a02 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
@@ -76,8 +76,4 @@ extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, | |||
76 | unsigned long hwmask); | 76 | unsigned long hwmask); |
77 | #endif /* CONFIG_MIPS_MT_SMTC */ | 77 | #endif /* CONFIG_MIPS_MT_SMTC */ |
78 | 78 | ||
79 | #ifdef CONFIG_SMP | ||
80 | #define ARCH_HAS_IRQ_PER_CPU | ||
81 | #endif | ||
82 | |||
83 | #endif /* _ASM_IRQ_H */ | 79 | #endif /* _ASM_IRQ_H */ |
diff --git a/include/asm-mips/mach-atlas/mc146818rtc.h b/include/asm-mips/mach-atlas/mc146818rtc.h index 397522ea5565..a73a5698420c 100644 --- a/include/asm-mips/mach-atlas/mc146818rtc.h +++ b/include/asm-mips/mach-atlas/mc146818rtc.h | |||
@@ -28,10 +28,12 @@ | |||
28 | #include <asm/mips-boards/atlas.h> | 28 | #include <asm/mips-boards/atlas.h> |
29 | #include <asm/mips-boards/atlasint.h> | 29 | #include <asm/mips-boards/atlasint.h> |
30 | 30 | ||
31 | #define ARCH_RTC_LOCATION | ||
32 | |||
31 | #define RTC_PORT(x) (ATLAS_RTC_ADR_REG + (x) * 8) | 33 | #define RTC_PORT(x) (ATLAS_RTC_ADR_REG + (x) * 8) |
32 | #define RTC_IO_EXTENT 0x100 | 34 | #define RTC_IO_EXTENT 0x100 |
33 | #define RTC_IOMAPPED 0 | 35 | #define RTC_IOMAPPED 0 |
34 | #define RTC_IRQ ATLASINT_RTC | 36 | #define RTC_IRQ ATLAS_INT_RTC |
35 | 37 | ||
36 | static inline unsigned char CMOS_READ(unsigned long addr) | 38 | static inline unsigned char CMOS_READ(unsigned long addr) |
37 | { | 39 | { |
diff --git a/include/asm-mips/mach-ev96100/mach-gt64120.h b/include/asm-mips/mach-ev96100/mach-gt64120.h deleted file mode 100644 index 0ef1e6c25acf..000000000000 --- a/include/asm-mips/mach-ev96100/mach-gt64120.h +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | /* | ||
2 | * This is a direct copy of the ev96100.h file, with a global | ||
3 | * search and replace. The numbers are the same. | ||
4 | * | ||
5 | * The reason I'm duplicating this is so that the 64120/96100 | ||
6 | * defines won't be confusing in the source code. | ||
7 | */ | ||
8 | #ifndef _ASM_GT64120_EV96100_GT64120_DEP_H | ||
9 | #define _ASM_GT64120_EV96100_GT64120_DEP_H | ||
10 | |||
11 | /* | ||
12 | * GT96100 config space base address | ||
13 | */ | ||
14 | #define GT64120_BASE (KSEG1ADDR(0x14000000)) | ||
15 | |||
16 | /* | ||
17 | * PCI Bus allocation | ||
18 | * | ||
19 | * (Guessing ...) | ||
20 | */ | ||
21 | #define GT_PCI_MEM_BASE 0x12000000UL | ||
22 | #define GT_PCI_MEM_SIZE 0x02000000UL | ||
23 | #define GT_PCI_IO_BASE 0x10000000UL | ||
24 | #define GT_PCI_IO_SIZE 0x02000000UL | ||
25 | #define GT_ISA_IO_BASE PCI_IO_BASE | ||
26 | |||
27 | /* | ||
28 | * Duart I/O ports. | ||
29 | */ | ||
30 | #define EV96100_COM1_BASE_ADDR (0xBD000000 + 0x20) | ||
31 | #define EV96100_COM2_BASE_ADDR (0xBD000000 + 0x00) | ||
32 | |||
33 | |||
34 | /* | ||
35 | * EV96100 interrupt controller register base. | ||
36 | */ | ||
37 | #define EV96100_ICTRL_REGS_BASE (KSEG1ADDR(0x1f000000)) | ||
38 | |||
39 | /* | ||
40 | * EV96100 UART register base. | ||
41 | */ | ||
42 | #define EV96100_UART0_REGS_BASE EV96100_COM1_BASE_ADDR | ||
43 | #define EV96100_UART1_REGS_BASE EV96100_COM2_BASE_ADDR | ||
44 | #define EV96100_BASE_BAUD ( 3686400 / 16 ) | ||
45 | |||
46 | #endif /* _ASM_GT64120_EV96100_GT64120_DEP_H */ | ||
diff --git a/include/asm-mips/mach-excite/excite.h b/include/asm-mips/mach-excite/excite.h index 130bd4b8edce..4c29ba44992c 100644 --- a/include/asm-mips/mach-excite/excite.h +++ b/include/asm-mips/mach-excite/excite.h | |||
@@ -7,7 +7,7 @@ | |||
7 | 7 | ||
8 | #define EXCITE_CPU_EXT_CLOCK 100000000 | 8 | #define EXCITE_CPU_EXT_CLOCK 100000000 |
9 | 9 | ||
10 | #if !defined(__ASSEMBLER__) | 10 | #if !defined(__ASSEMBLY__) |
11 | void __init excite_kgdb_init(void); | 11 | void __init excite_kgdb_init(void); |
12 | void excite_procfs_init(void); | 12 | void excite_procfs_init(void); |
13 | extern unsigned long memsize; | 13 | extern unsigned long memsize; |
diff --git a/include/asm-mips/mach-excite/excite_fpga.h b/include/asm-mips/mach-excite/excite_fpga.h new file mode 100644 index 000000000000..38fcda703a0b --- /dev/null +++ b/include/asm-mips/mach-excite/excite_fpga.h | |||
@@ -0,0 +1,80 @@ | |||
1 | #ifndef EXCITE_FPGA_H_INCLUDED | ||
2 | #define EXCITE_FPGA_H_INCLUDED | ||
3 | |||
4 | |||
5 | /** | ||
6 | * Adress alignment of the individual FPGA bytes. | ||
7 | * The address arrangement of the individual bytes of the FPGA is two | ||
8 | * byte aligned at the embedded MK2 platform. | ||
9 | */ | ||
10 | #ifdef EXCITE_CCI_FPGA_MK2 | ||
11 | typedef unsigned char excite_cci_fpga_align_t __attribute__ ((aligned(2))); | ||
12 | #else | ||
13 | typedef unsigned char excite_cci_fpga_align_t; | ||
14 | #endif | ||
15 | |||
16 | |||
17 | /** | ||
18 | * Size of Dual Ported RAM. | ||
19 | */ | ||
20 | #define EXCITE_DPR_SIZE 263 | ||
21 | |||
22 | |||
23 | /** | ||
24 | * Size of Reserved Status Fields in Dual Ported RAM. | ||
25 | */ | ||
26 | #define EXCITE_DPR_STATUS_SIZE 7 | ||
27 | |||
28 | |||
29 | |||
30 | /** | ||
31 | * FPGA. | ||
32 | * Hardware register layout of the FPGA interface. The FPGA must accessed | ||
33 | * byte wise solely. | ||
34 | * @see EXCITE_CCI_DPR_MK2 | ||
35 | */ | ||
36 | typedef struct excite_fpga { | ||
37 | |||
38 | /** | ||
39 | * Dual Ported RAM. | ||
40 | */ | ||
41 | excite_cci_fpga_align_t dpr[EXCITE_DPR_SIZE]; | ||
42 | |||
43 | /** | ||
44 | * Status. | ||
45 | */ | ||
46 | excite_cci_fpga_align_t status[EXCITE_DPR_STATUS_SIZE]; | ||
47 | |||
48 | #ifdef EXCITE_CCI_FPGA_MK2 | ||
49 | /** | ||
50 | * RM9000 Interrupt. | ||
51 | * Write access initiates interrupt at the RM9000 (MIPS) processor of the eXcite. | ||
52 | */ | ||
53 | excite_cci_fpga_align_t rm9k_int; | ||
54 | #else | ||
55 | /** | ||
56 | * MK2 Interrupt. | ||
57 | * Write access initiates interrupt at the ARM processor of the MK2. | ||
58 | */ | ||
59 | excite_cci_fpga_align_t mk2_int; | ||
60 | |||
61 | excite_cci_fpga_align_t gap[0x1000-0x10f]; | ||
62 | |||
63 | /** | ||
64 | * IRQ Source/Acknowledge. | ||
65 | */ | ||
66 | excite_cci_fpga_align_t rm9k_irq_src; | ||
67 | |||
68 | /** | ||
69 | * IRQ Mask. | ||
70 | * Set bits enable the related interrupt. | ||
71 | */ | ||
72 | excite_cci_fpga_align_t rm9k_irq_mask; | ||
73 | #endif | ||
74 | |||
75 | |||
76 | } excite_fpga; | ||
77 | |||
78 | |||
79 | |||
80 | #endif /* ndef EXCITE_FPGA_H_INCLUDED */ | ||
diff --git a/include/asm-mips/mach-qemu/cpu-feature-overrides.h b/include/asm-mips/mach-qemu/cpu-feature-overrides.h index f4e370e27168..529445dacedb 100644 --- a/include/asm-mips/mach-qemu/cpu-feature-overrides.h +++ b/include/asm-mips/mach-qemu/cpu-feature-overrides.h | |||
@@ -20,7 +20,7 @@ | |||
20 | 20 | ||
21 | #define cpu_has_llsc 1 | 21 | #define cpu_has_llsc 1 |
22 | #define cpu_has_vtag_icache 0 | 22 | #define cpu_has_vtag_icache 0 |
23 | #define cpu_has_dc_aliases (PAGE_SIZE < 0x4000) | 23 | #define cpu_has_dc_aliases 0 |
24 | #define cpu_has_ic_fills_f_dc 0 | 24 | #define cpu_has_ic_fills_f_dc 0 |
25 | 25 | ||
26 | #define cpu_has_dsp 0 | 26 | #define cpu_has_dsp 0 |
diff --git a/include/asm-mips/mips-boards/atlasint.h b/include/asm-mips/mips-boards/atlasint.h index fd7ebc54fa90..b15e4ea0b091 100644 --- a/include/asm-mips/mips-boards/atlasint.h +++ b/include/asm-mips/mips-boards/atlasint.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Carsten Langgaard, carstenl@mips.com | 2 | * Copyright (C) 1999, 2006 MIPS Technologies, Inc. All rights reserved. |
3 | * Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved. | 3 | * Authors: Carsten Langgaard <carstenl@mips.com> |
4 | * Maciej W. Rozycki <macro@mips.com> | ||
4 | * | 5 | * |
5 | * ######################################################################## | 6 | * ######################################################################## |
6 | * | 7 | * |
@@ -25,41 +26,88 @@ | |||
25 | #ifndef _MIPS_ATLASINT_H | 26 | #ifndef _MIPS_ATLASINT_H |
26 | #define _MIPS_ATLASINT_H | 27 | #define _MIPS_ATLASINT_H |
27 | 28 | ||
28 | #define ATLASINT_BASE 1 | 29 | /* |
29 | #define ATLASINT_UART (ATLASINT_BASE+0) | 30 | * Interrupts 0..7 are used for Atlas CPU interrupts (nonEIC mode) |
30 | #define ATLASINT_TIM0 (ATLASINT_BASE+1) | 31 | */ |
31 | #define ATLASINT_RES2 (ATLASINT_BASE+2) | 32 | #define MIPSCPU_INT_BASE 0 |
32 | #define ATLASINT_RES3 (ATLASINT_BASE+3) | 33 | |
33 | #define ATLASINT_RTC (ATLASINT_BASE+4) | 34 | /* CPU interrupt offsets */ |
34 | #define ATLASINT_COREHI (ATLASINT_BASE+5) | 35 | #define MIPSCPU_INT_SW0 0 |
35 | #define ATLASINT_CORELO (ATLASINT_BASE+6) | 36 | #define MIPSCPU_INT_SW1 1 |
36 | #define ATLASINT_RES7 (ATLASINT_BASE+7) | 37 | #define MIPSCPU_INT_MB0 2 |
37 | #define ATLASINT_PCIA (ATLASINT_BASE+8) | 38 | #define MIPSCPU_INT_ATLAS MIPSCPU_INT_MB0 |
38 | #define ATLASINT_PCIB (ATLASINT_BASE+9) | 39 | #define MIPSCPU_INT_MB1 3 |
39 | #define ATLASINT_PCIC (ATLASINT_BASE+10) | 40 | #define MIPSCPU_INT_MB2 4 |
40 | #define ATLASINT_PCID (ATLASINT_BASE+11) | 41 | #define MIPSCPU_INT_MB3 5 |
41 | #define ATLASINT_ENUM (ATLASINT_BASE+12) | 42 | #define MIPSCPU_INT_MB4 6 |
42 | #define ATLASINT_DEG (ATLASINT_BASE+13) | 43 | #define MIPSCPU_INT_CPUCTR 7 |
43 | #define ATLASINT_ATXFAIL (ATLASINT_BASE+14) | 44 | |
44 | #define ATLASINT_INTA (ATLASINT_BASE+15) | 45 | /* |
45 | #define ATLASINT_INTB (ATLASINT_BASE+16) | 46 | * Interrupts 8..39 are used for Atlas interrupt controller interrupts |
46 | #define ATLASINT_ETH ATLASINT_INTB | 47 | */ |
47 | #define ATLASINT_INTC (ATLASINT_BASE+17) | 48 | #define ATLAS_INT_BASE 8 |
48 | #define ATLASINT_SCSI ATLASINT_INTC | 49 | #define ATLAS_INT_UART (ATLAS_INT_BASE + 0) |
49 | #define ATLASINT_INTD (ATLASINT_BASE+18) | 50 | #define ATLAS_INT_TIM0 (ATLAS_INT_BASE + 1) |
50 | #define ATLASINT_SERR (ATLASINT_BASE+19) | 51 | #define ATLAS_INT_RES2 (ATLAS_INT_BASE + 2) |
51 | #define ATLASINT_RES20 (ATLASINT_BASE+20) | 52 | #define ATLAS_INT_RES3 (ATLAS_INT_BASE + 3) |
52 | #define ATLASINT_RES21 (ATLASINT_BASE+21) | 53 | #define ATLAS_INT_RTC (ATLAS_INT_BASE + 4) |
53 | #define ATLASINT_RES22 (ATLASINT_BASE+22) | 54 | #define ATLAS_INT_COREHI (ATLAS_INT_BASE + 5) |
54 | #define ATLASINT_RES23 (ATLASINT_BASE+23) | 55 | #define ATLAS_INT_CORELO (ATLAS_INT_BASE + 6) |
55 | #define ATLASINT_RES24 (ATLASINT_BASE+24) | 56 | #define ATLAS_INT_RES7 (ATLAS_INT_BASE + 7) |
56 | #define ATLASINT_RES25 (ATLASINT_BASE+25) | 57 | #define ATLAS_INT_PCIA (ATLAS_INT_BASE + 8) |
57 | #define ATLASINT_RES26 (ATLASINT_BASE+26) | 58 | #define ATLAS_INT_PCIB (ATLAS_INT_BASE + 9) |
58 | #define ATLASINT_RES27 (ATLASINT_BASE+27) | 59 | #define ATLAS_INT_PCIC (ATLAS_INT_BASE + 10) |
59 | #define ATLASINT_RES28 (ATLASINT_BASE+28) | 60 | #define ATLAS_INT_PCID (ATLAS_INT_BASE + 11) |
60 | #define ATLASINT_RES29 (ATLASINT_BASE+29) | 61 | #define ATLAS_INT_ENUM (ATLAS_INT_BASE + 12) |
61 | #define ATLASINT_RES30 (ATLASINT_BASE+30) | 62 | #define ATLAS_INT_DEG (ATLAS_INT_BASE + 13) |
62 | #define ATLASINT_RES31 (ATLASINT_BASE+31) | 63 | #define ATLAS_INT_ATXFAIL (ATLAS_INT_BASE + 14) |
63 | #define ATLASINT_END (ATLASINT_BASE+31) | 64 | #define ATLAS_INT_INTA (ATLAS_INT_BASE + 15) |
65 | #define ATLAS_INT_INTB (ATLAS_INT_BASE + 16) | ||
66 | #define ATLAS_INT_ETH ATLAS_INT_INTB | ||
67 | #define ATLAS_INT_INTC (ATLAS_INT_BASE + 17) | ||
68 | #define ATLAS_INT_SCSI ATLAS_INT_INTC | ||
69 | #define ATLAS_INT_INTD (ATLAS_INT_BASE + 18) | ||
70 | #define ATLAS_INT_SERR (ATLAS_INT_BASE + 19) | ||
71 | #define ATLAS_INT_RES20 (ATLAS_INT_BASE + 20) | ||
72 | #define ATLAS_INT_RES21 (ATLAS_INT_BASE + 21) | ||
73 | #define ATLAS_INT_RES22 (ATLAS_INT_BASE + 22) | ||
74 | #define ATLAS_INT_RES23 (ATLAS_INT_BASE + 23) | ||
75 | #define ATLAS_INT_RES24 (ATLAS_INT_BASE + 24) | ||
76 | #define ATLAS_INT_RES25 (ATLAS_INT_BASE + 25) | ||
77 | #define ATLAS_INT_RES26 (ATLAS_INT_BASE + 26) | ||
78 | #define ATLAS_INT_RES27 (ATLAS_INT_BASE + 27) | ||
79 | #define ATLAS_INT_RES28 (ATLAS_INT_BASE + 28) | ||
80 | #define ATLAS_INT_RES29 (ATLAS_INT_BASE + 29) | ||
81 | #define ATLAS_INT_RES30 (ATLAS_INT_BASE + 30) | ||
82 | #define ATLAS_INT_RES31 (ATLAS_INT_BASE + 31) | ||
83 | #define ATLAS_INT_END (ATLAS_INT_BASE + 31) | ||
84 | |||
85 | /* | ||
86 | * Interrupts 64..127 are used for Soc-it Classic interrupts | ||
87 | */ | ||
88 | #define MSC01C_INT_BASE 64 | ||
89 | |||
90 | /* SOC-it Classic interrupt offsets */ | ||
91 | #define MSC01C_INT_TMR 0 | ||
92 | #define MSC01C_INT_PCI 1 | ||
93 | |||
94 | /* | ||
95 | * Interrupts 64..127 are used for Soc-it EIC interrupts | ||
96 | */ | ||
97 | #define MSC01E_INT_BASE 64 | ||
98 | |||
99 | /* SOC-it EIC interrupt offsets */ | ||
100 | #define MSC01E_INT_SW0 1 | ||
101 | #define MSC01E_INT_SW1 2 | ||
102 | #define MSC01E_INT_MB0 3 | ||
103 | #define MSC01E_INT_ATLAS MSC01E_INT_MB0 | ||
104 | #define MSC01E_INT_MB1 4 | ||
105 | #define MSC01E_INT_MB2 5 | ||
106 | #define MSC01E_INT_MB3 6 | ||
107 | #define MSC01E_INT_MB4 7 | ||
108 | #define MSC01E_INT_TMR 8 | ||
109 | #define MSC01E_INT_PCI 9 | ||
110 | #define MSC01E_INT_PERFCTR 10 | ||
111 | #define MSC01E_INT_CPUCTR 11 | ||
64 | 112 | ||
65 | #endif /* !(_MIPS_ATLASINT_H) */ | 113 | #endif /* !(_MIPS_ATLASINT_H) */ |
diff --git a/include/asm-mips/mmu_context.h b/include/asm-mips/mmu_context.h index 18b69de87daa..fe065d6070ca 100644 --- a/include/asm-mips/mmu_context.h +++ b/include/asm-mips/mmu_context.h | |||
@@ -262,10 +262,10 @@ drop_mmu_context(struct mm_struct *mm, unsigned cpu) | |||
262 | /* See comments for similar code above */ | 262 | /* See comments for similar code above */ |
263 | prevvpe = dvpe(); | 263 | prevvpe = dvpe(); |
264 | oldasid = (read_c0_entryhi() & ASID_MASK); | 264 | oldasid = (read_c0_entryhi() & ASID_MASK); |
265 | if(smtc_live_asid[mytlb][oldasid]) { | 265 | if (smtc_live_asid[mytlb][oldasid]) { |
266 | smtc_live_asid[mytlb][oldasid] &= ~(0x1 << cpu); | 266 | smtc_live_asid[mytlb][oldasid] &= ~(0x1 << cpu); |
267 | if(smtc_live_asid[mytlb][oldasid] == 0) | 267 | if(smtc_live_asid[mytlb][oldasid] == 0) |
268 | smtc_flush_tlb_asid(oldasid); | 268 | smtc_flush_tlb_asid(oldasid); |
269 | } | 269 | } |
270 | /* See comments for similar code above */ | 270 | /* See comments for similar code above */ |
271 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) | 271 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) |
diff --git a/include/asm-mips/page.h b/include/asm-mips/page.h index 219d359861f3..85b258ee7090 100644 --- a/include/asm-mips/page.h +++ b/include/asm-mips/page.h | |||
@@ -34,6 +34,8 @@ | |||
34 | 34 | ||
35 | #ifndef __ASSEMBLY__ | 35 | #ifndef __ASSEMBLY__ |
36 | 36 | ||
37 | #include <asm/cpu-features.h> | ||
38 | |||
37 | extern void clear_page(void * page); | 39 | extern void clear_page(void * page); |
38 | extern void copy_page(void * to, void * from); | 40 | extern void copy_page(void * to, void * from); |
39 | 41 | ||
@@ -53,7 +55,7 @@ static inline void clear_user_page(void *addr, unsigned long vaddr, | |||
53 | extern void (*flush_data_cache_page)(unsigned long addr); | 55 | extern void (*flush_data_cache_page)(unsigned long addr); |
54 | 56 | ||
55 | clear_page(addr); | 57 | clear_page(addr); |
56 | if (pages_do_alias((unsigned long) addr, vaddr)) | 58 | if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK)) |
57 | flush_data_cache_page((unsigned long)addr); | 59 | flush_data_cache_page((unsigned long)addr); |
58 | } | 60 | } |
59 | 61 | ||
@@ -63,7 +65,8 @@ static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, | |||
63 | extern void (*flush_data_cache_page)(unsigned long addr); | 65 | extern void (*flush_data_cache_page)(unsigned long addr); |
64 | 66 | ||
65 | copy_page(vto, vfrom); | 67 | copy_page(vto, vfrom); |
66 | if (pages_do_alias((unsigned long)vto, vaddr)) | 68 | if (!cpu_has_ic_fills_f_dc || |
69 | pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK)) | ||
67 | flush_data_cache_page((unsigned long)vto); | 70 | flush_data_cache_page((unsigned long)vto); |
68 | } | 71 | } |
69 | 72 | ||
@@ -74,15 +77,17 @@ static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, | |||
74 | #ifdef CONFIG_CPU_MIPS32 | 77 | #ifdef CONFIG_CPU_MIPS32 |
75 | typedef struct { unsigned long pte_low, pte_high; } pte_t; | 78 | typedef struct { unsigned long pte_low, pte_high; } pte_t; |
76 | #define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) | 79 | #define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32)) |
80 | #define __pte(x) ({ pte_t __pte = {(x), ((unsigned long long)(x)) >> 32}; __pte; }) | ||
77 | #else | 81 | #else |
78 | typedef struct { unsigned long long pte; } pte_t; | 82 | typedef struct { unsigned long long pte; } pte_t; |
79 | #define pte_val(x) ((x).pte) | 83 | #define pte_val(x) ((x).pte) |
84 | #define __pte(x) ((pte_t) { (x) } ) | ||
80 | #endif | 85 | #endif |
81 | #else | 86 | #else |
82 | typedef struct { unsigned long pte; } pte_t; | 87 | typedef struct { unsigned long pte; } pte_t; |
83 | #define pte_val(x) ((x).pte) | 88 | #define pte_val(x) ((x).pte) |
84 | #endif | ||
85 | #define __pte(x) ((pte_t) { (x) } ) | 89 | #define __pte(x) ((pte_t) { (x) } ) |
90 | #endif | ||
86 | 91 | ||
87 | /* | 92 | /* |
88 | * For 3-level pagetables we defines these ourselves, for 2-level the | 93 | * For 3-level pagetables we defines these ourselves, for 2-level the |
diff --git a/include/asm-mips/pgtable-64.h b/include/asm-mips/pgtable-64.h index c59a1e21f5b0..d05fb6f38aa7 100644 --- a/include/asm-mips/pgtable-64.h +++ b/include/asm-mips/pgtable-64.h | |||
@@ -93,8 +93,12 @@ | |||
93 | #define PTRS_PER_PMD ((PAGE_SIZE << PMD_ORDER) / sizeof(pmd_t)) | 93 | #define PTRS_PER_PMD ((PAGE_SIZE << PMD_ORDER) / sizeof(pmd_t)) |
94 | #define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t)) | 94 | #define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t)) |
95 | 95 | ||
96 | #if PGDIR_SIZE >= TASK_SIZE | ||
97 | #define USER_PTRS_PER_PGD (1) | ||
98 | #else | ||
96 | #define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) | 99 | #define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) |
97 | #define FIRST_USER_ADDRESS 0 | 100 | #endif |
101 | #define FIRST_USER_ADDRESS 0UL | ||
98 | 102 | ||
99 | #define VMALLOC_START MAP_BASE | 103 | #define VMALLOC_START MAP_BASE |
100 | #define VMALLOC_END \ | 104 | #define VMALLOC_END \ |
diff --git a/include/asm-mips/ptrace.h b/include/asm-mips/ptrace.h index 4113316ee0da..4fb0fc43ffd7 100644 --- a/include/asm-mips/ptrace.h +++ b/include/asm-mips/ptrace.h | |||
@@ -10,8 +10,6 @@ | |||
10 | #define _ASM_PTRACE_H | 10 | #define _ASM_PTRACE_H |
11 | 11 | ||
12 | 12 | ||
13 | #include <asm/isadep.h> | ||
14 | |||
15 | /* 0 - 31 are integer registers, 32 - 63 are fp registers. */ | 13 | /* 0 - 31 are integer registers, 32 - 63 are fp registers. */ |
16 | #define FPR_BASE 32 | 14 | #define FPR_BASE 32 |
17 | #define PC 64 | 15 | #define PC 64 |
@@ -73,6 +71,7 @@ struct pt_regs { | |||
73 | #ifdef __KERNEL__ | 71 | #ifdef __KERNEL__ |
74 | 72 | ||
75 | #include <linux/linkage.h> | 73 | #include <linux/linkage.h> |
74 | #include <asm/isadep.h> | ||
76 | 75 | ||
77 | /* | 76 | /* |
78 | * Does the process account for user or for system time? | 77 | * Does the process account for user or for system time? |
diff --git a/include/asm-mips/serial.h b/include/asm-mips/serial.h index 584bd9c0ab2e..035637c67e7c 100644 --- a/include/asm-mips/serial.h +++ b/include/asm-mips/serial.h | |||
@@ -52,9 +52,9 @@ | |||
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | /* | 54 | /* |
55 | * Both Galileo boards have the same UART mappings. | 55 | * Galileo EV64120 evaluation board |
56 | */ | 56 | */ |
57 | #if defined (CONFIG_MIPS_EV96100) || defined (CONFIG_MIPS_EV64120) | 57 | #ifdef CONFIG_MIPS_EV64120 |
58 | #include <asm/galileo-boards/ev96100.h> | 58 | #include <asm/galileo-boards/ev96100.h> |
59 | #include <asm/galileo-boards/ev96100int.h> | 59 | #include <asm/galileo-boards/ev96100int.h> |
60 | #define EV96100_SERIAL_PORT_DEFNS \ | 60 | #define EV96100_SERIAL_PORT_DEFNS \ |
diff --git a/include/asm-mips/sibyte/sb1250_defs.h b/include/asm-mips/sibyte/sb1250_defs.h index 335dbaf1d831..a885491217c1 100644 --- a/include/asm-mips/sibyte/sb1250_defs.h +++ b/include/asm-mips/sibyte/sb1250_defs.h | |||
@@ -212,7 +212,7 @@ | |||
212 | * Note: you'll need to define uint32_t and uint64_t in your headers. | 212 | * Note: you'll need to define uint32_t and uint64_t in your headers. |
213 | */ | 213 | */ |
214 | 214 | ||
215 | #if !defined(__ASSEMBLER__) | 215 | #if !defined(__ASSEMBLY__) |
216 | #define _SB_MAKE64(x) ((uint64_t)(x)) | 216 | #define _SB_MAKE64(x) ((uint64_t)(x)) |
217 | #define _SB_MAKE32(x) ((uint32_t)(x)) | 217 | #define _SB_MAKE32(x) ((uint32_t)(x)) |
218 | #else | 218 | #else |
@@ -251,9 +251,9 @@ | |||
251 | */ | 251 | */ |
252 | 252 | ||
253 | 253 | ||
254 | #if defined(__mips64) && !defined(__ASSEMBLER__) | 254 | #if defined(__mips64) && !defined(__ASSEMBLY__) |
255 | #define SBWRITECSR(csr,val) *((volatile uint64_t *) PHYS_TO_K1(csr)) = (val) | 255 | #define SBWRITECSR(csr,val) *((volatile uint64_t *) PHYS_TO_K1(csr)) = (val) |
256 | #define SBREADCSR(csr) (*((volatile uint64_t *) PHYS_TO_K1(csr))) | 256 | #define SBREADCSR(csr) (*((volatile uint64_t *) PHYS_TO_K1(csr))) |
257 | #endif /* __ASSEMBLER__ */ | 257 | #endif /* __ASSEMBLY__ */ |
258 | 258 | ||
259 | #endif | 259 | #endif |
diff --git a/include/asm-mips/sibyte/sb1250_scd.h b/include/asm-mips/sibyte/sb1250_scd.h index f4178bdcfcb0..7ed0bb611e56 100644 --- a/include/asm-mips/sibyte/sb1250_scd.h +++ b/include/asm-mips/sibyte/sb1250_scd.h | |||
@@ -149,7 +149,7 @@ | |||
149 | * (For the assembler version, sysrev and dest may be the same register. | 149 | * (For the assembler version, sysrev and dest may be the same register. |
150 | * Also, it clobbers AT.) | 150 | * Also, it clobbers AT.) |
151 | */ | 151 | */ |
152 | #ifdef __ASSEMBLER__ | 152 | #ifdef __ASSEMBLY__ |
153 | #define SYS_SOC_TYPE(dest, sysrev) \ | 153 | #define SYS_SOC_TYPE(dest, sysrev) \ |
154 | .set push ; \ | 154 | .set push ; \ |
155 | .set reorder ; \ | 155 | .set reorder ; \ |
diff --git a/include/asm-mips/signal.h b/include/asm-mips/signal.h index 87a1dff95199..8b391a2f0814 100644 --- a/include/asm-mips/signal.h +++ b/include/asm-mips/signal.h | |||
@@ -108,17 +108,8 @@ typedef unsigned long old_sigset_t; /* at least 32 bits */ | |||
108 | #define SIG_BLOCK 1 /* for blocking signals */ | 108 | #define SIG_BLOCK 1 /* for blocking signals */ |
109 | #define SIG_UNBLOCK 2 /* for unblocking signals */ | 109 | #define SIG_UNBLOCK 2 /* for unblocking signals */ |
110 | #define SIG_SETMASK 3 /* for setting the signal mask */ | 110 | #define SIG_SETMASK 3 /* for setting the signal mask */ |
111 | #define SIG_SETMASK32 256 /* Goodie from SGI for BSD compatibility: | ||
112 | set only the low 32 bit of the sigset. */ | ||
113 | 111 | ||
114 | /* Type of a signal handler. */ | 112 | #include <asm-generic/signal.h> |
115 | typedef void __signalfn_t(int); | ||
116 | typedef __signalfn_t __user *__sighandler_t; | ||
117 | |||
118 | /* Fake signal functions */ | ||
119 | #define SIG_DFL ((__sighandler_t)0) /* default signal handling */ | ||
120 | #define SIG_IGN ((__sighandler_t)1) /* ignore signal */ | ||
121 | #define SIG_ERR ((__sighandler_t)-1) /* error return from signal */ | ||
122 | 113 | ||
123 | struct sigaction { | 114 | struct sigaction { |
124 | unsigned int sa_flags; | 115 | unsigned int sa_flags; |
diff --git a/include/asm-mips/spinlock.h b/include/asm-mips/spinlock.h index 669b8e349ff2..4c1a1b53aeaf 100644 --- a/include/asm-mips/spinlock.h +++ b/include/asm-mips/spinlock.h | |||
@@ -239,7 +239,51 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
239 | : "memory"); | 239 | : "memory"); |
240 | } | 240 | } |
241 | 241 | ||
242 | #define __raw_read_trylock(lock) generic__raw_read_trylock(lock) | 242 | static inline int __raw_read_trylock(raw_rwlock_t *rw) |
243 | { | ||
244 | unsigned int tmp; | ||
245 | int ret; | ||
246 | |||
247 | if (R10000_LLSC_WAR) { | ||
248 | __asm__ __volatile__( | ||
249 | " .set noreorder # __raw_read_trylock \n" | ||
250 | " li %2, 0 \n" | ||
251 | "1: ll %1, %3 \n" | ||
252 | " bnez %1, 2f \n" | ||
253 | " addu %1, 1 \n" | ||
254 | " sc %1, %0 \n" | ||
255 | " beqzl %1, 1b \n" | ||
256 | " .set reorder \n" | ||
257 | #ifdef CONFIG_SMP | ||
258 | " sync \n" | ||
259 | #endif | ||
260 | " li %2, 1 \n" | ||
261 | "2: \n" | ||
262 | : "=m" (rw->lock), "=&r" (tmp), "=&r" (ret) | ||
263 | : "m" (rw->lock) | ||
264 | : "memory"); | ||
265 | } else { | ||
266 | __asm__ __volatile__( | ||
267 | " .set noreorder # __raw_read_trylock \n" | ||
268 | " li %2, 0 \n" | ||
269 | "1: ll %1, %3 \n" | ||
270 | " bnez %1, 2f \n" | ||
271 | " addu %1, 1 \n" | ||
272 | " sc %1, %0 \n" | ||
273 | " beqz %1, 1b \n" | ||
274 | " .set reorder \n" | ||
275 | #ifdef CONFIG_SMP | ||
276 | " sync \n" | ||
277 | #endif | ||
278 | " li %2, 1 \n" | ||
279 | "2: \n" | ||
280 | : "=m" (rw->lock), "=&r" (tmp), "=&r" (ret) | ||
281 | : "m" (rw->lock) | ||
282 | : "memory"); | ||
283 | } | ||
284 | |||
285 | return ret; | ||
286 | } | ||
243 | 287 | ||
244 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | 288 | static inline int __raw_write_trylock(raw_rwlock_t *rw) |
245 | { | 289 | { |
@@ -283,4 +327,5 @@ static inline int __raw_write_trylock(raw_rwlock_t *rw) | |||
283 | return ret; | 327 | return ret; |
284 | } | 328 | } |
285 | 329 | ||
330 | |||
286 | #endif /* _ASM_SPINLOCK_H */ | 331 | #endif /* _ASM_SPINLOCK_H */ |
diff --git a/include/asm-mips/timex.h b/include/asm-mips/timex.h index 98aa737b34aa..b80de8e0fbbd 100644 --- a/include/asm-mips/timex.h +++ b/include/asm-mips/timex.h | |||
@@ -8,6 +8,8 @@ | |||
8 | #ifndef _ASM_TIMEX_H | 8 | #ifndef _ASM_TIMEX_H |
9 | #define _ASM_TIMEX_H | 9 | #define _ASM_TIMEX_H |
10 | 10 | ||
11 | #ifdef __KERNEL__ | ||
12 | |||
11 | #include <asm/mipsregs.h> | 13 | #include <asm/mipsregs.h> |
12 | 14 | ||
13 | /* | 15 | /* |
@@ -51,4 +53,6 @@ static inline cycles_t get_cycles (void) | |||
51 | return read_c0_count(); | 53 | return read_c0_count(); |
52 | } | 54 | } |
53 | 55 | ||
56 | #endif /* __KERNEL__ */ | ||
57 | |||
54 | #endif /* _ASM_TIMEX_H */ | 58 | #endif /* _ASM_TIMEX_H */ |
diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h index 610ccb8a50b3..c39142920fe6 100644 --- a/include/asm-mips/unistd.h +++ b/include/asm-mips/unistd.h | |||
@@ -313,7 +313,7 @@ | |||
313 | #define __NR_mknodat (__NR_Linux + 290) | 313 | #define __NR_mknodat (__NR_Linux + 290) |
314 | #define __NR_fchownat (__NR_Linux + 291) | 314 | #define __NR_fchownat (__NR_Linux + 291) |
315 | #define __NR_futimesat (__NR_Linux + 292) | 315 | #define __NR_futimesat (__NR_Linux + 292) |
316 | #define __NR_fstatat (__NR_Linux + 293) | 316 | #define __NR_fstatat64 (__NR_Linux + 293) |
317 | #define __NR_unlinkat (__NR_Linux + 294) | 317 | #define __NR_unlinkat (__NR_Linux + 294) |
318 | #define __NR_renameat (__NR_Linux + 295) | 318 | #define __NR_renameat (__NR_Linux + 295) |
319 | #define __NR_linkat (__NR_Linux + 296) | 319 | #define __NR_linkat (__NR_Linux + 296) |
@@ -329,16 +329,18 @@ | |||
329 | #define __NR_tee (__NR_Linux + 306) | 329 | #define __NR_tee (__NR_Linux + 306) |
330 | #define __NR_vmsplice (__NR_Linux + 307) | 330 | #define __NR_vmsplice (__NR_Linux + 307) |
331 | #define __NR_move_pages (__NR_Linux + 308) | 331 | #define __NR_move_pages (__NR_Linux + 308) |
332 | #define __NR_set_robust_list (__NR_Linux + 309) | ||
333 | #define __NR_get_robust_list (__NR_Linux + 310) | ||
332 | 334 | ||
333 | /* | 335 | /* |
334 | * Offset of the last Linux o32 flavoured syscall | 336 | * Offset of the last Linux o32 flavoured syscall |
335 | */ | 337 | */ |
336 | #define __NR_Linux_syscalls 308 | 338 | #define __NR_Linux_syscalls 310 |
337 | 339 | ||
338 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | 340 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ |
339 | 341 | ||
340 | #define __NR_O32_Linux 4000 | 342 | #define __NR_O32_Linux 4000 |
341 | #define __NR_O32_Linux_syscalls 308 | 343 | #define __NR_O32_Linux_syscalls 310 |
342 | 344 | ||
343 | #if _MIPS_SIM == _MIPS_SIM_ABI64 | 345 | #if _MIPS_SIM == _MIPS_SIM_ABI64 |
344 | 346 | ||
@@ -598,7 +600,7 @@ | |||
598 | #define __NR_mknodat (__NR_Linux + 249) | 600 | #define __NR_mknodat (__NR_Linux + 249) |
599 | #define __NR_fchownat (__NR_Linux + 250) | 601 | #define __NR_fchownat (__NR_Linux + 250) |
600 | #define __NR_futimesat (__NR_Linux + 251) | 602 | #define __NR_futimesat (__NR_Linux + 251) |
601 | #define __NR_fstatat (__NR_Linux + 252) | 603 | #define __NR_newfstatat (__NR_Linux + 252) |
602 | #define __NR_unlinkat (__NR_Linux + 253) | 604 | #define __NR_unlinkat (__NR_Linux + 253) |
603 | #define __NR_renameat (__NR_Linux + 254) | 605 | #define __NR_renameat (__NR_Linux + 254) |
604 | #define __NR_linkat (__NR_Linux + 255) | 606 | #define __NR_linkat (__NR_Linux + 255) |
@@ -614,16 +616,18 @@ | |||
614 | #define __NR_tee (__NR_Linux + 265) | 616 | #define __NR_tee (__NR_Linux + 265) |
615 | #define __NR_vmsplice (__NR_Linux + 266) | 617 | #define __NR_vmsplice (__NR_Linux + 266) |
616 | #define __NR_move_pages (__NR_Linux + 267) | 618 | #define __NR_move_pages (__NR_Linux + 267) |
619 | #define __NR_set_robust_list (__NR_Linux + 268) | ||
620 | #define __NR_get_robust_list (__NR_Linux + 269) | ||
617 | 621 | ||
618 | /* | 622 | /* |
619 | * Offset of the last Linux 64-bit flavoured syscall | 623 | * Offset of the last Linux 64-bit flavoured syscall |
620 | */ | 624 | */ |
621 | #define __NR_Linux_syscalls 267 | 625 | #define __NR_Linux_syscalls 269 |
622 | 626 | ||
623 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ | 627 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ |
624 | 628 | ||
625 | #define __NR_64_Linux 5000 | 629 | #define __NR_64_Linux 5000 |
626 | #define __NR_64_Linux_syscalls 267 | 630 | #define __NR_64_Linux_syscalls 269 |
627 | 631 | ||
628 | #if _MIPS_SIM == _MIPS_SIM_NABI32 | 632 | #if _MIPS_SIM == _MIPS_SIM_NABI32 |
629 | 633 | ||
@@ -887,7 +891,7 @@ | |||
887 | #define __NR_mknodat (__NR_Linux + 253) | 891 | #define __NR_mknodat (__NR_Linux + 253) |
888 | #define __NR_fchownat (__NR_Linux + 254) | 892 | #define __NR_fchownat (__NR_Linux + 254) |
889 | #define __NR_futimesat (__NR_Linux + 255) | 893 | #define __NR_futimesat (__NR_Linux + 255) |
890 | #define __NR_fstatat (__NR_Linux + 256) | 894 | #define __NR_newfstatat (__NR_Linux + 256) |
891 | #define __NR_unlinkat (__NR_Linux + 257) | 895 | #define __NR_unlinkat (__NR_Linux + 257) |
892 | #define __NR_renameat (__NR_Linux + 258) | 896 | #define __NR_renameat (__NR_Linux + 258) |
893 | #define __NR_linkat (__NR_Linux + 259) | 897 | #define __NR_linkat (__NR_Linux + 259) |
@@ -903,16 +907,18 @@ | |||
903 | #define __NR_tee (__NR_Linux + 269) | 907 | #define __NR_tee (__NR_Linux + 269) |
904 | #define __NR_vmsplice (__NR_Linux + 270) | 908 | #define __NR_vmsplice (__NR_Linux + 270) |
905 | #define __NR_move_pages (__NR_Linux + 271) | 909 | #define __NR_move_pages (__NR_Linux + 271) |
910 | #define __NR_set_robust_list (__NR_Linux + 272) | ||
911 | #define __NR_get_robust_list (__NR_Linux + 273) | ||
906 | 912 | ||
907 | /* | 913 | /* |
908 | * Offset of the last N32 flavoured syscall | 914 | * Offset of the last N32 flavoured syscall |
909 | */ | 915 | */ |
910 | #define __NR_Linux_syscalls 271 | 916 | #define __NR_Linux_syscalls 273 |
911 | 917 | ||
912 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ | 918 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ |
913 | 919 | ||
914 | #define __NR_N32_Linux 6000 | 920 | #define __NR_N32_Linux 6000 |
915 | #define __NR_N32_Linux_syscalls 271 | 921 | #define __NR_N32_Linux_syscalls 273 |
916 | 922 | ||
917 | #ifdef __KERNEL__ | 923 | #ifdef __KERNEL__ |
918 | 924 | ||
diff --git a/include/asm-mips/user.h b/include/asm-mips/user.h index 89bf8b4cab3c..61f2a093b91b 100644 --- a/include/asm-mips/user.h +++ b/include/asm-mips/user.h | |||
@@ -8,6 +8,8 @@ | |||
8 | #ifndef _ASM_USER_H | 8 | #ifndef _ASM_USER_H |
9 | #define _ASM_USER_H | 9 | #define _ASM_USER_H |
10 | 10 | ||
11 | #ifdef __KERNEL__ | ||
12 | |||
11 | #include <asm/page.h> | 13 | #include <asm/page.h> |
12 | #include <asm/reg.h> | 14 | #include <asm/reg.h> |
13 | 15 | ||
@@ -55,4 +57,6 @@ struct user { | |||
55 | #define HOST_DATA_START_ADDR (u.start_data) | 57 | #define HOST_DATA_START_ADDR (u.start_data) |
56 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) | 58 | #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) |
57 | 59 | ||
60 | #endif /* __KERNEL__ */ | ||
61 | |||
58 | #endif /* _ASM_USER_H */ | 62 | #endif /* _ASM_USER_H */ |
diff --git a/include/asm-s390/unistd.h b/include/asm-s390/unistd.h index 02b942d85c37..d49c54cb5505 100644 --- a/include/asm-s390/unistd.h +++ b/include/asm-s390/unistd.h | |||
@@ -342,9 +342,11 @@ | |||
342 | 342 | ||
343 | #ifdef __KERNEL__ | 343 | #ifdef __KERNEL__ |
344 | 344 | ||
345 | #include <linux/err.h> | ||
346 | |||
345 | #define __syscall_return(type, res) \ | 347 | #define __syscall_return(type, res) \ |
346 | do { \ | 348 | do { \ |
347 | if ((unsigned long)(res) >= (unsigned long)(-4095)) {\ | 349 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
348 | errno = -(res); \ | 350 | errno = -(res); \ |
349 | res = -1; \ | 351 | res = -1; \ |
350 | } \ | 352 | } \ |
diff --git a/include/asm-sh/addrspace.h b/include/asm-sh/addrspace.h index 720afc11c2ca..b860218e402e 100644 --- a/include/asm-sh/addrspace.h +++ b/include/asm-sh/addrspace.h | |||
@@ -14,11 +14,19 @@ | |||
14 | #include <asm/cpu/addrspace.h> | 14 | #include <asm/cpu/addrspace.h> |
15 | 15 | ||
16 | /* Memory segments (32bit Privileged mode addresses) */ | 16 | /* Memory segments (32bit Privileged mode addresses) */ |
17 | #ifndef CONFIG_CPU_SH2A | ||
17 | #define P0SEG 0x00000000 | 18 | #define P0SEG 0x00000000 |
18 | #define P1SEG 0x80000000 | 19 | #define P1SEG 0x80000000 |
19 | #define P2SEG 0xa0000000 | 20 | #define P2SEG 0xa0000000 |
20 | #define P3SEG 0xc0000000 | 21 | #define P3SEG 0xc0000000 |
21 | #define P4SEG 0xe0000000 | 22 | #define P4SEG 0xe0000000 |
23 | #else | ||
24 | #define P0SEG 0x00000000 | ||
25 | #define P1SEG 0x00000000 | ||
26 | #define P2SEG 0x20000000 | ||
27 | #define P3SEG 0x00000000 | ||
28 | #define P4SEG 0x80000000 | ||
29 | #endif | ||
22 | 30 | ||
23 | /* Returns the privileged segment base of a given address */ | 31 | /* Returns the privileged segment base of a given address */ |
24 | #define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) | 32 | #define PXSEG(a) (((unsigned long)(a)) & 0xe0000000) |
diff --git a/include/asm-sh/adx/io.h b/include/asm-sh/adx/io.h deleted file mode 100644 index ab1225f1d557..000000000000 --- a/include/asm-sh/adx/io.h +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_adx.h | ||
3 | * | ||
4 | * Copyright (C) 2001 A&D Co., Ltd. | ||
5 | * | ||
6 | * This file may be copied or modified under the terms of the GNU | ||
7 | * General Public License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * IO functions for an A&D ADX Board | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_SH_IO_ADX_H | ||
13 | #define _ASM_SH_IO_ADX_H | ||
14 | |||
15 | #include <asm/io_generic.h> | ||
16 | |||
17 | extern unsigned char adx_inb(unsigned long port); | ||
18 | extern unsigned short adx_inw(unsigned long port); | ||
19 | extern unsigned int adx_inl(unsigned long port); | ||
20 | |||
21 | extern void adx_outb(unsigned char value, unsigned long port); | ||
22 | extern void adx_outw(unsigned short value, unsigned long port); | ||
23 | extern void adx_outl(unsigned int value, unsigned long port); | ||
24 | |||
25 | extern unsigned char adx_inb_p(unsigned long port); | ||
26 | extern void adx_outb_p(unsigned char value, unsigned long port); | ||
27 | |||
28 | extern void adx_insb(unsigned long port, void *addr, unsigned long count); | ||
29 | extern void adx_insw(unsigned long port, void *addr, unsigned long count); | ||
30 | extern void adx_insl(unsigned long port, void *addr, unsigned long count); | ||
31 | extern void adx_outsb(unsigned long port, const void *addr, unsigned long count); | ||
32 | extern void adx_outsw(unsigned long port, const void *addr, unsigned long count); | ||
33 | extern void adx_outsl(unsigned long port, const void *addr, unsigned long count); | ||
34 | |||
35 | extern unsigned char adx_readb(unsigned long addr); | ||
36 | extern unsigned short adx_readw(unsigned long addr); | ||
37 | extern unsigned int adx_readl(unsigned long addr); | ||
38 | extern void adx_writeb(unsigned char b, unsigned long addr); | ||
39 | extern void adx_writew(unsigned short b, unsigned long addr); | ||
40 | extern void adx_writel(unsigned int b, unsigned long addr); | ||
41 | |||
42 | extern void * adx_ioremap(unsigned long offset, unsigned long size); | ||
43 | extern void adx_iounmap(void *addr); | ||
44 | |||
45 | extern unsigned long adx_isa_port2addr(unsigned long offset); | ||
46 | |||
47 | extern void setup_adx(void); | ||
48 | extern void init_adx_IRQ(void); | ||
49 | |||
50 | #ifdef __WANT_IO_DEF | ||
51 | |||
52 | #define __inb adx_inb | ||
53 | #define __inw adx_inw | ||
54 | #define __inl adx_inl | ||
55 | #define __outb adx_outb | ||
56 | #define __outw adx_outw | ||
57 | #define __outl adx_outl | ||
58 | |||
59 | #define __inb_p adx_inb_p | ||
60 | #define __inw_p adx_inw | ||
61 | #define __inl_p adx_inl | ||
62 | #define __outb_p adx_outb_p | ||
63 | #define __outw_p adx_outw | ||
64 | #define __outl_p adx_outl | ||
65 | |||
66 | #define __insb adx_insb | ||
67 | #define __insw adx_insw | ||
68 | #define __insl adx_insl | ||
69 | #define __outsb adx_outsb | ||
70 | #define __outsw adx_outsw | ||
71 | #define __outsl adx_outsl | ||
72 | |||
73 | #define __readb adx_readb | ||
74 | #define __readw adx_readw | ||
75 | #define __readl adx_readl | ||
76 | #define __writeb adx_writeb | ||
77 | #define __writew adx_writew | ||
78 | #define __writel adx_writel | ||
79 | |||
80 | #define __isa_port2addr adx_isa_port2addr | ||
81 | #define __ioremap adx_ioremap | ||
82 | #define __iounmap adx_iounmap | ||
83 | |||
84 | #endif | ||
85 | |||
86 | #endif /* _ASM_SH_IO_AANDD_H */ | ||
diff --git a/include/asm-sh/apm.h b/include/asm-sh/apm.h new file mode 100644 index 000000000000..8b091e93651f --- /dev/null +++ b/include/asm-sh/apm.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com> | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __ASM_SH_APM_H | ||
11 | #define __ASM_SH_APM_H | ||
12 | |||
13 | #define APM_AC_OFFLINE 0 | ||
14 | #define APM_AC_ONLINE 1 | ||
15 | #define APM_AC_BACKUP 2 | ||
16 | #define APM_AC_UNKNOWN 0xff | ||
17 | |||
18 | #define APM_BATTERY_STATUS_HIGH 0 | ||
19 | #define APM_BATTERY_STATUS_LOW 1 | ||
20 | #define APM_BATTERY_STATUS_CRITICAL 2 | ||
21 | #define APM_BATTERY_STATUS_CHARGING 3 | ||
22 | #define APM_BATTERY_STATUS_NOT_PRESENT 4 | ||
23 | #define APM_BATTERY_STATUS_UNKNOWN 0xff | ||
24 | |||
25 | #define APM_BATTERY_LIFE_UNKNOWN 0xFFFF | ||
26 | #define APM_BATTERY_LIFE_MINUTES 0x8000 | ||
27 | #define APM_BATTERY_LIFE_VALUE_MASK 0x7FFF | ||
28 | |||
29 | #define APM_BATTERY_FLAG_HIGH (1 << 0) | ||
30 | #define APM_BATTERY_FLAG_LOW (1 << 1) | ||
31 | #define APM_BATTERY_FLAG_CRITICAL (1 << 2) | ||
32 | #define APM_BATTERY_FLAG_CHARGING (1 << 3) | ||
33 | #define APM_BATTERY_FLAG_NOT_PRESENT (1 << 7) | ||
34 | #define APM_BATTERY_FLAG_UNKNOWN 0xff | ||
35 | |||
36 | #define APM_UNITS_MINS 0 | ||
37 | #define APM_UNITS_SECS 1 | ||
38 | #define APM_UNITS_UNKNOWN -1 | ||
39 | |||
40 | |||
41 | extern int (*apm_get_info)(char *buf, char **start, off_t fpos, int length); | ||
42 | extern int apm_suspended; | ||
43 | |||
44 | void apm_queue_event(apm_event_t event); | ||
45 | |||
46 | #endif | ||
diff --git a/include/asm-sh/atomic.h b/include/asm-sh/atomic.h index fb627de217f2..8bdc1ba56f73 100644 --- a/include/asm-sh/atomic.h +++ b/include/asm-sh/atomic.h | |||
@@ -14,6 +14,7 @@ typedef struct { volatile int counter; } atomic_t; | |||
14 | #define atomic_read(v) ((v)->counter) | 14 | #define atomic_read(v) ((v)->counter) |
15 | #define atomic_set(v,i) ((v)->counter = (i)) | 15 | #define atomic_set(v,i) ((v)->counter = (i)) |
16 | 16 | ||
17 | #include <linux/compiler.h> | ||
17 | #include <asm/system.h> | 18 | #include <asm/system.h> |
18 | 19 | ||
19 | /* | 20 | /* |
@@ -21,49 +22,110 @@ typedef struct { volatile int counter; } atomic_t; | |||
21 | * forward to code at the end of this object's .text section, then | 22 | * forward to code at the end of this object's .text section, then |
22 | * branch back to restart the operation. | 23 | * branch back to restart the operation. |
23 | */ | 24 | */ |
24 | 25 | static inline void atomic_add(int i, atomic_t *v) | |
25 | static __inline__ void atomic_add(int i, atomic_t * v) | ||
26 | { | 26 | { |
27 | #ifdef CONFIG_CPU_SH4A | ||
28 | unsigned long tmp; | ||
29 | |||
30 | __asm__ __volatile__ ( | ||
31 | "1: movli.l @%3, %0 ! atomic_add \n" | ||
32 | " add %2, %0 \n" | ||
33 | " movco.l %0, @%3 \n" | ||
34 | " bf 1b \n" | ||
35 | : "=&z" (tmp), "=r" (&v->counter) | ||
36 | : "r" (i), "r" (&v->counter) | ||
37 | : "t"); | ||
38 | #else | ||
27 | unsigned long flags; | 39 | unsigned long flags; |
28 | 40 | ||
29 | local_irq_save(flags); | 41 | local_irq_save(flags); |
30 | *(long *)v += i; | 42 | *(long *)v += i; |
31 | local_irq_restore(flags); | 43 | local_irq_restore(flags); |
44 | #endif | ||
32 | } | 45 | } |
33 | 46 | ||
34 | static __inline__ void atomic_sub(int i, atomic_t *v) | 47 | static inline void atomic_sub(int i, atomic_t *v) |
35 | { | 48 | { |
49 | #ifdef CONFIG_CPU_SH4A | ||
50 | unsigned long tmp; | ||
51 | |||
52 | __asm__ __volatile__ ( | ||
53 | "1: movli.l @%3, %0 ! atomic_sub \n" | ||
54 | " sub %2, %0 \n" | ||
55 | " movco.l %0, @%3 \n" | ||
56 | " bf 1b \n" | ||
57 | : "=&z" (tmp), "=r" (&v->counter) | ||
58 | : "r" (i), "r" (&v->counter) | ||
59 | : "t"); | ||
60 | #else | ||
36 | unsigned long flags; | 61 | unsigned long flags; |
37 | 62 | ||
38 | local_irq_save(flags); | 63 | local_irq_save(flags); |
39 | *(long *)v -= i; | 64 | *(long *)v -= i; |
40 | local_irq_restore(flags); | 65 | local_irq_restore(flags); |
66 | #endif | ||
41 | } | 67 | } |
42 | 68 | ||
43 | static __inline__ int atomic_add_return(int i, atomic_t * v) | 69 | /* |
70 | * SH-4A note: | ||
71 | * | ||
72 | * We basically get atomic_xxx_return() for free compared with | ||
73 | * atomic_xxx(). movli.l/movco.l require r0 due to the instruction | ||
74 | * encoding, so the retval is automatically set without having to | ||
75 | * do any special work. | ||
76 | */ | ||
77 | static inline int atomic_add_return(int i, atomic_t *v) | ||
44 | { | 78 | { |
45 | unsigned long temp, flags; | 79 | unsigned long temp; |
80 | |||
81 | #ifdef CONFIG_CPU_SH4A | ||
82 | __asm__ __volatile__ ( | ||
83 | "1: movli.l @%3, %0 ! atomic_add_return \n" | ||
84 | " add %2, %0 \n" | ||
85 | " movco.l %0, @%3 \n" | ||
86 | " bf 1b \n" | ||
87 | " synco \n" | ||
88 | : "=&z" (temp), "=r" (&v->counter) | ||
89 | : "r" (i), "r" (&v->counter) | ||
90 | : "t"); | ||
91 | #else | ||
92 | unsigned long flags; | ||
46 | 93 | ||
47 | local_irq_save(flags); | 94 | local_irq_save(flags); |
48 | temp = *(long *)v; | 95 | temp = *(long *)v; |
49 | temp += i; | 96 | temp += i; |
50 | *(long *)v = temp; | 97 | *(long *)v = temp; |
51 | local_irq_restore(flags); | 98 | local_irq_restore(flags); |
99 | #endif | ||
52 | 100 | ||
53 | return temp; | 101 | return temp; |
54 | } | 102 | } |
55 | 103 | ||
56 | #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) | 104 | #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) |
57 | 105 | ||
58 | static __inline__ int atomic_sub_return(int i, atomic_t * v) | 106 | static inline int atomic_sub_return(int i, atomic_t *v) |
59 | { | 107 | { |
60 | unsigned long temp, flags; | 108 | unsigned long temp; |
109 | |||
110 | #ifdef CONFIG_CPU_SH4A | ||
111 | __asm__ __volatile__ ( | ||
112 | "1: movli.l @%3, %0 ! atomic_sub_return \n" | ||
113 | " sub %2, %0 \n" | ||
114 | " movco.l %0, @%3 \n" | ||
115 | " bf 1b \n" | ||
116 | " synco \n" | ||
117 | : "=&z" (temp), "=r" (&v->counter) | ||
118 | : "r" (i), "r" (&v->counter) | ||
119 | : "t"); | ||
120 | #else | ||
121 | unsigned long flags; | ||
61 | 122 | ||
62 | local_irq_save(flags); | 123 | local_irq_save(flags); |
63 | temp = *(long *)v; | 124 | temp = *(long *)v; |
64 | temp -= i; | 125 | temp -= i; |
65 | *(long *)v = temp; | 126 | *(long *)v = temp; |
66 | local_irq_restore(flags); | 127 | local_irq_restore(flags); |
128 | #endif | ||
67 | 129 | ||
68 | return temp; | 130 | return temp; |
69 | } | 131 | } |
@@ -118,22 +180,48 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | |||
118 | } | 180 | } |
119 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 181 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
120 | 182 | ||
121 | static __inline__ void atomic_clear_mask(unsigned int mask, atomic_t *v) | 183 | static inline void atomic_clear_mask(unsigned int mask, atomic_t *v) |
122 | { | 184 | { |
185 | #ifdef CONFIG_CPU_SH4A | ||
186 | unsigned long tmp; | ||
187 | |||
188 | __asm__ __volatile__ ( | ||
189 | "1: movli.l @%3, %0 ! atomic_clear_mask \n" | ||
190 | " and %2, %0 \n" | ||
191 | " movco.l %0, @%3 \n" | ||
192 | " bf 1b \n" | ||
193 | : "=&z" (tmp), "=r" (&v->counter) | ||
194 | : "r" (~mask), "r" (&v->counter) | ||
195 | : "t"); | ||
196 | #else | ||
123 | unsigned long flags; | 197 | unsigned long flags; |
124 | 198 | ||
125 | local_irq_save(flags); | 199 | local_irq_save(flags); |
126 | *(long *)v &= ~mask; | 200 | *(long *)v &= ~mask; |
127 | local_irq_restore(flags); | 201 | local_irq_restore(flags); |
202 | #endif | ||
128 | } | 203 | } |
129 | 204 | ||
130 | static __inline__ void atomic_set_mask(unsigned int mask, atomic_t *v) | 205 | static inline void atomic_set_mask(unsigned int mask, atomic_t *v) |
131 | { | 206 | { |
207 | #ifdef CONFIG_CPU_SH4A | ||
208 | unsigned long tmp; | ||
209 | |||
210 | __asm__ __volatile__ ( | ||
211 | "1: movli.l @%3, %0 ! atomic_set_mask \n" | ||
212 | " or %2, %0 \n" | ||
213 | " movco.l %0, @%3 \n" | ||
214 | " bf 1b \n" | ||
215 | : "=&z" (tmp), "=r" (&v->counter) | ||
216 | : "r" (mask), "r" (&v->counter) | ||
217 | : "t"); | ||
218 | #else | ||
132 | unsigned long flags; | 219 | unsigned long flags; |
133 | 220 | ||
134 | local_irq_save(flags); | 221 | local_irq_save(flags); |
135 | *(long *)v |= mask; | 222 | *(long *)v |= mask; |
136 | local_irq_restore(flags); | 223 | local_irq_restore(flags); |
224 | #endif | ||
137 | } | 225 | } |
138 | 226 | ||
139 | /* Atomic operations are already serializing on SH */ | 227 | /* Atomic operations are already serializing on SH */ |
diff --git a/include/asm-sh/auxvec.h b/include/asm-sh/auxvec.h index fc21e4db5881..1b6916e63e90 100644 --- a/include/asm-sh/auxvec.h +++ b/include/asm-sh/auxvec.h | |||
@@ -1,4 +1,18 @@ | |||
1 | #ifndef __ASM_SH_AUXVEC_H | 1 | #ifndef __ASM_SH_AUXVEC_H |
2 | #define __ASM_SH_AUXVEC_H | 2 | #define __ASM_SH_AUXVEC_H |
3 | 3 | ||
4 | /* | ||
5 | * Architecture-neutral AT_ values in 0-17, leave some room | ||
6 | * for more of them. | ||
7 | */ | ||
8 | |||
9 | #ifdef CONFIG_VSYSCALL | ||
10 | /* | ||
11 | * Only define this in the vsyscall case, the entry point to | ||
12 | * the vsyscall page gets placed here. The kernel will attempt | ||
13 | * to build a gate VMA we don't care about otherwise.. | ||
14 | */ | ||
15 | #define AT_SYSINFO_EHDR 33 | ||
16 | #endif | ||
17 | |||
4 | #endif /* __ASM_SH_AUXVEC_H */ | 18 | #endif /* __ASM_SH_AUXVEC_H */ |
diff --git a/include/asm-sh/bitops.h b/include/asm-sh/bitops.h index e34f82508568..1c16792cee1d 100644 --- a/include/asm-sh/bitops.h +++ b/include/asm-sh/bitops.h | |||
@@ -6,7 +6,7 @@ | |||
6 | /* For __swab32 */ | 6 | /* For __swab32 */ |
7 | #include <asm/byteorder.h> | 7 | #include <asm/byteorder.h> |
8 | 8 | ||
9 | static __inline__ void set_bit(int nr, volatile void * addr) | 9 | static inline void set_bit(int nr, volatile void * addr) |
10 | { | 10 | { |
11 | int mask; | 11 | int mask; |
12 | volatile unsigned int *a = addr; | 12 | volatile unsigned int *a = addr; |
@@ -24,7 +24,7 @@ static __inline__ void set_bit(int nr, volatile void * addr) | |||
24 | */ | 24 | */ |
25 | #define smp_mb__before_clear_bit() barrier() | 25 | #define smp_mb__before_clear_bit() barrier() |
26 | #define smp_mb__after_clear_bit() barrier() | 26 | #define smp_mb__after_clear_bit() barrier() |
27 | static __inline__ void clear_bit(int nr, volatile void * addr) | 27 | static inline void clear_bit(int nr, volatile void * addr) |
28 | { | 28 | { |
29 | int mask; | 29 | int mask; |
30 | volatile unsigned int *a = addr; | 30 | volatile unsigned int *a = addr; |
@@ -37,7 +37,7 @@ static __inline__ void clear_bit(int nr, volatile void * addr) | |||
37 | local_irq_restore(flags); | 37 | local_irq_restore(flags); |
38 | } | 38 | } |
39 | 39 | ||
40 | static __inline__ void change_bit(int nr, volatile void * addr) | 40 | static inline void change_bit(int nr, volatile void * addr) |
41 | { | 41 | { |
42 | int mask; | 42 | int mask; |
43 | volatile unsigned int *a = addr; | 43 | volatile unsigned int *a = addr; |
@@ -50,7 +50,7 @@ static __inline__ void change_bit(int nr, volatile void * addr) | |||
50 | local_irq_restore(flags); | 50 | local_irq_restore(flags); |
51 | } | 51 | } |
52 | 52 | ||
53 | static __inline__ int test_and_set_bit(int nr, volatile void * addr) | 53 | static inline int test_and_set_bit(int nr, volatile void * addr) |
54 | { | 54 | { |
55 | int mask, retval; | 55 | int mask, retval; |
56 | volatile unsigned int *a = addr; | 56 | volatile unsigned int *a = addr; |
@@ -66,7 +66,7 @@ static __inline__ int test_and_set_bit(int nr, volatile void * addr) | |||
66 | return retval; | 66 | return retval; |
67 | } | 67 | } |
68 | 68 | ||
69 | static __inline__ int test_and_clear_bit(int nr, volatile void * addr) | 69 | static inline int test_and_clear_bit(int nr, volatile void * addr) |
70 | { | 70 | { |
71 | int mask, retval; | 71 | int mask, retval; |
72 | volatile unsigned int *a = addr; | 72 | volatile unsigned int *a = addr; |
@@ -82,7 +82,7 @@ static __inline__ int test_and_clear_bit(int nr, volatile void * addr) | |||
82 | return retval; | 82 | return retval; |
83 | } | 83 | } |
84 | 84 | ||
85 | static __inline__ int test_and_change_bit(int nr, volatile void * addr) | 85 | static inline int test_and_change_bit(int nr, volatile void * addr) |
86 | { | 86 | { |
87 | int mask, retval; | 87 | int mask, retval; |
88 | volatile unsigned int *a = addr; | 88 | volatile unsigned int *a = addr; |
@@ -100,7 +100,7 @@ static __inline__ int test_and_change_bit(int nr, volatile void * addr) | |||
100 | 100 | ||
101 | #include <asm-generic/bitops/non-atomic.h> | 101 | #include <asm-generic/bitops/non-atomic.h> |
102 | 102 | ||
103 | static __inline__ unsigned long ffz(unsigned long word) | 103 | static inline unsigned long ffz(unsigned long word) |
104 | { | 104 | { |
105 | unsigned long result; | 105 | unsigned long result; |
106 | 106 | ||
@@ -120,7 +120,7 @@ static __inline__ unsigned long ffz(unsigned long word) | |||
120 | * | 120 | * |
121 | * Undefined if no bit exists, so code should check against 0 first. | 121 | * Undefined if no bit exists, so code should check against 0 first. |
122 | */ | 122 | */ |
123 | static __inline__ unsigned long __ffs(unsigned long word) | 123 | static inline unsigned long __ffs(unsigned long word) |
124 | { | 124 | { |
125 | unsigned long result; | 125 | unsigned long result; |
126 | 126 | ||
diff --git a/include/asm-sh/bugs.h b/include/asm-sh/bugs.h index a6de3d06a3d9..b4000c8bf31b 100644 --- a/include/asm-sh/bugs.h +++ b/include/asm-sh/bugs.h | |||
@@ -32,6 +32,10 @@ static void __init check_bugs(void) | |||
32 | case CPU_SH7750 ... CPU_SH4_501: | 32 | case CPU_SH7750 ... CPU_SH4_501: |
33 | *p++ = '4'; | 33 | *p++ = '4'; |
34 | break; | 34 | break; |
35 | case CPU_SH7770 ... CPU_SH7781: | ||
36 | *p++ = '4'; | ||
37 | *p++ = 'a'; | ||
38 | break; | ||
35 | default: | 39 | default: |
36 | *p++ = '?'; | 40 | *p++ = '?'; |
37 | *p++ = '!'; | 41 | *p++ = '!'; |
diff --git a/include/asm-sh/cache.h b/include/asm-sh/cache.h index 656fdfe9e8b4..e3a180cf5062 100644 --- a/include/asm-sh/cache.h +++ b/include/asm-sh/cache.h | |||
@@ -10,7 +10,6 @@ | |||
10 | #ifdef __KERNEL__ | 10 | #ifdef __KERNEL__ |
11 | 11 | ||
12 | #include <asm/cpu/cache.h> | 12 | #include <asm/cpu/cache.h> |
13 | #include <asm/cpu/cacheflush.h> | ||
14 | 13 | ||
15 | #define SH_CACHE_VALID 1 | 14 | #define SH_CACHE_VALID 1 |
16 | #define SH_CACHE_UPDATED 2 | 15 | #define SH_CACHE_UPDATED 2 |
@@ -23,24 +22,31 @@ | |||
23 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) | 22 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) |
24 | 23 | ||
25 | struct cache_info { | 24 | struct cache_info { |
26 | unsigned int ways; | 25 | unsigned int ways; /* Number of cache ways */ |
27 | unsigned int sets; | 26 | unsigned int sets; /* Number of cache sets */ |
28 | unsigned int linesz; | 27 | unsigned int linesz; /* Cache line size (bytes) */ |
29 | 28 | ||
30 | unsigned int way_incr; | 29 | unsigned int way_size; /* sets * line size */ |
31 | 30 | ||
31 | /* | ||
32 | * way_incr is the address offset for accessing the next way | ||
33 | * in memory mapped cache array ops. | ||
34 | */ | ||
35 | unsigned int way_incr; | ||
32 | unsigned int entry_shift; | 36 | unsigned int entry_shift; |
33 | unsigned int entry_mask; | 37 | unsigned int entry_mask; |
34 | 38 | ||
39 | /* | ||
40 | * Compute a mask which selects the address bits which overlap between | ||
41 | * 1. those used to select the cache set during indexing | ||
42 | * 2. those in the physical page number. | ||
43 | */ | ||
44 | unsigned int alias_mask; | ||
45 | |||
46 | unsigned int n_aliases; /* Number of aliases */ | ||
47 | |||
35 | unsigned long flags; | 48 | unsigned long flags; |
36 | }; | 49 | }; |
37 | 50 | ||
38 | /* Flush (write-back only) a region (smaller than a page) */ | ||
39 | extern void __flush_wback_region(void *start, int size); | ||
40 | /* Flush (write-back & invalidate) a region (smaller than a page) */ | ||
41 | extern void __flush_purge_region(void *start, int size); | ||
42 | /* Flush (invalidate only) a region (smaller than a page) */ | ||
43 | extern void __flush_invalidate_region(void *start, int size); | ||
44 | |||
45 | #endif /* __KERNEL__ */ | 51 | #endif /* __KERNEL__ */ |
46 | #endif /* __ASM_SH_CACHE_H */ | 52 | #endif /* __ASM_SH_CACHE_H */ |
diff --git a/include/asm-sh/cacheflush.h b/include/asm-sh/cacheflush.h index 9dfb33edb008..07f62ec9ff0c 100644 --- a/include/asm-sh/cacheflush.h +++ b/include/asm-sh/cacheflush.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __ASM_SH_CACHEFLUSH_H | 2 | #define __ASM_SH_CACHEFLUSH_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/mm.h> | ||
5 | #include <asm/cpu/cacheflush.h> | 6 | #include <asm/cpu/cacheflush.h> |
6 | 7 | ||
7 | /* Flush (write-back only) a region (smaller than a page) */ | 8 | /* Flush (write-back only) a region (smaller than a page) */ |
@@ -27,5 +28,7 @@ extern void __flush_invalidate_region(void *start, int size); | |||
27 | memcpy(dst, src, len); \ | 28 | memcpy(dst, src, len); \ |
28 | } while (0) | 29 | } while (0) |
29 | 30 | ||
31 | #define HAVE_ARCH_UNMAPPED_AREA | ||
32 | |||
30 | #endif /* __KERNEL__ */ | 33 | #endif /* __KERNEL__ */ |
31 | #endif /* __ASM_SH_CACHEFLUSH_H */ | 34 | #endif /* __ASM_SH_CACHEFLUSH_H */ |
diff --git a/include/asm-sh/cat68701/io.h b/include/asm-sh/cat68701/io.h deleted file mode 100644 index 753b8466ad11..000000000000 --- a/include/asm-sh/cat68701/io.h +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_cat68701.h | ||
3 | * | ||
4 | * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * 2001 Yutarou Ebihar (ebihara@si-linux.com) | ||
6 | * | ||
7 | * May be copied or modified under the terms of the GNU General Public | ||
8 | * License. See linux/COPYING for more information. | ||
9 | * | ||
10 | * IO functions for an AONE Corp. CAT-68701 SH7708 Borad | ||
11 | */ | ||
12 | |||
13 | #ifndef _ASM_SH_IO_CAT68701_H | ||
14 | #define _ASM_SH_IO_CAT68701_H | ||
15 | |||
16 | extern unsigned long cat68701_isa_port2addr(unsigned long offset); | ||
17 | extern int cat68701_irq_demux(int irq); | ||
18 | |||
19 | extern void init_cat68701_IRQ(void); | ||
20 | extern void heartbeat_cat68701(void); | ||
21 | |||
22 | #endif /* _ASM_SH_IO_CAT68701_H */ | ||
diff --git a/include/asm-sh/checksum.h b/include/asm-sh/checksum.h index fa03b30c4269..08168afe6746 100644 --- a/include/asm-sh/checksum.h +++ b/include/asm-sh/checksum.h | |||
@@ -159,6 +159,7 @@ static __inline__ unsigned short ip_compute_csum(unsigned char * buff, int len) | |||
159 | } | 159 | } |
160 | 160 | ||
161 | #define _HAVE_ARCH_IPV6_CSUM | 161 | #define _HAVE_ARCH_IPV6_CSUM |
162 | #ifdef CONFIG_IPV6 | ||
162 | static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, | 163 | static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, |
163 | struct in6_addr *daddr, | 164 | struct in6_addr *daddr, |
164 | __u32 len, | 165 | __u32 len, |
@@ -194,6 +195,7 @@ static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, | |||
194 | 195 | ||
195 | return csum_fold(sum); | 196 | return csum_fold(sum); |
196 | } | 197 | } |
198 | #endif | ||
197 | 199 | ||
198 | /* | 200 | /* |
199 | * Copy and checksum to user | 201 | * Copy and checksum to user |
diff --git a/include/asm-sh/cpu-features.h b/include/asm-sh/cpu-features.h new file mode 100644 index 000000000000..4bccd7c032f9 --- /dev/null +++ b/include/asm-sh/cpu-features.h | |||
@@ -0,0 +1,24 @@ | |||
1 | #ifndef __ASM_SH_CPU_FEATURES_H | ||
2 | #define __ASM_SH_CPU_FEATURES_H | ||
3 | |||
4 | /* | ||
5 | * Processor flags | ||
6 | * | ||
7 | * Note: When adding a new flag, keep cpu_flags[] in | ||
8 | * arch/sh/kernel/setup.c in sync so symbolic name | ||
9 | * mapping of the processor flags has a chance of being | ||
10 | * reasonably accurate. | ||
11 | * | ||
12 | * These flags are also available through the ELF | ||
13 | * auxiliary vector as AT_HWCAP. | ||
14 | */ | ||
15 | #define CPU_HAS_FPU 0x0001 /* Hardware FPU support */ | ||
16 | #define CPU_HAS_P2_FLUSH_BUG 0x0002 /* Need to flush the cache in P2 area */ | ||
17 | #define CPU_HAS_MMU_PAGE_ASSOC 0x0004 /* SH3: TLB way selection bit support */ | ||
18 | #define CPU_HAS_DSP 0x0008 /* SH-DSP: DSP support */ | ||
19 | #define CPU_HAS_PERF_COUNTER 0x0010 /* Hardware performance counters */ | ||
20 | #define CPU_HAS_PTEA 0x0020 /* PTEA register */ | ||
21 | #define CPU_HAS_LLSC 0x0040 /* movli.l/movco.l */ | ||
22 | #define CPU_HAS_L2_CACHE 0x0080 /* Secondary cache / URAM */ | ||
23 | |||
24 | #endif /* __ASM_SH_CPU_FEATURES_H */ | ||
diff --git a/include/asm-sh/cpu-sh2/shmparam.h b/include/asm-sh/cpu-sh2/shmparam.h deleted file mode 100644 index 817c1821ee4b..000000000000 --- a/include/asm-sh/cpu-sh2/shmparam.h +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh2/shmparam.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Paul Mundt | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH2_SHMPARAM_H | ||
11 | #define __ASM_CPU_SH2_SHMPARAM_H | ||
12 | |||
13 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | ||
14 | |||
15 | #endif /* __ASM_CPU_SH2_SHMPARAM_H */ | ||
16 | |||
diff --git a/include/asm-sh/cpu-sh3/cache.h b/include/asm-sh/cpu-sh3/cache.h index 406aa8d9b947..ffe08d2813f9 100644 --- a/include/asm-sh/cpu-sh3/cache.h +++ b/include/asm-sh/cpu-sh3/cache.h | |||
@@ -26,12 +26,10 @@ | |||
26 | #define CCR_CACHE_ENABLE CCR_CACHE_CE | 26 | #define CCR_CACHE_ENABLE CCR_CACHE_CE |
27 | #define CCR_CACHE_INVALIDATE CCR_CACHE_CF | 27 | #define CCR_CACHE_INVALIDATE CCR_CACHE_CF |
28 | 28 | ||
29 | #if defined(CONFIG_CPU_SUBTYPE_SH7705) | 29 | #if defined(CONFIG_CPU_SUBTYPE_SH7705) || defined(CONFIG_CPU_SUBTYPE_SH7710) |
30 | #define CCR3 0xa40000b4 | 30 | #define CCR3 0xa40000b4 |
31 | #define CCR_CACHE_16KB 0x00010000 | 31 | #define CCR_CACHE_16KB 0x00010000 |
32 | #define CCR_CACHE_32KB 0x00020000 | 32 | #define CCR_CACHE_32KB 0x00020000 |
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | |||
36 | #endif /* __ASM_CPU_SH3_CACHE_H */ | 35 | #endif /* __ASM_CPU_SH3_CACHE_H */ |
37 | |||
diff --git a/include/asm-sh/cpu-sh3/cacheflush.h b/include/asm-sh/cpu-sh3/cacheflush.h index f51aed00c68f..03fde97a7fd0 100644 --- a/include/asm-sh/cpu-sh3/cacheflush.h +++ b/include/asm-sh/cpu-sh3/cacheflush.h | |||
@@ -10,7 +10,7 @@ | |||
10 | #ifndef __ASM_CPU_SH3_CACHEFLUSH_H | 10 | #ifndef __ASM_CPU_SH3_CACHEFLUSH_H |
11 | #define __ASM_CPU_SH3_CACHEFLUSH_H | 11 | #define __ASM_CPU_SH3_CACHEFLUSH_H |
12 | 12 | ||
13 | /* | 13 | /* |
14 | * Cache flushing: | 14 | * Cache flushing: |
15 | * | 15 | * |
16 | * - flush_cache_all() flushes entire cache | 16 | * - flush_cache_all() flushes entire cache |
@@ -35,53 +35,33 @@ | |||
35 | /* 32KB cache, 4kb PAGE sizes need to check bit 12 */ | 35 | /* 32KB cache, 4kb PAGE sizes need to check bit 12 */ |
36 | #define CACHE_ALIAS 0x00001000 | 36 | #define CACHE_ALIAS 0x00001000 |
37 | 37 | ||
38 | struct page; | ||
39 | struct mm_struct; | ||
40 | struct vm_area_struct; | ||
41 | |||
42 | extern void flush_cache_all(void); | ||
43 | extern void flush_cache_mm(struct mm_struct *mm); | ||
44 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | ||
45 | unsigned long end); | ||
46 | extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); | ||
47 | extern void flush_dcache_page(struct page *pg); | ||
48 | extern void flush_icache_range(unsigned long start, unsigned long end); | ||
49 | extern void flush_icache_page(struct vm_area_struct *vma, struct page *page); | ||
50 | |||
51 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
52 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
53 | |||
54 | /* SH3 has unified cache so no special action needed here */ | ||
55 | #define flush_cache_sigtramp(vaddr) do { } while (0) | ||
56 | #define flush_page_to_ram(page) do { } while (0) | ||
57 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | ||
58 | |||
59 | #define p3_cache_init() do { } while (0) | ||
60 | |||
61 | #define PG_mapped PG_arch_1 | 38 | #define PG_mapped PG_arch_1 |
62 | 39 | ||
63 | /* We provide our own get_unmapped_area to avoid cache alias issue */ | 40 | void flush_cache_all(void); |
64 | #define HAVE_ARCH_UNMAPPED_AREA | 41 | void flush_cache_mm(struct mm_struct *mm); |
65 | 42 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | |
43 | unsigned long end); | ||
44 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); | ||
45 | void flush_dcache_page(struct page *pg); | ||
46 | void flush_icache_range(unsigned long start, unsigned long end); | ||
47 | void flush_icache_page(struct vm_area_struct *vma, struct page *page); | ||
66 | #else | 48 | #else |
67 | |||
68 | #define flush_cache_all() do { } while (0) | 49 | #define flush_cache_all() do { } while (0) |
69 | #define flush_cache_mm(mm) do { } while (0) | 50 | #define flush_cache_mm(mm) do { } while (0) |
70 | #define flush_cache_range(vma, start, end) do { } while (0) | 51 | #define flush_cache_range(vma, start, end) do { } while (0) |
71 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) | 52 | #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) |
72 | #define flush_dcache_page(page) do { } while (0) | 53 | #define flush_dcache_page(page) do { } while (0) |
73 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
74 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
75 | #define flush_icache_range(start, end) do { } while (0) | 54 | #define flush_icache_range(start, end) do { } while (0) |
76 | #define flush_icache_page(vma,pg) do { } while (0) | 55 | #define flush_icache_page(vma,pg) do { } while (0) |
77 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | 56 | #endif |
78 | #define flush_cache_sigtramp(vaddr) do { } while (0) | ||
79 | 57 | ||
80 | #define p3_cache_init() do { } while (0) | 58 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
59 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
81 | 60 | ||
82 | #define HAVE_ARCH_UNMAPPED_AREA | 61 | /* SH3 has unified cache so no special action needed here */ |
62 | #define flush_cache_sigtramp(vaddr) do { } while (0) | ||
63 | #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) | ||
83 | 64 | ||
84 | #endif | 65 | #define p3_cache_init() do { } while (0) |
85 | 66 | ||
86 | #endif /* __ASM_CPU_SH3_CACHEFLUSH_H */ | 67 | #endif /* __ASM_CPU_SH3_CACHEFLUSH_H */ |
87 | |||
diff --git a/include/asm-sh/cpu-sh3/freq.h b/include/asm-sh/cpu-sh3/freq.h index b61b6e331df0..273f3229785c 100644 --- a/include/asm-sh/cpu-sh3/freq.h +++ b/include/asm-sh/cpu-sh3/freq.h | |||
@@ -18,5 +18,9 @@ | |||
18 | #define MIN_DIVISOR_NR 0 | 18 | #define MIN_DIVISOR_NR 0 |
19 | #define MAX_DIVISOR_NR 4 | 19 | #define MAX_DIVISOR_NR 4 |
20 | 20 | ||
21 | #define FRQCR_CKOEN 0x0100 | ||
22 | #define FRQCR_PLLEN 0x0080 | ||
23 | #define FRQCR_PSTBY 0x0040 | ||
24 | |||
21 | #endif /* __ASM_CPU_SH3_FREQ_H */ | 25 | #endif /* __ASM_CPU_SH3_FREQ_H */ |
22 | 26 | ||
diff --git a/include/asm-sh/cpu-sh3/mmu_context.h b/include/asm-sh/cpu-sh3/mmu_context.h index a844ea0965b6..bccb7ddb438b 100644 --- a/include/asm-sh/cpu-sh3/mmu_context.h +++ b/include/asm-sh/cpu-sh3/mmu_context.h | |||
@@ -27,8 +27,12 @@ | |||
27 | #define TRA 0xffffffd0 | 27 | #define TRA 0xffffffd0 |
28 | #define EXPEVT 0xffffffd4 | 28 | #define EXPEVT 0xffffffd4 |
29 | 29 | ||
30 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | 30 | #if defined(CONFIG_CPU_SUBTYPE_SH7707) || \ |
31 | defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7705) | 31 | defined(CONFIG_CPU_SUBTYPE_SH7709) || \ |
32 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
33 | defined(CONFIG_CPU_SUBTYPE_SH7300) || \ | ||
34 | defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | ||
35 | defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
32 | #define INTEVT 0xa4000000 /* INTEVTE2(0xa4000000) */ | 36 | #define INTEVT 0xa4000000 /* INTEVTE2(0xa4000000) */ |
33 | #else | 37 | #else |
34 | #define INTEVT 0xffffffd8 | 38 | #define INTEVT 0xffffffd8 |
diff --git a/include/asm-sh/cpu-sh3/shmparam.h b/include/asm-sh/cpu-sh3/shmparam.h deleted file mode 100644 index da5b5eec81ee..000000000000 --- a/include/asm-sh/cpu-sh3/shmparam.h +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh3/shmparam.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Niibe Yutaka | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH3_SHMPARAM_H | ||
11 | #define __ASM_CPU_SH3_SHMPARAM_H | ||
12 | |||
13 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ | ||
14 | |||
15 | #endif /* __ASM_CPU_SH3_SHMPARAM_H */ | ||
16 | |||
diff --git a/include/asm-sh/cpu-sh3/timer.h b/include/asm-sh/cpu-sh3/timer.h index 3d8e95e8d10c..b2394cf76f49 100644 --- a/include/asm-sh/cpu-sh3/timer.h +++ b/include/asm-sh/cpu-sh3/timer.h | |||
@@ -20,9 +20,14 @@ | |||
20 | * SH7710 | 20 | * SH7710 |
21 | * SH7720 | 21 | * SH7720 |
22 | * SH7300 | 22 | * SH7300 |
23 | * SH7710 | ||
23 | * --------------------------------------------------------------------------- | 24 | * --------------------------------------------------------------------------- |
24 | */ | 25 | */ |
25 | 26 | ||
27 | #if !defined(CONFIG_CPU_SUBTYPE_SH7727) | ||
28 | #define TMU_TOCR 0xfffffe90 /* Byte access */ | ||
29 | #endif | ||
30 | |||
26 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7710) | 31 | #if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7710) |
27 | #define TMU_TSTR 0xa412fe92 /* Byte access */ | 32 | #define TMU_TSTR 0xa412fe92 /* Byte access */ |
28 | 33 | ||
@@ -39,9 +44,6 @@ | |||
39 | #define TMU2_TCR 0xa412feb4 /* Word access */ | 44 | #define TMU2_TCR 0xa412feb4 /* Word access */ |
40 | 45 | ||
41 | #else | 46 | #else |
42 | #if !defined(CONFIG_CPU_SUBTYPE_SH7727) | ||
43 | #define TMU_TOCR 0xfffffe90 /* Byte access */ | ||
44 | #endif | ||
45 | #define TMU_TSTR 0xfffffe92 /* Byte access */ | 47 | #define TMU_TSTR 0xfffffe92 /* Byte access */ |
46 | 48 | ||
47 | #define TMU0_TCOR 0xfffffe94 /* Long access */ | 49 | #define TMU0_TCOR 0xfffffe94 /* Long access */ |
diff --git a/include/asm-sh/cpu-sh3/ubc.h b/include/asm-sh/cpu-sh3/ubc.h index 0f809dec4e17..9d308cbe9b29 100644 --- a/include/asm-sh/cpu-sh3/ubc.h +++ b/include/asm-sh/cpu-sh3/ubc.h | |||
@@ -11,6 +11,19 @@ | |||
11 | #ifndef __ASM_CPU_SH3_UBC_H | 11 | #ifndef __ASM_CPU_SH3_UBC_H |
12 | #define __ASM_CPU_SH3_UBC_H | 12 | #define __ASM_CPU_SH3_UBC_H |
13 | 13 | ||
14 | #if defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
15 | #define UBC_BARA 0xa4ffffb0 | ||
16 | #define UBC_BAMRA 0xa4ffffb4 | ||
17 | #define UBC_BBRA 0xa4ffffb8 | ||
18 | #define UBC_BASRA 0xffffffe4 | ||
19 | #define UBC_BARB 0xa4ffffa0 | ||
20 | #define UBC_BAMRB 0xa4ffffa4 | ||
21 | #define UBC_BBRB 0xa4ffffa8 | ||
22 | #define UBC_BASRB 0xffffffe8 | ||
23 | #define UBC_BDRB 0xa4ffff90 | ||
24 | #define UBC_BDMRB 0xa4ffff94 | ||
25 | #define UBC_BRCR 0xa4ffff98 | ||
26 | #else | ||
14 | #define UBC_BARA 0xffffffb0 | 27 | #define UBC_BARA 0xffffffb0 |
15 | #define UBC_BAMRA 0xffffffb4 | 28 | #define UBC_BAMRA 0xffffffb4 |
16 | #define UBC_BBRA 0xffffffb8 | 29 | #define UBC_BBRA 0xffffffb8 |
@@ -22,6 +35,6 @@ | |||
22 | #define UBC_BDRB 0xffffff90 | 35 | #define UBC_BDRB 0xffffff90 |
23 | #define UBC_BDMRB 0xffffff94 | 36 | #define UBC_BDMRB 0xffffff94 |
24 | #define UBC_BRCR 0xffffff98 | 37 | #define UBC_BRCR 0xffffff98 |
38 | #endif | ||
25 | 39 | ||
26 | #endif /* __ASM_CPU_SH3_UBC_H */ | 40 | #endif /* __ASM_CPU_SH3_UBC_H */ |
27 | |||
diff --git a/include/asm-sh/cpu-sh4/addrspace.h b/include/asm-sh/cpu-sh4/addrspace.h index 727634d886ce..bb2e1b03060c 100644 --- a/include/asm-sh/cpu-sh4/addrspace.h +++ b/include/asm-sh/cpu-sh4/addrspace.h | |||
@@ -22,5 +22,8 @@ | |||
22 | #define P4SEG_TLB_DATA 0xf7000000 | 22 | #define P4SEG_TLB_DATA 0xf7000000 |
23 | #define P4SEG_REG_BASE 0xff000000 | 23 | #define P4SEG_REG_BASE 0xff000000 |
24 | 24 | ||
25 | #define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ | ||
26 | #define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ | ||
27 | |||
25 | #endif /* __ASM_CPU_SH4_ADDRSPACE_H */ | 28 | #endif /* __ASM_CPU_SH4_ADDRSPACE_H */ |
26 | 29 | ||
diff --git a/include/asm-sh/cpu-sh4/cache.h b/include/asm-sh/cpu-sh4/cache.h index 1fe20359312c..6e9c7e6ee8e4 100644 --- a/include/asm-sh/cpu-sh4/cache.h +++ b/include/asm-sh/cpu-sh4/cache.h | |||
@@ -22,7 +22,9 @@ | |||
22 | #define CCR_CACHE_ICE 0x0100 /* Instruction Cache Enable */ | 22 | #define CCR_CACHE_ICE 0x0100 /* Instruction Cache Enable */ |
23 | #define CCR_CACHE_ICI 0x0800 /* IC Invalidate */ | 23 | #define CCR_CACHE_ICI 0x0800 /* IC Invalidate */ |
24 | #define CCR_CACHE_IIX 0x8000 /* IC Index Enable */ | 24 | #define CCR_CACHE_IIX 0x8000 /* IC Index Enable */ |
25 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 | ||
25 | #define CCR_CACHE_EMODE 0x80000000 /* EMODE Enable */ | 26 | #define CCR_CACHE_EMODE 0x80000000 /* EMODE Enable */ |
27 | #endif | ||
26 | 28 | ||
27 | /* Default CCR setup: 8k+16k-byte cache,P1-wb,enable */ | 29 | /* Default CCR setup: 8k+16k-byte cache,P1-wb,enable */ |
28 | #define CCR_CACHE_ENABLE (CCR_CACHE_OCE|CCR_CACHE_ICE) | 30 | #define CCR_CACHE_ENABLE (CCR_CACHE_OCE|CCR_CACHE_ICE) |
diff --git a/include/asm-sh/cpu-sh4/cacheflush.h b/include/asm-sh/cpu-sh4/cacheflush.h index f323567e085f..515fd574267c 100644 --- a/include/asm-sh/cpu-sh4/cacheflush.h +++ b/include/asm-sh/cpu-sh4/cacheflush.h | |||
@@ -16,40 +16,29 @@ | |||
16 | * caching; in which case they're only semi-broken), | 16 | * caching; in which case they're only semi-broken), |
17 | * so we need them. | 17 | * so we need them. |
18 | */ | 18 | */ |
19 | 19 | void flush_cache_all(void); | |
20 | /* Page is 4K, OC size is 16K, there are four lines. */ | 20 | void flush_cache_mm(struct mm_struct *mm); |
21 | #define CACHE_ALIAS 0x00003000 | 21 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, |
22 | 22 | unsigned long end); | |
23 | struct page; | 23 | void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, |
24 | struct mm_struct; | 24 | unsigned long pfn); |
25 | struct vm_area_struct; | 25 | void flush_dcache_page(struct page *pg); |
26 | |||
27 | extern void flush_cache_all(void); | ||
28 | extern void flush_cache_mm(struct mm_struct *mm); | ||
29 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, | ||
30 | unsigned long end); | ||
31 | extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); | ||
32 | extern void flush_dcache_page(struct page *pg); | ||
33 | 26 | ||
34 | #define flush_dcache_mmap_lock(mapping) do { } while (0) | 27 | #define flush_dcache_mmap_lock(mapping) do { } while (0) |
35 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) | 28 | #define flush_dcache_mmap_unlock(mapping) do { } while (0) |
36 | 29 | ||
37 | extern void flush_icache_range(unsigned long start, unsigned long end); | 30 | void flush_icache_range(unsigned long start, unsigned long end); |
38 | extern void flush_cache_sigtramp(unsigned long addr); | 31 | void flush_cache_sigtramp(unsigned long addr); |
39 | extern void flush_icache_user_range(struct vm_area_struct *vma, | 32 | void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, |
40 | struct page *page, unsigned long addr, | 33 | unsigned long addr, int len); |
41 | int len); | ||
42 | 34 | ||
43 | #define flush_icache_page(vma,pg) do { } while (0) | 35 | #define flush_icache_page(vma,pg) do { } while (0) |
44 | 36 | ||
45 | /* Initialization of P3 area for copy_user_page */ | 37 | /* Initialization of P3 area for copy_user_page */ |
46 | extern void p3_cache_init(void); | 38 | void p3_cache_init(void); |
47 | 39 | ||
48 | #define PG_mapped PG_arch_1 | 40 | #define PG_mapped PG_arch_1 |
49 | 41 | ||
50 | /* We provide our own get_unmapped_area to avoid cache alias issue */ | ||
51 | #define HAVE_ARCH_UNMAPPED_AREA | ||
52 | |||
53 | #ifdef CONFIG_MMU | 42 | #ifdef CONFIG_MMU |
54 | extern int remap_area_pages(unsigned long addr, unsigned long phys_addr, | 43 | extern int remap_area_pages(unsigned long addr, unsigned long phys_addr, |
55 | unsigned long size, unsigned long flags); | 44 | unsigned long size, unsigned long flags); |
@@ -61,4 +50,3 @@ static inline int remap_area_pages(unsigned long addr, unsigned long phys_addr, | |||
61 | } | 50 | } |
62 | #endif /* CONFIG_MMU */ | 51 | #endif /* CONFIG_MMU */ |
63 | #endif /* __ASM_CPU_SH4_CACHEFLUSH_H */ | 52 | #endif /* __ASM_CPU_SH4_CACHEFLUSH_H */ |
64 | |||
diff --git a/include/asm-sh/cpu-sh4/dma-sh7780.h b/include/asm-sh/cpu-sh4/dma-sh7780.h new file mode 100644 index 000000000000..6c90d28331b2 --- /dev/null +++ b/include/asm-sh/cpu-sh4/dma-sh7780.h | |||
@@ -0,0 +1,39 @@ | |||
1 | #ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
2 | #define __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
3 | |||
4 | #define REQ_HE 0x000000C0 | ||
5 | #define REQ_H 0x00000080 | ||
6 | #define REQ_LE 0x00000040 | ||
7 | #define TM_BURST 0x0000020 | ||
8 | #define TS_8 0x00000000 | ||
9 | #define TS_16 0x00000008 | ||
10 | #define TS_32 0x00000010 | ||
11 | #define TS_16BLK 0x00000018 | ||
12 | #define TS_32BLK 0x00100000 | ||
13 | |||
14 | /* | ||
15 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | ||
16 | * with their respective values as they appear in the CHCR registers. | ||
17 | * | ||
18 | * Defaults to a 64-bit transfer size. | ||
19 | */ | ||
20 | enum { | ||
21 | XMIT_SZ_8BIT, | ||
22 | XMIT_SZ_16BIT, | ||
23 | XMIT_SZ_32BIT, | ||
24 | XMIT_SZ_128BIT, | ||
25 | XMIT_SZ_256BIT, | ||
26 | }; | ||
27 | |||
28 | /* | ||
29 | * The DMA count is defined as the number of bytes to transfer. | ||
30 | */ | ||
31 | static unsigned int __attribute__ ((used)) ts_shift[] = { | ||
32 | [XMIT_SZ_8BIT] = 0, | ||
33 | [XMIT_SZ_16BIT] = 1, | ||
34 | [XMIT_SZ_32BIT] = 2, | ||
35 | [XMIT_SZ_128BIT] = 4, | ||
36 | [XMIT_SZ_256BIT] = 5, | ||
37 | }; | ||
38 | |||
39 | #endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ | ||
diff --git a/include/asm-sh/cpu-sh4/dma.h b/include/asm-sh/cpu-sh4/dma.h index 0dfe61f14802..3e4b3e6d80c0 100644 --- a/include/asm-sh/cpu-sh4/dma.h +++ b/include/asm-sh/cpu-sh4/dma.h | |||
@@ -1,11 +1,17 @@ | |||
1 | #ifndef __ASM_CPU_SH4_DMA_H | 1 | #ifndef __ASM_CPU_SH4_DMA_H |
2 | #define __ASM_CPU_SH4_DMA_H | 2 | #define __ASM_CPU_SH4_DMA_H |
3 | 3 | ||
4 | #define DMAOR_INIT ( 0x8000 | DMAOR_DME ) | ||
5 | |||
4 | #ifdef CONFIG_CPU_SH4A | 6 | #ifdef CONFIG_CPU_SH4A |
5 | #define SH_DMAC_BASE 0xfc808020 | 7 | #define SH_DMAC_BASE 0xfc808020 |
8 | |||
9 | #define CHCR_TS_MASK 0x18 | ||
10 | #define CHCR_TS_SHIFT 3 | ||
11 | |||
12 | #include <asm/cpu/dma-sh7780.h> | ||
6 | #else | 13 | #else |
7 | #define SH_DMAC_BASE 0xffa00000 | 14 | #define SH_DMAC_BASE 0xffa00000 |
8 | #endif | ||
9 | 15 | ||
10 | /* Definitions for the SuperH DMAC */ | 16 | /* Definitions for the SuperH DMAC */ |
11 | #define TM_BURST 0x0000080 | 17 | #define TM_BURST 0x0000080 |
@@ -19,8 +25,6 @@ | |||
19 | 25 | ||
20 | #define DMAOR_COD 0x00000008 | 26 | #define DMAOR_COD 0x00000008 |
21 | 27 | ||
22 | #define DMAOR_INIT ( 0x8000 | DMAOR_DME ) | ||
23 | |||
24 | /* | 28 | /* |
25 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | 29 | * The SuperH DMAC supports a number of transmit sizes, we list them here, |
26 | * with their respective values as they appear in the CHCR registers. | 30 | * with their respective values as they appear in the CHCR registers. |
@@ -45,5 +49,6 @@ static unsigned int ts_shift[] __attribute__ ((used)) = { | |||
45 | [XMIT_SZ_32BIT] = 2, | 49 | [XMIT_SZ_32BIT] = 2, |
46 | [XMIT_SZ_256BIT] = 5, | 50 | [XMIT_SZ_256BIT] = 5, |
47 | }; | 51 | }; |
52 | #endif | ||
48 | 53 | ||
49 | #endif /* __ASM_CPU_SH4_DMA_H */ | 54 | #endif /* __ASM_CPU_SH4_DMA_H */ |
diff --git a/include/asm-sh/cpu-sh4/shmparam.h b/include/asm-sh/cpu-sh4/shmparam.h deleted file mode 100644 index a5a0aa9425fe..000000000000 --- a/include/asm-sh/cpu-sh4/shmparam.h +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/cpu-sh4/shmparam.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Niibe Yutaka | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #ifndef __ASM_CPU_SH4_SHMPARAM_H | ||
11 | #define __ASM_CPU_SH4_SHMPARAM_H | ||
12 | |||
13 | /* | ||
14 | * SH-4 has D-cache alias issue | ||
15 | */ | ||
16 | #define SHMLBA (PAGE_SIZE*4) /* attach addr a multiple of this */ | ||
17 | |||
18 | #endif /* __ASM_CPU_SH4_SHMPARAM_H */ | ||
19 | |||
diff --git a/include/asm-sh/cpu-sh4/sq.h b/include/asm-sh/cpu-sh4/sq.h index 366b09166d3b..586d6491816a 100644 --- a/include/asm-sh/cpu-sh4/sq.h +++ b/include/asm-sh/cpu-sh4/sq.h | |||
@@ -17,7 +17,7 @@ | |||
17 | * Store queues range from e0000000-e3fffffc, allowing approx. 64MB to be | 17 | * Store queues range from e0000000-e3fffffc, allowing approx. 64MB to be |
18 | * mapped to any physical address space. Since data is written (and aligned) | 18 | * mapped to any physical address space. Since data is written (and aligned) |
19 | * to 32-byte boundaries, we need to be sure that all allocations are aligned. | 19 | * to 32-byte boundaries, we need to be sure that all allocations are aligned. |
20 | */ | 20 | */ |
21 | #define SQ_SIZE 32 | 21 | #define SQ_SIZE 32 |
22 | #define SQ_ALIGN_MASK (~(SQ_SIZE - 1)) | 22 | #define SQ_ALIGN_MASK (~(SQ_SIZE - 1)) |
23 | #define SQ_ALIGN(addr) (((addr)+SQ_SIZE-1) & SQ_ALIGN_MASK) | 23 | #define SQ_ALIGN(addr) (((addr)+SQ_SIZE-1) & SQ_ALIGN_MASK) |
@@ -26,23 +26,10 @@ | |||
26 | #define SQ_QACR1 (P4SEG_REG_BASE + 0x3c) | 26 | #define SQ_QACR1 (P4SEG_REG_BASE + 0x3c) |
27 | #define SQ_ADDRMAX (P4SEG_STORE_QUE + 0x04000000) | 27 | #define SQ_ADDRMAX (P4SEG_STORE_QUE + 0x04000000) |
28 | 28 | ||
29 | struct sq_mapping { | ||
30 | const char *name; | ||
31 | |||
32 | unsigned long sq_addr; | ||
33 | unsigned long addr; | ||
34 | unsigned int size; | ||
35 | |||
36 | struct list_head list; | ||
37 | }; | ||
38 | |||
39 | /* arch/sh/kernel/cpu/sh4/sq.c */ | 29 | /* arch/sh/kernel/cpu/sh4/sq.c */ |
40 | extern struct sq_mapping *sq_remap(unsigned long phys, unsigned int size, const char *name); | 30 | unsigned long sq_remap(unsigned long phys, unsigned int size, |
41 | extern void sq_unmap(struct sq_mapping *map); | 31 | const char *name, unsigned long flags); |
42 | 32 | void sq_unmap(unsigned long vaddr); | |
43 | extern void sq_clear(unsigned long addr, unsigned int len); | 33 | void sq_flush_range(unsigned long start, unsigned int len); |
44 | extern void sq_flush(void *addr); | ||
45 | extern void sq_flush_range(unsigned long start, unsigned int len); | ||
46 | 34 | ||
47 | #endif /* __ASM_CPU_SH4_SQ_H */ | 35 | #endif /* __ASM_CPU_SH4_SQ_H */ |
48 | |||
diff --git a/include/asm-sh/cqreek/cqreek.h b/include/asm-sh/cqreek/cqreek.h deleted file mode 100644 index 09aecc06693e..000000000000 --- a/include/asm-sh/cqreek/cqreek.h +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | #ifndef __ASM_SH_CQREEK_CQREEK_H | ||
2 | #define __ASM_SH_CQREEK_CQREEK_H | ||
3 | |||
4 | #define BRIDGE_FEATURE 0x0002 | ||
5 | |||
6 | #define BRIDGE_IDE_CTRL 0x0018 | ||
7 | #define BRIDGE_IDE_INTR_LVL 0x001A | ||
8 | #define BRIDGE_IDE_INTR_MASK 0x001C | ||
9 | #define BRIDGE_IDE_INTR_STAT 0x001E | ||
10 | |||
11 | #define BRIDGE_ISA_CTRL 0x0028 | ||
12 | #define BRIDGE_ISA_INTR_LVL 0x002A | ||
13 | #define BRIDGE_ISA_INTR_MASK 0x002C | ||
14 | #define BRIDGE_ISA_INTR_STAT 0x002E | ||
15 | |||
16 | /* arch/sh/boards/cqreek/setup.c */ | ||
17 | extern void setup_cqreek(void); | ||
18 | |||
19 | /* arch/sh/boards/cqreek/irq.c */ | ||
20 | extern int cqreek_has_ide, cqreek_has_isa; | ||
21 | extern void init_cqreek_IRQ(void); | ||
22 | |||
23 | /* arch/sh/boards/cqreek/io.c */ | ||
24 | extern unsigned long cqreek_port2addr(unsigned long port); | ||
25 | |||
26 | #endif /* __ASM_SH_CQREEK_CQREEK_H */ | ||
27 | |||
diff --git a/include/asm-sh/dma-mapping.h b/include/asm-sh/dma-mapping.h index 124968f9866e..56cd4b977232 100644 --- a/include/asm-sh/dma-mapping.h +++ b/include/asm-sh/dma-mapping.h | |||
@@ -141,25 +141,35 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg, | |||
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | static void dma_sync_single_for_cpu(struct device *dev, | 144 | static inline void dma_sync_single_for_cpu(struct device *dev, |
145 | dma_addr_t dma_handle, size_t size, | 145 | dma_addr_t dma_handle, size_t size, |
146 | enum dma_data_direction dir) | 146 | enum dma_data_direction dir) |
147 | __attribute__ ((alias("dma_sync_single"))); | 147 | { |
148 | dma_sync_single(dev, dma_handle, size, dir); | ||
149 | } | ||
150 | |||
151 | static inline void dma_sync_single_for_device(struct device *dev, | ||
152 | dma_addr_t dma_handle, | ||
153 | size_t size, | ||
154 | enum dma_data_direction dir) | ||
155 | { | ||
156 | dma_sync_single(dev, dma_handle, size, dir); | ||
157 | } | ||
148 | 158 | ||
149 | static void dma_sync_single_for_device(struct device *dev, | 159 | static inline void dma_sync_sg_for_cpu(struct device *dev, |
150 | dma_addr_t dma_handle, size_t size, | 160 | struct scatterlist *sg, int nelems, |
151 | enum dma_data_direction dir) | 161 | enum dma_data_direction dir) |
152 | __attribute__ ((alias("dma_sync_single"))); | 162 | { |
163 | dma_sync_sg(dev, sg, nelems, dir); | ||
164 | } | ||
153 | 165 | ||
154 | static void dma_sync_sg_for_cpu(struct device *dev, | 166 | static inline void dma_sync_sg_for_device(struct device *dev, |
155 | struct scatterlist *sg, int nelems, | 167 | struct scatterlist *sg, int nelems, |
156 | enum dma_data_direction dir) | 168 | enum dma_data_direction dir) |
157 | __attribute__ ((alias("dma_sync_sg"))); | 169 | { |
170 | dma_sync_sg(dev, sg, nelems, dir); | ||
171 | } | ||
158 | 172 | ||
159 | static void dma_sync_sg_for_device(struct device *dev, | ||
160 | struct scatterlist *sg, int nelems, | ||
161 | enum dma_data_direction dir) | ||
162 | __attribute__ ((alias("dma_sync_sg"))); | ||
163 | 173 | ||
164 | static inline int dma_get_cache_alignment(void) | 174 | static inline int dma_get_cache_alignment(void) |
165 | { | 175 | { |
@@ -174,6 +184,4 @@ static inline int dma_mapping_error(dma_addr_t dma_addr) | |||
174 | { | 184 | { |
175 | return dma_addr == 0; | 185 | return dma_addr == 0; |
176 | } | 186 | } |
177 | |||
178 | #endif /* __ASM_SH_DMA_MAPPING_H */ | 187 | #endif /* __ASM_SH_DMA_MAPPING_H */ |
179 | |||
diff --git a/include/asm-sh/dma.h b/include/asm-sh/dma.h index e62a6d0ed932..d9daa028689f 100644 --- a/include/asm-sh/dma.h +++ b/include/asm-sh/dma.h | |||
@@ -89,6 +89,7 @@ struct dma_channel { | |||
89 | wait_queue_head_t wait_queue; | 89 | wait_queue_head_t wait_queue; |
90 | 90 | ||
91 | struct sys_device dev; | 91 | struct sys_device dev; |
92 | char *name; | ||
92 | }; | 93 | }; |
93 | 94 | ||
94 | struct dma_info { | 95 | struct dma_info { |
diff --git a/include/asm-sh/dmida/io.h b/include/asm-sh/dmida/io.h deleted file mode 100644 index 21bd416c01c3..000000000000 --- a/include/asm-sh/dmida/io.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef __ASM_SH_DMIDA_IO_H | ||
2 | #define __ASM_SH_DMIDA_IO_H | ||
3 | |||
4 | /* | ||
5 | * Nothing special here.. just use the generic cchip io routines. | ||
6 | */ | ||
7 | #include <asm/hd64465/io.h> | ||
8 | |||
9 | #endif /* __ASM_SH_DMIDA_IO_H */ | ||
10 | |||
diff --git a/include/asm-sh/elf.h b/include/asm-sh/elf.h index 1b63dfeea4f2..3a07ab40ac4d 100644 --- a/include/asm-sh/elf.h +++ b/include/asm-sh/elf.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef __ASM_SH_ELF_H | 1 | #ifndef __ASM_SH_ELF_H |
2 | #define __ASM_SH_ELF_H | 2 | #define __ASM_SH_ELF_H |
3 | 3 | ||
4 | #include <asm/processor.h> | ||
5 | #include <asm/auxvec.h> | ||
6 | #include <asm/ptrace.h> | ||
7 | #include <asm/user.h> | ||
8 | |||
4 | /* SH relocation types */ | 9 | /* SH relocation types */ |
5 | #define R_SH_NONE 0 | 10 | #define R_SH_NONE 0 |
6 | #define R_SH_DIR32 1 | 11 | #define R_SH_DIR32 1 |
@@ -46,9 +51,6 @@ | |||
46 | * ELF register definitions.. | 51 | * ELF register definitions.. |
47 | */ | 52 | */ |
48 | 53 | ||
49 | #include <asm/ptrace.h> | ||
50 | #include <asm/user.h> | ||
51 | |||
52 | typedef unsigned long elf_greg_t; | 54 | typedef unsigned long elf_greg_t; |
53 | 55 | ||
54 | #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) | 56 | #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) |
@@ -91,7 +93,7 @@ typedef struct user_fpu_struct elf_fpregset_t; | |||
91 | instruction set this CPU supports. This could be done in user space, | 93 | instruction set this CPU supports. This could be done in user space, |
92 | but it's not easy, and we've already done it here. */ | 94 | but it's not easy, and we've already done it here. */ |
93 | 95 | ||
94 | #define ELF_HWCAP (0) | 96 | #define ELF_HWCAP (boot_cpu_data.flags) |
95 | 97 | ||
96 | /* This yields a string that ld.so will use to load implementation | 98 | /* This yields a string that ld.so will use to load implementation |
97 | specific libraries for optimization. This is more specific in | 99 | specific libraries for optimization. This is more specific in |
@@ -119,4 +121,24 @@ extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); | |||
119 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) | 121 | #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs) dump_task_fpu(tsk, elf_fpregs) |
120 | #endif | 122 | #endif |
121 | 123 | ||
124 | #ifdef CONFIG_VSYSCALL | ||
125 | /* vDSO has arch_setup_additional_pages */ | ||
126 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES | ||
127 | struct linux_binprm; | ||
128 | extern int arch_setup_additional_pages(struct linux_binprm *bprm, | ||
129 | int executable_stack); | ||
130 | |||
131 | extern unsigned int vdso_enabled; | ||
132 | extern void __kernel_vsyscall; | ||
133 | |||
134 | #define VDSO_BASE ((unsigned long)current->mm->context.vdso) | ||
135 | #define VDSO_SYM(x) (VDSO_BASE + (unsigned long)(x)) | ||
136 | |||
137 | #define ARCH_DLINFO \ | ||
138 | do { \ | ||
139 | if (vdso_enabled) \ | ||
140 | NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_BASE); \ | ||
141 | } while (0) | ||
142 | #endif /* CONFIG_VSYSCALL */ | ||
143 | |||
122 | #endif /* __ASM_SH_ELF_H */ | 144 | #endif /* __ASM_SH_ELF_H */ |
diff --git a/include/asm-sh/fixmap.h b/include/asm-sh/fixmap.h index 412bccaa07e6..458e9fa59545 100644 --- a/include/asm-sh/fixmap.h +++ b/include/asm-sh/fixmap.h | |||
@@ -25,7 +25,7 @@ | |||
25 | * addresses. The point is to have a constant address at | 25 | * addresses. The point is to have a constant address at |
26 | * compile time, but to set the physical address only | 26 | * compile time, but to set the physical address only |
27 | * in the boot process. We allocate these special addresses | 27 | * in the boot process. We allocate these special addresses |
28 | * from the end of virtual memory (0xfffff000) backwards. | 28 | * from the end of P3 backwards. |
29 | * Also this lets us do fail-safe vmalloc(), we | 29 | * Also this lets us do fail-safe vmalloc(), we |
30 | * can guarantee that these special addresses and | 30 | * can guarantee that these special addresses and |
31 | * vmalloc()-ed addresses never overlap. | 31 | * vmalloc()-ed addresses never overlap. |
diff --git a/include/asm-sh/flat.h b/include/asm-sh/flat.h index f29072e1c87e..0d5cc04ab005 100644 --- a/include/asm-sh/flat.h +++ b/include/asm-sh/flat.h | |||
@@ -13,7 +13,7 @@ | |||
13 | #define __ASM_SH_FLAT_H | 13 | #define __ASM_SH_FLAT_H |
14 | 14 | ||
15 | #define flat_stack_align(sp) /* nothing needed */ | 15 | #define flat_stack_align(sp) /* nothing needed */ |
16 | #define flat_argvp_envp_on_stack() 1 | 16 | #define flat_argvp_envp_on_stack() 0 |
17 | #define flat_old_ram_flag(flags) (flags) | 17 | #define flat_old_ram_flag(flags) (flags) |
18 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) | 18 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) |
19 | #define flat_get_addr_from_rp(rp, relval, flags) get_unaligned(rp) | 19 | #define flat_get_addr_from_rp(rp, relval, flags) get_unaligned(rp) |
diff --git a/include/asm-sh/harp/harp.h b/include/asm-sh/harp/harp.h deleted file mode 100644 index b2fbcfae9940..000000000000 --- a/include/asm-sh/harp/harp.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001 David J. Mckay (david.mckay@st.com) | ||
3 | * | ||
4 | * May be copied or modified under the terms of the GNU General Public | ||
5 | * License. See linux/COPYING for more information. | ||
6 | * | ||
7 | * Defintions applicable to the STMicroelectronics ST40STB1 HARP and | ||
8 | * compatible boards. | ||
9 | */ | ||
10 | |||
11 | #if defined(CONFIG_SH_STB1_HARP) | ||
12 | |||
13 | #define EPLD_BASE 0xa0800000 | ||
14 | |||
15 | #define EPLD_LED (EPLD_BASE+0x000c0000) | ||
16 | #define EPLD_INTSTAT0 (EPLD_BASE+0x00200000) | ||
17 | #define EPLD_INTSTAT1 (EPLD_BASE+0x00240000) | ||
18 | #define EPLD_INTMASK0 (EPLD_BASE+0x00280000) | ||
19 | #define EPLD_INTMASK1 (EPLD_BASE+0x002c0000) | ||
20 | #define EPLD_PAGEADDR (EPLD_BASE+0x00300000) | ||
21 | #define EPLD_REVID1 (EPLD_BASE+0x00380000) | ||
22 | #define EPLD_REVID2 (EPLD_BASE+0x003c0000) | ||
23 | |||
24 | #define EPLD_LED_ON 1 | ||
25 | #define EPLD_LED_OFF 0 | ||
26 | |||
27 | #elif defined(CONFIG_SH_STB1_OVERDRIVE) | ||
28 | |||
29 | #define EPLD_BASE 0xa7000000 | ||
30 | |||
31 | #define EPLD_REVID (EPLD_BASE+0x00000000) | ||
32 | #define EPLD_LED (EPLD_BASE+0x00040000) | ||
33 | #define EPLD_INTMASK0 (EPLD_BASE+0x001c0000) | ||
34 | #define EPLD_INTMASK1 (EPLD_BASE+0x00200000) | ||
35 | #define EPLD_INTSTAT0 (EPLD_BASE+0x00240000) | ||
36 | #define EPLD_INTSTAT1 (EPLD_BASE+0x00280000) | ||
37 | |||
38 | #define EPLD_LED_ON 0 | ||
39 | #define EPLD_LED_OFF 1 | ||
40 | |||
41 | #else | ||
42 | #error Unknown board | ||
43 | #endif | ||
diff --git a/include/asm-sh/harp/io.h b/include/asm-sh/harp/io.h deleted file mode 100644 index 68f39e0b39de..000000000000 --- a/include/asm-sh/harp/io.h +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #ifndef __ASM_SH_HARP_IO_H | ||
2 | #define __ASM_SH_HARP_IO_H | ||
3 | |||
4 | /* | ||
5 | * Nothing special here.. just use the generic cchip io routines. | ||
6 | */ | ||
7 | #include <asm/hd64465/io.h> | ||
8 | |||
9 | #endif /* __ASM_SH_HARP_IO_H */ | ||
10 | |||
diff --git a/include/asm-sh/hd64461/hd64461.h b/include/asm-sh/hd64461.h index 87f13d24c630..27e5c34e2659 100644 --- a/include/asm-sh/hd64461/hd64461.h +++ b/include/asm-sh/hd64461.h | |||
@@ -40,7 +40,12 @@ | |||
40 | #define HD64461_LCDCBAR 0x11000 | 40 | #define HD64461_LCDCBAR 0x11000 |
41 | #define HD64461_LCDCLOR 0x11002 | 41 | #define HD64461_LCDCLOR 0x11002 |
42 | #define HD64461_LCDCCR 0x11004 | 42 | #define HD64461_LCDCCR 0x11004 |
43 | #define HD64461_LCDCCR_MOFF 0x80 | 43 | #define HD64461_LCDCCR_STBACK 0x0400 |
44 | #define HD64461_LCDCCR_STREQ 0x0100 | ||
45 | #define HD64461_LCDCCR_MOFF 0x0080 | ||
46 | #define HD64461_LCDCCR_REFSEL 0x0040 | ||
47 | #define HD64461_LCDCCR_EPON 0x0020 | ||
48 | #define HD64461_LCDCCR_SPON 0x0010 | ||
44 | 49 | ||
45 | #define HD64461_LDR1 0x11010 | 50 | #define HD64461_LDR1 0x11010 |
46 | #define HD64461_LDR1_DON 0x01 | 51 | #define HD64461_LDR1_DON 0x01 |
@@ -54,9 +59,9 @@ | |||
54 | #define HD64461_LDVSPR 0x1101c | 59 | #define HD64461_LDVSPR 0x1101c |
55 | #define HD64461_LDR3 0x1101e | 60 | #define HD64461_LDR3 0x1101e |
56 | 61 | ||
57 | #define HD64461_CPTWAR 0x11030 | 62 | #define HD64461_CPTWAR 0x11030 |
58 | #define HD64461_CPTWDR 0x11032 | 63 | #define HD64461_CPTWDR 0x11032 |
59 | #define HD64461_CPTRAR 0x11034 | 64 | #define HD64461_CPTRAR 0x11034 |
60 | #define HD64461_CPTRDR 0x11036 | 65 | #define HD64461_CPTRDR 0x11036 |
61 | 66 | ||
62 | #define HD64461_GRDOR 0x11040 | 67 | #define HD64461_GRDOR 0x11040 |
@@ -111,7 +116,7 @@ | |||
111 | #define HD64461_PCCISR_BVD1 0x01 /* battery 1 */ | 116 | #define HD64461_PCCISR_BVD1 0x01 /* battery 1 */ |
112 | 117 | ||
113 | #define HD64461_PCCISR_PCD_MASK 0x0c /* card detect */ | 118 | #define HD64461_PCCISR_PCD_MASK 0x0c /* card detect */ |
114 | #define HD64461_PCCISR_BVD_MASK 0x03 /* battery voltage */ | 119 | #define HD64461_PCCISR_BVD_MASK 0x03 /* battery voltage */ |
115 | #define HD64461_PCCISR_BVD_BATGOOD 0x03 /* battery good */ | 120 | #define HD64461_PCCISR_BVD_BATGOOD 0x03 /* battery good */ |
116 | #define HD64461_PCCISR_BVD_BATWARN 0x01 /* battery low warning */ | 121 | #define HD64461_PCCISR_BVD_BATWARN 0x01 /* battery low warning */ |
117 | #define HD64461_PCCISR_BVD_BATDEAD1 0x02 /* battery dead */ | 122 | #define HD64461_PCCISR_BVD_BATDEAD1 0x02 /* battery dead */ |
@@ -139,11 +144,11 @@ | |||
139 | 144 | ||
140 | /* PCC Card Status Change Interrupt Enable Register */ | 145 | /* PCC Card Status Change Interrupt Enable Register */ |
141 | #define HD64461_PCCCSCIER_CRE 0x80 /* change reset enable */ | 146 | #define HD64461_PCCCSCIER_CRE 0x80 /* change reset enable */ |
142 | #define HD64461_PCCCSCIER_IREQE_MASK 0x60 /* IREQ enable */ | 147 | #define HD64461_PCCCSCIER_IREQE_MASK 0x60 /* IREQ enable */ |
143 | #define HD64461_PCCCSCIER_IREQE_DISABLED 0x00 /* IREQ disabled */ | 148 | #define HD64461_PCCCSCIER_IREQE_DISABLED 0x00 /* IREQ disabled */ |
144 | #define HD64461_PCCCSCIER_IREQE_LEVEL 0x20 /* IREQ level-triggered */ | 149 | #define HD64461_PCCCSCIER_IREQE_LEVEL 0x20 /* IREQ level-triggered */ |
145 | #define HD64461_PCCCSCIER_IREQE_FALLING 0x40 /* IREQ falling-edge-trig */ | 150 | #define HD64461_PCCCSCIER_IREQE_FALLING 0x40 /* IREQ falling-edge-trig */ |
146 | #define HD64461_PCCCSCIER_IREQE_RISING 0x60 /* IREQ rising-edge-trig */ | 151 | #define HD64461_PCCCSCIER_IREQE_RISING 0x60 /* IREQ rising-edge-trig */ |
147 | 152 | ||
148 | #define HD64461_PCCCSCIER_SCE 0x10 /* status change enable */ | 153 | #define HD64461_PCCCSCIER_SCE 0x10 /* status change enable */ |
149 | #define HD64461_PCCCSCIER_CDE 0x08 /* card detect change enable */ | 154 | #define HD64461_PCCCSCIER_CDE 0x08 /* card detect change enable */ |
@@ -155,7 +160,6 @@ | |||
155 | #define HD64461_PCCSCR_VCC1 0x02 /* voltage control pin 1 */ | 160 | #define HD64461_PCCSCR_VCC1 0x02 /* voltage control pin 1 */ |
156 | #define HD64461_PCCSCR_SWP 0x01 /* write protect */ | 161 | #define HD64461_PCCSCR_SWP 0x01 /* write protect */ |
157 | 162 | ||
158 | |||
159 | #define HD64461_P0OCR 0x1202a | 163 | #define HD64461_P0OCR 0x1202a |
160 | #define HD64461_P1OCR 0x1202c | 164 | #define HD64461_P1OCR 0x1202c |
161 | #define HD64461_PGCR 0x1202e | 165 | #define HD64461_PGCR 0x1202e |
@@ -180,23 +184,25 @@ | |||
180 | #define HD64461_NIRR 0x15000 | 184 | #define HD64461_NIRR 0x15000 |
181 | #define HD64461_NIMR 0x15002 | 185 | #define HD64461_NIMR 0x15002 |
182 | 186 | ||
183 | #ifndef CONFIG_HD64461_IOBASE | ||
184 | #define CONFIG_HD64461_IOBASE 0xb0000000 | ||
185 | #endif | ||
186 | #ifndef CONFIG_HD64461_IRQ | ||
187 | #define CONFIG_HD64461_IRQ 36 | ||
188 | #endif | ||
189 | |||
190 | #define HD64461_IRQBASE OFFCHIP_IRQ_BASE | 187 | #define HD64461_IRQBASE OFFCHIP_IRQ_BASE |
191 | #define HD64461_IRQ_NUM 16 | 188 | #define HD64461_IRQ_NUM 16 |
192 | 189 | ||
193 | #define HD64461_IRQ_UART (HD64461_IRQBASE+5) | 190 | #define HD64461_IRQ_UART (HD64461_IRQBASE+5) |
194 | #define HD64461_IRQ_IRDA (HD64461_IRQBASE+6) | 191 | #define HD64461_IRQ_IRDA (HD64461_IRQBASE+6) |
195 | #define HD64461_IRQ_TMU1 (HD64461_IRQBASE+9) | 192 | #define HD64461_IRQ_TMU1 (HD64461_IRQBASE+9) |
196 | #define HD64461_IRQ_TMU0 (HD64461_IRQBASE+10) | 193 | #define HD64461_IRQ_TMU0 (HD64461_IRQBASE+10) |
197 | #define HD64461_IRQ_GPIO (HD64461_IRQBASE+11) | 194 | #define HD64461_IRQ_GPIO (HD64461_IRQBASE+11) |
198 | #define HD64461_IRQ_AFE (HD64461_IRQBASE+12) | 195 | #define HD64461_IRQ_AFE (HD64461_IRQBASE+12) |
199 | #define HD64461_IRQ_PCC1 (HD64461_IRQBASE+13) | 196 | #define HD64461_IRQ_PCC1 (HD64461_IRQBASE+13) |
200 | #define HD64461_IRQ_PCC0 (HD64461_IRQBASE+14) | 197 | #define HD64461_IRQ_PCC0 (HD64461_IRQBASE+14) |
198 | |||
199 | #define __IO_PREFIX hd64461 | ||
200 | #include <asm/io_generic.h> | ||
201 | |||
202 | /* arch/sh/cchips/hd6446x/hd64461/setup.c */ | ||
203 | int hd64461_irq_demux(int irq); | ||
204 | void hd64461_register_irq_demux(int irq, | ||
205 | int (*demux) (int irq, void *dev), void *dev); | ||
206 | void hd64461_unregister_irq_demux(int irq); | ||
201 | 207 | ||
202 | #endif | 208 | #endif |
diff --git a/include/asm-sh/hd64461/io.h b/include/asm-sh/hd64461/io.h deleted file mode 100644 index 67f2489088d9..000000000000 --- a/include/asm-sh/hd64461/io.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_hd64461.h | ||
3 | * | ||
4 | * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * IO functions for an HD64461 | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_SH_IO_HD64461_H | ||
13 | #define _ASM_SH_IO_HD64461_H | ||
14 | |||
15 | extern unsigned char hd64461_inb(unsigned long port); | ||
16 | extern unsigned short hd64461_inw(unsigned long port); | ||
17 | extern unsigned int hd64461_inl(unsigned long port); | ||
18 | |||
19 | extern void hd64461_outb(unsigned char value, unsigned long port); | ||
20 | extern void hd64461_outw(unsigned short value, unsigned long port); | ||
21 | extern void hd64461_outl(unsigned int value, unsigned long port); | ||
22 | |||
23 | extern unsigned char hd64461_inb_p(unsigned long port); | ||
24 | extern void hd64461_outb_p(unsigned char value, unsigned long port); | ||
25 | |||
26 | extern void hd64461_insb(unsigned long port, void *addr, unsigned long count); | ||
27 | extern void hd64461_insw(unsigned long port, void *addr, unsigned long count); | ||
28 | extern void hd64461_insl(unsigned long port, void *addr, unsigned long count); | ||
29 | |||
30 | extern void hd64461_outsb(unsigned long port, const void *buffer, unsigned long count); | ||
31 | extern void hd64461_outsw(unsigned long port, const void *buffer, unsigned long count); | ||
32 | extern void hd64461_outsl(unsigned long port, const void *buffer, unsigned long count); | ||
33 | |||
34 | extern unsigned short hd64461_readw(unsigned long addr); | ||
35 | extern void hd64461_writew(unsigned short b, unsigned long addr); | ||
36 | |||
37 | |||
38 | extern int hd64461_irq_demux(int irq); | ||
39 | extern void hd64461_register_irq_demux(int irq, | ||
40 | int (*demux)(int irq, void *dev), void *dev); | ||
41 | extern void hd64461_unregister_irq_demux(int irq); | ||
42 | |||
43 | #endif /* _ASM_SH_IO_HD64461_H */ | ||
diff --git a/include/asm-sh/hp6xx/hp6xx.h b/include/asm-sh/hp6xx/hp6xx.h index a26247fd3d87..f35134c159dd 100644 --- a/include/asm-sh/hp6xx/hp6xx.h +++ b/include/asm-sh/hp6xx/hp6xx.h | |||
@@ -2,16 +2,33 @@ | |||
2 | #define __ASM_SH_HP6XX_H | 2 | #define __ASM_SH_HP6XX_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Copyright (C) 2003 Andriy Skulysh | 5 | * Copyright (C) 2003, 2004, 2005 Andriy Skulysh |
6 | * | ||
7 | * This file is subject to the terms and conditions of the GNU General Public | ||
8 | * License. See the file "COPYING" in the main directory of this archive | ||
9 | * for more details. | ||
10 | * | ||
6 | */ | 11 | */ |
7 | 12 | ||
8 | #define HP680_TS_IRQ IRQ3_IRQ | 13 | #define HP680_BTN_IRQ IRQ0_IRQ |
14 | #define HP680_TS_IRQ IRQ3_IRQ | ||
15 | #define HP680_HD64461_IRQ IRQ4_IRQ | ||
9 | 16 | ||
10 | #define DAC_LCD_BRIGHTNESS 0 | 17 | #define DAC_LCD_BRIGHTNESS 0 |
11 | #define DAC_SPEAKER_VOLUME 1 | 18 | #define DAC_SPEAKER_VOLUME 1 |
12 | 19 | ||
20 | #define PGDR_OPENED 0x01 | ||
21 | #define PGDR_MAIN_BATTERY_OUT 0x04 | ||
22 | #define PGDR_PLAY_BUTTON 0x08 | ||
23 | #define PGDR_REWIND_BUTTON 0x10 | ||
24 | #define PGDR_RECORD_BUTTON 0x20 | ||
25 | |||
13 | #define PHDR_TS_PEN_DOWN 0x08 | 26 | #define PHDR_TS_PEN_DOWN 0x08 |
14 | 27 | ||
28 | #define PJDR_LED_BLINK 0x02 | ||
29 | |||
30 | #define PKDR_LED_GREEN 0x10 | ||
31 | |||
15 | #define SCPDR_TS_SCAN_ENABLE 0x20 | 32 | #define SCPDR_TS_SCAN_ENABLE 0x20 |
16 | #define SCPDR_TS_SCAN_Y 0x02 | 33 | #define SCPDR_TS_SCAN_Y 0x02 |
17 | #define SCPDR_TS_SCAN_X 0x01 | 34 | #define SCPDR_TS_SCAN_X 0x01 |
@@ -21,11 +38,43 @@ | |||
21 | 38 | ||
22 | #define ADC_CHANNEL_TS_Y 1 | 39 | #define ADC_CHANNEL_TS_Y 1 |
23 | #define ADC_CHANNEL_TS_X 2 | 40 | #define ADC_CHANNEL_TS_X 2 |
41 | #define ADC_CHANNEL_BATTERY 3 | ||
42 | #define ADC_CHANNEL_BACKUP 4 | ||
43 | #define ADC_CHANNEL_CHARGE 5 | ||
24 | 44 | ||
25 | #define HD64461_GPADR_SPEAKER 0x01 | 45 | #define HD64461_GPADR_SPEAKER 0x01 |
26 | #define HD64461_GPADR_PCMCIA0 (0x02|0x08) | 46 | #define HD64461_GPADR_PCMCIA0 (0x02|0x08) |
47 | |||
27 | #define HD64461_GPBDR_LCDOFF 0x01 | 48 | #define HD64461_GPBDR_LCDOFF 0x01 |
49 | #define HD64461_GPBDR_LCD_CONTRAST_MASK 0x78 | ||
28 | #define HD64461_GPBDR_LED_RED 0x80 | 50 | #define HD64461_GPBDR_LED_RED 0x80 |
29 | 51 | ||
52 | #include <asm/hd64461.h> | ||
53 | #include <asm/io.h> | ||
54 | |||
55 | #define PJDR 0xa4000130 | ||
56 | #define PKDR 0xa4000132 | ||
57 | |||
58 | static inline void hp6xx_led_red(int on) | ||
59 | { | ||
60 | u16 v16; | ||
61 | v16 = ctrl_inw(CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); | ||
62 | if (on) | ||
63 | ctrl_outw(v16 & (~HD64461_GPBDR_LED_RED), CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); | ||
64 | else | ||
65 | ctrl_outw(v16 | HD64461_GPBDR_LED_RED, CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); | ||
66 | } | ||
67 | |||
68 | static inline void hp6xx_led_green(int on) | ||
69 | { | ||
70 | u8 v8; | ||
71 | |||
72 | v8 = ctrl_inb(PKDR); | ||
73 | if (on) | ||
74 | ctrl_outb(v8 & (~PKDR_LED_GREEN), PKDR); | ||
75 | else | ||
76 | ctrl_outb(v8 | PKDR_LED_GREEN, PKDR); | ||
77 | } | ||
78 | |||
30 | 79 | ||
31 | #endif /* __ASM_SH_HP6XX_H */ | 80 | #endif /* __ASM_SH_HP6XX_H */ |
diff --git a/include/asm-sh/hp6xx/io.h b/include/asm-sh/hp6xx/io.h index 731798003550..2044476ab199 100644 --- a/include/asm-sh/hp6xx/io.h +++ b/include/asm-sh/hp6xx/io.h | |||
@@ -4,7 +4,7 @@ | |||
4 | /* | 4 | /* |
5 | * Nothing special here.. just use the generic cchip io routines. | 5 | * Nothing special here.. just use the generic cchip io routines. |
6 | */ | 6 | */ |
7 | #include <asm/hd64461/io.h> | 7 | #include <asm/hd64461.h> |
8 | 8 | ||
9 | #endif /* __ASM_SH_HP6XX_IO_H */ | 9 | #endif /* __ASM_SH_HP6XX_IO_H */ |
10 | 10 | ||
diff --git a/include/asm-sh/hs7751rvoip/hs7751rvoip.h b/include/asm-sh/hs7751rvoip/hs7751rvoip.h index 5f995f937a44..c4cff9d33927 100644 --- a/include/asm-sh/hs7751rvoip/hs7751rvoip.h +++ b/include/asm-sh/hs7751rvoip/hs7751rvoip.h | |||
@@ -19,8 +19,6 @@ | |||
19 | #define PA_OUTPORTR 0xa400000e /* Output Port Reguster */ | 19 | #define PA_OUTPORTR 0xa400000e /* Output Port Reguster */ |
20 | #define PA_VERREG 0xa4000014 /* FPGA Version Register */ | 20 | #define PA_VERREG 0xa4000014 /* FPGA Version Register */ |
21 | 21 | ||
22 | #define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ | ||
23 | #define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ | ||
24 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ | 22 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ |
25 | 23 | ||
26 | #define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ | 24 | #define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ |
@@ -44,4 +42,13 @@ | |||
44 | #define IRQ_RINGING 4 /* Ringing IRQ */ | 42 | #define IRQ_RINGING 4 /* Ringing IRQ */ |
45 | #define IRQ_CODEC 5 /* CODEC IRQ */ | 43 | #define IRQ_CODEC 5 /* CODEC IRQ */ |
46 | 44 | ||
45 | #define __IO_PREFIX hs7751rvoip | ||
46 | #include <asm/io_generic.h> | ||
47 | |||
48 | /* arch/sh/boards/renesas/hs7751rvoip/irq.c */ | ||
49 | void init_hs7751rvoip_IRQ(void); | ||
50 | |||
51 | /* arch/sh/boards/renesas/hs7751rvoip/io.c */ | ||
52 | void *hs7751rvoip_ioremap(unsigned long, unsigned long); | ||
53 | |||
47 | #endif /* __ASM_SH_RENESAS_HS7751RVOIP */ | 54 | #endif /* __ASM_SH_RENESAS_HS7751RVOIP */ |
diff --git a/include/asm-sh/io.h b/include/asm-sh/io.h index 894e64b2d5f0..ed12d38e8c00 100644 --- a/include/asm-sh/io.h +++ b/include/asm-sh/io.h | |||
@@ -107,6 +107,9 @@ | |||
107 | #define __raw_writew(v, a) __writew(v, (void __iomem *)(a)) | 107 | #define __raw_writew(v, a) __writew(v, (void __iomem *)(a)) |
108 | #define __raw_writel(v, a) __writel(v, (void __iomem *)(a)) | 108 | #define __raw_writel(v, a) __writel(v, (void __iomem *)(a)) |
109 | 109 | ||
110 | void __raw_writesl(unsigned long addr, const void *data, int longlen); | ||
111 | void __raw_readsl(unsigned long addr, void *data, int longlen); | ||
112 | |||
110 | /* | 113 | /* |
111 | * The platform header files may define some of these macros to use | 114 | * The platform header files may define some of these macros to use |
112 | * the inlined versions where appropriate. These macros may also be | 115 | * the inlined versions where appropriate. These macros may also be |
@@ -132,6 +135,9 @@ | |||
132 | # define writel(v,a) ({ __raw_writel((v),(a)); mb(); }) | 135 | # define writel(v,a) ({ __raw_writel((v),(a)); mb(); }) |
133 | #endif | 136 | #endif |
134 | 137 | ||
138 | #define writesl __raw_writesl | ||
139 | #define readsl __raw_readsl | ||
140 | |||
135 | #define readb_relaxed(a) readb(a) | 141 | #define readb_relaxed(a) readb(a) |
136 | #define readw_relaxed(a) readw(a) | 142 | #define readw_relaxed(a) readw(a) |
137 | #define readl_relaxed(a) readl(a) | 143 | #define readl_relaxed(a) readl(a) |
@@ -209,8 +215,14 @@ static inline void ctrl_outl(unsigned int b, unsigned long addr) | |||
209 | *(volatile unsigned long*)addr = b; | 215 | *(volatile unsigned long*)addr = b; |
210 | } | 216 | } |
211 | 217 | ||
218 | static inline void ctrl_delay(void) | ||
219 | { | ||
220 | ctrl_inw(P2SEG); | ||
221 | } | ||
222 | |||
212 | #define IO_SPACE_LIMIT 0xffffffff | 223 | #define IO_SPACE_LIMIT 0xffffffff |
213 | 224 | ||
225 | #ifdef CONFIG_MMU | ||
214 | /* | 226 | /* |
215 | * Change virtual addresses to physical addresses and vv. | 227 | * Change virtual addresses to physical addresses and vv. |
216 | * These are trivial on the 1:1 Linux/SuperH mapping | 228 | * These are trivial on the 1:1 Linux/SuperH mapping |
@@ -224,6 +236,10 @@ static inline void *phys_to_virt(unsigned long address) | |||
224 | { | 236 | { |
225 | return (void *)P1SEGADDR(address); | 237 | return (void *)P1SEGADDR(address); |
226 | } | 238 | } |
239 | #else | ||
240 | #define phys_to_virt(address) ((void *)(address)) | ||
241 | #define virt_to_phys(address) ((unsigned long)(address)) | ||
242 | #endif | ||
227 | 243 | ||
228 | #define virt_to_bus virt_to_phys | 244 | #define virt_to_bus virt_to_phys |
229 | #define bus_to_virt phys_to_virt | 245 | #define bus_to_virt phys_to_virt |
diff --git a/include/asm-sh/irq-sh73180.h b/include/asm-sh/irq-sh73180.h index d705252be260..b28af9a69d72 100644 --- a/include/asm-sh/irq-sh73180.h +++ b/include/asm-sh/irq-sh73180.h | |||
@@ -311,6 +311,4 @@ | |||
311 | #define IRQ6_PRIORITY 1 | 311 | #define IRQ6_PRIORITY 1 |
312 | #define IRQ7_PRIORITY 1 | 312 | #define IRQ7_PRIORITY 1 |
313 | 313 | ||
314 | int shmse_irq_demux(int irq); | ||
315 | |||
316 | #endif /* __ASM_SH_IRQ_SH73180_H */ | 314 | #endif /* __ASM_SH_IRQ_SH73180_H */ |
diff --git a/include/asm-sh/irq-sh7343.h b/include/asm-sh/irq-sh7343.h new file mode 100644 index 000000000000..5d15419b53b0 --- /dev/null +++ b/include/asm-sh/irq-sh7343.h | |||
@@ -0,0 +1,317 @@ | |||
1 | #ifndef __ASM_SH_IRQ_SH7343_H | ||
2 | #define __ASM_SH_IRQ_SH7343_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/irq-sh7343.h | ||
6 | * | ||
7 | * Copyright (C) 2006 Kenati Technologies Inc. | ||
8 | * Andre Mccurdy <andre@kenati.com> | ||
9 | * Ranjit Deshpande <ranjit@kenati.com> | ||
10 | */ | ||
11 | |||
12 | #undef INTC_IPRA | ||
13 | #undef INTC_IPRB | ||
14 | #undef INTC_IPRC | ||
15 | #undef INTC_IPRD | ||
16 | |||
17 | #undef DMTE0_IRQ | ||
18 | #undef DMTE1_IRQ | ||
19 | #undef DMTE2_IRQ | ||
20 | #undef DMTE3_IRQ | ||
21 | #undef DMTE4_IRQ | ||
22 | #undef DMTE5_IRQ | ||
23 | #undef DMTE6_IRQ | ||
24 | #undef DMTE7_IRQ | ||
25 | #undef DMAE_IRQ | ||
26 | #undef DMA_IPR_ADDR | ||
27 | #undef DMA_IPR_POS | ||
28 | #undef DMA_PRIORITY | ||
29 | |||
30 | #undef INTC_IMCR0 | ||
31 | #undef INTC_IMCR1 | ||
32 | #undef INTC_IMCR2 | ||
33 | #undef INTC_IMCR3 | ||
34 | #undef INTC_IMCR4 | ||
35 | #undef INTC_IMCR5 | ||
36 | #undef INTC_IMCR6 | ||
37 | #undef INTC_IMCR7 | ||
38 | #undef INTC_IMCR8 | ||
39 | #undef INTC_IMCR9 | ||
40 | #undef INTC_IMCR10 | ||
41 | |||
42 | |||
43 | #define INTC_IPRA 0xA4080000UL | ||
44 | #define INTC_IPRB 0xA4080004UL | ||
45 | #define INTC_IPRC 0xA4080008UL | ||
46 | #define INTC_IPRD 0xA408000CUL | ||
47 | #define INTC_IPRE 0xA4080010UL | ||
48 | #define INTC_IPRF 0xA4080014UL | ||
49 | #define INTC_IPRG 0xA4080018UL | ||
50 | #define INTC_IPRH 0xA408001CUL | ||
51 | #define INTC_IPRI 0xA4080020UL | ||
52 | #define INTC_IPRJ 0xA4080024UL | ||
53 | #define INTC_IPRK 0xA4080028UL | ||
54 | #define INTC_IPRL 0xA408002CUL | ||
55 | |||
56 | #define INTC_IMR0 0xA4080080UL | ||
57 | #define INTC_IMR1 0xA4080084UL | ||
58 | #define INTC_IMR2 0xA4080088UL | ||
59 | #define INTC_IMR3 0xA408008CUL | ||
60 | #define INTC_IMR4 0xA4080090UL | ||
61 | #define INTC_IMR5 0xA4080094UL | ||
62 | #define INTC_IMR6 0xA4080098UL | ||
63 | #define INTC_IMR7 0xA408009CUL | ||
64 | #define INTC_IMR8 0xA40800A0UL | ||
65 | #define INTC_IMR9 0xA40800A4UL | ||
66 | #define INTC_IMR10 0xA40800A8UL | ||
67 | #define INTC_IMR11 0xA40800ACUL | ||
68 | |||
69 | #define INTC_IMCR0 0xA40800C0UL | ||
70 | #define INTC_IMCR1 0xA40800C4UL | ||
71 | #define INTC_IMCR2 0xA40800C8UL | ||
72 | #define INTC_IMCR3 0xA40800CCUL | ||
73 | #define INTC_IMCR4 0xA40800D0UL | ||
74 | #define INTC_IMCR5 0xA40800D4UL | ||
75 | #define INTC_IMCR6 0xA40800D8UL | ||
76 | #define INTC_IMCR7 0xA40800DCUL | ||
77 | #define INTC_IMCR8 0xA40800E0UL | ||
78 | #define INTC_IMCR9 0xA40800E4UL | ||
79 | #define INTC_IMCR10 0xA40800E8UL | ||
80 | #define INTC_IMCR11 0xA40800ECUL | ||
81 | |||
82 | #define INTC_ICR0 0xA4140000UL | ||
83 | #define INTC_ICR1 0xA414001CUL | ||
84 | |||
85 | #define INTMSK0 0xa4140044 | ||
86 | #define INTMSKCLR0 0xa4140064 | ||
87 | #define INTC_INTPRI0 0xa4140010 | ||
88 | |||
89 | /* | ||
90 | NOTE: | ||
91 | |||
92 | *_IRQ = (INTEVT2 - 0x200)/0x20 | ||
93 | */ | ||
94 | |||
95 | /* TMU0 */ | ||
96 | #define TMU0_IRQ 16 | ||
97 | #define TMU0_IPR_ADDR INTC_IPRA | ||
98 | #define TMU0_IPR_POS 3 | ||
99 | #define TMU0_PRIORITY 2 | ||
100 | |||
101 | #define TIMER_IRQ 16 | ||
102 | #define TIMER_IPR_ADDR INTC_IPRA | ||
103 | #define TIMER_IPR_POS 3 | ||
104 | #define TIMER_PRIORITY 2 | ||
105 | |||
106 | /* TMU1 */ | ||
107 | #define TMU1_IRQ 17 | ||
108 | #define TMU1_IPR_ADDR INTC_IPRA | ||
109 | #define TMU1_IPR_POS 2 | ||
110 | #define TMU1_PRIORITY 2 | ||
111 | |||
112 | /* TMU2 */ | ||
113 | #define TMU2_IRQ 18 | ||
114 | #define TMU2_IPR_ADDR INTC_IPRA | ||
115 | #define TMU2_IPR_POS 1 | ||
116 | #define TMU2_PRIORITY 2 | ||
117 | |||
118 | /* LCDC */ | ||
119 | #define LCDC_IRQ 28 | ||
120 | #define LCDC_IPR_ADDR INTC_IPRB | ||
121 | #define LCDC_IPR_POS 2 | ||
122 | #define LCDC_PRIORITY 2 | ||
123 | |||
124 | /* VIO (Video I/O) */ | ||
125 | #define CEU_IRQ 52 | ||
126 | #define BEU_IRQ 53 | ||
127 | #define VEU_IRQ 54 | ||
128 | #define VOU_IRQ 55 | ||
129 | #define VIO_IPR_ADDR INTC_IPRE | ||
130 | #define VIO_IPR_POS 2 | ||
131 | #define VIO_PRIORITY 2 | ||
132 | |||
133 | /* MFI (Multi Functional Interface) */ | ||
134 | #define MFI_IRQ 56 | ||
135 | #define MFI_IPR_ADDR INTC_IPRE | ||
136 | #define MFI_IPR_POS 1 | ||
137 | #define MFI_PRIORITY 2 | ||
138 | |||
139 | /* VPU (Video Processing Unit) */ | ||
140 | #define VPU_IRQ 60 | ||
141 | #define VPU_IPR_ADDR INTC_IPRE | ||
142 | #define VPU_IPR_POS 0 | ||
143 | #define VPU_PRIORITY 2 | ||
144 | |||
145 | /* 3DG */ | ||
146 | #define TDG_IRQ 63 | ||
147 | #define TDG_IPR_ADDR INTC_IPRJ | ||
148 | #define TDG_IPR_POS 2 | ||
149 | #define TDG_PRIORITY 2 | ||
150 | |||
151 | /* DMAC(1) */ | ||
152 | #define DMTE0_IRQ 48 | ||
153 | #define DMTE1_IRQ 49 | ||
154 | #define DMTE2_IRQ 50 | ||
155 | #define DMTE3_IRQ 51 | ||
156 | #define DMA1_IPR_ADDR INTC_IPRE | ||
157 | #define DMA1_IPR_POS 3 | ||
158 | #define DMA1_PRIORITY 7 | ||
159 | |||
160 | /* DMAC(2) */ | ||
161 | #define DMTE4_IRQ 76 | ||
162 | #define DMTE5_IRQ 77 | ||
163 | #define DMA2_IPR_ADDR INTC_IPRF | ||
164 | #define DMA2_IPR_POS 2 | ||
165 | #define DMA2_PRIORITY 7 | ||
166 | |||
167 | /* SCIF0 */ | ||
168 | #define SCIF_ERI_IRQ 80 | ||
169 | #define SCIF_RXI_IRQ 81 | ||
170 | #define SCIF_BRI_IRQ 82 | ||
171 | #define SCIF_TXI_IRQ 83 | ||
172 | #define SCIF_IPR_ADDR INTC_IPRG | ||
173 | #define SCIF_IPR_POS 3 | ||
174 | #define SCIF_PRIORITY 3 | ||
175 | |||
176 | /* SIOF0 */ | ||
177 | #define SIOF0_IRQ 84 | ||
178 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
179 | #define SIOF0_IPR_POS 3 | ||
180 | #define SIOF0_PRIORITY 3 | ||
181 | |||
182 | /* FLCTL (Flash Memory Controller) */ | ||
183 | #define FLSTE_IRQ 92 | ||
184 | #define FLTEND_IRQ 93 | ||
185 | #define FLTRQ0_IRQ 94 | ||
186 | #define FLTRQ1_IRQ 95 | ||
187 | #define FLCTL_IPR_ADDR INTC_IPRH | ||
188 | #define FLCTL_IPR_POS 1 | ||
189 | #define FLCTL_PRIORITY 3 | ||
190 | |||
191 | /* IIC(0) (IIC Bus Interface) */ | ||
192 | #define IIC0_ALI_IRQ 96 | ||
193 | #define IIC0_TACKI_IRQ 97 | ||
194 | #define IIC0_WAITI_IRQ 98 | ||
195 | #define IIC0_DTEI_IRQ 99 | ||
196 | #define IIC0_IPR_ADDR INTC_IPRH | ||
197 | #define IIC0_IPR_POS 0 | ||
198 | #define IIC0_PRIORITY 3 | ||
199 | |||
200 | /* IIC(1) (IIC Bus Interface) */ | ||
201 | #define IIC1_ALI_IRQ 44 | ||
202 | #define IIC1_TACKI_IRQ 45 | ||
203 | #define IIC1_WAITI_IRQ 46 | ||
204 | #define IIC1_DTEI_IRQ 47 | ||
205 | #define IIC1_IPR_ADDR INTC_IPRI | ||
206 | #define IIC1_IPR_POS 0 | ||
207 | #define IIC1_PRIORITY 3 | ||
208 | |||
209 | /* SIO0 */ | ||
210 | #define SIO0_IRQ 88 | ||
211 | #define SIO0_IPR_ADDR INTC_IPRI | ||
212 | #define SIO0_IPR_POS 3 | ||
213 | #define SIO0_PRIORITY 3 | ||
214 | |||
215 | /* SDHI */ | ||
216 | #define SDHI_SDHII0_IRQ 100 | ||
217 | #define SDHI_SDHII1_IRQ 101 | ||
218 | #define SDHI_SDHII2_IRQ 102 | ||
219 | #define SDHI_SDHII3_IRQ 103 | ||
220 | #define SDHI_IPR_ADDR INTC_IPRK | ||
221 | #define SDHI_IPR_POS 0 | ||
222 | #define SDHI_PRIORITY 3 | ||
223 | |||
224 | /* SIU (Sound Interface Unit) */ | ||
225 | #define SIU_IRQ 108 | ||
226 | #define SIU_IPR_ADDR INTC_IPRJ | ||
227 | #define SIU_IPR_POS 1 | ||
228 | #define SIU_PRIORITY 3 | ||
229 | |||
230 | #define PORT_PACR 0xA4050100UL | ||
231 | #define PORT_PBCR 0xA4050102UL | ||
232 | #define PORT_PCCR 0xA4050104UL | ||
233 | #define PORT_PDCR 0xA4050106UL | ||
234 | #define PORT_PECR 0xA4050108UL | ||
235 | #define PORT_PFCR 0xA405010AUL | ||
236 | #define PORT_PGCR 0xA405010CUL | ||
237 | #define PORT_PHCR 0xA405010EUL | ||
238 | #define PORT_PJCR 0xA4050110UL | ||
239 | #define PORT_PKCR 0xA4050112UL | ||
240 | #define PORT_PLCR 0xA4050114UL | ||
241 | #define PORT_SCPCR 0xA4050116UL | ||
242 | #define PORT_PMCR 0xA4050118UL | ||
243 | #define PORT_PNCR 0xA405011AUL | ||
244 | #define PORT_PQCR 0xA405011CUL | ||
245 | #define PORT_PRCR 0xA405011EUL | ||
246 | #define PORT_PTCR 0xA405014CUL | ||
247 | #define PORT_PUCR 0xA405014EUL | ||
248 | #define PORT_PVCR 0xA4050150UL | ||
249 | |||
250 | #define PORT_PSELA 0xA4050140UL | ||
251 | #define PORT_PSELB 0xA4050142UL | ||
252 | #define PORT_PSELC 0xA4050144UL | ||
253 | #define PORT_PSELE 0xA4050158UL | ||
254 | |||
255 | #define PORT_HIZCRA 0xA4050146UL | ||
256 | #define PORT_HIZCRB 0xA4050148UL | ||
257 | #define PORT_DRVCR 0xA405014AUL | ||
258 | |||
259 | #define PORT_PADR 0xA4050120UL | ||
260 | #define PORT_PBDR 0xA4050122UL | ||
261 | #define PORT_PCDR 0xA4050124UL | ||
262 | #define PORT_PDDR 0xA4050126UL | ||
263 | #define PORT_PEDR 0xA4050128UL | ||
264 | #define PORT_PFDR 0xA405012AUL | ||
265 | #define PORT_PGDR 0xA405012CUL | ||
266 | #define PORT_PHDR 0xA405012EUL | ||
267 | #define PORT_PJDR 0xA4050130UL | ||
268 | #define PORT_PKDR 0xA4050132UL | ||
269 | #define PORT_PLDR 0xA4050134UL | ||
270 | #define PORT_SCPDR 0xA4050136UL | ||
271 | #define PORT_PMDR 0xA4050138UL | ||
272 | #define PORT_PNDR 0xA405013AUL | ||
273 | #define PORT_PQDR 0xA405013CUL | ||
274 | #define PORT_PRDR 0xA405013EUL | ||
275 | #define PORT_PTDR 0xA405016CUL | ||
276 | #define PORT_PUDR 0xA405016EUL | ||
277 | #define PORT_PVDR 0xA4050170UL | ||
278 | |||
279 | #define IRQ0_IRQ 32 | ||
280 | #define IRQ1_IRQ 33 | ||
281 | #define IRQ2_IRQ 34 | ||
282 | #define IRQ3_IRQ 35 | ||
283 | #define IRQ4_IRQ 36 | ||
284 | #define IRQ5_IRQ 37 | ||
285 | #define IRQ6_IRQ 38 | ||
286 | #define IRQ7_IRQ 39 | ||
287 | |||
288 | #define INTPRI00 0xA4140010UL | ||
289 | |||
290 | #define IRQ0_IPR_ADDR INTPRI00 | ||
291 | #define IRQ1_IPR_ADDR INTPRI00 | ||
292 | #define IRQ2_IPR_ADDR INTPRI00 | ||
293 | #define IRQ3_IPR_ADDR INTPRI00 | ||
294 | #define IRQ4_IPR_ADDR INTPRI00 | ||
295 | #define IRQ5_IPR_ADDR INTPRI00 | ||
296 | #define IRQ6_IPR_ADDR INTPRI00 | ||
297 | #define IRQ7_IPR_ADDR INTPRI00 | ||
298 | |||
299 | #define IRQ0_IPR_POS 7 | ||
300 | #define IRQ1_IPR_POS 6 | ||
301 | #define IRQ2_IPR_POS 5 | ||
302 | #define IRQ3_IPR_POS 4 | ||
303 | #define IRQ4_IPR_POS 3 | ||
304 | #define IRQ5_IPR_POS 2 | ||
305 | #define IRQ6_IPR_POS 1 | ||
306 | #define IRQ7_IPR_POS 0 | ||
307 | |||
308 | #define IRQ0_PRIORITY 1 | ||
309 | #define IRQ1_PRIORITY 1 | ||
310 | #define IRQ2_PRIORITY 1 | ||
311 | #define IRQ3_PRIORITY 1 | ||
312 | #define IRQ4_PRIORITY 1 | ||
313 | #define IRQ5_PRIORITY 1 | ||
314 | #define IRQ6_PRIORITY 1 | ||
315 | #define IRQ7_PRIORITY 1 | ||
316 | |||
317 | #endif /* __ASM_SH_IRQ_SH7343_H */ | ||
diff --git a/include/asm-sh/irq-sh7780.h b/include/asm-sh/irq-sh7780.h index 7f90315cd830..895c5780e454 100644 --- a/include/asm-sh/irq-sh7780.h +++ b/include/asm-sh/irq-sh7780.h | |||
@@ -145,11 +145,6 @@ | |||
145 | #define TMU_CH5_IPR_POS 1 | 145 | #define TMU_CH5_IPR_POS 1 |
146 | #define TMU_CH5_PRIORITY 2 | 146 | #define TMU_CH5_PRIORITY 2 |
147 | 147 | ||
148 | #define RTC_IRQ 22 | ||
149 | #define RTC_IPR_ADDR INTC_INT2PRI1 | ||
150 | #define RTC_IPR_POS 0 | ||
151 | #define RTC_PRIORITY TIMER_PRIORITY | ||
152 | |||
153 | /* SCIF0 */ | 148 | /* SCIF0 */ |
154 | #define SCIF0_ERI_IRQ 40 | 149 | #define SCIF0_ERI_IRQ 40 |
155 | #define SCIF0_RXI_IRQ 41 | 150 | #define SCIF0_RXI_IRQ 41 |
diff --git a/include/asm-sh/irq.h b/include/asm-sh/irq.h index 611e67cd0627..0e5f365aff70 100644 --- a/include/asm-sh/irq.h +++ b/include/asm-sh/irq.h | |||
@@ -192,7 +192,7 @@ | |||
192 | 192 | ||
193 | #if defined (CONFIG_CPU_SUBTYPE_SH7707) || defined (CONFIG_CPU_SUBTYPE_SH7708) || \ | 193 | #if defined (CONFIG_CPU_SUBTYPE_SH7707) || defined (CONFIG_CPU_SUBTYPE_SH7708) || \ |
194 | defined (CONFIG_CPU_SUBTYPE_SH7709) || defined (CONFIG_CPU_SUBTYPE_SH7750) || \ | 194 | defined (CONFIG_CPU_SUBTYPE_SH7709) || defined (CONFIG_CPU_SUBTYPE_SH7750) || \ |
195 | defined (CONFIG_CPU_SUBTYPE_SH7751) | 195 | defined (CONFIG_CPU_SUBTYPE_SH7751) || defined (CONFIG_CPU_SUBTYPE_SH7706) |
196 | #define SCI_ERI_IRQ 23 | 196 | #define SCI_ERI_IRQ 23 |
197 | #define SCI_RXI_IRQ 24 | 197 | #define SCI_RXI_IRQ 24 |
198 | #define SCI_TXI_IRQ 25 | 198 | #define SCI_TXI_IRQ 25 |
@@ -207,6 +207,7 @@ | |||
207 | #define SCIF0_IPR_POS 3 | 207 | #define SCIF0_IPR_POS 3 |
208 | #define SCIF0_PRIORITY 3 | 208 | #define SCIF0_PRIORITY 3 |
209 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | 209 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ |
210 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
210 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ | 211 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ |
211 | defined(CONFIG_CPU_SUBTYPE_SH7709) | 212 | defined(CONFIG_CPU_SUBTYPE_SH7709) |
212 | #define SCIF_ERI_IRQ 56 | 213 | #define SCIF_ERI_IRQ 56 |
@@ -261,9 +262,12 @@ | |||
261 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) | 262 | #elif defined(CONFIG_CPU_SUBTYPE_SH7708) |
262 | # define ONCHIP_NR_IRQS 32 | 263 | # define ONCHIP_NR_IRQS 32 |
263 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) || \ | 264 | #elif defined(CONFIG_CPU_SUBTYPE_SH7709) || \ |
265 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
264 | defined(CONFIG_CPU_SUBTYPE_SH7705) | 266 | defined(CONFIG_CPU_SUBTYPE_SH7705) |
265 | # define ONCHIP_NR_IRQS 64 // Actually 61 | 267 | # define ONCHIP_NR_IRQS 64 // Actually 61 |
266 | # define PINT_NR_IRQS 16 | 268 | # define PINT_NR_IRQS 16 |
269 | #elif defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
270 | # define ONCHIP_NR_IRQS 104 | ||
267 | #elif defined(CONFIG_CPU_SUBTYPE_SH7750) | 271 | #elif defined(CONFIG_CPU_SUBTYPE_SH7750) |
268 | # define ONCHIP_NR_IRQS 48 // Actually 44 | 272 | # define ONCHIP_NR_IRQS 48 // Actually 44 |
269 | #elif defined(CONFIG_CPU_SUBTYPE_SH7751) | 273 | #elif defined(CONFIG_CPU_SUBTYPE_SH7751) |
@@ -275,7 +279,8 @@ | |||
275 | #elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) | 279 | #elif defined(CONFIG_CPU_SUBTYPE_ST40STB1) |
276 | # define ONCHIP_NR_IRQS 144 | 280 | # define ONCHIP_NR_IRQS 144 |
277 | #elif defined(CONFIG_CPU_SUBTYPE_SH7300) || \ | 281 | #elif defined(CONFIG_CPU_SUBTYPE_SH7300) || \ |
278 | defined(CONFIG_CPU_SUBTYPE_SH73180) | 282 | defined(CONFIG_CPU_SUBTYPE_SH73180) || \ |
283 | defined(CONFIG_CPU_SUBTYPE_SH7343) | ||
279 | # define ONCHIP_NR_IRQS 109 | 284 | # define ONCHIP_NR_IRQS 109 |
280 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | 285 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) |
281 | # define ONCHIP_NR_IRQS 111 | 286 | # define ONCHIP_NR_IRQS 111 |
@@ -311,6 +316,8 @@ | |||
311 | # define OFFCHIP_NR_IRQS 4 | 316 | # define OFFCHIP_NR_IRQS 4 |
312 | #elif defined(CONFIG_SH_R7780RP) | 317 | #elif defined(CONFIG_SH_R7780RP) |
313 | # define OFFCHIP_NR_IRQS 16 | 318 | # define OFFCHIP_NR_IRQS 16 |
319 | #elif defined(CONFIG_SH_7343_SOLUTION_ENGINE) | ||
320 | # define OFFCHIP_NR_IRQS 12 | ||
314 | #elif defined(CONFIG_SH_UNKNOWN) | 321 | #elif defined(CONFIG_SH_UNKNOWN) |
315 | # define OFFCHIP_NR_IRQS 16 /* Must also be last */ | 322 | # define OFFCHIP_NR_IRQS 16 /* Must also be last */ |
316 | #else | 323 | #else |
@@ -335,6 +342,11 @@ extern void make_maskreg_irq(unsigned int irq); | |||
335 | extern unsigned short *irq_mask_register; | 342 | extern unsigned short *irq_mask_register; |
336 | 343 | ||
337 | /* | 344 | /* |
345 | * PINT IRQs | ||
346 | */ | ||
347 | void init_IRQ_pint(void); | ||
348 | |||
349 | /* | ||
338 | * Function for "on chip support modules". | 350 | * Function for "on chip support modules". |
339 | */ | 351 | */ |
340 | extern void make_ipr_irq(unsigned int irq, unsigned int addr, | 352 | extern void make_ipr_irq(unsigned int irq, unsigned int addr, |
@@ -471,8 +483,10 @@ extern int ipr_irq_demux(int irq); | |||
471 | 483 | ||
472 | #define INTC_ICR 0xfffffee0UL | 484 | #define INTC_ICR 0xfffffee0UL |
473 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ | 485 | #elif defined(CONFIG_CPU_SUBTYPE_SH7705) || \ |
486 | defined(CONFIG_CPU_SUBTYPE_SH7706) || \ | ||
474 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ | 487 | defined(CONFIG_CPU_SUBTYPE_SH7707) || \ |
475 | defined(CONFIG_CPU_SUBTYPE_SH7709) | 488 | defined(CONFIG_CPU_SUBTYPE_SH7709) || \ |
489 | defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
476 | #define INTC_IRR0 0xa4000004UL | 490 | #define INTC_IRR0 0xa4000004UL |
477 | #define INTC_IRR1 0xa4000006UL | 491 | #define INTC_IRR1 0xa4000006UL |
478 | #define INTC_IRR2 0xa4000008UL | 492 | #define INTC_IRR2 0xa4000008UL |
@@ -491,8 +505,105 @@ extern int ipr_irq_demux(int irq); | |||
491 | #define INTC_IPRF 0xa4080000UL | 505 | #define INTC_IPRF 0xa4080000UL |
492 | #define INTC_IPRG 0xa4080002UL | 506 | #define INTC_IPRG 0xa4080002UL |
493 | #define INTC_IPRH 0xa4080004UL | 507 | #define INTC_IPRH 0xa4080004UL |
494 | #endif | 508 | #elif defined(CONFIG_CPU_SUBTYPE_SH7710) |
509 | /* Interrupt Controller Registers */ | ||
510 | #undef INTC_IPRA | ||
511 | #undef INTC_IPRB | ||
512 | #define INTC_IPRA 0xA414FEE2UL | ||
513 | #define INTC_IPRB 0xA414FEE4UL | ||
514 | #define INTC_IPRF 0xA4080000UL | ||
515 | #define INTC_IPRG 0xA4080002UL | ||
516 | #define INTC_IPRH 0xA4080004UL | ||
517 | #define INTC_IPRI 0xA4080006UL | ||
518 | |||
519 | #undef INTC_ICR0 | ||
520 | #undef INTC_ICR1 | ||
521 | #define INTC_ICR0 0xA414FEE0UL | ||
522 | #define INTC_ICR1 0xA4140010UL | ||
523 | |||
524 | #define INTC_IRR0 0xa4000004UL | ||
525 | #define INTC_IRR1 0xa4000006UL | ||
526 | #define INTC_IRR2 0xa4000008UL | ||
527 | #define INTC_IRR3 0xa400000AUL | ||
528 | #define INTC_IRR4 0xa400000CUL | ||
529 | #define INTC_IRR5 0xa4080020UL | ||
530 | #define INTC_IRR7 0xa4080024UL | ||
531 | #define INTC_IRR8 0xa4080026UL | ||
532 | |||
533 | /* Interrupt numbers */ | ||
534 | #define TIMER2_IRQ 18 | ||
535 | #define TIMER2_IPR_ADDR INTC_IPRA | ||
536 | #define TIMER2_IPR_POS 1 | ||
537 | #define TIMER2_PRIORITY 2 | ||
538 | |||
539 | /* WDT */ | ||
540 | #define WDT_IRQ 27 | ||
541 | #define WDT_IPR_ADDR INTC_IPRB | ||
542 | #define WDT_IPR_POS 3 | ||
543 | #define WDT_PRIORITY 2 | ||
544 | |||
545 | #define SCIF0_ERI_IRQ 52 | ||
546 | #define SCIF0_RXI_IRQ 53 | ||
547 | #define SCIF0_BRI_IRQ 54 | ||
548 | #define SCIF0_TXI_IRQ 55 | ||
549 | #define SCIF0_IPR_ADDR INTC_IPRE | ||
550 | #define SCIF0_IPR_POS 2 | ||
551 | #define SCIF0_PRIORITY 3 | ||
552 | |||
553 | #define DMTE4_IRQ 76 | ||
554 | #define DMTE5_IRQ 77 | ||
555 | #define DMA2_IPR_ADDR INTC_IPRF | ||
556 | #define DMA2_IPR_POS 2 | ||
557 | #define DMA2_PRIORITY 7 | ||
495 | 558 | ||
559 | #define IPSEC_IRQ 79 | ||
560 | #define IPSEC_IPR_ADDR INTC_IPRF | ||
561 | #define IPSEC_IPR_POS 3 | ||
562 | #define IPSEC_PRIORITY 3 | ||
563 | |||
564 | /* EDMAC */ | ||
565 | #define EDMAC0_IRQ 80 | ||
566 | #define EDMAC0_IPR_ADDR INTC_IPRG | ||
567 | #define EDMAC0_IPR_POS 3 | ||
568 | #define EDMAC0_PRIORITY 3 | ||
569 | |||
570 | #define EDMAC1_IRQ 81 | ||
571 | #define EDMAC1_IPR_ADDR INTC_IPRG | ||
572 | #define EDMAC1_IPR_POS 2 | ||
573 | #define EDMAC1_PRIORITY 3 | ||
574 | |||
575 | #define EDMAC2_IRQ 82 | ||
576 | #define EDMAC2_IPR_ADDR INTC_IPRG | ||
577 | #define EDMAC2_IPR_POS 1 | ||
578 | #define EDMAC2_PRIORITY 3 | ||
579 | |||
580 | /* SIOF */ | ||
581 | #define SIOF0_ERI_IRQ 96 | ||
582 | #define SIOF0_TXI_IRQ 97 | ||
583 | #define SIOF0_RXI_IRQ 98 | ||
584 | #define SIOF0_CCI_IRQ 99 | ||
585 | #define SIOF0_IPR_ADDR INTC_IPRH | ||
586 | #define SIOF0_IPR_POS 0 | ||
587 | #define SIOF0_PRIORITY 7 | ||
588 | |||
589 | #define SIOF1_ERI_IRQ 100 | ||
590 | #define SIOF1_TXI_IRQ 101 | ||
591 | #define SIOF1_RXI_IRQ 102 | ||
592 | #define SIOF1_CCI_IRQ 103 | ||
593 | #define SIOF1_IPR_ADDR INTC_IPRI | ||
594 | #define SIOF1_IPR_POS 1 | ||
595 | #define SIOF1_PRIORITY 7 | ||
596 | #endif /* CONFIG_CPU_SUBTYPE_SH7710 */ | ||
597 | |||
598 | #if defined(CONFIG_CPU_SUBTYPE_SH7710) | ||
599 | #define PORT_PACR 0xa4050100UL | ||
600 | #define PORT_PBCR 0xa4050102UL | ||
601 | #define PORT_PCCR 0xa4050104UL | ||
602 | #define PORT_PETCR 0xa4050106UL | ||
603 | #define PORT_PADR 0xa4050120UL | ||
604 | #define PORT_PBDR 0xa4050122UL | ||
605 | #define PORT_PCDR 0xa4050124UL | ||
606 | #else | ||
496 | #define PORT_PACR 0xa4000100UL | 607 | #define PORT_PACR 0xa4000100UL |
497 | #define PORT_PBCR 0xa4000102UL | 608 | #define PORT_PBCR 0xa4000102UL |
498 | #define PORT_PCCR 0xa4000104UL | 609 | #define PORT_PCCR 0xa4000104UL |
@@ -501,6 +612,7 @@ extern int ipr_irq_demux(int irq); | |||
501 | #define PORT_PBDR 0xa4000122UL | 612 | #define PORT_PBDR 0xa4000122UL |
502 | #define PORT_PCDR 0xa4000124UL | 613 | #define PORT_PCDR 0xa4000124UL |
503 | #define PORT_PFDR 0xa400012aUL | 614 | #define PORT_PFDR 0xa400012aUL |
615 | #endif | ||
504 | 616 | ||
505 | #define IRQ0_IRQ 32 | 617 | #define IRQ0_IRQ 32 |
506 | #define IRQ1_IRQ 33 | 618 | #define IRQ1_IRQ 33 |
@@ -577,7 +689,7 @@ extern int ipr_irq_demux(int irq); | |||
577 | #define NR_INTC2_IRQS 64 | 689 | #define NR_INTC2_IRQS 64 |
578 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | 690 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) |
579 | #define INTC2_BASE 0xffd40000 | 691 | #define INTC2_BASE 0xffd40000 |
580 | #define INTC2_FIRST_IRQ 22 | 692 | #define INTC2_FIRST_IRQ 21 |
581 | #define INTC2_INTMSK_OFFSET (0x38) | 693 | #define INTC2_INTMSK_OFFSET (0x38) |
582 | #define INTC2_INTMSKCLR_OFFSET (0x3c) | 694 | #define INTC2_INTMSKCLR_OFFSET (0x3c) |
583 | #define NR_INTC2_IRQS 60 | 695 | #define NR_INTC2_IRQS 60 |
@@ -594,6 +706,8 @@ void intc2_add_clear_irq(int irq, int (*fn)(int)); | |||
594 | 706 | ||
595 | #endif | 707 | #endif |
596 | 708 | ||
709 | extern int shmse_irq_demux(int irq); | ||
710 | |||
597 | static inline int generic_irq_demux(int irq) | 711 | static inline int generic_irq_demux(int irq) |
598 | { | 712 | { |
599 | return irq; | 713 | return irq; |
@@ -605,8 +719,21 @@ static inline int generic_irq_demux(int irq) | |||
605 | #define irq_canonicalize(irq) (irq) | 719 | #define irq_canonicalize(irq) (irq) |
606 | #define irq_demux(irq) __irq_demux(sh_mv.mv_irq_demux(irq)) | 720 | #define irq_demux(irq) __irq_demux(sh_mv.mv_irq_demux(irq)) |
607 | 721 | ||
722 | #ifdef CONFIG_4KSTACKS | ||
723 | extern void irq_ctx_init(int cpu); | ||
724 | extern void irq_ctx_exit(int cpu); | ||
725 | # define __ARCH_HAS_DO_SOFTIRQ | ||
726 | #else | ||
727 | # define irq_ctx_init(cpu) do { } while (0) | ||
728 | # define irq_ctx_exit(cpu) do { } while (0) | ||
729 | #endif | ||
730 | |||
608 | #if defined(CONFIG_CPU_SUBTYPE_SH73180) | 731 | #if defined(CONFIG_CPU_SUBTYPE_SH73180) |
609 | #include <asm/irq-sh73180.h> | 732 | #include <asm/irq-sh73180.h> |
610 | #endif | 733 | #endif |
611 | 734 | ||
735 | #if defined(CONFIG_CPU_SUBTYPE_SH7343) | ||
736 | #include <asm/irq-sh7343.h> | ||
737 | #endif | ||
738 | |||
612 | #endif /* __ASM_SH_IRQ_H */ | 739 | #endif /* __ASM_SH_IRQ_H */ |
diff --git a/include/asm-sh/kexec.h b/include/asm-sh/kexec.h index 9dfe59f6fcb5..9d235af20cdd 100644 --- a/include/asm-sh/kexec.h +++ b/include/asm-sh/kexec.h | |||
@@ -23,11 +23,10 @@ | |||
23 | /* The native architecture */ | 23 | /* The native architecture */ |
24 | #define KEXEC_ARCH KEXEC_ARCH_SH | 24 | #define KEXEC_ARCH KEXEC_ARCH_SH |
25 | 25 | ||
26 | #ifndef __ASSEMBLY__ | 26 | #define MAX_NOTE_BYTES 1024 |
27 | 27 | ||
28 | extern void machine_shutdown(void); | 28 | /* Provide a dummy definition to avoid build failures. */ |
29 | extern void *crash_notes; | 29 | static inline void crash_setup_regs(struct pt_regs *newregs, |
30 | 30 | struct pt_regs *oldregs) { } | |
31 | #endif /* __ASSEMBLY__ */ | ||
32 | 31 | ||
33 | #endif /* _SH_KEXEC_H */ | 32 | #endif /* _SH_KEXEC_H */ |
diff --git a/include/asm-sh/kgdb.h b/include/asm-sh/kgdb.h index 1653ffb75fbe..7b26f53fe343 100644 --- a/include/asm-sh/kgdb.h +++ b/include/asm-sh/kgdb.h | |||
@@ -128,4 +128,19 @@ extern int setjmp(jmp_buf __jmpb); | |||
128 | #define KGDB_ASSERT(condition, message) | 128 | #define KGDB_ASSERT(condition, message) |
129 | #endif | 129 | #endif |
130 | 130 | ||
131 | /* Taken from sh-stub.c of GDB 4.18 */ | ||
132 | static const char hexchars[] = "0123456789abcdef"; | ||
133 | |||
134 | /* Get high hex bits */ | ||
135 | static inline char highhex(const int x) | ||
136 | { | ||
137 | return hexchars[(x >> 4) & 0xf]; | ||
138 | } | ||
139 | |||
140 | /* Get low hex bits */ | ||
141 | static inline char lowhex(const int x) | ||
142 | { | ||
143 | return hexchars[x & 0xf]; | ||
144 | } | ||
145 | |||
131 | #endif | 146 | #endif |
diff --git a/include/asm-sh/landisk/gio.h b/include/asm-sh/landisk/gio.h new file mode 100644 index 000000000000..3fce4c451a46 --- /dev/null +++ b/include/asm-sh/landisk/gio.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef __ASM_SH_LANDISK_GIO_H | ||
2 | #define __ASM_SH_LANDISK_GIO_H | ||
3 | |||
4 | #include <linux/ioctl.h> | ||
5 | |||
6 | /* version */ | ||
7 | #define VERSION_STR "1.00" | ||
8 | |||
9 | /* Driver name */ | ||
10 | #define GIO_DRIVER_NAME "/dev/giodrv" | ||
11 | |||
12 | /* Use 'k' as magic number */ | ||
13 | #define GIODRV_IOC_MAGIC 'k' | ||
14 | |||
15 | #define GIODRV_IOCRESET _IO(GIODRV_IOC_MAGIC, 0) | ||
16 | /* | ||
17 | * S means "Set" through a ptr, | ||
18 | * T means "Tell" directly | ||
19 | * G means "Get" (to a pointed var) | ||
20 | * Q means "Query", response is on the return value | ||
21 | * X means "eXchange": G and S atomically | ||
22 | * H means "sHift": T and Q atomically | ||
23 | */ | ||
24 | #define GIODRV_IOCSGIODATA1 _IOW(GIODRV_IOC_MAGIC, 1, unsigned char *) | ||
25 | #define GIODRV_IOCGGIODATA1 _IOR(GIODRV_IOC_MAGIC, 2, unsigned char *) | ||
26 | #define GIODRV_IOCSGIODATA2 _IOW(GIODRV_IOC_MAGIC, 3, unsigned short *) | ||
27 | #define GIODRV_IOCGGIODATA2 _IOR(GIODRV_IOC_MAGIC, 4, unsigned short *) | ||
28 | #define GIODRV_IOCSGIODATA4 _IOW(GIODRV_IOC_MAGIC, 5, unsigned long *) | ||
29 | #define GIODRV_IOCGGIODATA4 _IOR(GIODRV_IOC_MAGIC, 6, unsigned long *) | ||
30 | #define GIODRV_IOCSGIOSETADDR _IOW(GIODRV_IOC_MAGIC, 7, unsigned long *) | ||
31 | #define GIODRV_IOCHARDRESET _IO(GIODRV_IOC_MAGIC, 8) /* debugging tool */ | ||
32 | |||
33 | #define GIODRV_IOCSGIO_LED _IOW(GIODRV_IOC_MAGIC, 9, unsigned long *) | ||
34 | #define GIODRV_IOCGGIO_LED _IOR(GIODRV_IOC_MAGIC, 10, unsigned long *) | ||
35 | #define GIODRV_IOCSGIO_BUZZER _IOW(GIODRV_IOC_MAGIC, 11, unsigned long *) | ||
36 | #define GIODRV_IOCGGIO_LANDISK _IOR(GIODRV_IOC_MAGIC, 14, unsigned long *) | ||
37 | #define GIODRV_IOCGGIO_BTN _IOR(GIODRV_IOC_MAGIC, 22, unsigned long *) | ||
38 | #define GIODRV_IOCSGIO_BTNPID _IOW(GIODRV_IOC_MAGIC, 23, unsigned long *) | ||
39 | #define GIODRV_IOCGGIO_BTNPID _IOR(GIODRV_IOC_MAGIC, 24, unsigned long *) | ||
40 | |||
41 | #define GIODRV_IOC_MAXNR 8 | ||
42 | #define GIO_READ 0x00000000 | ||
43 | #define GIO_WRITE 0x00000001 | ||
44 | |||
45 | #endif /* __ASM_SH_LANDISK_GIO_H */ | ||
diff --git a/include/asm-sh/landisk/ide.h b/include/asm-sh/landisk/ide.h new file mode 100644 index 000000000000..6490e28415ed --- /dev/null +++ b/include/asm-sh/landisk/ide.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * modifed by kogiidena | ||
3 | * 2005.03.03 | ||
4 | */ | ||
5 | |||
6 | #ifndef __ASM_SH_LANDISK_IDE_H | ||
7 | #define __ASM_SH_LANDISK_IDE_H | ||
8 | |||
9 | /* Nothing to see here.. */ | ||
10 | #include <asm/landisk/iodata_landisk.h> | ||
11 | #define IRQ_CFCARD IRQ_FATA /* CF Card IRQ */ | ||
12 | #define IRQ_PCMCIA IRQ_ATA /* PCMCIA IRQ */ | ||
13 | |||
14 | #endif /* __ASM_SH_LANDISK_IDE_H */ | ||
diff --git a/include/asm-sh/landisk/iodata_landisk.h b/include/asm-sh/landisk/iodata_landisk.h new file mode 100644 index 000000000000..c74d3c73f377 --- /dev/null +++ b/include/asm-sh/landisk/iodata_landisk.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef __ASM_SH_IODATA_LANDISK_H | ||
2 | #define __ASM_SH_IODATA_LANDISK_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/landisk/iodata_landisk.h | ||
6 | * | ||
7 | * Copyright (C) 2000 Atom Create Engineering Co., Ltd. | ||
8 | * | ||
9 | * IO-DATA LANDISK support | ||
10 | */ | ||
11 | |||
12 | /* Box specific addresses. */ | ||
13 | |||
14 | #define PA_USB 0xa4000000 /* USB Controller M66590 */ | ||
15 | |||
16 | #define PA_ATARST 0xb0000000 /* ATA/FATA Access Control Register */ | ||
17 | #define PA_LED 0xb0000001 /* LED Control Register */ | ||
18 | #define PA_STATUS 0xb0000002 /* Switch Status Register */ | ||
19 | #define PA_SHUTDOWN 0xb0000003 /* Shutdown Control Register */ | ||
20 | #define PA_PCIPME 0xb0000004 /* PCI PME Status Register */ | ||
21 | #define PA_IMASK 0xb0000005 /* Interrupt Mask Register */ | ||
22 | /* 2003.10.31 I-O DATA NSD NWG add. for shutdown port clear */ | ||
23 | #define PA_PWRINT_CLR 0xb0000006 /* Shutdown Interrupt clear Register */ | ||
24 | |||
25 | #define PA_LCD_CLRDSP 0x00 /* LCD Clear Display Offset */ | ||
26 | #define PA_LCD_RTNHOME 0x00 /* LCD Return Home Offset */ | ||
27 | #define PA_LCD_ENTMODE 0x00 /* LCD Entry Mode Offset */ | ||
28 | #define PA_LCD_DSPCTL 0x00 /* LCD Display ON/OFF Control Offset */ | ||
29 | #define PA_LCD_FUNC 0x00 /* LCD Function Set Offset */ | ||
30 | #define PA_LCD_CGRAM 0x00 /* LCD Set CGRAM Address Offset */ | ||
31 | #define PA_LCD_DDRAM 0x00 /* LCD Set DDRAM Address Offset */ | ||
32 | #define PA_LCD_RDFLAG 0x01 /* LCD Read Busy Flag Offset */ | ||
33 | #define PA_LCD_WTDATA 0x02 /* LCD Write Datat to RAM Offset */ | ||
34 | #define PA_LCD_RDDATA 0x03 /* LCD Read Data from RAM Offset */ | ||
35 | #define PA_PIDE_OFFSET 0x40 /* CF IDE Offset */ | ||
36 | #define PA_SIDE_OFFSET 0x40 /* HDD IDE Offset */ | ||
37 | |||
38 | #define IRQ_PCIINTA 5 /* PCI INTA IRQ */ | ||
39 | #define IRQ_PCIINTB 6 /* PCI INTB IRQ */ | ||
40 | #define IRQ_PCIINDC 7 /* PCI INTC IRQ */ | ||
41 | #define IRQ_PCIINTD 8 /* PCI INTD IRQ */ | ||
42 | #define IRQ_ATA 9 /* ATA IRQ */ | ||
43 | #define IRQ_FATA 10 /* FATA IRQ */ | ||
44 | #define IRQ_POWER 11 /* Power Switch IRQ */ | ||
45 | #define IRQ_BUTTON 12 /* USL-5P Button IRQ */ | ||
46 | #define IRQ_FAULT 13 /* USL-5P Fault IRQ */ | ||
47 | |||
48 | #define SHUTDOWN_BTN_MAJOR 99 /* Shutdown button device major no. */ | ||
49 | |||
50 | #define SHUTDOWN_LOOP_CNT 5 /* Shutdown button Detection loop */ | ||
51 | #define SHUTDOWN_DELAY 200 /* Shutdown button delay value(ms) */ | ||
52 | |||
53 | |||
54 | /* added by kogiidena */ | ||
55 | /* | ||
56 | * landisk_ledparam | ||
57 | * | ||
58 | * led ------10 -6543210 -6543210 -6543210 | ||
59 | * |000000..|0.......|0.......|U.......| | ||
60 | * | HARD |fastblik| blink | on | | ||
61 | * | ||
62 | * led0: power U:update flag | ||
63 | * led1: error | ||
64 | * led2: usb1 | ||
65 | * led3: usb2 | ||
66 | * led4: usb3 | ||
67 | * led5: usb4 | ||
68 | * led6: usb5 | ||
69 | * | ||
70 | */ | ||
71 | extern int landisk_ledparam; /* from setup.c */ | ||
72 | extern int landisk_buzzerparam; /* from setup.c */ | ||
73 | extern int landisk_arch; /* from setup.c */ | ||
74 | |||
75 | #define __IO_PREFIX landisk | ||
76 | #include <asm/io_generic.h> | ||
77 | |||
78 | #endif /* __ASM_SH_IODATA_LANDISK_H */ | ||
79 | |||
diff --git a/include/asm-sh/machvec.h b/include/asm-sh/machvec.h index 550501fa4fed..70389b72ffef 100644 --- a/include/asm-sh/machvec.h +++ b/include/asm-sh/machvec.h | |||
@@ -8,17 +8,18 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #ifndef _ASM_SH_MACHVEC_H | 10 | #ifndef _ASM_SH_MACHVEC_H |
11 | #define _ASM_SH_MACHVEC_H 1 | 11 | #define _ASM_SH_MACHVEC_H |
12 | 12 | ||
13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
14 | #include <linux/time.h> | 14 | #include <linux/time.h> |
15 | |||
16 | #include <asm/machtypes.h> | 15 | #include <asm/machtypes.h> |
17 | #include <asm/machvec_init.h> | 16 | #include <asm/machvec_init.h> |
18 | 17 | ||
19 | struct device; | 18 | struct device; |
20 | 19 | ||
21 | struct sh_machine_vector { | 20 | struct sh_machine_vector { |
21 | void (*mv_setup)(char **cmdline_p); | ||
22 | const char *mv_name; | ||
22 | int mv_nr_irqs; | 23 | int mv_nr_irqs; |
23 | 24 | ||
24 | u8 (*mv_inb)(unsigned long); | 25 | u8 (*mv_inb)(unsigned long); |
@@ -65,4 +66,6 @@ struct sh_machine_vector { | |||
65 | 66 | ||
66 | extern struct sh_machine_vector sh_mv; | 67 | extern struct sh_machine_vector sh_mv; |
67 | 68 | ||
69 | #define get_system_type() sh_mv.mv_name | ||
70 | |||
68 | #endif /* _ASM_SH_MACHVEC_H */ | 71 | #endif /* _ASM_SH_MACHVEC_H */ |
diff --git a/include/asm-sh/mc146818rtc.h b/include/asm-sh/mc146818rtc.h index 1707cfb2915d..0aee96a97330 100644 --- a/include/asm-sh/mc146818rtc.h +++ b/include/asm-sh/mc146818rtc.h | |||
@@ -4,173 +4,4 @@ | |||
4 | #ifndef _ASM_MC146818RTC_H | 4 | #ifndef _ASM_MC146818RTC_H |
5 | #define _ASM_MC146818RTC_H | 5 | #define _ASM_MC146818RTC_H |
6 | 6 | ||
7 | #ifdef CONFIG_SH_MPC1211 | ||
8 | #undef _ASM_MC146818RTC_H | ||
9 | #undef RTC_IRQ | ||
10 | #include <asm/mpc1211/mc146818rtc.h> | ||
11 | #else | ||
12 | |||
13 | #include <asm/rtc.h> | ||
14 | |||
15 | #define RTC_ALWAYS_BCD 1 | ||
16 | |||
17 | /* FIXME:RTC Interrupt feature is not implemented yet. */ | ||
18 | #undef RTC_IRQ | ||
19 | #define RTC_IRQ 0 | ||
20 | |||
21 | #if defined(CONFIG_CPU_SH3) | ||
22 | #define RTC_PORT(n) (R64CNT+(n)*2) | ||
23 | #define CMOS_READ(addr) __CMOS_READ(addr,b) | ||
24 | #define CMOS_WRITE(val,addr) __CMOS_WRITE(val,addr,b) | ||
25 | |||
26 | #elif defined(CONFIG_SH_SECUREEDGE5410) | ||
27 | #include <asm/snapgear/io.h> | ||
28 | |||
29 | #define RTC_PORT(n) SECUREEDGE_IOPORT_ADDR | ||
30 | #define CMOS_READ(addr) secureedge5410_cmos_read(addr) | ||
31 | #define CMOS_WRITE(val,addr) secureedge5410_cmos_write(val,addr) | ||
32 | extern unsigned char secureedge5410_cmos_read(int addr); | ||
33 | extern void secureedge5410_cmos_write(unsigned char val, int addr); | ||
34 | |||
35 | #elif defined(CONFIG_CPU_SH4) | ||
36 | #define RTC_PORT(n) (R64CNT+(n)*4) | ||
37 | #define CMOS_READ(addr) __CMOS_READ(addr,w) | ||
38 | #define CMOS_WRITE(val,addr) __CMOS_WRITE(val,addr,w) | ||
39 | #endif | ||
40 | |||
41 | #define __CMOS_READ(addr, s) ({ \ | ||
42 | unsigned char val=0, rcr1, rcr2, r64cnt, retry; \ | ||
43 | switch(addr) { \ | ||
44 | case RTC_SECONDS: \ | ||
45 | val = ctrl_inb(RSECCNT); \ | ||
46 | break; \ | ||
47 | case RTC_SECONDS_ALARM: \ | ||
48 | val = ctrl_inb(RSECAR); \ | ||
49 | break; \ | ||
50 | case RTC_MINUTES: \ | ||
51 | val = ctrl_inb(RMINCNT); \ | ||
52 | break; \ | ||
53 | case RTC_MINUTES_ALARM: \ | ||
54 | val = ctrl_inb(RMINAR); \ | ||
55 | break; \ | ||
56 | case RTC_HOURS: \ | ||
57 | val = ctrl_inb(RHRCNT); \ | ||
58 | break; \ | ||
59 | case RTC_HOURS_ALARM: \ | ||
60 | val = ctrl_inb(RHRAR); \ | ||
61 | break; \ | ||
62 | case RTC_DAY_OF_WEEK: \ | ||
63 | val = ctrl_inb(RWKCNT); \ | ||
64 | break; \ | ||
65 | case RTC_DAY_OF_MONTH: \ | ||
66 | val = ctrl_inb(RDAYCNT); \ | ||
67 | break; \ | ||
68 | case RTC_MONTH: \ | ||
69 | val = ctrl_inb(RMONCNT); \ | ||
70 | break; \ | ||
71 | case RTC_YEAR: \ | ||
72 | val = ctrl_in##s(RYRCNT); \ | ||
73 | break; \ | ||
74 | case RTC_REG_A: /* RTC_FREQ_SELECT */ \ | ||
75 | rcr2 = ctrl_inb(RCR2); \ | ||
76 | val = (rcr2 & RCR2_PESMASK) >> 4; \ | ||
77 | rcr1 = ctrl_inb(RCR1); \ | ||
78 | rcr1 = (rcr1 & (RCR1_CIE | RCR1_AIE)) | RCR1_AF;\ | ||
79 | retry = 0; \ | ||
80 | do { \ | ||
81 | ctrl_outb(rcr1, RCR1); /* clear CF */ \ | ||
82 | r64cnt = ctrl_inb(R64CNT); \ | ||
83 | } while((ctrl_inb(RCR1) & RCR1_CF) && retry++ < 1000);\ | ||
84 | r64cnt ^= RTC_BIT_INVERTED; \ | ||
85 | if(r64cnt == 0x7f || r64cnt == 0) \ | ||
86 | val |= RTC_UIP; \ | ||
87 | break; \ | ||
88 | case RTC_REG_B: /* RTC_CONTROL */ \ | ||
89 | rcr1 = ctrl_inb(RCR1); \ | ||
90 | rcr2 = ctrl_inb(RCR2); \ | ||
91 | if(rcr1 & RCR1_CIE) val |= RTC_UIE; \ | ||
92 | if(rcr1 & RCR1_AIE) val |= RTC_AIE; \ | ||
93 | if(rcr2 & RCR2_PESMASK) val |= RTC_PIE; \ | ||
94 | if(!(rcr2 & RCR2_START))val |= RTC_SET; \ | ||
95 | val |= RTC_24H; \ | ||
96 | break; \ | ||
97 | case RTC_REG_C: /* RTC_INTR_FLAGS */ \ | ||
98 | rcr1 = ctrl_inb(RCR1); \ | ||
99 | rcr1 &= ~(RCR1_CF | RCR1_AF); \ | ||
100 | ctrl_outb(rcr1, RCR1); \ | ||
101 | rcr2 = ctrl_inb(RCR2); \ | ||
102 | rcr2 &= ~RCR2_PEF; \ | ||
103 | ctrl_outb(rcr2, RCR2); \ | ||
104 | break; \ | ||
105 | case RTC_REG_D: /* RTC_VALID */ \ | ||
106 | /* Always valid ... */ \ | ||
107 | val = RTC_VRT; \ | ||
108 | break; \ | ||
109 | default: \ | ||
110 | break; \ | ||
111 | } \ | ||
112 | val; \ | ||
113 | }) | ||
114 | |||
115 | #define __CMOS_WRITE(val, addr, s) ({ \ | ||
116 | unsigned char rcr1,rcr2; \ | ||
117 | switch(addr) { \ | ||
118 | case RTC_SECONDS: \ | ||
119 | ctrl_outb(val, RSECCNT); \ | ||
120 | break; \ | ||
121 | case RTC_SECONDS_ALARM: \ | ||
122 | ctrl_outb(val, RSECAR); \ | ||
123 | break; \ | ||
124 | case RTC_MINUTES: \ | ||
125 | ctrl_outb(val, RMINCNT); \ | ||
126 | break; \ | ||
127 | case RTC_MINUTES_ALARM: \ | ||
128 | ctrl_outb(val, RMINAR); \ | ||
129 | break; \ | ||
130 | case RTC_HOURS: \ | ||
131 | ctrl_outb(val, RHRCNT); \ | ||
132 | break; \ | ||
133 | case RTC_HOURS_ALARM: \ | ||
134 | ctrl_outb(val, RHRAR); \ | ||
135 | break; \ | ||
136 | case RTC_DAY_OF_WEEK: \ | ||
137 | ctrl_outb(val, RWKCNT); \ | ||
138 | break; \ | ||
139 | case RTC_DAY_OF_MONTH: \ | ||
140 | ctrl_outb(val, RDAYCNT); \ | ||
141 | break; \ | ||
142 | case RTC_MONTH: \ | ||
143 | ctrl_outb(val, RMONCNT); \ | ||
144 | break; \ | ||
145 | case RTC_YEAR: \ | ||
146 | ctrl_out##s((ctrl_in##s(RYRCNT) & 0xff00) | (val & 0xff), RYRCNT);\ | ||
147 | break; \ | ||
148 | case RTC_REG_A: /* RTC_FREQ_SELECT */ \ | ||
149 | rcr2 = ctrl_inb(RCR2); \ | ||
150 | if((val & RTC_DIV_CTL) == RTC_DIV_RESET2) \ | ||
151 | rcr2 |= RCR2_RESET; \ | ||
152 | ctrl_outb(rcr2, RCR2); \ | ||
153 | break; \ | ||
154 | case RTC_REG_B: /* RTC_CONTROL */ \ | ||
155 | rcr1 = (ctrl_inb(RCR1) & 0x99) | RCR1_AF; \ | ||
156 | if(val & RTC_AIE) rcr1 |= RCR1_AIE; \ | ||
157 | else rcr1 &= ~RCR1_AIE; \ | ||
158 | if(val & RTC_UIE) rcr1 |= RCR1_CIE; \ | ||
159 | else rcr1 &= ~RCR1_CIE; \ | ||
160 | ctrl_outb(rcr1, RCR1); \ | ||
161 | rcr2 = ctrl_inb(RCR2); \ | ||
162 | if(val & RTC_SET) rcr2 &= ~RCR2_START; \ | ||
163 | else rcr2 |= RCR2_START; \ | ||
164 | ctrl_outb(rcr2, RCR2); \ | ||
165 | break; \ | ||
166 | case RTC_REG_C: /* RTC_INTR_FLAGS */ \ | ||
167 | break; \ | ||
168 | case RTC_REG_D: /* RTC_VALID */ \ | ||
169 | break; \ | ||
170 | default: \ | ||
171 | break; \ | ||
172 | } \ | ||
173 | }) | ||
174 | |||
175 | #endif /* CONFIG_SH_MPC1211 */ | ||
176 | #endif /* _ASM_MC146818RTC_H */ | 7 | #endif /* _ASM_MC146818RTC_H */ |
diff --git a/include/asm-sh/mmu.h b/include/asm-sh/mmu.h index 72f07be6117f..cf47df79bb94 100644 --- a/include/asm-sh/mmu.h +++ b/include/asm-sh/mmu.h | |||
@@ -3,27 +3,76 @@ | |||
3 | 3 | ||
4 | #if !defined(CONFIG_MMU) | 4 | #if !defined(CONFIG_MMU) |
5 | 5 | ||
6 | struct mm_rblock_struct { | ||
7 | int size; | ||
8 | int refcount; | ||
9 | void *kblock; | ||
10 | }; | ||
11 | |||
12 | struct mm_tblock_struct { | ||
13 | struct mm_rblock_struct *rblock; | ||
14 | struct mm_tblock_struct *next; | ||
15 | }; | ||
16 | |||
17 | typedef struct { | 6 | typedef struct { |
18 | struct mm_tblock_struct tblock; | 7 | struct vm_list_struct *vmlist; |
19 | unsigned long end_brk; | 8 | unsigned long end_brk; |
20 | } mm_context_t; | 9 | } mm_context_t; |
21 | 10 | ||
22 | #else | 11 | #else |
23 | 12 | ||
24 | /* Default "unsigned long" context */ | 13 | /* Default "unsigned long" context */ |
25 | typedef unsigned long mm_context_t; | 14 | typedef unsigned long mm_context_id_t; |
15 | |||
16 | typedef struct { | ||
17 | mm_context_id_t id; | ||
18 | void *vdso; | ||
19 | } mm_context_t; | ||
26 | 20 | ||
27 | #endif /* CONFIG_MMU */ | 21 | #endif /* CONFIG_MMU */ |
28 | #endif /* __MMH_H */ | 22 | |
23 | /* | ||
24 | * Privileged Space Mapping Buffer (PMB) definitions | ||
25 | */ | ||
26 | #define PMB_PASCR 0xff000070 | ||
27 | #define PMB_IRMCR 0xff000078 | ||
28 | |||
29 | #define PMB_ADDR 0xf6100000 | ||
30 | #define PMB_DATA 0xf7100000 | ||
31 | #define PMB_ENTRY_MAX 16 | ||
32 | #define PMB_E_MASK 0x0000000f | ||
33 | #define PMB_E_SHIFT 8 | ||
34 | |||
35 | #define PMB_SZ_16M 0x00000000 | ||
36 | #define PMB_SZ_64M 0x00000010 | ||
37 | #define PMB_SZ_128M 0x00000080 | ||
38 | #define PMB_SZ_512M 0x00000090 | ||
39 | #define PMB_SZ_MASK PMB_SZ_512M | ||
40 | #define PMB_C 0x00000008 | ||
41 | #define PMB_WT 0x00000001 | ||
42 | #define PMB_UB 0x00000200 | ||
43 | #define PMB_V 0x00000100 | ||
44 | |||
45 | #define PMB_NO_ENTRY (-1) | ||
46 | |||
47 | struct pmb_entry; | ||
48 | |||
49 | struct pmb_entry { | ||
50 | unsigned long vpn; | ||
51 | unsigned long ppn; | ||
52 | unsigned long flags; | ||
53 | |||
54 | /* | ||
55 | * 0 .. NR_PMB_ENTRIES for specific entry selection, or | ||
56 | * PMB_NO_ENTRY to search for a free one | ||
57 | */ | ||
58 | int entry; | ||
59 | |||
60 | struct pmb_entry *next; | ||
61 | /* Adjacent entry link for contiguous multi-entry mappings */ | ||
62 | struct pmb_entry *link; | ||
63 | }; | ||
64 | |||
65 | /* arch/sh/mm/pmb.c */ | ||
66 | int __set_pmb_entry(unsigned long vpn, unsigned long ppn, | ||
67 | unsigned long flags, int *entry); | ||
68 | int set_pmb_entry(struct pmb_entry *pmbe); | ||
69 | void clear_pmb_entry(struct pmb_entry *pmbe); | ||
70 | struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn, | ||
71 | unsigned long flags); | ||
72 | void pmb_free(struct pmb_entry *pmbe); | ||
73 | long pmb_remap(unsigned long virt, unsigned long phys, | ||
74 | unsigned long size, unsigned long flags); | ||
75 | void pmb_unmap(unsigned long addr); | ||
76 | |||
77 | #endif /* __MMU_H */ | ||
29 | 78 | ||
diff --git a/include/asm-sh/mmu_context.h b/include/asm-sh/mmu_context.h index 6760d064bd02..c7088efe579a 100644 --- a/include/asm-sh/mmu_context.h +++ b/include/asm-sh/mmu_context.h | |||
@@ -49,7 +49,7 @@ get_mmu_context(struct mm_struct *mm) | |||
49 | unsigned long mc = mmu_context_cache; | 49 | unsigned long mc = mmu_context_cache; |
50 | 50 | ||
51 | /* Check if we have old version of context. */ | 51 | /* Check if we have old version of context. */ |
52 | if (((mm->context ^ mc) & MMU_CONTEXT_VERSION_MASK) == 0) | 52 | if (((mm->context.id ^ mc) & MMU_CONTEXT_VERSION_MASK) == 0) |
53 | /* It's up to date, do nothing */ | 53 | /* It's up to date, do nothing */ |
54 | return; | 54 | return; |
55 | 55 | ||
@@ -68,7 +68,7 @@ get_mmu_context(struct mm_struct *mm) | |||
68 | if (!mc) | 68 | if (!mc) |
69 | mmu_context_cache = mc = MMU_CONTEXT_FIRST_VERSION; | 69 | mmu_context_cache = mc = MMU_CONTEXT_FIRST_VERSION; |
70 | } | 70 | } |
71 | mm->context = mc; | 71 | mm->context.id = mc; |
72 | } | 72 | } |
73 | 73 | ||
74 | /* | 74 | /* |
@@ -78,7 +78,7 @@ get_mmu_context(struct mm_struct *mm) | |||
78 | static __inline__ int init_new_context(struct task_struct *tsk, | 78 | static __inline__ int init_new_context(struct task_struct *tsk, |
79 | struct mm_struct *mm) | 79 | struct mm_struct *mm) |
80 | { | 80 | { |
81 | mm->context = NO_CONTEXT; | 81 | mm->context.id = NO_CONTEXT; |
82 | 82 | ||
83 | return 0; | 83 | return 0; |
84 | } | 84 | } |
@@ -123,7 +123,7 @@ static __inline__ unsigned long get_asid(void) | |||
123 | static __inline__ void activate_context(struct mm_struct *mm) | 123 | static __inline__ void activate_context(struct mm_struct *mm) |
124 | { | 124 | { |
125 | get_mmu_context(mm); | 125 | get_mmu_context(mm); |
126 | set_asid(mm->context & MMU_CONTEXT_ASID_MASK); | 126 | set_asid(mm->context.id & MMU_CONTEXT_ASID_MASK); |
127 | } | 127 | } |
128 | 128 | ||
129 | /* MMU_TTB can be used for optimizing the fault handling. | 129 | /* MMU_TTB can be used for optimizing the fault handling. |
@@ -174,9 +174,7 @@ static inline void enable_mmu(void) | |||
174 | { | 174 | { |
175 | /* Enable MMU */ | 175 | /* Enable MMU */ |
176 | ctrl_outl(MMU_CONTROL_INIT, MMUCR); | 176 | ctrl_outl(MMU_CONTROL_INIT, MMUCR); |
177 | 177 | ctrl_barrier(); | |
178 | /* The manual suggests doing some nops after turning on the MMU */ | ||
179 | __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t"); | ||
180 | 178 | ||
181 | if (mmu_context_cache == NO_CONTEXT) | 179 | if (mmu_context_cache == NO_CONTEXT) |
182 | mmu_context_cache = MMU_CONTEXT_FIRST_VERSION; | 180 | mmu_context_cache = MMU_CONTEXT_FIRST_VERSION; |
@@ -191,7 +189,8 @@ static inline void disable_mmu(void) | |||
191 | cr = ctrl_inl(MMUCR); | 189 | cr = ctrl_inl(MMUCR); |
192 | cr &= ~MMU_CONTROL_INIT; | 190 | cr &= ~MMU_CONTROL_INIT; |
193 | ctrl_outl(cr, MMUCR); | 191 | ctrl_outl(cr, MMUCR); |
194 | __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t"); | 192 | |
193 | ctrl_barrier(); | ||
195 | } | 194 | } |
196 | #else | 195 | #else |
197 | /* | 196 | /* |
diff --git a/include/asm-sh/overdrive/fpga.h b/include/asm-sh/overdrive/fpga.h deleted file mode 100644 index 1cd87992c124..000000000000 --- a/include/asm-sh/overdrive/fpga.h +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 David J. Mckay (david.mckay@st.com) | ||
3 | * | ||
4 | * May be copied or modified under the terms of the GNU General Public | ||
5 | * License. See linux/COPYING for more information. | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | #ifndef __FPGA_OD_H__ | ||
10 | #define __FPGA_OD_H__ | ||
11 | |||
12 | /* This routine will program up the fpga which interfaces to the galileo */ | ||
13 | int init_overdrive_fpga(void); | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-sh/overdrive/gt64111.h b/include/asm-sh/overdrive/gt64111.h deleted file mode 100644 index 01d58bc13a44..000000000000 --- a/include/asm-sh/overdrive/gt64111.h +++ /dev/null | |||
@@ -1,109 +0,0 @@ | |||
1 | #ifndef _GT64111_H_ | ||
2 | #define _GT64111_H_ | ||
3 | |||
4 | #define MASTER_INTERFACE 0x0 | ||
5 | #define RAS10_LO_DEC_ADR 0x8 | ||
6 | #define RAS10_HI_DEC_ADR 0x10 | ||
7 | #define RAS32_LO_DEC_ADR 0x18 | ||
8 | #define RAS32_HI_DEC_ADR 0x20 | ||
9 | #define CS20_LO_DEC_ADR 0x28 | ||
10 | #define CS20_HI_DEC_ADR 0x30 | ||
11 | #define CS3_LO_DEC_ADR 0x38 | ||
12 | #define CS3_HI_DEC_ADR 0x40 | ||
13 | #define PCI_IO_LO_DEC_ADR 0x48 | ||
14 | #define PCI_IO_HI_DEC_ADR 0x50 | ||
15 | #define PCI_MEM0_LO_DEC_ADR 0x58 | ||
16 | #define PCI_MEM0_HI_DEC_ADR 0x60 | ||
17 | #define INTERNAL_SPACE_DEC 0x68 | ||
18 | #define BUS_ERR_ADR_LO_CPU 0x70 | ||
19 | #define READONLY0 0x78 | ||
20 | #define PCI_MEM1_LO_DEC_ADR 0x80 | ||
21 | #define PCI_MEM1_HI_DEC_ADR 0x88 | ||
22 | #define RAS0_LO_DEC_ADR 0x400 | ||
23 | #define RAS0_HI_DEC_ADR 0x404 | ||
24 | #define RAS1_LO_DEC_ADR 0x408 | ||
25 | #define RAS1_HI_DEC_ADR 0x40c | ||
26 | #define RAS2_LO_DEC_ADR 0x410 | ||
27 | #define RAS2_HI_DEC_ADR 0x414 | ||
28 | #define RAS3_LO_DEC_ADR 0x418 | ||
29 | #define RAS3_HI_DEC_ADR 0x41c | ||
30 | #define DEV_CS0_LO_DEC_ADR 0x420 | ||
31 | #define DEV_CS0_HI_DEC_ADR 0x424 | ||
32 | #define DEV_CS1_LO_DEC_ADR 0x428 | ||
33 | #define DEV_CS1_HI_DEC_ADR 0x42c | ||
34 | #define DEV_CS2_LO_DEC_ADR 0x430 | ||
35 | #define DEV_CS2_HI_DEC_ADR 0x434 | ||
36 | #define DEV_CS3_LO_DEC_ADR 0x438 | ||
37 | #define DEV_CS3_HI_DEC_ADR 0x43c | ||
38 | #define DEV_BOOTCS_LO_DEC_ADR 0x440 | ||
39 | #define DEV_BOOTCS_HI_DEC_ADR 0x444 | ||
40 | #define DEV_ADR_DEC_ERR 0x470 | ||
41 | #define DRAM_CFG 0x448 | ||
42 | #define DRAM_BANK0_PARMS 0x44c | ||
43 | #define DRAM_BANK1_PARMS 0x450 | ||
44 | #define DRAM_BANK2_PARMS 0x454 | ||
45 | #define DRAM_BANK3_PARMS 0x458 | ||
46 | #define DEV_BANK0_PARMS 0x45c | ||
47 | #define DEV_BANK1_PARMS 0x460 | ||
48 | #define DEV_BANK2_PARMS 0x464 | ||
49 | #define DEV_BANK3_PARMS 0x468 | ||
50 | #define DEV_BOOT_BANK_PARMS 0x46c | ||
51 | #define CH0_DMA_BYTECOUNT 0x800 | ||
52 | #define CH1_DMA_BYTECOUNT 0x804 | ||
53 | #define CH2_DMA_BYTECOUNT 0x808 | ||
54 | #define CH3_DMA_BYTECOUNT 0x80c | ||
55 | #define CH0_DMA_SRC_ADR 0x810 | ||
56 | #define CH1_DMA_SRC_ADR 0x814 | ||
57 | #define CH2_DMA_SRC_ADR 0x818 | ||
58 | #define CH3_DMA_SRC_ADR 0x81c | ||
59 | #define CH0_DMA_DST_ADR 0x820 | ||
60 | #define CH1_DMA_DST_ADR 0x824 | ||
61 | #define CH2_DMA_DST_ADR 0x828 | ||
62 | #define CH3_DMA_DST_ADR 0x82c | ||
63 | #define CH0_NEXT_REC_PTR 0x830 | ||
64 | #define CH1_NEXT_REC_PTR 0x834 | ||
65 | #define CH2_NEXT_REC_PTR 0x838 | ||
66 | #define CH3_NEXT_REC_PTR 0x83c | ||
67 | #define CH0_CTRL 0x840 | ||
68 | #define CH1_CTRL 0x844 | ||
69 | #define CH2_CTRL 0x848 | ||
70 | #define CH3_CTRL 0x84c | ||
71 | #define DMA_ARBITER 0x860 | ||
72 | #define TIMER0 0x850 | ||
73 | #define TIMER1 0x854 | ||
74 | #define TIMER2 0x858 | ||
75 | #define TIMER3 0x85c | ||
76 | #define TIMER_CTRL 0x864 | ||
77 | #define PCI_CMD 0xc00 | ||
78 | #define PCI_TIMEOUT 0xc04 | ||
79 | #define PCI_RAS10_BANK_SIZE 0xc08 | ||
80 | #define PCI_RAS32_BANK_SIZE 0xc0c | ||
81 | #define PCI_CS20_BANK_SIZE 0xc10 | ||
82 | #define PCI_CS3_BANK_SIZE 0xc14 | ||
83 | #define PCI_SERRMASK 0xc28 | ||
84 | #define PCI_INTACK 0xc34 | ||
85 | #define PCI_BAR_EN 0xc3c | ||
86 | #define PCI_CFG_ADR 0xcf8 | ||
87 | #define PCI_CFG_DATA 0xcfc | ||
88 | #define PCI_INTCAUSE 0xc18 | ||
89 | #define PCI_MAST_MASK 0xc1c | ||
90 | #define PCI_PCIMASK 0xc24 | ||
91 | #define BAR_ENABLE_ADR 0xc3c | ||
92 | |||
93 | /* These are config registers, accessible via PCI space */ | ||
94 | #define PCI_CONFIG_RAS10_BASE_ADR 0x010 | ||
95 | #define PCI_CONFIG_RAS32_BASE_ADR 0x014 | ||
96 | #define PCI_CONFIG_CS20_BASE_ADR 0x018 | ||
97 | #define PCI_CONFIG_CS3_BASE_ADR 0x01c | ||
98 | #define PCI_CONFIG_INT_REG_MM_ADR 0x020 | ||
99 | #define PCI_CONFIG_INT_REG_IO_ADR 0x024 | ||
100 | #define PCI_CONFIG_BOARD_VENDOR 0x02c | ||
101 | #define PCI_CONFIG_ROM_ADR 0x030 | ||
102 | #define PCI_CONFIG_INT_PIN_LINE 0x03c | ||
103 | |||
104 | |||
105 | |||
106 | |||
107 | |||
108 | #endif | ||
109 | |||
diff --git a/include/asm-sh/overdrive/io.h b/include/asm-sh/overdrive/io.h deleted file mode 100644 index 0dba700e9643..000000000000 --- a/include/asm-sh/overdrive/io.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_od.h | ||
3 | * | ||
4 | * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * IO functions for an STMicroelectronics Overdrive | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_SH_IO_OD_H | ||
13 | #define _ASM_SH_IO_OD_H | ||
14 | |||
15 | extern unsigned char od_inb(unsigned long port); | ||
16 | extern unsigned short od_inw(unsigned long port); | ||
17 | extern unsigned int od_inl(unsigned long port); | ||
18 | |||
19 | extern void od_outb(unsigned char value, unsigned long port); | ||
20 | extern void od_outw(unsigned short value, unsigned long port); | ||
21 | extern void od_outl(unsigned int value, unsigned long port); | ||
22 | |||
23 | extern unsigned char od_inb_p(unsigned long port); | ||
24 | extern unsigned short od_inw_p(unsigned long port); | ||
25 | extern unsigned int od_inl_p(unsigned long port); | ||
26 | extern void od_outb_p(unsigned char value, unsigned long port); | ||
27 | extern void od_outw_p(unsigned short value, unsigned long port); | ||
28 | extern void od_outl_p(unsigned int value, unsigned long port); | ||
29 | |||
30 | extern void od_insb(unsigned long port, void *addr, unsigned long count); | ||
31 | extern void od_insw(unsigned long port, void *addr, unsigned long count); | ||
32 | extern void od_insl(unsigned long port, void *addr, unsigned long count); | ||
33 | extern void od_outsb(unsigned long port, const void *addr, unsigned long count); | ||
34 | extern void od_outsw(unsigned long port, const void *addr, unsigned long count); | ||
35 | extern void od_outsl(unsigned long port, const void *addr, unsigned long count); | ||
36 | |||
37 | extern unsigned long od_isa_port2addr(unsigned long offset); | ||
38 | |||
39 | #endif /* _ASM_SH_IO_OD_H */ | ||
diff --git a/include/asm-sh/overdrive/overdrive.h b/include/asm-sh/overdrive/overdrive.h deleted file mode 100644 index fc746c244f83..000000000000 --- a/include/asm-sh/overdrive/overdrive.h +++ /dev/null | |||
@@ -1,88 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 David J. Mckay (david.mckay@st.com) | ||
3 | * | ||
4 | * May be copied or modified under the terms of the GNU General Public | ||
5 | * License. See linux/COPYING for more information. | ||
6 | * | ||
7 | */ | ||
8 | |||
9 | |||
10 | #ifndef __OVERDRIVE_H__ | ||
11 | #define __OVERDRIVE_H__ | ||
12 | |||
13 | #define OVERDRIVE_INT_CT 0xa3a00000 | ||
14 | #define OVERDRIVE_INT_DT 0xa3b00000 | ||
15 | |||
16 | #define OVERDRIVE_CTRL 0xa3000000 | ||
17 | |||
18 | /* Shoving all these bits into the same register is not a good idea. | ||
19 | * As soon as I get a spare moment, I'll change the FPGA and put each | ||
20 | * bit in a separate register | ||
21 | */ | ||
22 | |||
23 | #define VALID_CTRL_BITS 0x1f | ||
24 | |||
25 | #define ENABLE_RS232_MASK 0x1e | ||
26 | #define DISABLE_RS232_BIT 0x01 | ||
27 | |||
28 | #define ENABLE_NMI_MASK 0x1d | ||
29 | #define DISABLE_NMI_BIT 0x02 | ||
30 | |||
31 | #define RESET_PCI_MASK 0x1b | ||
32 | #define ENABLE_PCI_BIT 0x04 | ||
33 | |||
34 | #define ENABLE_LED_MASK 0x17 | ||
35 | #define DISABLE_LED_BIT 0x08 | ||
36 | |||
37 | #define RESET_FPGA_MASK 0x0f | ||
38 | #define ENABLE_FPGA_BIT 0x10 | ||
39 | |||
40 | |||
41 | #define FPGA_DCLK_ADDRESS 0xA3C00000 | ||
42 | |||
43 | #define FPGA_DATA 0x01 /* W */ | ||
44 | #define FPGA_CONFDONE 0x02 /* R */ | ||
45 | #define FPGA_NOT_STATUS 0x04 /* R */ | ||
46 | #define FPGA_INITDONE 0x08 /* R */ | ||
47 | |||
48 | #define FPGA_TIMEOUT 100000 | ||
49 | |||
50 | |||
51 | /* Interrupts for the overdrive. Note that these numbers have | ||
52 | * nothing to do with the actual IRQ numbers they appear on, | ||
53 | * this is all programmable. This is simply the position in the | ||
54 | * INT_CT register. | ||
55 | */ | ||
56 | |||
57 | #define OVERDRIVE_PCI_INTA 0 | ||
58 | #define OVERDRIVE_PCI_INTB 1 | ||
59 | #define OVERDRIVE_PCI_INTC 2 | ||
60 | #define OVERDRIVE_PCI_INTD 3 | ||
61 | #define OVERDRIVE_GALILEO_INT 4 | ||
62 | #define OVERDRIVE_GALILEO_LOCAL_INT 5 | ||
63 | #define OVERDRIVE_AUDIO_INT 6 | ||
64 | #define OVERDRIVE_KEYBOARD_INT 7 | ||
65 | |||
66 | /* Which Linux IRQ should we assign to each interrupt source? */ | ||
67 | #define OVERDRIVE_PCI_IRQ1 2 | ||
68 | #ifdef CONFIG_HACKED_NE2K | ||
69 | #define OVERDRIVE_PCI_IRQ2 7 | ||
70 | #else | ||
71 | #define OVERDRIVE_PCI_IRQ2 2 | ||
72 | #undef OVERDRIVE_PCI_INTB | ||
73 | #define OVERDRIVE_PCI_INTB OVERDRIVE_PCI_INTA | ||
74 | |||
75 | #endif | ||
76 | |||
77 | /* Put the ESS solo audio chip on IRQ 4 */ | ||
78 | #define OVERDRIVE_ESS_IRQ 4 | ||
79 | |||
80 | /* Where the memory behind the PCI bus appears */ | ||
81 | #define PCI_DRAM_BASE 0xb7000000 | ||
82 | #define PCI_DRAM_SIZE (16*1024*1024) | ||
83 | #define PCI_DRAM_FINISH (PCI_DRAM_BASE+PCI_DRAM_SIZE-1) | ||
84 | |||
85 | /* Where the IO region appears in the memory */ | ||
86 | #define PCI_GTIO_BASE 0xb8000000 | ||
87 | |||
88 | #endif | ||
diff --git a/include/asm-sh/page.h b/include/asm-sh/page.h index 6f7eb8a3aba5..ca8b26d90475 100644 --- a/include/asm-sh/page.h +++ b/include/asm-sh/page.h | |||
@@ -16,7 +16,13 @@ | |||
16 | 16 | ||
17 | /* PAGE_SHIFT determines the page size */ | 17 | /* PAGE_SHIFT determines the page size */ |
18 | #define PAGE_SHIFT 12 | 18 | #define PAGE_SHIFT 12 |
19 | |||
20 | #ifdef __ASSEMBLY__ | ||
21 | #define PAGE_SIZE (1 << PAGE_SHIFT) | ||
22 | #else | ||
19 | #define PAGE_SIZE (1UL << PAGE_SHIFT) | 23 | #define PAGE_SIZE (1UL << PAGE_SHIFT) |
24 | #endif | ||
25 | |||
20 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 26 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
21 | #define PTE_MASK PAGE_MASK | 27 | #define PTE_MASK PAGE_MASK |
22 | 28 | ||
@@ -30,7 +36,6 @@ | |||
30 | #define HPAGE_SIZE (1UL << HPAGE_SHIFT) | 36 | #define HPAGE_SIZE (1UL << HPAGE_SHIFT) |
31 | #define HPAGE_MASK (~(HPAGE_SIZE-1)) | 37 | #define HPAGE_MASK (~(HPAGE_SIZE-1)) |
32 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT-PAGE_SHIFT) | 38 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT-PAGE_SHIFT) |
33 | #define ARCH_HAS_SETCLEAR_HUGE_PTE | ||
34 | #endif | 39 | #endif |
35 | 40 | ||
36 | #ifdef __KERNEL__ | 41 | #ifdef __KERNEL__ |
@@ -39,10 +44,18 @@ | |||
39 | extern void (*clear_page)(void *to); | 44 | extern void (*clear_page)(void *to); |
40 | extern void (*copy_page)(void *to, void *from); | 45 | extern void (*copy_page)(void *to, void *from); |
41 | 46 | ||
47 | extern unsigned long shm_align_mask; | ||
48 | |||
49 | #ifdef CONFIG_MMU | ||
42 | extern void clear_page_slow(void *to); | 50 | extern void clear_page_slow(void *to); |
43 | extern void copy_page_slow(void *to, void *from); | 51 | extern void copy_page_slow(void *to, void *from); |
52 | #else | ||
53 | extern void clear_page_nommu(void *to); | ||
54 | extern void copy_page_nommu(void *to, void *from); | ||
55 | #endif | ||
44 | 56 | ||
45 | #if defined(CONFIG_SH7705_CACHE_32KB) && defined(CONFIG_MMU) | 57 | #if defined(CONFIG_MMU) && (defined(CONFIG_CPU_SH4) || \ |
58 | defined(CONFIG_SH7705_CACHE_32KB)) | ||
46 | struct page; | 59 | struct page; |
47 | extern void clear_user_page(void *to, unsigned long address, struct page *pg); | 60 | extern void clear_user_page(void *to, unsigned long address, struct page *pg); |
48 | extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); | 61 | extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); |
@@ -51,29 +64,20 @@ extern void __copy_user_page(void *to, void *from, void *orig_to); | |||
51 | #elif defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU) | 64 | #elif defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU) |
52 | #define clear_user_page(page, vaddr, pg) clear_page(page) | 65 | #define clear_user_page(page, vaddr, pg) clear_page(page) |
53 | #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) | 66 | #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) |
54 | #elif defined(CONFIG_CPU_SH4) | ||
55 | struct page; | ||
56 | extern void clear_user_page(void *to, unsigned long address, struct page *pg); | ||
57 | extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); | ||
58 | extern void __clear_user_page(void *to, void *orig_to); | ||
59 | extern void __copy_user_page(void *to, void *from, void *orig_to); | ||
60 | #endif | 67 | #endif |
61 | 68 | ||
62 | /* | 69 | /* |
63 | * These are used to make use of C type-checking.. | 70 | * These are used to make use of C type-checking.. |
64 | */ | 71 | */ |
65 | typedef struct { unsigned long pte; } pte_t; | 72 | typedef struct { unsigned long pte; } pte_t; |
66 | typedef struct { unsigned long pmd; } pmd_t; | ||
67 | typedef struct { unsigned long pgd; } pgd_t; | 73 | typedef struct { unsigned long pgd; } pgd_t; |
68 | typedef struct { unsigned long pgprot; } pgprot_t; | 74 | typedef struct { unsigned long pgprot; } pgprot_t; |
69 | 75 | ||
70 | #define pte_val(x) ((x).pte) | 76 | #define pte_val(x) ((x).pte) |
71 | #define pmd_val(x) ((x).pmd) | ||
72 | #define pgd_val(x) ((x).pgd) | 77 | #define pgd_val(x) ((x).pgd) |
73 | #define pgprot_val(x) ((x).pgprot) | 78 | #define pgprot_val(x) ((x).pgprot) |
74 | 79 | ||
75 | #define __pte(x) ((pte_t) { (x) } ) | 80 | #define __pte(x) ((pte_t) { (x) } ) |
76 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
77 | #define __pgd(x) ((pgd_t) { (x) } ) | 81 | #define __pgd(x) ((pgd_t) { (x) } ) |
78 | #define __pgprot(x) ((pgprot_t) { (x) } ) | 82 | #define __pgprot(x) ((pgprot_t) { (x) } ) |
79 | 83 | ||
@@ -93,7 +97,7 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
93 | #define __MEMORY_START CONFIG_MEMORY_START | 97 | #define __MEMORY_START CONFIG_MEMORY_START |
94 | #define __MEMORY_SIZE CONFIG_MEMORY_SIZE | 98 | #define __MEMORY_SIZE CONFIG_MEMORY_SIZE |
95 | 99 | ||
96 | #define PAGE_OFFSET (0x80000000UL) | 100 | #define PAGE_OFFSET CONFIG_PAGE_OFFSET |
97 | #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) | 101 | #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) |
98 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) | 102 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) |
99 | 103 | ||
@@ -115,5 +119,10 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
115 | #include <asm-generic/memory_model.h> | 119 | #include <asm-generic/memory_model.h> |
116 | #include <asm-generic/page.h> | 120 | #include <asm-generic/page.h> |
117 | 121 | ||
122 | /* vDSO support */ | ||
123 | #ifdef CONFIG_VSYSCALL | ||
124 | #define __HAVE_ARCH_GATE_AREA | ||
125 | #endif | ||
126 | |||
118 | #endif /* __KERNEL__ */ | 127 | #endif /* __KERNEL__ */ |
119 | #endif /* __ASM_SH_PAGE_H */ | 128 | #endif /* __ASM_SH_PAGE_H */ |
diff --git a/include/asm-sh/pci.h b/include/asm-sh/pci.h index 0a523c85b11c..6ccc948fe216 100644 --- a/include/asm-sh/pci.h +++ b/include/asm-sh/pci.h | |||
@@ -32,6 +32,34 @@ extern struct pci_channel board_pci_channels[]; | |||
32 | #define PCIBIOS_MIN_IO board_pci_channels->io_resource->start | 32 | #define PCIBIOS_MIN_IO board_pci_channels->io_resource->start |
33 | #define PCIBIOS_MIN_MEM board_pci_channels->mem_resource->start | 33 | #define PCIBIOS_MIN_MEM board_pci_channels->mem_resource->start |
34 | 34 | ||
35 | /* | ||
36 | * I/O routine helpers | ||
37 | */ | ||
38 | #ifdef CONFIG_CPU_SUBTYPE_SH7780 | ||
39 | #define PCI_IO_AREA 0xFE400000 | ||
40 | #define PCI_IO_SIZE 0x00400000 | ||
41 | #else | ||
42 | #define PCI_IO_AREA 0xFE240000 | ||
43 | #define PCI_IO_SIZE 0X00040000 | ||
44 | #endif | ||
45 | |||
46 | #define PCI_MEM_SIZE 0x01000000 | ||
47 | |||
48 | #define SH4_PCIIOBR_MASK 0xFFFC0000 | ||
49 | #define pci_ioaddr(addr) (PCI_IO_AREA + (addr & ~SH4_PCIIOBR_MASK)) | ||
50 | |||
51 | #if defined(CONFIG_PCI) | ||
52 | #define is_pci_ioaddr(port) \ | ||
53 | (((port) >= PCIBIOS_MIN_IO) && \ | ||
54 | ((port) < (PCIBIOS_MIN_IO + PCI_IO_SIZE))) | ||
55 | #define is_pci_memaddr(port) \ | ||
56 | (((port) >= PCIBIOS_MIN_MEM) && \ | ||
57 | ((port) < (PCIBIOS_MIN_MEM + PCI_MEM_SIZE))) | ||
58 | #else | ||
59 | #define is_pci_ioaddr(port) (0) | ||
60 | #define is_pci_memaddr(port) (0) | ||
61 | #endif | ||
62 | |||
35 | struct pci_dev; | 63 | struct pci_dev; |
36 | 64 | ||
37 | extern void pcibios_set_master(struct pci_dev *dev); | 65 | extern void pcibios_set_master(struct pci_dev *dev); |
@@ -87,15 +115,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
87 | */ | 115 | */ |
88 | #define pci_dac_dma_supported(pci_dev, mask) (0) | 116 | #define pci_dac_dma_supported(pci_dev, mask) (0) |
89 | 117 | ||
90 | /* These macros should be used after a pci_map_sg call has been done | ||
91 | * to get bus addresses of each of the SG entries and their lengths. | ||
92 | * You should only work with the number of sg entries pci_map_sg | ||
93 | * returns, or alternatively stop on the first sg_dma_len(sg) which | ||
94 | * is 0. | ||
95 | */ | ||
96 | #define sg_dma_address(sg) (virt_to_bus((sg)->dma_address)) | ||
97 | #define sg_dma_len(sg) ((sg)->length) | ||
98 | |||
99 | #ifdef CONFIG_PCI | 118 | #ifdef CONFIG_PCI |
100 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 119 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
101 | enum pci_dma_burst_strategy *strat, | 120 | enum pci_dma_burst_strategy *strat, |
@@ -107,11 +126,12 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev, | |||
107 | #endif | 126 | #endif |
108 | 127 | ||
109 | /* Board-specific fixup routines. */ | 128 | /* Board-specific fixup routines. */ |
110 | extern void pcibios_fixup(void); | 129 | void pcibios_fixup(void); |
111 | extern void pcibios_fixup_irqs(void); | 130 | int pcibios_init_platform(void); |
131 | int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin); | ||
112 | 132 | ||
113 | #ifdef CONFIG_PCI_AUTO | 133 | #ifdef CONFIG_PCI_AUTO |
114 | extern int pciauto_assign_resources(int busno, struct pci_channel *hose); | 134 | int pciauto_assign_resources(int busno, struct pci_channel *hose); |
115 | #endif | 135 | #endif |
116 | 136 | ||
117 | static inline void pcibios_add_platform_entries(struct pci_dev *dev) | 137 | static inline void pcibios_add_platform_entries(struct pci_dev *dev) |
diff --git a/include/asm-sh/pgalloc.h b/include/asm-sh/pgalloc.h index f4f233f7a4f5..e841465ab4d2 100644 --- a/include/asm-sh/pgalloc.h +++ b/include/asm-sh/pgalloc.h | |||
@@ -1,15 +1,6 @@ | |||
1 | #ifndef __ASM_SH_PGALLOC_H | 1 | #ifndef __ASM_SH_PGALLOC_H |
2 | #define __ASM_SH_PGALLOC_H | 2 | #define __ASM_SH_PGALLOC_H |
3 | 3 | ||
4 | #include <linux/threads.h> | ||
5 | #include <linux/slab.h> | ||
6 | #include <linux/mm.h> | ||
7 | |||
8 | #define pgd_quicklist ((unsigned long *)0) | ||
9 | #define pmd_quicklist ((unsigned long *)0) | ||
10 | #define pte_quicklist ((unsigned long *)0) | ||
11 | #define pgtable_cache_size 0L | ||
12 | |||
13 | #define pmd_populate_kernel(mm, pmd, pte) \ | 4 | #define pmd_populate_kernel(mm, pmd, pte) \ |
14 | set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) | 5 | set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) |
15 | 6 | ||
@@ -24,38 +15,24 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | |||
24 | */ | 15 | */ |
25 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | 16 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) |
26 | { | 17 | { |
27 | unsigned int pgd_size = (USER_PTRS_PER_PGD * sizeof(pgd_t)); | 18 | return (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); |
28 | pgd_t *pgd = (pgd_t *)kmalloc(pgd_size, GFP_KERNEL); | ||
29 | |||
30 | if (pgd) | ||
31 | memset(pgd, 0, pgd_size); | ||
32 | |||
33 | return pgd; | ||
34 | } | 19 | } |
35 | 20 | ||
36 | static inline void pgd_free(pgd_t *pgd) | 21 | static inline void pgd_free(pgd_t *pgd) |
37 | { | 22 | { |
38 | kfree(pgd); | 23 | free_page((unsigned long)pgd); |
39 | } | 24 | } |
40 | 25 | ||
41 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, | 26 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, |
42 | unsigned long address) | 27 | unsigned long address) |
43 | { | 28 | { |
44 | pte_t *pte; | 29 | return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); |
45 | |||
46 | pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); | ||
47 | |||
48 | return pte; | ||
49 | } | 30 | } |
50 | 31 | ||
51 | static inline struct page *pte_alloc_one(struct mm_struct *mm, | 32 | static inline struct page *pte_alloc_one(struct mm_struct *mm, |
52 | unsigned long address) | 33 | unsigned long address) |
53 | { | 34 | { |
54 | struct page *pte; | 35 | return alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); |
55 | |||
56 | pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); | ||
57 | |||
58 | return pte; | ||
59 | } | 36 | } |
60 | 37 | ||
61 | static inline void pte_free_kernel(pte_t *pte) | 38 | static inline void pte_free_kernel(pte_t *pte) |
@@ -75,14 +52,8 @@ static inline void pte_free(struct page *pte) | |||
75 | * inside the pgd, so has no extra memory associated with it. | 52 | * inside the pgd, so has no extra memory associated with it. |
76 | */ | 53 | */ |
77 | 54 | ||
78 | #define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) | ||
79 | #define pmd_free(x) do { } while (0) | 55 | #define pmd_free(x) do { } while (0) |
80 | #define __pmd_free_tlb(tlb,x) do { } while (0) | 56 | #define __pmd_free_tlb(tlb,x) do { } while (0) |
81 | #define pgd_populate(mm, pmd, pte) BUG() | ||
82 | #define check_pgt_cache() do { } while (0) | 57 | #define check_pgt_cache() do { } while (0) |
83 | 58 | ||
84 | #ifdef CONFIG_CPU_SH4 | ||
85 | #define PG_mapped PG_arch_1 | ||
86 | #endif | ||
87 | |||
88 | #endif /* __ASM_SH_PGALLOC_H */ | 59 | #endif /* __ASM_SH_PGALLOC_H */ |
diff --git a/include/asm-sh/pgtable.h b/include/asm-sh/pgtable.h index 40d41a78041e..2c8682ad1012 100644 --- a/include/asm-sh/pgtable.h +++ b/include/asm-sh/pgtable.h | |||
@@ -1,42 +1,42 @@ | |||
1 | #ifndef __ASM_SH_PGTABLE_H | ||
2 | #define __ASM_SH_PGTABLE_H | ||
3 | |||
4 | #include <asm-generic/4level-fixup.h> | ||
5 | |||
6 | /* | 1 | /* |
2 | * This file contains the functions and defines necessary to modify and | ||
3 | * use the SuperH page table tree. | ||
4 | * | ||
7 | * Copyright (C) 1999 Niibe Yutaka | 5 | * Copyright (C) 1999 Niibe Yutaka |
8 | * Copyright (C) 2002, 2003, 2004 Paul Mundt | 6 | * Copyright (C) 2002 - 2005 Paul Mundt |
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General | ||
9 | * Public License. See the file "COPYING" in the main directory of this | ||
10 | * archive for more details. | ||
9 | */ | 11 | */ |
12 | #ifndef __ASM_SH_PGTABLE_H | ||
13 | #define __ASM_SH_PGTABLE_H | ||
10 | 14 | ||
11 | #include <asm/pgtable-2level.h> | 15 | #include <asm-generic/pgtable-nopmd.h> |
16 | #include <asm/page.h> | ||
17 | |||
18 | #define PTRS_PER_PGD 1024 | ||
12 | 19 | ||
13 | /* | ||
14 | * This file contains the functions and defines necessary to modify and use | ||
15 | * the SuperH page table tree. | ||
16 | */ | ||
17 | #ifndef __ASSEMBLY__ | 20 | #ifndef __ASSEMBLY__ |
18 | #include <asm/processor.h> | ||
19 | #include <asm/addrspace.h> | 21 | #include <asm/addrspace.h> |
20 | #include <asm/fixmap.h> | 22 | #include <asm/fixmap.h> |
21 | #include <linux/threads.h> | ||
22 | 23 | ||
23 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | 24 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; |
24 | extern void paging_init(void); | 25 | extern void paging_init(void); |
25 | 26 | ||
26 | /* | 27 | /* |
27 | * Basically we have the same two-level (which is the logical three level | ||
28 | * Linux page table layout folded) page tables as the i386. | ||
29 | */ | ||
30 | |||
31 | /* | ||
32 | * ZERO_PAGE is a global shared page that is always zero: used | 28 | * ZERO_PAGE is a global shared page that is always zero: used |
33 | * for zero-mapped memory areas etc.. | 29 | * for zero-mapped memory areas etc.. |
34 | */ | 30 | */ |
35 | extern unsigned long empty_zero_page[1024]; | 31 | extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; |
36 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) | 32 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) |
37 | 33 | ||
38 | #endif /* !__ASSEMBLY__ */ | 34 | #endif /* !__ASSEMBLY__ */ |
39 | 35 | ||
36 | /* traditional two-level paging structure */ | ||
37 | #define PGDIR_SHIFT 22 | ||
38 | #define PTRS_PER_PMD 1 | ||
39 | #define PTRS_PER_PTE 1024 | ||
40 | #define PMD_SIZE (1UL << PMD_SHIFT) | 40 | #define PMD_SIZE (1UL << PMD_SHIFT) |
41 | #define PMD_MASK (~(PMD_SIZE-1)) | 41 | #define PMD_MASK (~(PMD_SIZE-1)) |
42 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | 42 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) |
@@ -47,7 +47,6 @@ extern unsigned long empty_zero_page[1024]; | |||
47 | 47 | ||
48 | #define PTE_PHYS_MASK 0x1ffff000 | 48 | #define PTE_PHYS_MASK 0x1ffff000 |
49 | 49 | ||
50 | #ifndef __ASSEMBLY__ | ||
51 | /* | 50 | /* |
52 | * First 1MB map is used by fixed purpose. | 51 | * First 1MB map is used by fixed purpose. |
53 | * Currently only 4-enty (16kB) is used (see arch/sh/mm/cache.c) | 52 | * Currently only 4-enty (16kB) is used (see arch/sh/mm/cache.c) |
@@ -55,20 +54,41 @@ extern unsigned long empty_zero_page[1024]; | |||
55 | #define VMALLOC_START (P3SEG+0x00100000) | 54 | #define VMALLOC_START (P3SEG+0x00100000) |
56 | #define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) | 55 | #define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) |
57 | 56 | ||
58 | #define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ | 57 | /* |
59 | #define _PAGE_HW_SHARED 0x002 /* SH-bit : page is shared among processes */ | 58 | * Linux PTEL encoding. |
60 | #define _PAGE_DIRTY 0x004 /* D-bit : page changed */ | 59 | * |
61 | #define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ | 60 | * Hardware and software bit definitions for the PTEL value: |
62 | #define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ | 61 | * |
63 | #define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ | 62 | * - Bits 0 and 7 are reserved on SH-3 (_PAGE_WT and _PAGE_SZ1 on SH-4). |
64 | #define _PAGE_USER 0x040 /* PR1-bit : user space access allowed */ | 63 | * |
65 | #define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ | 64 | * - Bit 1 is the SH-bit, but is unused on SH-3 due to an MMU bug (the |
66 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ | 65 | * hardware PTEL value can't have the SH-bit set when MMUCR.IX is set, |
67 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ | 66 | * which is the default in cpu-sh3/mmu_context.h:MMU_CONTROL_INIT). |
68 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ | 67 | * |
69 | #define _PAGE_U0_SHARED 0x800 /* software: page is shared in user space */ | 68 | * In order to keep this relatively clean, do not use these for defining |
70 | 69 | * SH-3 specific flags until all of the other unused bits have been | |
71 | #define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ | 70 | * exhausted. |
71 | * | ||
72 | * - Bit 9 is reserved by everyone and used by _PAGE_PROTNONE. | ||
73 | * | ||
74 | * - Bits 10 and 11 are low bits of the PPN that are reserved on >= 4K pages. | ||
75 | * Bit 10 is used for _PAGE_ACCESSED, bit 11 remains unused. | ||
76 | * | ||
77 | * - Bits 31, 30, and 29 remain unused by everyone and can be used for future | ||
78 | * software flags, although care must be taken to update _PAGE_CLEAR_FLAGS. | ||
79 | */ | ||
80 | #define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ | ||
81 | #define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */ | ||
82 | #define _PAGE_DIRTY 0x004 /* D-bit : page changed */ | ||
83 | #define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ | ||
84 | #define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ | ||
85 | #define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ | ||
86 | #define _PAGE_USER 0x040 /* PR1-bit : user space access allowed */ | ||
87 | #define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ | ||
88 | #define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ | ||
89 | #define _PAGE_PROTNONE 0x200 /* software: if not present */ | ||
90 | #define _PAGE_ACCESSED 0x400 /* software: page referenced */ | ||
91 | #define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ | ||
72 | 92 | ||
73 | /* software: moves to PTEA.TC (Timing Control) */ | 93 | /* software: moves to PTEA.TC (Timing Control) */ |
74 | #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ | 94 | #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ |
@@ -83,23 +103,17 @@ extern unsigned long empty_zero_page[1024]; | |||
83 | #define _PAGE_PCC_ATR8 0x60000000 /* Attribute Memory space, 8 bit bus */ | 103 | #define _PAGE_PCC_ATR8 0x60000000 /* Attribute Memory space, 8 bit bus */ |
84 | #define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */ | 104 | #define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */ |
85 | 105 | ||
86 | 106 | /* Mask which drops unused bits from the PTEL value */ | |
87 | /* Mask which drop software flags | 107 | #ifdef CONFIG_CPU_SH3 |
88 | * We also drop WT bit since it is used for _PAGE_FILE | 108 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ |
89 | * bit in this implementation. | 109 | _PAGE_FILE | _PAGE_SZ1 | \ |
90 | */ | 110 | _PAGE_HW_SHARED) |
91 | #define _PAGE_CLEAR_FLAGS (_PAGE_WT | _PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_U0_SHARED) | ||
92 | |||
93 | #if defined(CONFIG_CPU_SH3) | ||
94 | /* | ||
95 | * MMU on SH-3 has bug on SH-bit: We can't use it if MMUCR.IX=1. | ||
96 | * Work around: Just drop SH-bit. | ||
97 | */ | ||
98 | #define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS | _PAGE_HW_SHARED)) | ||
99 | #else | 111 | #else |
100 | #define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) | 112 | #define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) |
101 | #endif | 113 | #endif |
102 | 114 | ||
115 | #define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) | ||
116 | |||
103 | /* Hardware flags: SZ0=1 (4k-byte) */ | 117 | /* Hardware flags: SZ0=1 (4k-byte) */ |
104 | #define _PAGE_FLAGS_HARD _PAGE_SZ0 | 118 | #define _PAGE_FLAGS_HARD _PAGE_SZ0 |
105 | 119 | ||
@@ -109,15 +123,15 @@ extern unsigned long empty_zero_page[1024]; | |||
109 | #define _PAGE_SZHUGE (_PAGE_SZ0 | _PAGE_SZ1) | 123 | #define _PAGE_SZHUGE (_PAGE_SZ0 | _PAGE_SZ1) |
110 | #endif | 124 | #endif |
111 | 125 | ||
112 | #define _PAGE_SHARED _PAGE_U0_SHARED | ||
113 | |||
114 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) | 126 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) |
115 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) | 127 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) |
116 | #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_SHARED) | 128 | #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY) |
129 | |||
130 | #ifndef __ASSEMBLY__ | ||
117 | 131 | ||
118 | #ifdef CONFIG_MMU | 132 | #ifdef CONFIG_MMU |
119 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 133 | #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) |
120 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_SHARED | _PAGE_FLAGS_HARD) | 134 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) |
121 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 135 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) |
122 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) | 136 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) |
123 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) | 137 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) |
@@ -137,12 +151,13 @@ extern unsigned long empty_zero_page[1024]; | |||
137 | #define PAGE_KERNEL_PCC __pgprot(0) | 151 | #define PAGE_KERNEL_PCC __pgprot(0) |
138 | #endif | 152 | #endif |
139 | 153 | ||
154 | #endif /* __ASSEMBLY__ */ | ||
155 | |||
140 | /* | 156 | /* |
141 | * As i386 and MIPS, SuperH can't do page protection for execute, and | 157 | * As i386 and MIPS, SuperH can't do page protection for execute, and |
142 | * considers that the same as a read. Also, write permissions imply | 158 | * considers that the same as a read. Also, write permissions imply |
143 | * read permissions. This is the closest we can get.. | 159 | * read permissions. This is the closest we can get.. |
144 | */ | 160 | */ |
145 | |||
146 | #define __P000 PAGE_NONE | 161 | #define __P000 PAGE_NONE |
147 | #define __P001 PAGE_READONLY | 162 | #define __P001 PAGE_READONLY |
148 | #define __P010 PAGE_COPY | 163 | #define __P010 PAGE_COPY |
@@ -161,6 +176,26 @@ extern unsigned long empty_zero_page[1024]; | |||
161 | #define __S110 PAGE_SHARED | 176 | #define __S110 PAGE_SHARED |
162 | #define __S111 PAGE_SHARED | 177 | #define __S111 PAGE_SHARED |
163 | 178 | ||
179 | #ifndef __ASSEMBLY__ | ||
180 | |||
181 | /* | ||
182 | * Certain architectures need to do special things when PTEs | ||
183 | * within a page table are directly modified. Thus, the following | ||
184 | * hook is made available. | ||
185 | */ | ||
186 | #define set_pte(pteptr, pteval) (*(pteptr) = pteval) | ||
187 | #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) | ||
188 | |||
189 | /* | ||
190 | * (pmds are folded into pgds so this doesn't get actually called, | ||
191 | * but the define is needed for a generic inline function.) | ||
192 | */ | ||
193 | #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) | ||
194 | |||
195 | #define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) | ||
196 | #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
197 | #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
198 | |||
164 | #define pte_none(x) (!pte_val(x)) | 199 | #define pte_none(x) (!pte_val(x)) |
165 | #define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) | 200 | #define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) |
166 | #define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) | 201 | #define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) |
@@ -171,7 +206,7 @@ extern unsigned long empty_zero_page[1024]; | |||
171 | #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) | 206 | #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) |
172 | 207 | ||
173 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) | 208 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) |
174 | #define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) | 209 | #define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) |
175 | 210 | ||
176 | /* | 211 | /* |
177 | * The following only work if pte_present() is true. | 212 | * The following only work if pte_present() is true. |
@@ -248,6 +283,11 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
248 | #define pte_unmap(pte) do { } while (0) | 283 | #define pte_unmap(pte) do { } while (0) |
249 | #define pte_unmap_nested(pte) do { } while (0) | 284 | #define pte_unmap_nested(pte) do { } while (0) |
250 | 285 | ||
286 | #define pte_ERROR(e) \ | ||
287 | printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) | ||
288 | #define pgd_ERROR(e) \ | ||
289 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | ||
290 | |||
251 | struct vm_area_struct; | 291 | struct vm_area_struct; |
252 | extern void update_mmu_cache(struct vm_area_struct * vma, | 292 | extern void update_mmu_cache(struct vm_area_struct * vma, |
253 | unsigned long address, pte_t pte); | 293 | unsigned long address, pte_t pte); |
@@ -272,8 +312,6 @@ extern void update_mmu_cache(struct vm_area_struct * vma, | |||
272 | 312 | ||
273 | typedef pte_t *pte_addr_t; | 313 | typedef pte_t *pte_addr_t; |
274 | 314 | ||
275 | #endif /* !__ASSEMBLY__ */ | ||
276 | |||
277 | #define kern_addr_valid(addr) (1) | 315 | #define kern_addr_valid(addr) (1) |
278 | 316 | ||
279 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ | 317 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ |
@@ -301,5 +339,5 @@ extern pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t | |||
301 | 339 | ||
302 | #include <asm-generic/pgtable.h> | 340 | #include <asm-generic/pgtable.h> |
303 | 341 | ||
342 | #endif /* !__ASSEMBLY__ */ | ||
304 | #endif /* __ASM_SH_PAGE_H */ | 343 | #endif /* __ASM_SH_PAGE_H */ |
305 | |||
diff --git a/include/asm-sh/pm.h b/include/asm-sh/pm.h new file mode 100644 index 000000000000..56fdbd6b1c94 --- /dev/null +++ b/include/asm-sh/pm.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * This file is subject to the terms and conditions of the GNU General Public | ||
3 | * License. See the file "COPYING" in the main directory of this archive | ||
4 | * for more details. | ||
5 | * | ||
6 | * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com> | ||
7 | * | ||
8 | */ | ||
9 | #ifndef __ASM_SH_PM_H | ||
10 | #define __ASM_SH_PM_H | ||
11 | |||
12 | extern u8 wakeup_start; | ||
13 | extern u8 wakeup_end; | ||
14 | |||
15 | void pm_enter(void); | ||
16 | |||
17 | #endif | ||
diff --git a/include/asm-sh/processor.h b/include/asm-sh/processor.h index eeb0f48bb99e..474773853cd1 100644 --- a/include/asm-sh/processor.h +++ b/include/asm-sh/processor.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <asm/types.h> | 14 | #include <asm/types.h> |
15 | #include <asm/cache.h> | 15 | #include <asm/cache.h> |
16 | #include <asm/ptrace.h> | 16 | #include <asm/ptrace.h> |
17 | #include <asm/cpu-features.h> | ||
17 | 18 | ||
18 | /* | 19 | /* |
19 | * Default implementation of macro that returns current | 20 | * Default implementation of macro that returns current |
@@ -38,27 +39,30 @@ enum cpu_type { | |||
38 | CPU_SH7604, | 39 | CPU_SH7604, |
39 | 40 | ||
40 | /* SH-3 types */ | 41 | /* SH-3 types */ |
41 | CPU_SH7705, CPU_SH7707, CPU_SH7708, CPU_SH7708S, CPU_SH7708R, | 42 | CPU_SH7705, CPU_SH7706, CPU_SH7707, |
42 | CPU_SH7709, CPU_SH7709A, CPU_SH7729, CPU_SH7300, | 43 | CPU_SH7708, CPU_SH7708S, CPU_SH7708R, |
44 | CPU_SH7709, CPU_SH7709A, CPU_SH7710, | ||
45 | CPU_SH7729, CPU_SH7300, | ||
43 | 46 | ||
44 | /* SH-4 types */ | 47 | /* SH-4 types */ |
45 | CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R, | 48 | CPU_SH7750, CPU_SH7750S, CPU_SH7750R, CPU_SH7751, CPU_SH7751R, |
46 | CPU_SH7760, CPU_ST40RA, CPU_ST40GX1, CPU_SH4_202, CPU_SH4_501, | 49 | CPU_SH7760, CPU_ST40RA, CPU_ST40GX1, CPU_SH4_202, CPU_SH4_501, |
47 | CPU_SH73180, CPU_SH7770, CPU_SH7780, CPU_SH7781, | 50 | CPU_SH73180, CPU_SH7343, CPU_SH7770, CPU_SH7780, CPU_SH7781, |
48 | 51 | ||
49 | /* Unknown subtype */ | 52 | /* Unknown subtype */ |
50 | CPU_SH_NONE | 53 | CPU_SH_NONE |
51 | }; | 54 | }; |
52 | 55 | ||
53 | struct sh_cpuinfo { | 56 | struct sh_cpuinfo { |
54 | enum cpu_type type; | 57 | unsigned int type; |
55 | unsigned long loops_per_jiffy; | 58 | unsigned long loops_per_jiffy; |
56 | 59 | ||
57 | struct cache_info icache; | 60 | struct cache_info icache; /* Primary I-cache */ |
58 | struct cache_info dcache; | 61 | struct cache_info dcache; /* Primary D-cache */ |
62 | struct cache_info scache; /* Secondary cache */ | ||
59 | 63 | ||
60 | unsigned long flags; | 64 | unsigned long flags; |
61 | }; | 65 | } __attribute__ ((aligned(SMP_CACHE_BYTES))); |
62 | 66 | ||
63 | extern struct sh_cpuinfo boot_cpu_data; | 67 | extern struct sh_cpuinfo boot_cpu_data; |
64 | 68 | ||
@@ -125,17 +129,6 @@ union sh_fpu_union { | |||
125 | struct sh_fpu_soft_struct soft; | 129 | struct sh_fpu_soft_struct soft; |
126 | }; | 130 | }; |
127 | 131 | ||
128 | /* | ||
129 | * Processor flags | ||
130 | */ | ||
131 | |||
132 | #define CPU_HAS_FPU 0x0001 /* Hardware FPU support */ | ||
133 | #define CPU_HAS_P2_FLUSH_BUG 0x0002 /* Need to flush the cache in P2 area */ | ||
134 | #define CPU_HAS_MMU_PAGE_ASSOC 0x0004 /* SH3: TLB way selection bit support */ | ||
135 | #define CPU_HAS_DSP 0x0008 /* SH-DSP: DSP support */ | ||
136 | #define CPU_HAS_PERF_COUNTER 0x0010 /* Hardware performance counters */ | ||
137 | #define CPU_HAS_PTEA 0x0020 /* PTEA register */ | ||
138 | |||
139 | struct thread_struct { | 132 | struct thread_struct { |
140 | unsigned long sp; | 133 | unsigned long sp; |
141 | unsigned long pc; | 134 | unsigned long pc; |
@@ -149,6 +142,10 @@ struct thread_struct { | |||
149 | union sh_fpu_union fpu; | 142 | union sh_fpu_union fpu; |
150 | }; | 143 | }; |
151 | 144 | ||
145 | typedef struct { | ||
146 | unsigned long seg; | ||
147 | } mm_segment_t; | ||
148 | |||
152 | /* Count of active tasks with UBC settings */ | 149 | /* Count of active tasks with UBC settings */ |
153 | extern int ubc_usercnt; | 150 | extern int ubc_usercnt; |
154 | 151 | ||
@@ -266,5 +263,24 @@ extern unsigned long get_wchan(struct task_struct *p); | |||
266 | #define cpu_sleep() __asm__ __volatile__ ("sleep" : : : "memory") | 263 | #define cpu_sleep() __asm__ __volatile__ ("sleep" : : : "memory") |
267 | #define cpu_relax() barrier() | 264 | #define cpu_relax() barrier() |
268 | 265 | ||
266 | #if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH3) || \ | ||
267 | defined(CONFIG_CPU_SH4) | ||
268 | #define PREFETCH_STRIDE L1_CACHE_BYTES | ||
269 | #define ARCH_HAS_PREFETCH | ||
270 | #define ARCH_HAS_PREFETCHW | ||
271 | static inline void prefetch(void *x) | ||
272 | { | ||
273 | __asm__ __volatile__ ("pref @%0\n\t" : : "r" (x) : "memory"); | ||
274 | } | ||
275 | |||
276 | #define prefetchw(x) prefetch(x) | ||
277 | #endif | ||
278 | |||
279 | #ifdef CONFIG_VSYSCALL | ||
280 | extern int vsyscall_init(void); | ||
281 | #else | ||
282 | #define vsyscall_init() do { } while (0) | ||
283 | #endif | ||
284 | |||
269 | #endif /* __KERNEL__ */ | 285 | #endif /* __KERNEL__ */ |
270 | #endif /* __ASM_SH_PROCESSOR_H */ | 286 | #endif /* __ASM_SH_PROCESSOR_H */ |
diff --git a/include/asm-sh/r7780rp/ide.h b/include/asm-sh/r7780rp/ide.h new file mode 100644 index 000000000000..a1ed78e0f617 --- /dev/null +++ b/include/asm-sh/r7780rp/ide.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __ASM_SH_R7780RP_IDE_H | ||
2 | #define __ASM_SH_R7780RP_IDE_H | ||
3 | |||
4 | /* Nothing to see here.. */ | ||
5 | #include <asm/mach/r7780rp.h> | ||
6 | |||
7 | #endif /* __ASM_SH_R7780RP_IDE_H */ | ||
8 | |||
diff --git a/include/asm-sh/r7780rp/r7780rp.h b/include/asm-sh/r7780rp/r7780rp.h new file mode 100644 index 000000000000..f95d9dba31a2 --- /dev/null +++ b/include/asm-sh/r7780rp/r7780rp.h | |||
@@ -0,0 +1,177 @@ | |||
1 | #ifndef __ASM_SH_RENESAS_R7780RP_H | ||
2 | #define __ASM_SH_RENESAS_R7780RP_H | ||
3 | |||
4 | /* | ||
5 | * linux/include/asm-sh/r7780rp.h | ||
6 | * | ||
7 | * Copyright (C) 2000 Atom Create Engineering Co., Ltd. | ||
8 | * | ||
9 | * Renesas Solutions Highlander R7780RP support | ||
10 | */ | ||
11 | |||
12 | /* Box specific addresses. */ | ||
13 | #if defined(CONFIG_SH_R7780MP) | ||
14 | #define PA_BCR 0xa4000000 /* FPGA */ | ||
15 | #define PA_IRLMSK (PA_BCR+0x0000) /* Interrupt Mask control */ | ||
16 | #define PA_IRLMON (PA_BCR+0x0002) /* Interrupt Status control */ | ||
17 | #define PA_IRLPRI1 (PA_BCR+0x0004) /* Interrupt Priorty 1 */ | ||
18 | #define PA_IRLPRI2 (PA_BCR+0x0006) /* Interrupt Priorty 2 */ | ||
19 | #define PA_IRLPRI3 (PA_BCR+0x0008) /* Interrupt Priorty 3 */ | ||
20 | #define PA_IRLPRI4 (PA_BCR+0x000a) /* Interrupt Priorty 4 */ | ||
21 | #define PA_RSTCTL (PA_BCR+0x000c) /* Reset Control */ | ||
22 | #define PA_PCIBD (PA_BCR+0x000e) /* PCI Board detect control */ | ||
23 | #define PA_PCICD (PA_BCR+0x0010) /* PCI Conector detect control */ | ||
24 | #define PA_EXTGIO (PA_BCR+0x0016) /* Extension GPIO Control */ | ||
25 | #define PA_IVDRMON (PA_BCR+0x0018) /* iVDR Moniter control */ | ||
26 | #define PA_IVDRCTL (PA_BCR+0x001a) /* iVDR control */ | ||
27 | #define PA_OBLED (PA_BCR+0x001c) /* On Board LED control */ | ||
28 | #define PA_OBSW (PA_BCR+0x001e) /* On Board Switch control */ | ||
29 | #define PA_AUDIOSEL (PA_BCR+0x0020) /* Sound Interface Select control */ | ||
30 | #define PA_EXTPLR (PA_BCR+0x001e) /* Extention Pin Polarity control */ | ||
31 | #define PA_TPCTL (PA_BCR+0x0100) /* Touch Panel Access control */ | ||
32 | #define PA_TPDCKCTL (PA_BCR+0x0102) /* Touch Panel Access data control */ | ||
33 | #define PA_TPCTLCLR (PA_BCR+0x0104) /* Touch Panel Access control */ | ||
34 | #define PA_TPXPOS (PA_BCR+0x0106) /* Touch Panel X position control */ | ||
35 | #define PA_TPYPOS (PA_BCR+0x0108) /* Touch Panel Y position control */ | ||
36 | #define PA_DBSW (PA_BCR+0x0200) /* Debug Board Switch control */ | ||
37 | #define PA_CFCTL (PA_BCR+0x0300) /* CF Timing control */ | ||
38 | #define PA_CFPOW (PA_BCR+0x0302) /* CF Power control */ | ||
39 | #define PA_CFCDINTCLR (PA_BCR+0x0304) /* CF Insert Interrupt clear */ | ||
40 | #define PA_SCSMR0 (PA_BCR+0x0400) /* SCIF0 Serial mode control */ | ||
41 | #define PA_SCBRR0 (PA_BCR+0x0404) /* SCIF0 Bit rate control */ | ||
42 | #define PA_SCSCR0 (PA_BCR+0x0408) /* SCIF0 Serial control */ | ||
43 | #define PA_SCFTDR0 (PA_BCR+0x040c) /* SCIF0 Send FIFO control */ | ||
44 | #define PA_SCFSR0 (PA_BCR+0x0410) /* SCIF0 Serial status control */ | ||
45 | #define PA_SCFRDR0 (PA_BCR+0x0414) /* SCIF0 Receive FIFO control */ | ||
46 | #define PA_SCFCR0 (PA_BCR+0x0418) /* SCIF0 FIFO control */ | ||
47 | #define PA_SCTFDR0 (PA_BCR+0x041c) /* SCIF0 Send FIFO data control */ | ||
48 | #define PA_SCRFDR0 (PA_BCR+0x0420) /* SCIF0 Receive FIFO data control */ | ||
49 | #define PA_SCSPTR0 (PA_BCR+0x0424) /* SCIF0 Serial Port control */ | ||
50 | #define PA_SCLSR0 (PA_BCR+0x0428) /* SCIF0 Line Status control */ | ||
51 | #define PA_SCRER0 (PA_BCR+0x042c) /* SCIF0 Serial Error control */ | ||
52 | #define PA_SCSMR1 (PA_BCR+0x0500) /* SCIF1 Serial mode control */ | ||
53 | #define PA_SCBRR1 (PA_BCR+0x0504) /* SCIF1 Bit rate control */ | ||
54 | #define PA_SCSCR1 (PA_BCR+0x0508) /* SCIF1 Serial control */ | ||
55 | #define PA_SCFTDR1 (PA_BCR+0x050c) /* SCIF1 Send FIFO control */ | ||
56 | #define PA_SCFSR1 (PA_BCR+0x0510) /* SCIF1 Serial status control */ | ||
57 | #define PA_SCFRDR1 (PA_BCR+0x0514) /* SCIF1 Receive FIFO control */ | ||
58 | #define PA_SCFCR1 (PA_BCR+0x0518) /* SCIF1 FIFO control */ | ||
59 | #define PA_SCTFDR1 (PA_BCR+0x051c) /* SCIF1 Send FIFO data control */ | ||
60 | #define PA_SCRFDR1 (PA_BCR+0x0520) /* SCIF1 Receive FIFO data control */ | ||
61 | #define PA_SCSPTR1 (PA_BCR+0x0524) /* SCIF1 Serial Port control */ | ||
62 | #define PA_SCLSR1 (PA_BCR+0x0528) /* SCIF1 Line Status control */ | ||
63 | #define PA_SCRER1 (PA_BCR+0x052c) /* SCIF1 Serial Error control */ | ||
64 | #define PA_ICCR (PA_BCR+0x0600) /* Serial control */ | ||
65 | #define PA_SAR (PA_BCR+0x0602) /* Serial Slave control */ | ||
66 | #define PA_MDR (PA_BCR+0x0604) /* Serial Mode control */ | ||
67 | #define PA_ADR1 (PA_BCR+0x0606) /* Serial Address1 control */ | ||
68 | #define PA_DAR1 (PA_BCR+0x0646) /* Serial Data1 control */ | ||
69 | #define PA_VERREG (PA_BCR+0x0700) /* FPGA Version Register */ | ||
70 | #define PA_POFF (PA_BCR+0x0800) /* System Power Off control */ | ||
71 | #define PA_PMR (PA_BCR+0x0900) /* */ | ||
72 | |||
73 | #define PA_AX88796L 0xa4100400 /* AX88796L Area */ | ||
74 | #define PA_SC1602BSLB 0xa6000000 /* SC1602BSLB Area */ | ||
75 | #define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ | ||
76 | #define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ | ||
77 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ | ||
78 | #define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ | ||
79 | |||
80 | #define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ | ||
81 | |||
82 | #define IRQ_PCISLOT1 65 /* PCI Slot #1 IRQ */ | ||
83 | #define IRQ_PCISLOT2 66 /* PCI Slot #2 IRQ */ | ||
84 | #define IRQ_PCISLOT3 67 /* PCI Slot #3 IRQ */ | ||
85 | #define IRQ_PCISLOT4 68 /* PCI Slot #4 IRQ */ | ||
86 | #define IRQ_CFCARD 1 /* CF Card IRQ */ | ||
87 | // #define IRQ_CFINST 0 /* CF Card Insert IRQ */ | ||
88 | #define IRQ_TP 2 /* Touch Panel IRQ */ | ||
89 | #define IRQ_SCI1 3 /* SCI1 IRQ */ | ||
90 | #define IRQ_SCI0 4 /* SCI0 IRQ */ | ||
91 | #define IRQ_2SERIAL 5 /* Serial IRQ */ | ||
92 | #define IRQ_RTC 6 /* RTC A / B IRQ */ | ||
93 | #define IRQ_EXTENTION6 7 /* EXT6n IRQ */ | ||
94 | #define IRQ_EXTENTION5 8 /* EXT5n IRQ */ | ||
95 | #define IRQ_EXTENTION4 9 /* EXT4n IRQ */ | ||
96 | #define IRQ_EXTENTION2 10 /* EXT2n IRQ */ | ||
97 | #define IRQ_EXTENTION1 11 /* EXT1n IRQ */ | ||
98 | #define IRQ_ONETH 13 /* On board Ethernet IRQ */ | ||
99 | #define IRQ_PSW 14 /* Push Switch IRQ */ | ||
100 | |||
101 | #else /* R7780RP */ | ||
102 | |||
103 | #define PA_BCR 0xa5000000 /* FPGA */ | ||
104 | #define PA_IRLMSK (PA_BCR+0x0000) /* Interrupt Mask control */ | ||
105 | #define PA_IRLMON (PA_BCR+0x0002) /* Interrupt Status control */ | ||
106 | #define PA_SDPOW (PA_BCR+0x0004) /* SD Power control */ | ||
107 | #define PA_RSTCTL (PA_BCR+0x0006) /* Device Reset control */ | ||
108 | #define PA_PCIBD (PA_BCR+0x0008) /* PCI Board detect control */ | ||
109 | #define PA_PCICD (PA_BCR+0x000a) /* PCI Conector detect control */ | ||
110 | #define PA_ZIGIO1 (PA_BCR+0x000c) /* Zigbee IO control 1 */ | ||
111 | #define PA_ZIGIO2 (PA_BCR+0x000e) /* Zigbee IO control 2 */ | ||
112 | #define PA_ZIGIO3 (PA_BCR+0x0010) /* Zigbee IO control 3 */ | ||
113 | #define PA_ZIGIO4 (PA_BCR+0x0012) /* Zigbee IO control 4 */ | ||
114 | #define PA_IVDRMON (PA_BCR+0x0014) /* iVDR Moniter control */ | ||
115 | #define PA_IVDRCTL (PA_BCR+0x0016) /* iVDR control */ | ||
116 | #define PA_OBLED (PA_BCR+0x0018) /* On Board LED control */ | ||
117 | #define PA_OBSW (PA_BCR+0x001a) /* On Board Switch control */ | ||
118 | #define PA_AUDIOSEL (PA_BCR+0x001c) /* Sound Interface Select control */ | ||
119 | #define PA_EXTPLR (PA_BCR+0x001e) /* Extention Pin Polarity control */ | ||
120 | #define PA_TPCTL (PA_BCR+0x0100) /* Touch Panel Access control */ | ||
121 | #define PA_TPDCKCTL (PA_BCR+0x0102) /* Touch Panel Access data control */ | ||
122 | #define PA_TPCTLCLR (PA_BCR+0x0104) /* Touch Panel Access control */ | ||
123 | #define PA_TPXPOS (PA_BCR+0x0106) /* Touch Panel X position control */ | ||
124 | #define PA_TPYPOS (PA_BCR+0x0108) /* Touch Panel Y position control */ | ||
125 | #define PA_DBDET (PA_BCR+0x0200) /* Debug Board detect control */ | ||
126 | #define PA_DBDISPCTL (PA_BCR+0x0202) /* Debug Board Dot timing control */ | ||
127 | #define PA_DBSW (PA_BCR+0x0204) /* Debug Board Switch control */ | ||
128 | #define PA_CFCTL (PA_BCR+0x0300) /* CF Timing control */ | ||
129 | #define PA_CFPOW (PA_BCR+0x0302) /* CF Power control */ | ||
130 | #define PA_CFCDINTCLR (PA_BCR+0x0304) /* CF Insert Interrupt clear */ | ||
131 | #define PA_SCSMR (PA_BCR+0x0400) /* SCIF Serial mode control */ | ||
132 | #define PA_SCBRR (PA_BCR+0x0402) /* SCIF Bit rate control */ | ||
133 | #define PA_SCSCR (PA_BCR+0x0404) /* SCIF Serial control */ | ||
134 | #define PA_SCFDTR (PA_BCR+0x0406) /* SCIF Send FIFO control */ | ||
135 | #define PA_SCFSR (PA_BCR+0x0408) /* SCIF Serial status control */ | ||
136 | #define PA_SCFRDR (PA_BCR+0x040a) /* SCIF Receive FIFO control */ | ||
137 | #define PA_SCFCR (PA_BCR+0x040c) /* SCIF FIFO control */ | ||
138 | #define PA_SCFDR (PA_BCR+0x040e) /* SCIF FIFO data control */ | ||
139 | #define PA_SCLSR (PA_BCR+0x0412) /* SCIF Line Status control */ | ||
140 | #define PA_ICCR (PA_BCR+0x0500) /* Serial control */ | ||
141 | #define PA_SAR (PA_BCR+0x0502) /* Serial Slave control */ | ||
142 | #define PA_MDR (PA_BCR+0x0504) /* Serial Mode control */ | ||
143 | #define PA_ADR1 (PA_BCR+0x0506) /* Serial Address1 control */ | ||
144 | #define PA_DAR1 (PA_BCR+0x0546) /* Serial Data1 control */ | ||
145 | #define PA_VERREG (PA_BCR+0x0600) /* FPGA Version Register */ | ||
146 | |||
147 | #define PA_AX88796L 0xa5800400 /* AX88796L Area */ | ||
148 | #define PA_SC1602BSLB 0xa6000000 /* SC1602BSLB Area */ | ||
149 | #define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ | ||
150 | #define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ | ||
151 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ | ||
152 | #define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ | ||
153 | |||
154 | #define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ | ||
155 | |||
156 | #define IRQ_PCISLOT1 0 /* PCI Slot #1 IRQ */ | ||
157 | #define IRQ_PCISLOT2 1 /* PCI Slot #2 IRQ */ | ||
158 | #define IRQ_PCISLOT3 2 /* PCI Slot #3 IRQ */ | ||
159 | #define IRQ_PCISLOT4 3 /* PCI Slot #4 IRQ */ | ||
160 | #define IRQ_CFCARD 4 /* CF Card IRQ */ | ||
161 | #define IRQ_CFINST 5 /* CF Card Insert IRQ */ | ||
162 | #define IRQ_M66596 6 /* M66596 IRQ */ | ||
163 | #define IRQ_SDCARD 7 /* SD Card IRQ */ | ||
164 | #define IRQ_TUCHPANEL 8 /* Touch Panel IRQ */ | ||
165 | #define IRQ_SCI 9 /* SCI IRQ */ | ||
166 | #define IRQ_2SERIAL 10 /* Serial IRQ */ | ||
167 | #define IRQ_EXTENTION 11 /* EXTn IRQ */ | ||
168 | #define IRQ_ONETH 12 /* On board Ethernet IRQ */ | ||
169 | #define IRQ_PSW 13 /* Push Switch IRQ */ | ||
170 | #define IRQ_ZIGBEE 14 /* Ziggbee IO IRQ */ | ||
171 | |||
172 | #endif /* CONFIG_SH_R7780MP */ | ||
173 | |||
174 | #define __IO_PREFIX r7780rp | ||
175 | #include <asm/io_generic.h> | ||
176 | |||
177 | #endif /* __ASM_SH_RENESAS_R7780RP */ | ||
diff --git a/include/asm-sh/rtc.h b/include/asm-sh/rtc.h index cea9cdf9b925..91aacc96151b 100644 --- a/include/asm-sh/rtc.h +++ b/include/asm-sh/rtc.h | |||
@@ -1,29 +1,8 @@ | |||
1 | #ifndef _ASM_RTC_H | 1 | #ifndef _ASM_RTC_H |
2 | #define _ASM_RTC_H | 2 | #define _ASM_RTC_H |
3 | #ifdef __KERNEL__ | ||
4 | 3 | ||
5 | #include <asm/machvec.h> | ||
6 | #include <asm/cpu/rtc.h> | ||
7 | |||
8 | extern void sh_rtc_gettimeofday(struct timespec *ts); | ||
9 | extern int sh_rtc_settimeofday(const time_t secs); | ||
10 | extern void (*board_time_init)(void); | 4 | extern void (*board_time_init)(void); |
11 | extern void (*rtc_get_time)(struct timespec *); | 5 | extern void (*rtc_sh_get_time)(struct timespec *); |
12 | extern int (*rtc_set_time)(const time_t); | 6 | extern int (*rtc_sh_set_time)(const time_t); |
13 | |||
14 | /* RCR1 Bits */ | ||
15 | #define RCR1_CF 0x80 /* Carry Flag */ | ||
16 | #define RCR1_CIE 0x10 /* Carry Interrupt Enable */ | ||
17 | #define RCR1_AIE 0x08 /* Alarm Interrupt Enable */ | ||
18 | #define RCR1_AF 0x01 /* Alarm Flag */ | ||
19 | |||
20 | /* RCR2 Bits */ | ||
21 | #define RCR2_PEF 0x80 /* PEriodic interrupt Flag */ | ||
22 | #define RCR2_PESMASK 0x70 /* Periodic interrupt Set */ | ||
23 | #define RCR2_RTCEN 0x08 /* ENable RTC */ | ||
24 | #define RCR2_ADJ 0x04 /* ADJustment (30-second) */ | ||
25 | #define RCR2_RESET 0x02 /* Reset bit */ | ||
26 | #define RCR2_START 0x01 /* Start bit */ | ||
27 | 7 | ||
28 | #endif /* __KERNEL__ */ | ||
29 | #endif /* _ASM_RTC_H */ | 8 | #endif /* _ASM_RTC_H */ |
diff --git a/include/asm-sh/rts7751r2d/rts7751r2d.h b/include/asm-sh/rts7751r2d/rts7751r2d.h index 4e09ba597e9a..b112ae221fd1 100644 --- a/include/asm-sh/rts7751r2d/rts7751r2d.h +++ b/include/asm-sh/rts7751r2d/rts7751r2d.h | |||
@@ -41,8 +41,6 @@ | |||
41 | 41 | ||
42 | #define PA_AX88796L 0xaa000400 /* AX88796L Area */ | 42 | #define PA_AX88796L 0xaa000400 /* AX88796L Area */ |
43 | #define PA_VOYAGER 0xab000000 /* VOYAGER GX Area */ | 43 | #define PA_VOYAGER 0xab000000 /* VOYAGER GX Area */ |
44 | #define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ | ||
45 | #define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ | ||
46 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ | 44 | #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ |
47 | #define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ | 45 | #define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ |
48 | 46 | ||
diff --git a/include/asm-sh/scatterlist.h b/include/asm-sh/scatterlist.h index 7b91df140022..d19e7cd3b023 100644 --- a/include/asm-sh/scatterlist.h +++ b/include/asm-sh/scatterlist.h | |||
@@ -10,4 +10,13 @@ struct scatterlist { | |||
10 | 10 | ||
11 | #define ISA_DMA_THRESHOLD (0x1fffffff) | 11 | #define ISA_DMA_THRESHOLD (0x1fffffff) |
12 | 12 | ||
13 | /* These macros should be used after a pci_map_sg call has been done | ||
14 | * to get bus addresses of each of the SG entries and their lengths. | ||
15 | * You should only work with the number of sg entries pci_map_sg | ||
16 | * returns, or alternatively stop on the first sg_dma_len(sg) which | ||
17 | * is 0. | ||
18 | */ | ||
19 | #define sg_dma_address(sg) ((sg)->dma_address) | ||
20 | #define sg_dma_len(sg) ((sg)->length) | ||
21 | |||
13 | #endif /* !(__ASM_SH_SCATTERLIST_H) */ | 22 | #endif /* !(__ASM_SH_SCATTERLIST_H) */ |
diff --git a/include/asm-sh/sci.h b/include/asm-sh/sci.h new file mode 100644 index 000000000000..52e73660c129 --- /dev/null +++ b/include/asm-sh/sci.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #ifndef __ASM_SH_SCI_H | ||
2 | #define __ASM_SH_SCI_H | ||
3 | |||
4 | #include <linux/serial_core.h> | ||
5 | |||
6 | /* | ||
7 | * Generic header for SuperH SCI(F) | ||
8 | * | ||
9 | * Do not place SH-specific parts in here, sh64 and h8300 depend on this too. | ||
10 | */ | ||
11 | |||
12 | /* Offsets into the sci_port->irqs array */ | ||
13 | enum { | ||
14 | SCIx_ERI_IRQ, | ||
15 | SCIx_RXI_IRQ, | ||
16 | SCIx_TXI_IRQ, | ||
17 | SCIx_BRI_IRQ, | ||
18 | SCIx_NR_IRQS, | ||
19 | }; | ||
20 | |||
21 | /* | ||
22 | * Platform device specific platform_data struct | ||
23 | */ | ||
24 | struct plat_sci_port { | ||
25 | void __iomem *membase; /* io cookie */ | ||
26 | unsigned long mapbase; /* resource base */ | ||
27 | unsigned int irqs[SCIx_NR_IRQS]; /* ERI, RXI, TXI, BRI */ | ||
28 | unsigned int type; /* SCI / SCIF / IRDA */ | ||
29 | upf_t flags; /* UPF_* flags */ | ||
30 | }; | ||
31 | |||
32 | int early_sci_setup(struct uart_port *port); | ||
33 | |||
34 | #endif /* __ASM_SH_SCI_H */ | ||
diff --git a/include/asm-sh/se/se.h b/include/asm-sh/se.h index 791c5da0388a..a1832154a3aa 100644 --- a/include/asm-sh/se/se.h +++ b/include/asm-sh/se.h | |||
@@ -74,4 +74,7 @@ | |||
74 | #define IRQ_STNIC 10 | 74 | #define IRQ_STNIC 10 |
75 | #endif | 75 | #endif |
76 | 76 | ||
77 | #define __IO_PREFIX se | ||
78 | #include <asm/io_generic.h> | ||
79 | |||
77 | #endif /* __ASM_SH_HITACHI_SE_H */ | 80 | #endif /* __ASM_SH_HITACHI_SE_H */ |
diff --git a/include/asm-sh/se/io.h b/include/asm-sh/se/io.h deleted file mode 100644 index 9eeb86cd6cef..000000000000 --- a/include/asm-sh/se/io.h +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_se.h | ||
3 | * | ||
4 | * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * IO functions for an Hitachi SolutionEngine | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_SH_IO_SE_H | ||
13 | #define _ASM_SH_IO_SE_H | ||
14 | |||
15 | extern unsigned char se_inb(unsigned long port); | ||
16 | extern unsigned short se_inw(unsigned long port); | ||
17 | extern unsigned int se_inl(unsigned long port); | ||
18 | |||
19 | extern void se_outb(unsigned char value, unsigned long port); | ||
20 | extern void se_outw(unsigned short value, unsigned long port); | ||
21 | extern void se_outl(unsigned int value, unsigned long port); | ||
22 | |||
23 | extern unsigned char se_inb_p(unsigned long port); | ||
24 | extern void se_outb_p(unsigned char value, unsigned long port); | ||
25 | |||
26 | extern void se_insb(unsigned long port, void *addr, unsigned long count); | ||
27 | extern void se_insw(unsigned long port, void *addr, unsigned long count); | ||
28 | extern void se_insl(unsigned long port, void *addr, unsigned long count); | ||
29 | extern void se_outsb(unsigned long port, const void *addr, unsigned long count); | ||
30 | extern void se_outsw(unsigned long port, const void *addr, unsigned long count); | ||
31 | extern void se_outsl(unsigned long port, const void *addr, unsigned long count); | ||
32 | |||
33 | extern unsigned long se_isa_port2addr(unsigned long offset); | ||
34 | |||
35 | #endif /* _ASM_SH_IO_SE_H */ | ||
diff --git a/include/asm-sh/se7300/se7300.h b/include/asm-sh/se7300.h index 3ec1ded86c97..4e24edccb30d 100644 --- a/include/asm-sh/se7300/se7300.h +++ b/include/asm-sh/se7300.h | |||
@@ -58,4 +58,7 @@ | |||
58 | #define PA_LCD1 0xb8000000 | 58 | #define PA_LCD1 0xb8000000 |
59 | #define PA_LCD2 0xb8800000 | 59 | #define PA_LCD2 0xb8800000 |
60 | 60 | ||
61 | #define __IO_PREFIX sh7300se | ||
62 | #include <asm/io_generic.h> | ||
63 | |||
61 | #endif /* __ASM_SH_HITACHI_SE7300_H */ | 64 | #endif /* __ASM_SH_HITACHI_SE7300_H */ |
diff --git a/include/asm-sh/se7300/io.h b/include/asm-sh/se7300/io.h deleted file mode 100644 index c6af85529714..000000000000 --- a/include/asm-sh/se7300/io.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/se7300/io.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> | ||
5 | * IO functions for SH-Mobile(SH7300) SolutionEngine | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_SH_IO_7300SE_H | ||
9 | #define _ASM_SH_IO_7300SE_H | ||
10 | |||
11 | extern unsigned char sh7300se_inb(unsigned long port); | ||
12 | extern unsigned short sh7300se_inw(unsigned long port); | ||
13 | extern unsigned int sh7300se_inl(unsigned long port); | ||
14 | |||
15 | extern void sh7300se_outb(unsigned char value, unsigned long port); | ||
16 | extern void sh7300se_outw(unsigned short value, unsigned long port); | ||
17 | extern void sh7300se_outl(unsigned int value, unsigned long port); | ||
18 | |||
19 | extern unsigned char sh7300se_inb_p(unsigned long port); | ||
20 | extern void sh7300se_outb_p(unsigned char value, unsigned long port); | ||
21 | |||
22 | extern void sh7300se_insb(unsigned long port, void *addr, unsigned long count); | ||
23 | extern void sh7300se_insw(unsigned long port, void *addr, unsigned long count); | ||
24 | extern void sh7300se_insl(unsigned long port, void *addr, unsigned long count); | ||
25 | extern void sh7300se_outsb(unsigned long port, const void *addr, unsigned long count); | ||
26 | extern void sh7300se_outsw(unsigned long port, const void *addr, unsigned long count); | ||
27 | extern void sh7300se_outsl(unsigned long port, const void *addr, unsigned long count); | ||
28 | |||
29 | #endif /* _ASM_SH_IO_7300SE_H */ | ||
diff --git a/include/asm-sh/se73180/se73180.h b/include/asm-sh/se73180.h index f5b93e39e768..3a4acb3e38a1 100644 --- a/include/asm-sh/se73180/se73180.h +++ b/include/asm-sh/se73180.h | |||
@@ -59,4 +59,7 @@ | |||
59 | #define PA_LCD1 0xb8000000 | 59 | #define PA_LCD1 0xb8000000 |
60 | #define PA_LCD2 0xb8800000 | 60 | #define PA_LCD2 0xb8800000 |
61 | 61 | ||
62 | #define __IO_PREFIX sh73180se | ||
63 | #include <asm/io_generic.h> | ||
64 | |||
62 | #endif /* __ASM_SH_HITACHI_SE73180_H */ | 65 | #endif /* __ASM_SH_HITACHI_SE73180_H */ |
diff --git a/include/asm-sh/se73180/io.h b/include/asm-sh/se73180/io.h deleted file mode 100644 index c9cb1b9412c6..000000000000 --- a/include/asm-sh/se73180/io.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/se73180/io.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> | ||
5 | * Based on include/asm-sh/se7300/io.h | ||
6 | * | ||
7 | * IO functions for SH-Mobile3(SH73180) SolutionEngine | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef _ASM_SH_IO_73180SE_H | ||
12 | #define _ASM_SH_IO_73180SE_H | ||
13 | |||
14 | extern unsigned char sh73180se_inb(unsigned long port); | ||
15 | extern unsigned short sh73180se_inw(unsigned long port); | ||
16 | extern unsigned int sh73180se_inl(unsigned long port); | ||
17 | |||
18 | extern void sh73180se_outb(unsigned char value, unsigned long port); | ||
19 | extern void sh73180se_outw(unsigned short value, unsigned long port); | ||
20 | extern void sh73180se_outl(unsigned int value, unsigned long port); | ||
21 | |||
22 | extern unsigned char sh73180se_inb_p(unsigned long port); | ||
23 | extern void sh73180se_outb_p(unsigned char value, unsigned long port); | ||
24 | |||
25 | extern void sh73180se_insb(unsigned long port, void *addr, unsigned long count); | ||
26 | extern void sh73180se_insw(unsigned long port, void *addr, unsigned long count); | ||
27 | extern void sh73180se_insl(unsigned long port, void *addr, unsigned long count); | ||
28 | extern void sh73180se_outsb(unsigned long port, const void *addr, unsigned long count); | ||
29 | extern void sh73180se_outsw(unsigned long port, const void *addr, unsigned long count); | ||
30 | extern void sh73180se_outsl(unsigned long port, const void *addr, unsigned long count); | ||
31 | |||
32 | #endif /* _ASM_SH_IO_73180SE_H */ | ||
diff --git a/include/asm-sh/se7343.h b/include/asm-sh/se7343.h new file mode 100644 index 000000000000..e7914a54aa96 --- /dev/null +++ b/include/asm-sh/se7343.h | |||
@@ -0,0 +1,82 @@ | |||
1 | #ifndef __ASM_SH_HITACHI_SE7343_H | ||
2 | #define __ASM_SH_HITACHI_SE7343_H | ||
3 | |||
4 | /* | ||
5 | * include/asm-sh/se/se7343.h | ||
6 | * | ||
7 | * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> | ||
8 | * | ||
9 | * SH-Mobile SolutionEngine 7343 support | ||
10 | */ | ||
11 | |||
12 | /* Box specific addresses. */ | ||
13 | |||
14 | /* Area 0 */ | ||
15 | #define PA_ROM 0x00000000 /* EPROM */ | ||
16 | #define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte(Actually 2MB) */ | ||
17 | #define PA_FROM 0x00400000 /* Flash ROM */ | ||
18 | #define PA_FROM_SIZE 0x00400000 /* Flash size 4M byte */ | ||
19 | #define PA_SRAM 0x00800000 /* SRAM */ | ||
20 | #define PA_FROM_SIZE 0x00400000 /* SRAM size 4M byte */ | ||
21 | /* Area 1 */ | ||
22 | #define PA_EXT1 0x04000000 | ||
23 | #define PA_EXT1_SIZE 0x04000000 | ||
24 | /* Area 2 */ | ||
25 | #define PA_EXT2 0x08000000 | ||
26 | #define PA_EXT2_SIZE 0x04000000 | ||
27 | /* Area 3 */ | ||
28 | #define PA_SDRAM 0x0c000000 | ||
29 | #define PA_SDRAM_SIZE 0x04000000 | ||
30 | /* Area 4 */ | ||
31 | #define PA_PCIC 0x10000000 /* MR-SHPC-01 PCMCIA */ | ||
32 | #define PA_MRSHPC 0xb03fffe0 /* MR-SHPC-01 PCMCIA controller */ | ||
33 | #define PA_MRSHPC_MW1 0xb0400000 /* MR-SHPC-01 memory window base */ | ||
34 | #define PA_MRSHPC_MW2 0xb0500000 /* MR-SHPC-01 attribute window base */ | ||
35 | #define PA_MRSHPC_IO 0xb0600000 /* MR-SHPC-01 I/O window base */ | ||
36 | #define MRSHPC_OPTION (PA_MRSHPC + 6) | ||
37 | #define MRSHPC_CSR (PA_MRSHPC + 8) | ||
38 | #define MRSHPC_ISR (PA_MRSHPC + 10) | ||
39 | #define MRSHPC_ICR (PA_MRSHPC + 12) | ||
40 | #define MRSHPC_CPWCR (PA_MRSHPC + 14) | ||
41 | #define MRSHPC_MW0CR1 (PA_MRSHPC + 16) | ||
42 | #define MRSHPC_MW1CR1 (PA_MRSHPC + 18) | ||
43 | #define MRSHPC_IOWCR1 (PA_MRSHPC + 20) | ||
44 | #define MRSHPC_MW0CR2 (PA_MRSHPC + 22) | ||
45 | #define MRSHPC_MW1CR2 (PA_MRSHPC + 24) | ||
46 | #define MRSHPC_IOWCR2 (PA_MRSHPC + 26) | ||
47 | #define MRSHPC_CDCR (PA_MRSHPC + 28) | ||
48 | #define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) | ||
49 | #define PA_LED 0xb0C00000 /* LED */ | ||
50 | #define LED_SHIFT 0 | ||
51 | #define PA_DIPSW 0xb0900000 /* Dip switch 31 */ | ||
52 | #define PA_CPLD_MODESET 0xb1400004 /* CPLD Mode set register */ | ||
53 | #define PA_CPLD_ST 0xb1400008 /* CPLD Interrupt status register */ | ||
54 | #define PA_CPLD_IMSK 0xb140000a /* CPLD Interrupt mask register */ | ||
55 | /* Area 5 */ | ||
56 | #define PA_EXT5 0x14000000 | ||
57 | #define PA_EXT5_SIZE 0x04000000 | ||
58 | /* Area 6 */ | ||
59 | #define PA_LCD1 0xb8000000 | ||
60 | #define PA_LCD2 0xb8800000 | ||
61 | |||
62 | #define __IO_PREFIX sh7343se | ||
63 | #include <asm/io_generic.h> | ||
64 | |||
65 | /* External Multiplexed interrupts */ | ||
66 | #define PC_IRQ0 OFFCHIP_IRQ_BASE | ||
67 | #define PC_IRQ1 (PC_IRQ0 + 1) | ||
68 | #define PC_IRQ2 (PC_IRQ1 + 1) | ||
69 | #define PC_IRQ3 (PC_IRQ2 + 1) | ||
70 | |||
71 | #define EXT_IRQ0 (PC_IRQ3 + 1) | ||
72 | #define EXT_IRQ1 (EXT_IRQ0 + 1) | ||
73 | #define EXT_IRQ2 (EXT_IRQ1 + 1) | ||
74 | #define EXT_IRQ3 (EXT_IRQ2 + 1) | ||
75 | |||
76 | #define USB_IRQ0 (EXT_IRQ3 + 1) | ||
77 | #define USB_IRQ1 (USB_IRQ0 + 1) | ||
78 | |||
79 | #define UART_IRQ0 (USB_IRQ1 + 1) | ||
80 | #define UART_IRQ1 (UART_IRQ0 + 1) | ||
81 | |||
82 | #endif /* __ASM_SH_HITACHI_SE7343_H */ | ||
diff --git a/include/asm-sh/se7751/se7751.h b/include/asm-sh/se7751.h index 738e22bebdfb..88cd379d9084 100644 --- a/include/asm-sh/se7751/se7751.h +++ b/include/asm-sh/se7751.h | |||
@@ -65,4 +65,7 @@ | |||
65 | 65 | ||
66 | #define IRQ_79C973 13 | 66 | #define IRQ_79C973 13 |
67 | 67 | ||
68 | #define __IO_PREFIX sh7751se | ||
69 | #include <asm/io_generic.h> | ||
70 | |||
68 | #endif /* __ASM_SH_HITACHI_7751SE_H */ | 71 | #endif /* __ASM_SH_HITACHI_7751SE_H */ |
diff --git a/include/asm-sh/se7751/io.h b/include/asm-sh/se7751/io.h deleted file mode 100644 index 78d8f5744bc5..000000000000 --- a/include/asm-sh/se7751/io.h +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/io_7751se.h | ||
3 | * | ||
4 | * Modified version of io_se.h for the 7751se-specific functions. | ||
5 | * | ||
6 | * May be copied or modified under the terms of the GNU General Public | ||
7 | * License. See linux/COPYING for more information. | ||
8 | * | ||
9 | * IO functions for an Hitachi SolutionEngine | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_SH_IO_7751SE_H | ||
13 | #define _ASM_SH_IO_7751SE_H | ||
14 | |||
15 | extern unsigned char sh7751se_inb(unsigned long port); | ||
16 | extern unsigned short sh7751se_inw(unsigned long port); | ||
17 | extern unsigned int sh7751se_inl(unsigned long port); | ||
18 | |||
19 | extern void sh7751se_outb(unsigned char value, unsigned long port); | ||
20 | extern void sh7751se_outw(unsigned short value, unsigned long port); | ||
21 | extern void sh7751se_outl(unsigned int value, unsigned long port); | ||
22 | |||
23 | extern unsigned char sh7751se_inb_p(unsigned long port); | ||
24 | extern void sh7751se_outb_p(unsigned char value, unsigned long port); | ||
25 | |||
26 | extern void sh7751se_insb(unsigned long port, void *addr, unsigned long count); | ||
27 | extern void sh7751se_insw(unsigned long port, void *addr, unsigned long count); | ||
28 | extern void sh7751se_insl(unsigned long port, void *addr, unsigned long count); | ||
29 | extern void sh7751se_outsb(unsigned long port, const void *addr, unsigned long count); | ||
30 | extern void sh7751se_outsw(unsigned long port, const void *addr, unsigned long count); | ||
31 | extern void sh7751se_outsl(unsigned long port, const void *addr, unsigned long count); | ||
32 | |||
33 | extern unsigned char sh7751se_readb(unsigned long addr); | ||
34 | extern unsigned short sh7751se_readw(unsigned long addr); | ||
35 | extern unsigned int sh7751se_readl(unsigned long addr); | ||
36 | extern void sh7751se_writeb(unsigned char b, unsigned long addr); | ||
37 | extern void sh7751se_writew(unsigned short b, unsigned long addr); | ||
38 | extern void sh7751se_writel(unsigned int b, unsigned long addr); | ||
39 | |||
40 | extern unsigned long sh7751se_isa_port2addr(unsigned long offset); | ||
41 | |||
42 | #endif /* _ASM_SH_IO_7751SE_H */ | ||
diff --git a/include/asm-sh/setup.h b/include/asm-sh/setup.h index d19de7c8df4e..34ca8a7f06ba 100644 --- a/include/asm-sh/setup.h +++ b/include/asm-sh/setup.h | |||
@@ -4,5 +4,7 @@ | |||
4 | 4 | ||
5 | #define COMMAND_LINE_SIZE 256 | 5 | #define COMMAND_LINE_SIZE 256 |
6 | 6 | ||
7 | int setup_early_printk(char *); | ||
8 | |||
7 | #endif /* _SH_SETUP_H */ | 9 | #endif /* _SH_SETUP_H */ |
8 | #endif /* __KERNEL__ */ | 10 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-sh/sfp-machine.h b/include/asm-sh/sfp-machine.h new file mode 100644 index 000000000000..8a6399a8cfe0 --- /dev/null +++ b/include/asm-sh/sfp-machine.h | |||
@@ -0,0 +1,86 @@ | |||
1 | /* Machine-dependent software floating-point definitions. | ||
2 | SuperH kernel version. | ||
3 | Copyright (C) 1997,1998,1999 Free Software Foundation, Inc. | ||
4 | This file is part of the GNU C Library. | ||
5 | Contributed by Richard Henderson (rth@cygnus.com), | ||
6 | Jakub Jelinek (jj@ultra.linux.cz), | ||
7 | David S. Miller (davem@redhat.com) and | ||
8 | Peter Maydell (pmaydell@chiark.greenend.org.uk). | ||
9 | |||
10 | The GNU C Library is free software; you can redistribute it and/or | ||
11 | modify it under the terms of the GNU Library General Public License as | ||
12 | published by the Free Software Foundation; either version 2 of the | ||
13 | License, or (at your option) any later version. | ||
14 | |||
15 | The GNU C Library is distributed in the hope that it will be useful, | ||
16 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
18 | Library General Public License for more details. | ||
19 | |||
20 | You should have received a copy of the GNU Library General Public | ||
21 | License along with the GNU C Library; see the file COPYING.LIB. If | ||
22 | not, write to the Free Software Foundation, Inc., | ||
23 | 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
24 | |||
25 | #ifndef _SFP_MACHINE_H | ||
26 | #define _SFP_MACHINE_H | ||
27 | |||
28 | #include <linux/config.h> | ||
29 | |||
30 | #define _FP_W_TYPE_SIZE 32 | ||
31 | #define _FP_W_TYPE unsigned long | ||
32 | #define _FP_WS_TYPE signed long | ||
33 | #define _FP_I_TYPE long | ||
34 | |||
35 | #define _FP_MUL_MEAT_S(R,X,Y) \ | ||
36 | _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) | ||
37 | #define _FP_MUL_MEAT_D(R,X,Y) \ | ||
38 | _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) | ||
39 | #define _FP_MUL_MEAT_Q(R,X,Y) \ | ||
40 | _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) | ||
41 | |||
42 | #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) | ||
43 | #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) | ||
44 | #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) | ||
45 | |||
46 | #define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) | ||
47 | #define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 | ||
48 | #define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 | ||
49 | #define _FP_NANSIGN_S 0 | ||
50 | #define _FP_NANSIGN_D 0 | ||
51 | #define _FP_NANSIGN_Q 0 | ||
52 | |||
53 | #define _FP_KEEPNANFRACP 1 | ||
54 | |||
55 | /* | ||
56 | * If one NaN is signaling and the other is not, | ||
57 | * we choose that one, otherwise we choose X. | ||
58 | */ | ||
59 | #define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ | ||
60 | do { \ | ||
61 | if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ | ||
62 | && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ | ||
63 | { \ | ||
64 | R##_s = Y##_s; \ | ||
65 | _FP_FRAC_COPY_##wc(R,Y); \ | ||
66 | } \ | ||
67 | else \ | ||
68 | { \ | ||
69 | R##_s = X##_s; \ | ||
70 | _FP_FRAC_COPY_##wc(R,X); \ | ||
71 | } \ | ||
72 | R##_c = FP_CLS_NAN; \ | ||
73 | } while (0) | ||
74 | |||
75 | //#define FP_ROUNDMODE FPSCR_RM | ||
76 | #define FP_DENORM_ZERO 1/*FPSCR_DN*/ | ||
77 | |||
78 | /* Exception flags. */ | ||
79 | #define FP_EX_INVALID (1<<4) | ||
80 | #define FP_EX_DIVZERO (1<<3) | ||
81 | #define FP_EX_OVERFLOW (1<<2) | ||
82 | #define FP_EX_UNDERFLOW (1<<1) | ||
83 | #define FP_EX_INEXACT (1<<0) | ||
84 | |||
85 | #endif | ||
86 | |||
diff --git a/include/asm-sh/sh03/io.h b/include/asm-sh/sh03/io.h index 25792e9831ea..df3b187ef883 100644 --- a/include/asm-sh/sh03/io.h +++ b/include/asm-sh/sh03/io.h | |||
@@ -33,14 +33,6 @@ | |||
33 | #define IRL3_IPR_POS 0 | 33 | #define IRL3_IPR_POS 0 |
34 | #define IRL3_PRIORITY 4 | 34 | #define IRL3_PRIORITY 4 |
35 | 35 | ||
36 | 36 | void heartbeat_sh03(void); | |
37 | extern unsigned long sh03_isa_port2addr(unsigned long offset); | ||
38 | |||
39 | extern void setup_sh03(void); | ||
40 | extern void init_sh03_IRQ(void); | ||
41 | extern void heartbeat_sh03(void); | ||
42 | |||
43 | extern void sh03_rtc_gettimeofday(struct timeval *tv); | ||
44 | extern int sh03_rtc_settimeofday(const struct timeval *tv); | ||
45 | 37 | ||
46 | #endif /* _ASM_SH_IO_SH03_H */ | 38 | #endif /* _ASM_SH_IO_SH03_H */ |
diff --git a/include/asm-sh/sh2000/sh2000.h b/include/asm-sh/sh2000/sh2000.h deleted file mode 100644 index 8d547324d59a..000000000000 --- a/include/asm-sh/sh2000/sh2000.h +++ /dev/null | |||
@@ -1,8 +0,0 @@ | |||
1 | #ifndef __ASM_SH_SH2000_SH2000_H | ||
2 | #define __ASM_SH_SH2000_SH2000_H | ||
3 | |||
4 | /* arch/sh/boards/sh2000/setup.c */ | ||
5 | extern int setup_sh2000(void); | ||
6 | |||
7 | #endif /* __ASM_SH_SH2000_SH2000_H */ | ||
8 | |||
diff --git a/include/asm-sh/shmin/shmin.h b/include/asm-sh/shmin/shmin.h new file mode 100644 index 000000000000..36ba138a81fb --- /dev/null +++ b/include/asm-sh/shmin/shmin.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __ASM_SH_SHMIN_H | ||
2 | #define __ASM_SH_SHMIN_H | ||
3 | |||
4 | #define SHMIN_IO_BASE 0xb0000000UL | ||
5 | |||
6 | #define SHMIN_NE_IRQ IRQ2_IRQ | ||
7 | #define SHMIN_NE_BASE 0x300 | ||
8 | |||
9 | #endif | ||
diff --git a/include/asm-sh/shmparam.h b/include/asm-sh/shmparam.h index 0a95604b9b66..ba1758d90106 100644 --- a/include/asm-sh/shmparam.h +++ b/include/asm-sh/shmparam.h | |||
@@ -1,8 +1,22 @@ | |||
1 | /* | ||
2 | * include/asm-sh/shmparam.h | ||
3 | * | ||
4 | * Copyright (C) 1999 Niibe Yutaka | ||
5 | * Copyright (C) 2006 Paul Mundt | ||
6 | * | ||
7 | * This file is subject to the terms and conditions of the GNU General Public | ||
8 | * License. See the file "COPYING" in the main directory of this archive | ||
9 | * for more details. | ||
10 | */ | ||
1 | #ifndef __ASM_SH_SHMPARAM_H | 11 | #ifndef __ASM_SH_SHMPARAM_H |
2 | #define __ASM_SH_SHMPARAM_H | 12 | #define __ASM_SH_SHMPARAM_H |
3 | #ifdef __KERNEL__ | ||
4 | 13 | ||
5 | #include <asm/cpu/shmparam.h> | 14 | /* |
15 | * SH-4 and SH-3 7705 have an aliasing dcache. Bump this up to a sensible value | ||
16 | * for everyone, and work out the specifics from the probed cache descriptor. | ||
17 | */ | ||
18 | #define SHMLBA 0x4000 /* attach addr a multiple of this */ | ||
19 | |||
20 | #define __ARCH_FORCE_SHMLBA | ||
6 | 21 | ||
7 | #endif /* __KERNEL__ */ | ||
8 | #endif /* __ASM_SH_SHMPARAM_H */ | 22 | #endif /* __ASM_SH_SHMPARAM_H */ |
diff --git a/include/asm-sh/se/smc37c93x.h b/include/asm-sh/smc37c93x.h index 585da2a8fc45..585da2a8fc45 100644 --- a/include/asm-sh/se/smc37c93x.h +++ b/include/asm-sh/smc37c93x.h | |||
diff --git a/include/asm-sh/smp.h b/include/asm-sh/smp.h index f57c4fe9692a..71ecddf70db3 100644 --- a/include/asm-sh/smp.h +++ b/include/asm-sh/smp.h | |||
@@ -19,11 +19,6 @@ | |||
19 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
20 | #include <asm/current.h> | 20 | #include <asm/current.h> |
21 | 21 | ||
22 | extern cpumask_t cpu_online_map; | ||
23 | extern cpumask_t cpu_possible_map; | ||
24 | |||
25 | #define cpu_online(cpu) cpu_isset(cpu, cpu_online_map) | ||
26 | |||
27 | #define raw_smp_processor_id() (current_thread_info()->cpu) | 22 | #define raw_smp_processor_id() (current_thread_info()->cpu) |
28 | 23 | ||
29 | /* I've no idea what the real meaning of this is */ | 24 | /* I've no idea what the real meaning of this is */ |
diff --git a/include/asm-sh/snapgear/io.h b/include/asm-sh/snapgear.h index bfa97ac06280..6b5e4ddc073a 100644 --- a/include/asm-sh/snapgear/io.h +++ b/include/asm-sh/snapgear.h | |||
@@ -40,21 +40,8 @@ | |||
40 | #define IRL3_PRIORITY 4 | 40 | #define IRL3_PRIORITY 4 |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | extern unsigned char snapgear_inb(unsigned long port); | 43 | #define __IO_PREFIX snapgear |
44 | extern unsigned short snapgear_inw(unsigned long port); | 44 | #include <asm/io_generic.h> |
45 | extern unsigned int snapgear_inl(unsigned long port); | ||
46 | |||
47 | extern void snapgear_outb(unsigned char value, unsigned long port); | ||
48 | extern void snapgear_outw(unsigned short value, unsigned long port); | ||
49 | extern void snapgear_outl(unsigned int value, unsigned long port); | ||
50 | |||
51 | extern unsigned char snapgear_inb_p(unsigned long port); | ||
52 | extern void snapgear_outb_p(unsigned char value, unsigned long port); | ||
53 | |||
54 | extern void snapgear_insl(unsigned long port, void *addr, unsigned long count); | ||
55 | extern void snapgear_outsl(unsigned long port, const void *addr, unsigned long count); | ||
56 | |||
57 | extern unsigned long snapgear_isa_port2addr(unsigned long offset); | ||
58 | 45 | ||
59 | #ifdef CONFIG_SH_SECUREEDGE5410 | 46 | #ifdef CONFIG_SH_SECUREEDGE5410 |
60 | /* | 47 | /* |
@@ -79,14 +66,14 @@ extern unsigned long snapgear_isa_port2addr(unsigned long offset); | |||
79 | * D12 - RTS RESET | 66 | * D12 - RTS RESET |
80 | */ | 67 | */ |
81 | 68 | ||
82 | #define SECUREEDGE_IOPORT_ADDR ((volatile short *) 0xb0000000) | 69 | #define SECUREEDGE_IOPORT_ADDR ((volatile short *) 0xb0000000) |
83 | extern unsigned short secureedge5410_ioport; | 70 | extern unsigned short secureedge5410_ioport; |
84 | 71 | ||
85 | #define SECUREEDGE_WRITE_IOPORT(val, mask) (*SECUREEDGE_IOPORT_ADDR = \ | 72 | #define SECUREEDGE_WRITE_IOPORT(val, mask) (*SECUREEDGE_IOPORT_ADDR = \ |
86 | (secureedge5410_ioport = \ | 73 | (secureedge5410_ioport = \ |
87 | ((secureedge5410_ioport & ~(mask)) | ((val) & (mask))))) | 74 | ((secureedge5410_ioport & ~(mask)) | ((val) & (mask))))) |
88 | #define SECUREEDGE_READ_IOPORT() \ | 75 | #define SECUREEDGE_READ_IOPORT() \ |
89 | ((*SECUREEDGE_IOPORT_ADDR&0x0817) | (secureedge5410_ioport&~0x0817)) | 76 | ((*SECUREEDGE_IOPORT_ADDR&0x0817) | (secureedge5410_ioport&~0x0817)) |
90 | #endif | 77 | #endif |
91 | 78 | ||
92 | #endif /* _ASM_SH_IO_SNAPGEAR_H */ | 79 | #endif /* _ASM_SH_IO_SNAPGEAR_H */ |
diff --git a/include/asm-sh/system.h b/include/asm-sh/system.h index ad35ad4958f4..6c1f8fde5ac4 100644 --- a/include/asm-sh/system.h +++ b/include/asm-sh/system.h | |||
@@ -6,6 +6,7 @@ | |||
6 | * Copyright (C) 2002 Paul Mundt | 6 | * Copyright (C) 2002 Paul Mundt |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <asm/types.h> | ||
9 | 10 | ||
10 | /* | 11 | /* |
11 | * switch_to() should switch tasks to task nr n, first | 12 | * switch_to() should switch tasks to task nr n, first |
@@ -66,13 +67,20 @@ static inline void sched_cacheflush(void) | |||
66 | { | 67 | { |
67 | } | 68 | } |
68 | 69 | ||
69 | #define nop() __asm__ __volatile__ ("nop") | 70 | #ifdef CONFIG_CPU_SH4A |
70 | 71 | #define __icbi() \ | |
71 | 72 | { \ | |
72 | #define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) | 73 | unsigned long __addr; \ |
74 | __addr = 0xa8000000; \ | ||
75 | __asm__ __volatile__( \ | ||
76 | "icbi %0\n\t" \ | ||
77 | : /* no output */ \ | ||
78 | : "m" (__m(__addr))); \ | ||
79 | } | ||
80 | #endif | ||
73 | 81 | ||
74 | static __inline__ unsigned long tas(volatile int *m) | 82 | static inline unsigned long tas(volatile int *m) |
75 | { /* #define tas(ptr) (xchg((ptr),1)) */ | 83 | { |
76 | unsigned long retval; | 84 | unsigned long retval; |
77 | 85 | ||
78 | __asm__ __volatile__ ("tas.b @%1\n\t" | 86 | __asm__ __volatile__ ("tas.b @%1\n\t" |
@@ -81,12 +89,33 @@ static __inline__ unsigned long tas(volatile int *m) | |||
81 | return retval; | 89 | return retval; |
82 | } | 90 | } |
83 | 91 | ||
84 | extern void __xchg_called_with_bad_pointer(void); | 92 | /* |
85 | 93 | * A brief note on ctrl_barrier(), the control register write barrier. | |
86 | #define mb() __asm__ __volatile__ ("": : :"memory") | 94 | * |
87 | #define rmb() mb() | 95 | * Legacy SH cores typically require a sequence of 8 nops after |
88 | #define wmb() __asm__ __volatile__ ("": : :"memory") | 96 | * modification of a control register in order for the changes to take |
97 | * effect. On newer cores (like the sh4a and sh5) this is accomplished | ||
98 | * with icbi. | ||
99 | * | ||
100 | * Also note that on sh4a in the icbi case we can forego a synco for the | ||
101 | * write barrier, as it's not necessary for control registers. | ||
102 | * | ||
103 | * Historically we have only done this type of barrier for the MMUCR, but | ||
104 | * it's also necessary for the CCR, so we make it generic here instead. | ||
105 | */ | ||
106 | #ifdef CONFIG_CPU_SH4A | ||
107 | #define mb() __asm__ __volatile__ ("synco": : :"memory") | ||
108 | #define rmb() mb() | ||
109 | #define wmb() __asm__ __volatile__ ("synco": : :"memory") | ||
110 | #define ctrl_barrier() __icbi() | ||
111 | #define read_barrier_depends() do { } while(0) | ||
112 | #else | ||
113 | #define mb() __asm__ __volatile__ ("": : :"memory") | ||
114 | #define rmb() mb() | ||
115 | #define wmb() __asm__ __volatile__ ("": : :"memory") | ||
116 | #define ctrl_barrier() __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop") | ||
89 | #define read_barrier_depends() do { } while(0) | 117 | #define read_barrier_depends() do { } while(0) |
118 | #endif | ||
90 | 119 | ||
91 | #ifdef CONFIG_SMP | 120 | #ifdef CONFIG_SMP |
92 | #define smp_mb() mb() | 121 | #define smp_mb() mb() |
@@ -103,7 +132,8 @@ extern void __xchg_called_with_bad_pointer(void); | |||
103 | #define set_mb(var, value) do { xchg(&var, value); } while (0) | 132 | #define set_mb(var, value) do { xchg(&var, value); } while (0) |
104 | 133 | ||
105 | /* Interrupt Control */ | 134 | /* Interrupt Control */ |
106 | static __inline__ void local_irq_enable(void) | 135 | #ifdef CONFIG_CPU_HAS_SR_RB |
136 | static inline void local_irq_enable(void) | ||
107 | { | 137 | { |
108 | unsigned long __dummy0, __dummy1; | 138 | unsigned long __dummy0, __dummy1; |
109 | 139 | ||
@@ -116,8 +146,22 @@ static __inline__ void local_irq_enable(void) | |||
116 | : "1" (~0x000000f0) | 146 | : "1" (~0x000000f0) |
117 | : "memory"); | 147 | : "memory"); |
118 | } | 148 | } |
149 | #else | ||
150 | static inline void local_irq_enable(void) | ||
151 | { | ||
152 | unsigned long __dummy0, __dummy1; | ||
153 | |||
154 | __asm__ __volatile__ ( | ||
155 | "stc sr, %0\n\t" | ||
156 | "and %1, %0\n\t" | ||
157 | "ldc %0, sr\n\t" | ||
158 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
159 | : "1" (~0x000000f0) | ||
160 | : "memory"); | ||
161 | } | ||
162 | #endif | ||
119 | 163 | ||
120 | static __inline__ void local_irq_disable(void) | 164 | static inline void local_irq_disable(void) |
121 | { | 165 | { |
122 | unsigned long __dummy; | 166 | unsigned long __dummy; |
123 | __asm__ __volatile__("stc sr, %0\n\t" | 167 | __asm__ __volatile__("stc sr, %0\n\t" |
@@ -128,6 +172,31 @@ static __inline__ void local_irq_disable(void) | |||
128 | : "memory"); | 172 | : "memory"); |
129 | } | 173 | } |
130 | 174 | ||
175 | static inline void set_bl_bit(void) | ||
176 | { | ||
177 | unsigned long __dummy0, __dummy1; | ||
178 | |||
179 | __asm__ __volatile__ ("stc sr, %0\n\t" | ||
180 | "or %2, %0\n\t" | ||
181 | "and %3, %0\n\t" | ||
182 | "ldc %0, sr" | ||
183 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
184 | : "r" (0x10000000), "r" (0xffffff0f) | ||
185 | : "memory"); | ||
186 | } | ||
187 | |||
188 | static inline void clear_bl_bit(void) | ||
189 | { | ||
190 | unsigned long __dummy0, __dummy1; | ||
191 | |||
192 | __asm__ __volatile__ ("stc sr, %0\n\t" | ||
193 | "and %2, %0\n\t" | ||
194 | "ldc %0, sr" | ||
195 | : "=&r" (__dummy0), "=r" (__dummy1) | ||
196 | : "1" (~0x10000000) | ||
197 | : "memory"); | ||
198 | } | ||
199 | |||
131 | #define local_save_flags(x) \ | 200 | #define local_save_flags(x) \ |
132 | __asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" ) | 201 | __asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" ) |
133 | 202 | ||
@@ -138,7 +207,7 @@ static __inline__ void local_irq_disable(void) | |||
138 | (flags != 0); \ | 207 | (flags != 0); \ |
139 | }) | 208 | }) |
140 | 209 | ||
141 | static __inline__ unsigned long local_irq_save(void) | 210 | static inline unsigned long local_irq_save(void) |
142 | { | 211 | { |
143 | unsigned long flags, __dummy; | 212 | unsigned long flags, __dummy; |
144 | 213 | ||
@@ -154,35 +223,9 @@ static __inline__ unsigned long local_irq_save(void) | |||
154 | return flags; | 223 | return flags; |
155 | } | 224 | } |
156 | 225 | ||
157 | #ifdef DEBUG_CLI_STI | 226 | #define local_irq_restore(x) do { \ |
158 | static __inline__ void local_irq_restore(unsigned long x) | ||
159 | { | ||
160 | if ((x & 0x000000f0) != 0x000000f0) | ||
161 | local_irq_enable(); | ||
162 | else { | ||
163 | unsigned long flags; | ||
164 | local_save_flags(flags); | ||
165 | |||
166 | if (flags == 0) { | ||
167 | extern void dump_stack(void); | ||
168 | printk(KERN_ERR "BUG!\n"); | ||
169 | dump_stack(); | ||
170 | local_irq_disable(); | ||
171 | } | ||
172 | } | ||
173 | } | ||
174 | #else | ||
175 | #define local_irq_restore(x) do { \ | ||
176 | if ((x & 0x000000f0) != 0x000000f0) \ | ||
177 | local_irq_enable(); \ | ||
178 | } while (0) | ||
179 | #endif | ||
180 | |||
181 | #define really_restore_flags(x) do { \ | ||
182 | if ((x & 0x000000f0) != 0x000000f0) \ | 227 | if ((x & 0x000000f0) != 0x000000f0) \ |
183 | local_irq_enable(); \ | 228 | local_irq_enable(); \ |
184 | else \ | ||
185 | local_irq_disable(); \ | ||
186 | } while (0) | 229 | } while (0) |
187 | 230 | ||
188 | /* | 231 | /* |
@@ -210,8 +253,8 @@ do { \ | |||
210 | #define back_to_P1() \ | 253 | #define back_to_P1() \ |
211 | do { \ | 254 | do { \ |
212 | unsigned long __dummy; \ | 255 | unsigned long __dummy; \ |
256 | ctrl_barrier(); \ | ||
213 | __asm__ __volatile__( \ | 257 | __asm__ __volatile__( \ |
214 | "nop;nop;nop;nop;nop;nop;nop\n\t" \ | ||
215 | "mov.l 1f, %0\n\t" \ | 258 | "mov.l 1f, %0\n\t" \ |
216 | "jmp @%0\n\t" \ | 259 | "jmp @%0\n\t" \ |
217 | " nop\n\t" \ | 260 | " nop\n\t" \ |
@@ -224,7 +267,7 @@ do { \ | |||
224 | /* For spinlocks etc */ | 267 | /* For spinlocks etc */ |
225 | #define local_irq_save(x) x = local_irq_save() | 268 | #define local_irq_save(x) x = local_irq_save() |
226 | 269 | ||
227 | static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val) | 270 | static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) |
228 | { | 271 | { |
229 | unsigned long flags, retval; | 272 | unsigned long flags, retval; |
230 | 273 | ||
@@ -235,7 +278,7 @@ static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val) | |||
235 | return retval; | 278 | return retval; |
236 | } | 279 | } |
237 | 280 | ||
238 | static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned long val) | 281 | static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val) |
239 | { | 282 | { |
240 | unsigned long flags, retval; | 283 | unsigned long flags, retval; |
241 | 284 | ||
@@ -246,20 +289,70 @@ static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned lon | |||
246 | return retval; | 289 | return retval; |
247 | } | 290 | } |
248 | 291 | ||
249 | static __inline__ unsigned long __xchg(unsigned long x, volatile void * ptr, int size) | 292 | extern void __xchg_called_with_bad_pointer(void); |
293 | |||
294 | #define __xchg(ptr, x, size) \ | ||
295 | ({ \ | ||
296 | unsigned long __xchg__res; \ | ||
297 | volatile void *__xchg_ptr = (ptr); \ | ||
298 | switch (size) { \ | ||
299 | case 4: \ | ||
300 | __xchg__res = xchg_u32(__xchg_ptr, x); \ | ||
301 | break; \ | ||
302 | case 1: \ | ||
303 | __xchg__res = xchg_u8(__xchg_ptr, x); \ | ||
304 | break; \ | ||
305 | default: \ | ||
306 | __xchg_called_with_bad_pointer(); \ | ||
307 | __xchg__res = x; \ | ||
308 | break; \ | ||
309 | } \ | ||
310 | \ | ||
311 | __xchg__res; \ | ||
312 | }) | ||
313 | |||
314 | #define xchg(ptr,x) \ | ||
315 | ((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr)))) | ||
316 | |||
317 | static inline unsigned long __cmpxchg_u32(volatile int * m, unsigned long old, | ||
318 | unsigned long new) | ||
319 | { | ||
320 | __u32 retval; | ||
321 | unsigned long flags; | ||
322 | |||
323 | local_irq_save(flags); | ||
324 | retval = *m; | ||
325 | if (retval == old) | ||
326 | *m = new; | ||
327 | local_irq_restore(flags); /* implies memory barrier */ | ||
328 | return retval; | ||
329 | } | ||
330 | |||
331 | /* This function doesn't exist, so you'll get a linker error | ||
332 | * if something tries to do an invalid cmpxchg(). */ | ||
333 | extern void __cmpxchg_called_with_bad_pointer(void); | ||
334 | |||
335 | #define __HAVE_ARCH_CMPXCHG 1 | ||
336 | |||
337 | static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old, | ||
338 | unsigned long new, int size) | ||
250 | { | 339 | { |
251 | switch (size) { | 340 | switch (size) { |
252 | case 4: | 341 | case 4: |
253 | return xchg_u32(ptr, x); | 342 | return __cmpxchg_u32(ptr, old, new); |
254 | break; | ||
255 | case 1: | ||
256 | return xchg_u8(ptr, x); | ||
257 | break; | ||
258 | } | 343 | } |
259 | __xchg_called_with_bad_pointer(); | 344 | __cmpxchg_called_with_bad_pointer(); |
260 | return x; | 345 | return old; |
261 | } | 346 | } |
262 | 347 | ||
348 | #define cmpxchg(ptr,o,n) \ | ||
349 | ({ \ | ||
350 | __typeof__(*(ptr)) _o_ = (o); \ | ||
351 | __typeof__(*(ptr)) _n_ = (n); \ | ||
352 | (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ | ||
353 | (unsigned long)_n_, sizeof(*(ptr))); \ | ||
354 | }) | ||
355 | |||
263 | /* XXX | 356 | /* XXX |
264 | * disable hlt during certain critical i/o operations | 357 | * disable hlt during certain critical i/o operations |
265 | */ | 358 | */ |
diff --git a/include/asm-sh/systemh/io.h b/include/asm-sh/systemh/io.h deleted file mode 100644 index 327849b49db8..000000000000 --- a/include/asm-sh/systemh/io.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-sh/systemh/io.h | ||
3 | * | ||
4 | * Stupid I/O definitions for SystemH, cloned from SE7751. | ||
5 | * | ||
6 | * Copyright (C) 2003 Paul Mundt | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | #ifndef __ASM_SH_SYSTEMH_IO_H | ||
13 | #define __ASM_SH_SYSTEMH_IO_H | ||
14 | |||
15 | extern unsigned char sh7751systemh_inb(unsigned long port); | ||
16 | extern unsigned short sh7751systemh_inw(unsigned long port); | ||
17 | extern unsigned int sh7751systemh_inl(unsigned long port); | ||
18 | |||
19 | extern void sh7751systemh_outb(unsigned char value, unsigned long port); | ||
20 | extern void sh7751systemh_outw(unsigned short value, unsigned long port); | ||
21 | extern void sh7751systemh_outl(unsigned int value, unsigned long port); | ||
22 | |||
23 | extern unsigned char sh7751systemh_inb_p(unsigned long port); | ||
24 | extern void sh7751systemh_outb_p(unsigned char value, unsigned long port); | ||
25 | |||
26 | extern void sh7751systemh_insb(unsigned long port, void *addr, unsigned long count); | ||
27 | extern void sh7751systemh_insw(unsigned long port, void *addr, unsigned long count); | ||
28 | extern void sh7751systemh_insl(unsigned long port, void *addr, unsigned long count); | ||
29 | extern void sh7751systemh_outsb(unsigned long port, const void *addr, unsigned long count); | ||
30 | extern void sh7751systemh_outsw(unsigned long port, const void *addr, unsigned long count); | ||
31 | extern void sh7751systemh_outsl(unsigned long port, const void *addr, unsigned long count); | ||
32 | |||
33 | extern unsigned char sh7751systemh_readb(unsigned long addr); | ||
34 | extern unsigned short sh7751systemh_readw(unsigned long addr); | ||
35 | extern unsigned int sh7751systemh_readl(unsigned long addr); | ||
36 | extern void sh7751systemh_writeb(unsigned char b, unsigned long addr); | ||
37 | extern void sh7751systemh_writew(unsigned short b, unsigned long addr); | ||
38 | extern void sh7751systemh_writel(unsigned int b, unsigned long addr); | ||
39 | |||
40 | extern unsigned long sh7751systemh_isa_port2addr(unsigned long offset); | ||
41 | |||
42 | #endif /* __ASM_SH_SYSTEMH_IO_H */ | ||
43 | |||
diff --git a/include/asm-sh/systemh/7751systemh.h b/include/asm-sh/systemh7751.h index 4170531bdbd9..b143bb2a2ca7 100644 --- a/include/asm-sh/systemh/7751systemh.h +++ b/include/asm-sh/systemh7751.h | |||
@@ -65,4 +65,7 @@ | |||
65 | 65 | ||
66 | #define IRQ_79C973 13 | 66 | #define IRQ_79C973 13 |
67 | 67 | ||
68 | #define __IO_PREFIX sh7751systemh | ||
69 | #include <asm/io_generic.h> | ||
70 | |||
68 | #endif /* __ASM_SH_SYSTEMH_7751SYSTEMH_H */ | 71 | #endif /* __ASM_SH_SYSTEMH_7751SYSTEMH_H */ |
diff --git a/include/asm-sh/thread_info.h b/include/asm-sh/thread_info.h index 7345350d98c0..3ebc3f9039eb 100644 --- a/include/asm-sh/thread_info.h +++ b/include/asm-sh/thread_info.h | |||
@@ -9,8 +9,8 @@ | |||
9 | * Copyright (C) 2002 David Howells (dhowells@redhat.com) | 9 | * Copyright (C) 2002 David Howells (dhowells@redhat.com) |
10 | * - Incorporating suggestions made by Linus Torvalds and Dave Miller | 10 | * - Incorporating suggestions made by Linus Torvalds and Dave Miller |
11 | */ | 11 | */ |
12 | |||
13 | #ifdef __KERNEL__ | 12 | #ifdef __KERNEL__ |
13 | #include <asm/page.h> | ||
14 | 14 | ||
15 | #ifndef __ASSEMBLY__ | 15 | #ifndef __ASSEMBLY__ |
16 | #include <asm/processor.h> | 16 | #include <asm/processor.h> |
@@ -21,7 +21,10 @@ struct thread_info { | |||
21 | unsigned long flags; /* low level flags */ | 21 | unsigned long flags; /* low level flags */ |
22 | __u32 cpu; | 22 | __u32 cpu; |
23 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 23 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
24 | mm_segment_t addr_limit; /* thread address space */ | ||
24 | struct restart_block restart_block; | 25 | struct restart_block restart_block; |
26 | unsigned long previous_sp; /* sp of previous stack in case | ||
27 | of nested IRQ stacks */ | ||
25 | __u8 supervisor_stack[0]; | 28 | __u8 supervisor_stack[0]; |
26 | }; | 29 | }; |
27 | 30 | ||
@@ -29,6 +32,13 @@ struct thread_info { | |||
29 | 32 | ||
30 | #define PREEMPT_ACTIVE 0x10000000 | 33 | #define PREEMPT_ACTIVE 0x10000000 |
31 | 34 | ||
35 | #ifdef CONFIG_4KSTACKS | ||
36 | #define THREAD_SIZE (PAGE_SIZE) | ||
37 | #else | ||
38 | #define THREAD_SIZE (PAGE_SIZE * 2) | ||
39 | #endif | ||
40 | #define STACK_WARN (THREAD_SIZE / 8) | ||
41 | |||
32 | /* | 42 | /* |
33 | * macros/functions for gaining access to the thread information structure | 43 | * macros/functions for gaining access to the thread information structure |
34 | */ | 44 | */ |
@@ -40,6 +50,7 @@ struct thread_info { | |||
40 | .flags = 0, \ | 50 | .flags = 0, \ |
41 | .cpu = 0, \ | 51 | .cpu = 0, \ |
42 | .preempt_count = 1, \ | 52 | .preempt_count = 1, \ |
53 | .addr_limit = KERNEL_DS, \ | ||
43 | .restart_block = { \ | 54 | .restart_block = { \ |
44 | .fn = do_no_restart_syscall, \ | 55 | .fn = do_no_restart_syscall, \ |
45 | }, \ | 56 | }, \ |
@@ -48,24 +59,42 @@ struct thread_info { | |||
48 | #define init_thread_info (init_thread_union.thread_info) | 59 | #define init_thread_info (init_thread_union.thread_info) |
49 | #define init_stack (init_thread_union.stack) | 60 | #define init_stack (init_thread_union.stack) |
50 | 61 | ||
62 | /* how to get the current stack pointer from C */ | ||
63 | register unsigned long current_stack_pointer asm("r15") __attribute_used__; | ||
64 | |||
51 | /* how to get the thread information struct from C */ | 65 | /* how to get the thread information struct from C */ |
52 | static inline struct thread_info *current_thread_info(void) | 66 | static inline struct thread_info *current_thread_info(void) |
53 | { | 67 | { |
54 | struct thread_info *ti; | 68 | struct thread_info *ti; |
69 | #ifdef CONFIG_CPU_HAS_SR_RB | ||
55 | __asm__("stc r7_bank, %0" : "=r" (ti)); | 70 | __asm__("stc r7_bank, %0" : "=r" (ti)); |
71 | #else | ||
72 | unsigned long __dummy; | ||
73 | |||
74 | __asm__ __volatile__ ( | ||
75 | "mov r15, %0\n\t" | ||
76 | "and %1, %0\n\t" | ||
77 | : "=&r" (ti), "=r" (__dummy) | ||
78 | : "1" (~(THREAD_SIZE - 1)) | ||
79 | : "memory"); | ||
80 | #endif | ||
81 | |||
56 | return ti; | 82 | return ti; |
57 | } | 83 | } |
58 | 84 | ||
59 | /* thread information allocation */ | 85 | /* thread information allocation */ |
60 | #define THREAD_SIZE (2*PAGE_SIZE) | 86 | #ifdef CONFIG_DEBUG_STACK_USAGE |
61 | #define alloc_thread_info(ti) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1)) | 87 | #define alloc_thread_info(ti) kzalloc(THREAD_SIZE, GFP_KERNEL) |
62 | #define free_thread_info(ti) free_pages((unsigned long) (ti), 1) | 88 | #else |
89 | #define alloc_thread_info(ti) kmalloc(THREAD_SIZE, GFP_KERNEL) | ||
90 | #endif | ||
91 | #define free_thread_info(ti) kfree(ti) | ||
63 | 92 | ||
64 | #else /* !__ASSEMBLY__ */ | 93 | #else /* !__ASSEMBLY__ */ |
65 | 94 | ||
66 | /* how to get the thread information struct from ASM */ | 95 | /* how to get the thread information struct from ASM */ |
67 | #define GET_THREAD_INFO(reg) \ | 96 | #define GET_THREAD_INFO(reg) \ |
68 | stc r7_bank, reg | 97 | stc r7_bank, reg |
69 | 98 | ||
70 | #endif | 99 | #endif |
71 | 100 | ||
@@ -79,18 +108,18 @@ static inline struct thread_info *current_thread_info(void) | |||
79 | #define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ | 108 | #define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ |
80 | #define TIF_SIGPENDING 2 /* signal pending */ | 109 | #define TIF_SIGPENDING 2 /* signal pending */ |
81 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 110 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
111 | #define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */ | ||
82 | #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ | 112 | #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ |
83 | #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */ | 113 | #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */ |
84 | #define TIF_MEMDIE 18 | 114 | #define TIF_MEMDIE 18 |
85 | #define TIF_USERSPACE 31 /* true if FS sets userspace */ | ||
86 | 115 | ||
87 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 116 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
88 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | 117 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
89 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) | 118 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) |
90 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 119 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
120 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | ||
91 | #define _TIF_USEDFPU (1<<TIF_USEDFPU) | 121 | #define _TIF_USEDFPU (1<<TIF_USEDFPU) |
92 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 122 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
93 | #define _TIF_USERSPACE (1<<TIF_USERSPACE) | ||
94 | 123 | ||
95 | #define _TIF_WORK_MASK 0x000000FE /* work to do on interrupt/exception return */ | 124 | #define _TIF_WORK_MASK 0x000000FE /* work to do on interrupt/exception return */ |
96 | #define _TIF_ALLWORK_MASK 0x000000FF /* work to do on any return to u-space */ | 125 | #define _TIF_ALLWORK_MASK 0x000000FF /* work to do on any return to u-space */ |
diff --git a/include/asm-sh/timer.h b/include/asm-sh/timer.h index dd6579c0b04c..c7ab28095ba0 100644 --- a/include/asm-sh/timer.h +++ b/include/asm-sh/timer.h | |||
@@ -6,6 +6,8 @@ | |||
6 | 6 | ||
7 | struct sys_timer_ops { | 7 | struct sys_timer_ops { |
8 | int (*init)(void); | 8 | int (*init)(void); |
9 | int (*start)(void); | ||
10 | int (*stop)(void); | ||
9 | unsigned long (*get_offset)(void); | 11 | unsigned long (*get_offset)(void); |
10 | unsigned long (*get_frequency)(void); | 12 | unsigned long (*get_frequency)(void); |
11 | }; | 13 | }; |
diff --git a/include/asm-sh/titan.h b/include/asm-sh/titan.h new file mode 100644 index 000000000000..270a4f4bc8a9 --- /dev/null +++ b/include/asm-sh/titan.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Platform defintions for Titan | ||
3 | */ | ||
4 | |||
5 | #ifndef _ASM_SH_TITAN_TITAN_H | ||
6 | #define _ASM_SH_TITAN_TITAN_H | ||
7 | |||
8 | #define __IO_PREFIX titan | ||
9 | #include <asm/io_generic.h> | ||
10 | |||
11 | /* IRQ assignments */ | ||
12 | #define TITAN_IRQ_WAN 2 /* eth0 (WAN) */ | ||
13 | #define TITAN_IRQ_LAN 5 /* eth1 (LAN) */ | ||
14 | #define TITAN_IRQ_MPCIA 8 /* mPCI A */ | ||
15 | #define TITAN_IRQ_MPCIB 11 /* mPCI B */ | ||
16 | #define TITAN_IRQ_USB 11 /* USB */ | ||
17 | |||
18 | /* | ||
19 | * The external interrupt lines, these take up ints 0 - 15 inclusive | ||
20 | * depending on the priority for the interrupt. In fact the priority | ||
21 | * is the interrupt :-) | ||
22 | */ | ||
23 | #define IRL0_IRQ 0 | ||
24 | #define IRL0_IPR_ADDR INTC_IPRD | ||
25 | #define IRL0_IPR_POS 3 | ||
26 | #define IRL0_PRIORITY 8 | ||
27 | |||
28 | #define IRL1_IRQ 1 | ||
29 | #define IRL1_IPR_ADDR INTC_IPRD | ||
30 | #define IRL1_IPR_POS 2 | ||
31 | #define IRL1_PRIORITY 8 | ||
32 | |||
33 | #define IRL2_IRQ 2 | ||
34 | #define IRL2_IPR_ADDR INTC_IPRD | ||
35 | #define IRL2_IPR_POS 1 | ||
36 | #define IRL2_PRIORITY 8 | ||
37 | |||
38 | #define IRL3_IRQ 3 | ||
39 | #define IRL3_IPR_ADDR INTC_IPRD | ||
40 | #define IRL3_IPR_POS 0 | ||
41 | #define IRL3_PRIORITY 8 | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-sh/uaccess.h b/include/asm-sh/uaccess.h index 2cb01861e7c5..5c49ed6715f2 100644 --- a/include/asm-sh/uaccess.h +++ b/include/asm-sh/uaccess.h | |||
@@ -16,21 +16,9 @@ | |||
16 | #include <linux/errno.h> | 16 | #include <linux/errno.h> |
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | 18 | ||
19 | /* | ||
20 | * NOTE: Macro/functions in this file depends on threads_info.h implementation. | ||
21 | * Assumes: | ||
22 | * TI_FLAGS == 8 | ||
23 | * TIF_USERSPACE == 31 | ||
24 | * USER_ADDR_LIMIT == 0x80000000 | ||
25 | */ | ||
26 | |||
27 | #define VERIFY_READ 0 | 19 | #define VERIFY_READ 0 |
28 | #define VERIFY_WRITE 1 | 20 | #define VERIFY_WRITE 1 |
29 | 21 | ||
30 | typedef struct { | ||
31 | unsigned int is_user_space; | ||
32 | } mm_segment_t; | ||
33 | |||
34 | /* | 22 | /* |
35 | * The fs value determines whether argument validity checking should be | 23 | * The fs value determines whether argument validity checking should be |
36 | * performed or not. If get_fs() == USER_DS, checking is performed, with | 24 | * performed or not. If get_fs() == USER_DS, checking is performed, with |
@@ -40,16 +28,18 @@ typedef struct { | |||
40 | */ | 28 | */ |
41 | 29 | ||
42 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) | 30 | #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) |
43 | #define segment_eq(a,b) ((a).is_user_space == (b).is_user_space) | ||
44 | 31 | ||
45 | #define USER_ADDR_LIMIT 0x80000000 | 32 | #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFFUL) |
33 | #define USER_DS MAKE_MM_SEG(PAGE_OFFSET) | ||
46 | 34 | ||
47 | #define KERNEL_DS MAKE_MM_SEG(0) | 35 | #define segment_eq(a,b) ((a).seg == (b).seg) |
48 | #define USER_DS MAKE_MM_SEG(1) | ||
49 | 36 | ||
50 | #define get_ds() (KERNEL_DS) | 37 | #define get_ds() (KERNEL_DS) |
51 | 38 | ||
52 | #if !defined(CONFIG_MMU) | 39 | #if !defined(CONFIG_MMU) |
40 | /* NOMMU is always true */ | ||
41 | #define __addr_ok(addr) (1) | ||
42 | |||
53 | static inline mm_segment_t get_fs(void) | 43 | static inline mm_segment_t get_fs(void) |
54 | { | 44 | { |
55 | return USER_DS; | 45 | return USER_DS; |
@@ -76,31 +66,11 @@ static inline int __access_ok(unsigned long addr, unsigned long size) | |||
76 | return ((addr >= memory_start) && ((addr + size) < memory_end)); | 66 | return ((addr >= memory_start) && ((addr + size) < memory_end)); |
77 | } | 67 | } |
78 | #else /* CONFIG_MMU */ | 68 | #else /* CONFIG_MMU */ |
79 | static inline mm_segment_t get_fs(void) | 69 | #define __addr_ok(addr) \ |
80 | { | 70 | ((unsigned long)(addr) < (current_thread_info()->addr_limit.seg)) |
81 | return MAKE_MM_SEG(test_thread_flag(TIF_USERSPACE)); | ||
82 | } | ||
83 | 71 | ||
84 | static inline void set_fs(mm_segment_t s) | 72 | #define get_fs() (current_thread_info()->addr_limit) |
85 | { | 73 | #define set_fs(x) (current_thread_info()->addr_limit = (x)) |
86 | unsigned long ti, flag; | ||
87 | __asm__ __volatile__( | ||
88 | "stc r7_bank, %0\n\t" | ||
89 | "mov.l @(8,%0), %1\n\t" | ||
90 | "shal %1\n\t" | ||
91 | "cmp/pl %2\n\t" | ||
92 | "rotcr %1\n\t" | ||
93 | "mov.l %1, @(8,%0)" | ||
94 | : "=&r" (ti), "=&r" (flag) | ||
95 | : "r" (s.is_user_space) | ||
96 | : "t"); | ||
97 | /**** | ||
98 | if (s.is_user_space) | ||
99 | set_thread_flag(TIF_USERSPACE); | ||
100 | else | ||
101 | clear_thread_flag(TIF_USERSPACE); | ||
102 | ****/ | ||
103 | } | ||
104 | 74 | ||
105 | /* | 75 | /* |
106 | * __access_ok: Check if address with size is OK or not. | 76 | * __access_ok: Check if address with size is OK or not. |
@@ -108,7 +78,7 @@ static inline void set_fs(mm_segment_t s) | |||
108 | * We do three checks: | 78 | * We do three checks: |
109 | * (1) is it user space? | 79 | * (1) is it user space? |
110 | * (2) addr + size --> carry? | 80 | * (2) addr + size --> carry? |
111 | * (3) addr + size >= 0x80000000 (USER_ADDR_LIMIT) | 81 | * (3) addr + size >= 0x80000000 (PAGE_OFFSET) |
112 | * | 82 | * |
113 | * (1) (2) (3) | RESULT | 83 | * (1) (2) (3) | RESULT |
114 | * 0 0 0 | ok | 84 | * 0 0 0 | ok |
@@ -201,6 +171,7 @@ do { \ | |||
201 | __gu_err; \ | 171 | __gu_err; \ |
202 | }) | 172 | }) |
203 | 173 | ||
174 | #ifdef CONFIG_MMU | ||
204 | #define __get_user_check(x,ptr,size) \ | 175 | #define __get_user_check(x,ptr,size) \ |
205 | ({ \ | 176 | ({ \ |
206 | long __gu_err, __gu_val; \ | 177 | long __gu_err, __gu_val; \ |
@@ -290,6 +261,18 @@ __asm__("stc r7_bank, %1\n\t" \ | |||
290 | : "r" (addr) \ | 261 | : "r" (addr) \ |
291 | : "t"); \ | 262 | : "t"); \ |
292 | }) | 263 | }) |
264 | #else /* CONFIG_MMU */ | ||
265 | #define __get_user_check(x,ptr,size) \ | ||
266 | ({ \ | ||
267 | long __gu_err, __gu_val; \ | ||
268 | if (__access_ok((unsigned long)(ptr), (size))) { \ | ||
269 | __get_user_size(__gu_val, (ptr), (size), __gu_err); \ | ||
270 | (x) = (__typeof__(*(ptr)))__gu_val; \ | ||
271 | } else \ | ||
272 | __gu_err = -EFAULT; \ | ||
273 | __gu_err; \ | ||
274 | }) | ||
275 | #endif | ||
293 | 276 | ||
294 | #define __get_user_asm(x, addr, err, insn) \ | 277 | #define __get_user_asm(x, addr, err, insn) \ |
295 | ({ \ | 278 | ({ \ |
@@ -541,7 +524,7 @@ static __inline__ long __strnlen_user(const char __user *__s, long __n) | |||
541 | "3:\n\t" | 524 | "3:\n\t" |
542 | "mov.l 4f, %1\n\t" | 525 | "mov.l 4f, %1\n\t" |
543 | "jmp @%1\n\t" | 526 | "jmp @%1\n\t" |
544 | " mov %5, %0\n" | 527 | " mov #0, %0\n" |
545 | ".balign 4\n" | 528 | ".balign 4\n" |
546 | "4: .long 2b\n" | 529 | "4: .long 2b\n" |
547 | ".previous\n" | 530 | ".previous\n" |
@@ -550,26 +533,20 @@ static __inline__ long __strnlen_user(const char __user *__s, long __n) | |||
550 | " .long 1b,3b\n" | 533 | " .long 1b,3b\n" |
551 | ".previous" | 534 | ".previous" |
552 | : "=z" (res), "=&r" (__dummy) | 535 | : "=z" (res), "=&r" (__dummy) |
553 | : "0" (0), "r" (__s), "r" (__n), "i" (-EFAULT) | 536 | : "0" (0), "r" (__s), "r" (__n) |
554 | : "t"); | 537 | : "t"); |
555 | return res; | 538 | return res; |
556 | } | 539 | } |
557 | 540 | ||
558 | static __inline__ long strnlen_user(const char __user *s, long n) | 541 | static __inline__ long strnlen_user(const char __user *s, long n) |
559 | { | 542 | { |
560 | if (!access_ok(VERIFY_READ, s, n)) | 543 | if (!__addr_ok(s)) |
561 | return 0; | 544 | return 0; |
562 | else | 545 | else |
563 | return __strnlen_user(s, n); | 546 | return __strnlen_user(s, n); |
564 | } | 547 | } |
565 | 548 | ||
566 | static __inline__ long strlen_user(const char __user *s) | 549 | #define strlen_user(str) strnlen_user(str, ~0UL >> 1) |
567 | { | ||
568 | if (!access_ok(VERIFY_READ, s, 0)) | ||
569 | return 0; | ||
570 | else | ||
571 | return __strnlen_user(s, ~0UL >> 1); | ||
572 | } | ||
573 | 550 | ||
574 | /* | 551 | /* |
575 | * The exception table consists of pairs of addresses: the first is the | 552 | * The exception table consists of pairs of addresses: the first is the |
diff --git a/include/asm-sh/unistd.h b/include/asm-sh/unistd.h index 76b5430cb458..5d5e9f94def5 100644 --- a/include/asm-sh/unistd.h +++ b/include/asm-sh/unistd.h | |||
@@ -292,25 +292,51 @@ | |||
292 | #define __NR_mq_getsetattr (__NR_mq_open+5) | 292 | #define __NR_mq_getsetattr (__NR_mq_open+5) |
293 | #define __NR_kexec_load 283 | 293 | #define __NR_kexec_load 283 |
294 | #define __NR_waitid 284 | 294 | #define __NR_waitid 284 |
295 | #define __NR_add_key 285 | 295 | /* #define __NR_sys_setaltroot 285 */ |
296 | #define __NR_request_key 286 | 296 | #define __NR_add_key 286 |
297 | #define __NR_keyctl 287 | 297 | #define __NR_request_key 287 |
298 | #define __NR_ioprio_set 288 | 298 | #define __NR_keyctl 288 |
299 | #define __NR_ioprio_get 289 | 299 | #define __NR_ioprio_set 289 |
300 | #define __NR_inotify_init 290 | 300 | #define __NR_ioprio_get 290 |
301 | #define __NR_inotify_add_watch 291 | 301 | #define __NR_inotify_init 291 |
302 | #define __NR_inotify_rm_watch 292 | 302 | #define __NR_inotify_add_watch 292 |
303 | #define __NR_inotify_rm_watch 293 | ||
304 | #define __NR_migrate_pages 294 | ||
305 | #define __NR_openat 295 | ||
306 | #define __NR_mkdirat 296 | ||
307 | #define __NR_mknodat 297 | ||
308 | #define __NR_fchownat 298 | ||
309 | #define __NR_futimesat 299 | ||
310 | #define __NR_newfstatat 300 | ||
311 | #define __NR_unlinkat 301 | ||
312 | #define __NR_renameat 302 | ||
313 | #define __NR_linkat 303 | ||
314 | #define __NR_symlinkat 304 | ||
315 | #define __NR_readlinkat 305 | ||
316 | #define __NR_fchmodat 306 | ||
317 | #define __NR_faccessat 307 | ||
318 | #define __NR_pselect6 308 | ||
319 | #define __NR_ppoll 309 | ||
320 | #define __NR_unshare 310 | ||
321 | #define __NR_set_robust_list 311 | ||
322 | #define __NR_get_robust_list 312 | ||
323 | #define __NR_splice 313 | ||
324 | #define __NR_sync_file_range 314 | ||
325 | #define __NR_tee 315 | ||
326 | #define __NR_vmsplice 316 | ||
303 | 327 | ||
304 | 328 | #define NR_syscalls 317 | |
305 | #define NR_syscalls 293 | ||
306 | 329 | ||
307 | #ifdef __KERNEL__ | 330 | #ifdef __KERNEL__ |
308 | 331 | ||
309 | /* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */ | 332 | #include <linux/err.h> |
333 | |||
334 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: | ||
335 | * see <asm-sh/errno.h> */ | ||
310 | 336 | ||
311 | #define __syscall_return(type, res) \ | 337 | #define __syscall_return(type, res) \ |
312 | do { \ | 338 | do { \ |
313 | if ((unsigned long)(res) >= (unsigned long)(-124)) { \ | 339 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
314 | /* Avoid using "res" which is declared to be in register r0; \ | 340 | /* Avoid using "res" which is declared to be in register r0; \ |
315 | errno might expand to a function call and clobber it. */ \ | 341 | errno might expand to a function call and clobber it. */ \ |
316 | int __err = -(res); \ | 342 | int __err = -(res); \ |
@@ -444,6 +470,7 @@ __syscall_return(type,__sc0); \ | |||
444 | #define __ARCH_WANT_SYS_SIGPENDING | 470 | #define __ARCH_WANT_SYS_SIGPENDING |
445 | #define __ARCH_WANT_SYS_SIGPROCMASK | 471 | #define __ARCH_WANT_SYS_SIGPROCMASK |
446 | #define __ARCH_WANT_SYS_RT_SIGACTION | 472 | #define __ARCH_WANT_SYS_RT_SIGACTION |
473 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
447 | 474 | ||
448 | #ifdef __KERNEL_SYSCALLS__ | 475 | #ifdef __KERNEL_SYSCALLS__ |
449 | 476 | ||
diff --git a/include/asm-sh/rts7751r2d/voyagergx_reg.h b/include/asm-sh/voyagergx.h index f031b5d6cf54..99b0807d1c9f 100644 --- a/include/asm-sh/rts7751r2d/voyagergx_reg.h +++ b/include/asm-sh/voyagergx.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* -------------------------------------------------------------------- */ | 1 | /* -------------------------------------------------------------------- */ |
2 | /* voyagergx_reg.h */ | 2 | /* voyagergx.h */ |
3 | /* -------------------------------------------------------------------- */ | 3 | /* -------------------------------------------------------------------- */ |
4 | /* This program is free software; you can redistribute it and/or modify | 4 | /* This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
diff --git a/include/asm-sh/watchdog.h b/include/asm-sh/watchdog.h index 09ca41972a11..d19ea62ef8c6 100644 --- a/include/asm-sh/watchdog.h +++ b/include/asm-sh/watchdog.h | |||
@@ -62,7 +62,6 @@ | |||
62 | 62 | ||
63 | /** | 63 | /** |
64 | * sh_wdt_read_cnt - Read from Counter | 64 | * sh_wdt_read_cnt - Read from Counter |
65 | * | ||
66 | * Reads back the WTCNT value. | 65 | * Reads back the WTCNT value. |
67 | */ | 66 | */ |
68 | static inline __u8 sh_wdt_read_cnt(void) | 67 | static inline __u8 sh_wdt_read_cnt(void) |
@@ -72,7 +71,6 @@ static inline __u8 sh_wdt_read_cnt(void) | |||
72 | 71 | ||
73 | /** | 72 | /** |
74 | * sh_wdt_write_cnt - Write to Counter | 73 | * sh_wdt_write_cnt - Write to Counter |
75 | * | ||
76 | * @val: Value to write | 74 | * @val: Value to write |
77 | * | 75 | * |
78 | * Writes the given value @val to the lower byte of the timer counter. | 76 | * Writes the given value @val to the lower byte of the timer counter. |
@@ -95,7 +93,6 @@ static inline __u8 sh_wdt_read_csr(void) | |||
95 | 93 | ||
96 | /** | 94 | /** |
97 | * sh_wdt_write_csr - Write to Control/Status Register | 95 | * sh_wdt_write_csr - Write to Control/Status Register |
98 | * | ||
99 | * @val: Value to write | 96 | * @val: Value to write |
100 | * | 97 | * |
101 | * Writes the given value @val to the lower byte of the control/status | 98 | * Writes the given value @val to the lower byte of the control/status |
diff --git a/include/asm-sh64/unistd.h b/include/asm-sh64/unistd.h index 9a1590fffc15..c113566bef33 100644 --- a/include/asm-sh64/unistd.h +++ b/include/asm-sh64/unistd.h | |||
@@ -347,8 +347,10 @@ | |||
347 | #ifdef __KERNEL__ | 347 | #ifdef __KERNEL__ |
348 | 348 | ||
349 | #define NR_syscalls 321 | 349 | #define NR_syscalls 321 |
350 | #include <linux/err.h> | ||
350 | 351 | ||
351 | /* user-visible error numbers are in the range -1 - -125: see <asm-sh64/errno.h> */ | 352 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: |
353 | * see <asm-sh64/errno.h> */ | ||
352 | 354 | ||
353 | #define __syscall_return(type, res) \ | 355 | #define __syscall_return(type, res) \ |
354 | do { \ | 356 | do { \ |
@@ -358,7 +360,7 @@ do { \ | |||
358 | ** life easier in the system call epilogue (see entry.S) \ | 360 | ** life easier in the system call epilogue (see entry.S) \ |
359 | */ \ | 361 | */ \ |
360 | register unsigned long __sr2 __asm__ ("r2") = res; \ | 362 | register unsigned long __sr2 __asm__ ("r2") = res; \ |
361 | if ((unsigned long)(res) >= (unsigned long)(-125)) { \ | 363 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
362 | errno = -(res); \ | 364 | errno = -(res); \ |
363 | __sr2 = -1; \ | 365 | __sr2 = -1; \ |
364 | } \ | 366 | } \ |
diff --git a/include/asm-um/alternative-asm.i b/include/asm-um/alternative-asm.i new file mode 100644 index 000000000000..cae9faca132f --- /dev/null +++ b/include/asm-um/alternative-asm.i | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __UM_ALTERNATIVE_ASM_I | ||
2 | #define __UM_ALTERNATIVE_ASM_I | ||
3 | |||
4 | #include "asm/arch/alternative-asm.i" | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-um/frame.i b/include/asm-um/frame.i new file mode 100644 index 000000000000..09d5dca5d928 --- /dev/null +++ b/include/asm-um/frame.i | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __UM_FRAME_I | ||
2 | #define __UM_FRAME_I | ||
3 | |||
4 | #include "asm/arch/frame.i" | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-um/processor-generic.h b/include/asm-um/processor-generic.h index afa4fe1ca9f1..d99bbddffdb9 100644 --- a/include/asm-um/processor-generic.h +++ b/include/asm-um/processor-generic.h | |||
@@ -13,6 +13,7 @@ struct task_struct; | |||
13 | #include "asm/ptrace.h" | 13 | #include "asm/ptrace.h" |
14 | #include "choose-mode.h" | 14 | #include "choose-mode.h" |
15 | #include "registers.h" | 15 | #include "registers.h" |
16 | #include "sysdep/archsetjmp.h" | ||
16 | 17 | ||
17 | struct mm_struct; | 18 | struct mm_struct; |
18 | 19 | ||
@@ -43,8 +44,7 @@ struct thread_struct { | |||
43 | #endif | 44 | #endif |
44 | #ifdef CONFIG_MODE_SKAS | 45 | #ifdef CONFIG_MODE_SKAS |
45 | struct { | 46 | struct { |
46 | void *switch_buf; | 47 | jmp_buf switch_buf; |
47 | void *fork_buf; | ||
48 | int mm_count; | 48 | int mm_count; |
49 | } skas; | 49 | } skas; |
50 | #endif | 50 | #endif |
@@ -138,7 +138,7 @@ extern struct cpuinfo_um cpu_data[]; | |||
138 | 138 | ||
139 | #ifdef CONFIG_MODE_SKAS | 139 | #ifdef CONFIG_MODE_SKAS |
140 | #define KSTK_REG(tsk, reg) \ | 140 | #define KSTK_REG(tsk, reg) \ |
141 | get_thread_reg(reg, tsk->thread.mode.skas.switch_buf) | 141 | get_thread_reg(reg, &tsk->thread.mode.skas.switch_buf) |
142 | #else | 142 | #else |
143 | #define KSTK_REG(tsk, reg) (0xbadbabe) | 143 | #define KSTK_REG(tsk, reg) (0xbadbabe) |
144 | #endif | 144 | #endif |
diff --git a/include/asm-um/ptrace-x86_64.h b/include/asm-um/ptrace-x86_64.h index 2074483e6ca4..03b4af4ac09a 100644 --- a/include/asm-um/ptrace-x86_64.h +++ b/include/asm-um/ptrace-x86_64.h | |||
@@ -16,12 +16,15 @@ | |||
16 | 16 | ||
17 | #define HOST_AUDIT_ARCH AUDIT_ARCH_X86_64 | 17 | #define HOST_AUDIT_ARCH AUDIT_ARCH_X86_64 |
18 | 18 | ||
19 | /* Also defined in sysdep/ptrace.h, so may already be defined. */ | ||
20 | #ifndef FS_BASE | ||
19 | #define FS_BASE (21 * sizeof(unsigned long)) | 21 | #define FS_BASE (21 * sizeof(unsigned long)) |
20 | #define GS_BASE (22 * sizeof(unsigned long)) | 22 | #define GS_BASE (22 * sizeof(unsigned long)) |
21 | #define DS (23 * sizeof(unsigned long)) | 23 | #define DS (23 * sizeof(unsigned long)) |
22 | #define ES (24 * sizeof(unsigned long)) | 24 | #define ES (24 * sizeof(unsigned long)) |
23 | #define FS (25 * sizeof(unsigned long)) | 25 | #define FS (25 * sizeof(unsigned long)) |
24 | #define GS (26 * sizeof(unsigned long)) | 26 | #define GS (26 * sizeof(unsigned long)) |
27 | #endif | ||
25 | 28 | ||
26 | #define PT_REGS_RBX(r) UPT_RBX(&(r)->regs) | 29 | #define PT_REGS_RBX(r) UPT_RBX(&(r)->regs) |
27 | #define PT_REGS_RCX(r) UPT_RCX(&(r)->regs) | 30 | #define PT_REGS_RCX(r) UPT_RCX(&(r)->regs) |
diff --git a/include/asm-v850/unistd.h b/include/asm-v850/unistd.h index bcb44bfe577a..552b7c873a57 100644 --- a/include/asm-v850/unistd.h +++ b/include/asm-v850/unistd.h | |||
@@ -238,12 +238,13 @@ | |||
238 | #ifdef __KERNEL__ | 238 | #ifdef __KERNEL__ |
239 | 239 | ||
240 | #include <asm/clinkage.h> | 240 | #include <asm/clinkage.h> |
241 | #include <linux/err.h> | ||
241 | 242 | ||
242 | #define __syscall_return(type, res) \ | 243 | #define __syscall_return(type, res) \ |
243 | do { \ | 244 | do { \ |
244 | /* user-visible error numbers are in the range -1 - -124: \ | 245 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO: \ |
245 | see <asm-v850/errno.h> */ \ | 246 | see <asm-v850/errno.h> */ \ |
246 | if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-125), 0)) { \ | 247 | if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO), 0)) { \ |
247 | errno = -(res); \ | 248 | errno = -(res); \ |
248 | res = -1; \ | 249 | res = -1; \ |
249 | } \ | 250 | } \ |
diff --git a/include/asm-x86_64/acpi.h b/include/asm-x86_64/acpi.h index 2c95a319c056..ed59aa4c6ff9 100644 --- a/include/asm-x86_64/acpi.h +++ b/include/asm-x86_64/acpi.h | |||
@@ -155,8 +155,6 @@ extern void acpi_reserve_bootmem(void); | |||
155 | 155 | ||
156 | #endif /*CONFIG_ACPI_SLEEP*/ | 156 | #endif /*CONFIG_ACPI_SLEEP*/ |
157 | 157 | ||
158 | #define boot_cpu_physical_apicid boot_cpu_id | ||
159 | |||
160 | extern int acpi_disabled; | 158 | extern int acpi_disabled; |
161 | extern int acpi_pci_disabled; | 159 | extern int acpi_pci_disabled; |
162 | 160 | ||
diff --git a/include/asm-x86_64/alternative-asm.i b/include/asm-x86_64/alternative-asm.i new file mode 100644 index 000000000000..e4041f4fa4dc --- /dev/null +++ b/include/asm-x86_64/alternative-asm.i | |||
@@ -0,0 +1,14 @@ | |||
1 | #include <linux/config.h> | ||
2 | |||
3 | #ifdef CONFIG_SMP | ||
4 | .macro LOCK_PREFIX | ||
5 | 1: lock | ||
6 | .section .smp_locks,"a" | ||
7 | .align 8 | ||
8 | .quad 1b | ||
9 | .previous | ||
10 | .endm | ||
11 | #else | ||
12 | .macro LOCK_PREFIX | ||
13 | .endm | ||
14 | #endif | ||
diff --git a/include/asm-x86_64/apic.h b/include/asm-x86_64/apic.h index 9c96a0a8d1bd..9e66d32330c9 100644 --- a/include/asm-x86_64/apic.h +++ b/include/asm-x86_64/apic.h | |||
@@ -17,6 +17,8 @@ | |||
17 | 17 | ||
18 | extern int apic_verbosity; | 18 | extern int apic_verbosity; |
19 | extern int apic_runs_main_timer; | 19 | extern int apic_runs_main_timer; |
20 | extern int ioapic_force; | ||
21 | extern int apic_mapped; | ||
20 | 22 | ||
21 | /* | 23 | /* |
22 | * Define the default level of output to be very little | 24 | * Define the default level of output to be very little |
@@ -29,8 +31,6 @@ extern int apic_runs_main_timer; | |||
29 | printk(s, ##a); \ | 31 | printk(s, ##a); \ |
30 | } while (0) | 32 | } while (0) |
31 | 33 | ||
32 | #ifdef CONFIG_X86_LOCAL_APIC | ||
33 | |||
34 | struct pt_regs; | 34 | struct pt_regs; |
35 | 35 | ||
36 | /* | 36 | /* |
@@ -95,17 +95,12 @@ extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector, | |||
95 | #define K8_APIC_EXT_INT_MSG_EXT 0x7 | 95 | #define K8_APIC_EXT_INT_MSG_EXT 0x7 |
96 | #define K8_APIC_EXT_LVT_ENTRY_THRESHOLD 0 | 96 | #define K8_APIC_EXT_LVT_ENTRY_THRESHOLD 0 |
97 | 97 | ||
98 | extern int disable_timer_pin_1; | ||
99 | |||
100 | |||
101 | void smp_send_timer_broadcast_ipi(void); | 98 | void smp_send_timer_broadcast_ipi(void); |
102 | void switch_APIC_timer_to_ipi(void *cpumask); | 99 | void switch_APIC_timer_to_ipi(void *cpumask); |
103 | void switch_ipi_to_APIC_timer(void *cpumask); | 100 | void switch_ipi_to_APIC_timer(void *cpumask); |
104 | 101 | ||
105 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 102 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
106 | 103 | ||
107 | #endif /* CONFIG_X86_LOCAL_APIC */ | ||
108 | |||
109 | extern unsigned boot_cpu_id; | 104 | extern unsigned boot_cpu_id; |
110 | 105 | ||
111 | #endif /* __ASM_APIC_H */ | 106 | #endif /* __ASM_APIC_H */ |
diff --git a/include/asm-x86_64/bitops.h b/include/asm-x86_64/bitops.h index f7ba57b1cc08..5b535eaf5309 100644 --- a/include/asm-x86_64/bitops.h +++ b/include/asm-x86_64/bitops.h | |||
@@ -399,6 +399,8 @@ static __inline__ int fls(int x) | |||
399 | return r+1; | 399 | return r+1; |
400 | } | 400 | } |
401 | 401 | ||
402 | #define ARCH_HAS_FAST_MULTIPLIER 1 | ||
403 | |||
402 | #include <asm-generic/bitops/hweight.h> | 404 | #include <asm-generic/bitops/hweight.h> |
403 | 405 | ||
404 | #endif /* __KERNEL__ */ | 406 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-x86_64/calgary.h b/include/asm-x86_64/calgary.h index 4e3919524240..6b93f5a3a5c8 100644 --- a/include/asm-x86_64/calgary.h +++ b/include/asm-x86_64/calgary.h | |||
@@ -24,7 +24,6 @@ | |||
24 | #ifndef _ASM_X86_64_CALGARY_H | 24 | #ifndef _ASM_X86_64_CALGARY_H |
25 | #define _ASM_X86_64_CALGARY_H | 25 | #define _ASM_X86_64_CALGARY_H |
26 | 26 | ||
27 | #include <linux/config.h> | ||
28 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
29 | #include <linux/device.h> | 28 | #include <linux/device.h> |
30 | #include <linux/dma-mapping.h> | 29 | #include <linux/dma-mapping.h> |
@@ -34,12 +33,12 @@ struct iommu_table { | |||
34 | unsigned long it_base; /* mapped address of tce table */ | 33 | unsigned long it_base; /* mapped address of tce table */ |
35 | unsigned long it_hint; /* Hint for next alloc */ | 34 | unsigned long it_hint; /* Hint for next alloc */ |
36 | unsigned long *it_map; /* A simple allocation bitmap for now */ | 35 | unsigned long *it_map; /* A simple allocation bitmap for now */ |
36 | void __iomem *bbar; /* Bridge BAR */ | ||
37 | u64 tar_val; /* Table Address Register */ | ||
38 | struct timer_list watchdog_timer; | ||
37 | spinlock_t it_lock; /* Protects it_map */ | 39 | spinlock_t it_lock; /* Protects it_map */ |
38 | unsigned int it_size; /* Size of iommu table in entries */ | 40 | unsigned int it_size; /* Size of iommu table in entries */ |
39 | unsigned char it_busno; /* Bus number this table belongs to */ | 41 | unsigned char it_busno; /* Bus number this table belongs to */ |
40 | void __iomem *bbar; | ||
41 | u64 tar_val; | ||
42 | struct timer_list watchdog_timer; | ||
43 | }; | 42 | }; |
44 | 43 | ||
45 | #define TCE_TABLE_SIZE_UNSPECIFIED ~0 | 44 | #define TCE_TABLE_SIZE_UNSPECIFIED ~0 |
diff --git a/include/asm-x86_64/dwarf2.h b/include/asm-x86_64/dwarf2.h index 0744db777676..eedc08526b0b 100644 --- a/include/asm-x86_64/dwarf2.h +++ b/include/asm-x86_64/dwarf2.h | |||
@@ -13,7 +13,7 @@ | |||
13 | away for older version. | 13 | away for older version. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #ifdef CONFIG_UNWIND_INFO | 16 | #ifdef CONFIG_AS_CFI |
17 | 17 | ||
18 | #define CFI_STARTPROC .cfi_startproc | 18 | #define CFI_STARTPROC .cfi_startproc |
19 | #define CFI_ENDPROC .cfi_endproc | 19 | #define CFI_ENDPROC .cfi_endproc |
@@ -28,6 +28,11 @@ | |||
28 | #define CFI_REMEMBER_STATE .cfi_remember_state | 28 | #define CFI_REMEMBER_STATE .cfi_remember_state |
29 | #define CFI_RESTORE_STATE .cfi_restore_state | 29 | #define CFI_RESTORE_STATE .cfi_restore_state |
30 | #define CFI_UNDEFINED .cfi_undefined | 30 | #define CFI_UNDEFINED .cfi_undefined |
31 | #ifdef CONFIG_AS_CFI_SIGNAL_FRAME | ||
32 | #define CFI_SIGNAL_FRAME .cfi_signal_frame | ||
33 | #else | ||
34 | #define CFI_SIGNAL_FRAME | ||
35 | #endif | ||
31 | 36 | ||
32 | #else | 37 | #else |
33 | 38 | ||
@@ -45,6 +50,7 @@ | |||
45 | #define CFI_REMEMBER_STATE # | 50 | #define CFI_REMEMBER_STATE # |
46 | #define CFI_RESTORE_STATE # | 51 | #define CFI_RESTORE_STATE # |
47 | #define CFI_UNDEFINED # | 52 | #define CFI_UNDEFINED # |
53 | #define CFI_SIGNAL_FRAME # | ||
48 | 54 | ||
49 | #endif | 55 | #endif |
50 | 56 | ||
diff --git a/include/asm-x86_64/e820.h b/include/asm-x86_64/e820.h index f65674832318..fa2086774105 100644 --- a/include/asm-x86_64/e820.h +++ b/include/asm-x86_64/e820.h | |||
@@ -19,13 +19,9 @@ | |||
19 | 19 | ||
20 | #define E820_RAM 1 | 20 | #define E820_RAM 1 |
21 | #define E820_RESERVED 2 | 21 | #define E820_RESERVED 2 |
22 | #define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */ | 22 | #define E820_ACPI 3 |
23 | #define E820_NVS 4 | 23 | #define E820_NVS 4 |
24 | 24 | ||
25 | #define HIGH_MEMORY (1024*1024) | ||
26 | |||
27 | #define LOWMEMSIZE() (0x9f000) | ||
28 | |||
29 | #ifndef __ASSEMBLY__ | 25 | #ifndef __ASSEMBLY__ |
30 | struct e820entry { | 26 | struct e820entry { |
31 | u64 addr; /* start of memory segment */ | 27 | u64 addr; /* start of memory segment */ |
@@ -51,13 +47,11 @@ extern void e820_print_map(char *who); | |||
51 | extern int e820_any_mapped(unsigned long start, unsigned long end, unsigned type); | 47 | extern int e820_any_mapped(unsigned long start, unsigned long end, unsigned type); |
52 | extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); | 48 | extern int e820_all_mapped(unsigned long start, unsigned long end, unsigned type); |
53 | 49 | ||
54 | extern void e820_bootmem_free(pg_data_t *pgdat, unsigned long start,unsigned long end); | ||
55 | extern void e820_setup_gap(void); | 50 | extern void e820_setup_gap(void); |
56 | extern unsigned long e820_hole_size(unsigned long start_pfn, | 51 | extern void e820_register_active_regions(int nid, |
57 | unsigned long end_pfn); | 52 | unsigned long start_pfn, unsigned long end_pfn); |
58 | 53 | ||
59 | extern void __init parse_memopt(char *p, char **end); | 54 | extern void finish_e820_parsing(void); |
60 | extern void __init parse_memmapopt(char *p, char **end); | ||
61 | 55 | ||
62 | extern struct e820map e820; | 56 | extern struct e820map e820; |
63 | 57 | ||
diff --git a/include/asm-x86_64/fixmap.h b/include/asm-x86_64/fixmap.h index 0b4ffbd1a125..1b620db5b9e3 100644 --- a/include/asm-x86_64/fixmap.h +++ b/include/asm-x86_64/fixmap.h | |||
@@ -37,13 +37,9 @@ enum fixed_addresses { | |||
37 | VSYSCALL_FIRST_PAGE = VSYSCALL_LAST_PAGE + ((VSYSCALL_END-VSYSCALL_START) >> PAGE_SHIFT) - 1, | 37 | VSYSCALL_FIRST_PAGE = VSYSCALL_LAST_PAGE + ((VSYSCALL_END-VSYSCALL_START) >> PAGE_SHIFT) - 1, |
38 | VSYSCALL_HPET, | 38 | VSYSCALL_HPET, |
39 | FIX_HPET_BASE, | 39 | FIX_HPET_BASE, |
40 | #ifdef CONFIG_X86_LOCAL_APIC | ||
41 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ | 40 | FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ |
42 | #endif | ||
43 | #ifdef CONFIG_X86_IO_APIC | ||
44 | FIX_IO_APIC_BASE_0, | 41 | FIX_IO_APIC_BASE_0, |
45 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1, | 42 | FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1, |
46 | #endif | ||
47 | __end_of_fixed_addresses | 43 | __end_of_fixed_addresses |
48 | }; | 44 | }; |
49 | 45 | ||
diff --git a/include/asm-x86_64/genapic.h b/include/asm-x86_64/genapic.h index 50b38e7c58e4..81e714665344 100644 --- a/include/asm-x86_64/genapic.h +++ b/include/asm-x86_64/genapic.h | |||
@@ -16,7 +16,6 @@ struct genapic { | |||
16 | char *name; | 16 | char *name; |
17 | u32 int_delivery_mode; | 17 | u32 int_delivery_mode; |
18 | u32 int_dest_mode; | 18 | u32 int_dest_mode; |
19 | u32 int_delivery_dest; /* for quick IPIs */ | ||
20 | int (*apic_id_registered)(void); | 19 | int (*apic_id_registered)(void); |
21 | cpumask_t (*target_cpus)(void); | 20 | cpumask_t (*target_cpus)(void); |
22 | void (*init_apic_ldr)(void); | 21 | void (*init_apic_ldr)(void); |
diff --git a/include/asm-x86_64/i387.h b/include/asm-x86_64/i387.h index cba8a3b0cded..0217b74cc9fc 100644 --- a/include/asm-x86_64/i387.h +++ b/include/asm-x86_64/i387.h | |||
@@ -24,6 +24,7 @@ extern unsigned int mxcsr_feature_mask; | |||
24 | extern void mxcsr_feature_mask_init(void); | 24 | extern void mxcsr_feature_mask_init(void); |
25 | extern void init_fpu(struct task_struct *child); | 25 | extern void init_fpu(struct task_struct *child); |
26 | extern int save_i387(struct _fpstate __user *buf); | 26 | extern int save_i387(struct _fpstate __user *buf); |
27 | extern asmlinkage void math_state_restore(void); | ||
27 | 28 | ||
28 | /* | 29 | /* |
29 | * FPU lazy state save handling... | 30 | * FPU lazy state save handling... |
@@ -31,7 +32,9 @@ extern int save_i387(struct _fpstate __user *buf); | |||
31 | 32 | ||
32 | #define unlazy_fpu(tsk) do { \ | 33 | #define unlazy_fpu(tsk) do { \ |
33 | if (task_thread_info(tsk)->status & TS_USEDFPU) \ | 34 | if (task_thread_info(tsk)->status & TS_USEDFPU) \ |
34 | save_init_fpu(tsk); \ | 35 | save_init_fpu(tsk); \ |
36 | else \ | ||
37 | tsk->fpu_counter = 0; \ | ||
35 | } while (0) | 38 | } while (0) |
36 | 39 | ||
37 | /* Ignore delayed exceptions from user space */ | 40 | /* Ignore delayed exceptions from user space */ |
@@ -134,8 +137,8 @@ static inline int save_i387_checking(struct i387_fxsave_struct __user *fx) | |||
134 | #else | 137 | #else |
135 | : [fx] "cdaSDb" (fx), "0" (0)); | 138 | : [fx] "cdaSDb" (fx), "0" (0)); |
136 | #endif | 139 | #endif |
137 | if (unlikely(err)) | 140 | if (unlikely(err) && __clear_user(fx, sizeof(struct i387_fxsave_struct))) |
138 | __clear_user(fx, sizeof(struct i387_fxsave_struct)); | 141 | err = -EFAULT; |
139 | /* No need to clear here because the caller clears USED_MATH */ | 142 | /* No need to clear here because the caller clears USED_MATH */ |
140 | return err; | 143 | return err; |
141 | } | 144 | } |
diff --git a/include/asm-x86_64/intel_arch_perfmon.h b/include/asm-x86_64/intel_arch_perfmon.h index 59c396431569..8633331420ec 100644 --- a/include/asm-x86_64/intel_arch_perfmon.h +++ b/include/asm-x86_64/intel_arch_perfmon.h | |||
@@ -14,6 +14,18 @@ | |||
14 | 14 | ||
15 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) | 15 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL (0x3c) |
16 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) | 16 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x00 << 8) |
17 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT (1 << 0) | 17 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX (0) |
18 | #define ARCH_PERFMON_UNHALTED_CORE_CYCLES_PRESENT \ | ||
19 | (1 << (ARCH_PERFMON_UNHALTED_CORE_CYCLES_INDEX)) | ||
20 | |||
21 | union cpuid10_eax { | ||
22 | struct { | ||
23 | unsigned int version_id:8; | ||
24 | unsigned int num_counters:8; | ||
25 | unsigned int bit_width:8; | ||
26 | unsigned int mask_length:8; | ||
27 | } split; | ||
28 | unsigned int full; | ||
29 | }; | ||
18 | 30 | ||
19 | #endif /* X86_64_INTEL_ARCH_PERFMON_H */ | 31 | #endif /* X86_64_INTEL_ARCH_PERFMON_H */ |
diff --git a/include/asm-x86_64/io_apic.h b/include/asm-x86_64/io_apic.h index fb7a0909a174..5d1b5c68e36e 100644 --- a/include/asm-x86_64/io_apic.h +++ b/include/asm-x86_64/io_apic.h | |||
@@ -10,8 +10,6 @@ | |||
10 | * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar | 10 | * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifdef CONFIG_X86_IO_APIC | ||
14 | |||
15 | #ifdef CONFIG_PCI_MSI | 13 | #ifdef CONFIG_PCI_MSI |
16 | static inline int use_pci_vector(void) {return 1;} | 14 | static inline int use_pci_vector(void) {return 1;} |
17 | static inline void disable_edge_ioapic_vector(unsigned int vector) { } | 15 | static inline void disable_edge_ioapic_vector(unsigned int vector) { } |
@@ -209,10 +207,6 @@ extern int timer_uses_ioapic_pin_0; | |||
209 | 207 | ||
210 | extern int sis_apic_bug; /* dummy */ | 208 | extern int sis_apic_bug; /* dummy */ |
211 | 209 | ||
212 | #else /* !CONFIG_X86_IO_APIC */ | ||
213 | #define io_apic_assign_pci_irqs 0 | ||
214 | #endif | ||
215 | |||
216 | extern int assign_irq_vector(int irq); | 210 | extern int assign_irq_vector(int irq); |
217 | 211 | ||
218 | void enable_NMI_through_LVT0 (void * dummy); | 212 | void enable_NMI_through_LVT0 (void * dummy); |
diff --git a/include/asm-x86_64/irq.h b/include/asm-x86_64/irq.h index 9db5a1b4f7b1..43469d8ab71a 100644 --- a/include/asm-x86_64/irq.h +++ b/include/asm-x86_64/irq.h | |||
@@ -44,9 +44,7 @@ static __inline__ int irq_canonicalize(int irq) | |||
44 | return ((irq == 2) ? 9 : irq); | 44 | return ((irq == 2) ? 9 : irq); |
45 | } | 45 | } |
46 | 46 | ||
47 | #ifdef CONFIG_X86_LOCAL_APIC | ||
48 | #define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */ | 47 | #define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */ |
49 | #endif | ||
50 | 48 | ||
51 | #ifdef CONFIG_HOTPLUG_CPU | 49 | #ifdef CONFIG_HOTPLUG_CPU |
52 | #include <linux/cpumask.h> | 50 | #include <linux/cpumask.h> |
diff --git a/include/asm-x86_64/kexec.h b/include/asm-x86_64/kexec.h index c564bae03433..5fab957e1091 100644 --- a/include/asm-x86_64/kexec.h +++ b/include/asm-x86_64/kexec.h | |||
@@ -1,6 +1,27 @@ | |||
1 | #ifndef _X86_64_KEXEC_H | 1 | #ifndef _X86_64_KEXEC_H |
2 | #define _X86_64_KEXEC_H | 2 | #define _X86_64_KEXEC_H |
3 | 3 | ||
4 | #define PA_CONTROL_PAGE 0 | ||
5 | #define VA_CONTROL_PAGE 1 | ||
6 | #define PA_PGD 2 | ||
7 | #define VA_PGD 3 | ||
8 | #define PA_PUD_0 4 | ||
9 | #define VA_PUD_0 5 | ||
10 | #define PA_PMD_0 6 | ||
11 | #define VA_PMD_0 7 | ||
12 | #define PA_PTE_0 8 | ||
13 | #define VA_PTE_0 9 | ||
14 | #define PA_PUD_1 10 | ||
15 | #define VA_PUD_1 11 | ||
16 | #define PA_PMD_1 12 | ||
17 | #define VA_PMD_1 13 | ||
18 | #define PA_PTE_1 14 | ||
19 | #define VA_PTE_1 15 | ||
20 | #define PA_TABLE_PAGE 16 | ||
21 | #define PAGES_NR 17 | ||
22 | |||
23 | #ifndef __ASSEMBLY__ | ||
24 | |||
4 | #include <linux/string.h> | 25 | #include <linux/string.h> |
5 | 26 | ||
6 | #include <asm/page.h> | 27 | #include <asm/page.h> |
@@ -64,4 +85,12 @@ static inline void crash_setup_regs(struct pt_regs *newregs, | |||
64 | newregs->rip = (unsigned long)current_text_addr(); | 85 | newregs->rip = (unsigned long)current_text_addr(); |
65 | } | 86 | } |
66 | } | 87 | } |
88 | |||
89 | NORET_TYPE void | ||
90 | relocate_kernel(unsigned long indirection_page, | ||
91 | unsigned long page_list, | ||
92 | unsigned long start_address) ATTRIB_NORET; | ||
93 | |||
94 | #endif /* __ASSEMBLY__ */ | ||
95 | |||
67 | #endif /* _X86_64_KEXEC_H */ | 96 | #endif /* _X86_64_KEXEC_H */ |
diff --git a/include/asm-x86_64/linkage.h b/include/asm-x86_64/linkage.h index 291c2d01c44f..b5f39d0189ce 100644 --- a/include/asm-x86_64/linkage.h +++ b/include/asm-x86_64/linkage.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef __ASM_LINKAGE_H | 1 | #ifndef __ASM_LINKAGE_H |
2 | #define __ASM_LINKAGE_H | 2 | #define __ASM_LINKAGE_H |
3 | 3 | ||
4 | /* Nothing to see here... */ | 4 | #define __ALIGN .p2align 4,,15 |
5 | 5 | ||
6 | #endif | 6 | #endif |
diff --git a/include/asm-x86_64/mach_apic.h b/include/asm-x86_64/mach_apic.h index 0acea44c9377..d33422450c00 100644 --- a/include/asm-x86_64/mach_apic.h +++ b/include/asm-x86_64/mach_apic.h | |||
@@ -16,7 +16,6 @@ | |||
16 | 16 | ||
17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) | 17 | #define INT_DELIVERY_MODE (genapic->int_delivery_mode) |
18 | #define INT_DEST_MODE (genapic->int_dest_mode) | 18 | #define INT_DEST_MODE (genapic->int_dest_mode) |
19 | #define INT_DELIVERY_DEST (genapic->int_delivery_dest) | ||
20 | #define TARGET_CPUS (genapic->target_cpus()) | 19 | #define TARGET_CPUS (genapic->target_cpus()) |
21 | #define apic_id_registered (genapic->apic_id_registered) | 20 | #define apic_id_registered (genapic->apic_id_registered) |
22 | #define init_apic_ldr (genapic->init_apic_ldr) | 21 | #define init_apic_ldr (genapic->init_apic_ldr) |
diff --git a/include/asm-x86_64/mce.h b/include/asm-x86_64/mce.h index d13687dfd691..5a11146d6d9c 100644 --- a/include/asm-x86_64/mce.h +++ b/include/asm-x86_64/mce.h | |||
@@ -99,6 +99,8 @@ static inline void mce_amd_feature_init(struct cpuinfo_x86 *c) | |||
99 | } | 99 | } |
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | void mce_log_therm_throt_event(unsigned int cpu, __u64 status); | ||
103 | |||
102 | extern atomic_t mce_entry; | 104 | extern atomic_t mce_entry; |
103 | 105 | ||
104 | #endif | 106 | #endif |
diff --git a/include/asm-x86_64/mmx.h b/include/asm-x86_64/mmx.h deleted file mode 100644 index 46b71da99869..000000000000 --- a/include/asm-x86_64/mmx.h +++ /dev/null | |||
@@ -1,14 +0,0 @@ | |||
1 | #ifndef _ASM_MMX_H | ||
2 | #define _ASM_MMX_H | ||
3 | |||
4 | /* | ||
5 | * MMX 3Dnow! helper operations | ||
6 | */ | ||
7 | |||
8 | #include <linux/types.h> | ||
9 | |||
10 | extern void *_mmx_memcpy(void *to, const void *from, size_t size); | ||
11 | extern void mmx_clear_page(void *page); | ||
12 | extern void mmx_copy_page(void *to, void *from); | ||
13 | |||
14 | #endif | ||
diff --git a/include/asm-x86_64/mpspec.h b/include/asm-x86_64/mpspec.h index 14fc3ddd9031..017fddb61dc5 100644 --- a/include/asm-x86_64/mpspec.h +++ b/include/asm-x86_64/mpspec.h | |||
@@ -159,13 +159,7 @@ struct mpc_config_lintsrc | |||
159 | #define MAX_MP_BUSSES 256 | 159 | #define MAX_MP_BUSSES 256 |
160 | /* Each PCI slot may be a combo card with its own bus. 4 IRQ pins per slot. */ | 160 | /* Each PCI slot may be a combo card with its own bus. 4 IRQ pins per slot. */ |
161 | #define MAX_IRQ_SOURCES (MAX_MP_BUSSES * 4) | 161 | #define MAX_IRQ_SOURCES (MAX_MP_BUSSES * 4) |
162 | enum mp_bustype { | 162 | extern DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES); |
163 | MP_BUS_ISA = 1, | ||
164 | MP_BUS_EISA, | ||
165 | MP_BUS_PCI, | ||
166 | MP_BUS_MCA | ||
167 | }; | ||
168 | extern unsigned char mp_bus_id_to_type [MAX_MP_BUSSES]; | ||
169 | extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; | 163 | extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; |
170 | 164 | ||
171 | extern unsigned int boot_cpu_physical_apicid; | 165 | extern unsigned int boot_cpu_physical_apicid; |
@@ -178,18 +172,15 @@ extern int mp_irq_entries; | |||
178 | extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; | 172 | extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; |
179 | extern int mpc_default_type; | 173 | extern int mpc_default_type; |
180 | extern unsigned long mp_lapic_addr; | 174 | extern unsigned long mp_lapic_addr; |
181 | extern int pic_mode; | ||
182 | 175 | ||
183 | #ifdef CONFIG_ACPI | 176 | #ifdef CONFIG_ACPI |
184 | extern void mp_register_lapic (u8 id, u8 enabled); | 177 | extern void mp_register_lapic (u8 id, u8 enabled); |
185 | extern void mp_register_lapic_address (u64 address); | 178 | extern void mp_register_lapic_address (u64 address); |
186 | 179 | ||
187 | #ifdef CONFIG_X86_IO_APIC | ||
188 | extern void mp_register_ioapic (u8 id, u32 address, u32 gsi_base); | 180 | extern void mp_register_ioapic (u8 id, u32 address, u32 gsi_base); |
189 | extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 gsi); | 181 | extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 gsi); |
190 | extern void mp_config_acpi_legacy_irqs (void); | 182 | extern void mp_config_acpi_legacy_irqs (void); |
191 | extern int mp_register_gsi (u32 gsi, int triggering, int polarity); | 183 | extern int mp_register_gsi (u32 gsi, int triggering, int polarity); |
192 | #endif /*CONFIG_X86_IO_APIC*/ | ||
193 | #endif | 184 | #endif |
194 | 185 | ||
195 | extern int using_apic_timer; | 186 | extern int using_apic_timer; |
diff --git a/include/asm-x86_64/msr.h b/include/asm-x86_64/msr.h index 10f8b51cec8b..37e194169fac 100644 --- a/include/asm-x86_64/msr.h +++ b/include/asm-x86_64/msr.h | |||
@@ -66,14 +66,25 @@ | |||
66 | #define rdtscl(low) \ | 66 | #define rdtscl(low) \ |
67 | __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx") | 67 | __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "edx") |
68 | 68 | ||
69 | #define rdtscp(low,high,aux) \ | ||
70 | asm volatile (".byte 0x0f,0x01,0xf9" : "=a" (low), "=d" (high), "=c" (aux)) | ||
71 | |||
69 | #define rdtscll(val) do { \ | 72 | #define rdtscll(val) do { \ |
70 | unsigned int __a,__d; \ | 73 | unsigned int __a,__d; \ |
71 | asm volatile("rdtsc" : "=a" (__a), "=d" (__d)); \ | 74 | asm volatile("rdtsc" : "=a" (__a), "=d" (__d)); \ |
72 | (val) = ((unsigned long)__a) | (((unsigned long)__d)<<32); \ | 75 | (val) = ((unsigned long)__a) | (((unsigned long)__d)<<32); \ |
73 | } while(0) | 76 | } while(0) |
74 | 77 | ||
78 | #define rdtscpll(val, aux) do { \ | ||
79 | unsigned long __a, __d; \ | ||
80 | asm volatile (".byte 0x0f,0x01,0xf9" : "=a" (__a), "=d" (__d), "=c" (aux)); \ | ||
81 | (val) = (__d << 32) | __a; \ | ||
82 | } while (0) | ||
83 | |||
75 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) | 84 | #define write_tsc(val1,val2) wrmsr(0x10, val1, val2) |
76 | 85 | ||
86 | #define write_rdtscp_aux(val) wrmsr(0xc0000103, val, 0) | ||
87 | |||
77 | #define rdpmc(counter,low,high) \ | 88 | #define rdpmc(counter,low,high) \ |
78 | __asm__ __volatile__("rdpmc" \ | 89 | __asm__ __volatile__("rdpmc" \ |
79 | : "=a" (low), "=d" (high) \ | 90 | : "=a" (low), "=d" (high) \ |
diff --git a/include/asm-x86_64/mutex.h b/include/asm-x86_64/mutex.h index 06fab6de2a88..16396b1de3e4 100644 --- a/include/asm-x86_64/mutex.h +++ b/include/asm-x86_64/mutex.h | |||
@@ -25,13 +25,9 @@ do { \ | |||
25 | \ | 25 | \ |
26 | __asm__ __volatile__( \ | 26 | __asm__ __volatile__( \ |
27 | LOCK_PREFIX " decl (%%rdi) \n" \ | 27 | LOCK_PREFIX " decl (%%rdi) \n" \ |
28 | " js 2f \n" \ | 28 | " jns 1f \n" \ |
29 | "1: \n" \ | 29 | " call "#fail_fn" \n" \ |
30 | \ | 30 | "1:" \ |
31 | LOCK_SECTION_START("") \ | ||
32 | "2: call "#fail_fn" \n" \ | ||
33 | " jmp 1b \n" \ | ||
34 | LOCK_SECTION_END \ | ||
35 | \ | 31 | \ |
36 | :"=D" (dummy) \ | 32 | :"=D" (dummy) \ |
37 | : "D" (v) \ | 33 | : "D" (v) \ |
@@ -75,13 +71,9 @@ do { \ | |||
75 | \ | 71 | \ |
76 | __asm__ __volatile__( \ | 72 | __asm__ __volatile__( \ |
77 | LOCK_PREFIX " incl (%%rdi) \n" \ | 73 | LOCK_PREFIX " incl (%%rdi) \n" \ |
78 | " jle 2f \n" \ | 74 | " jg 1f \n" \ |
79 | "1: \n" \ | 75 | " call "#fail_fn" \n" \ |
80 | \ | 76 | "1: " \ |
81 | LOCK_SECTION_START("") \ | ||
82 | "2: call "#fail_fn" \n" \ | ||
83 | " jmp 1b \n" \ | ||
84 | LOCK_SECTION_END \ | ||
85 | \ | 77 | \ |
86 | :"=D" (dummy) \ | 78 | :"=D" (dummy) \ |
87 | : "D" (v) \ | 79 | : "D" (v) \ |
diff --git a/include/asm-x86_64/nmi.h b/include/asm-x86_64/nmi.h index efb45c894d76..cbf2669bca71 100644 --- a/include/asm-x86_64/nmi.h +++ b/include/asm-x86_64/nmi.h | |||
@@ -7,24 +7,13 @@ | |||
7 | #include <linux/pm.h> | 7 | #include <linux/pm.h> |
8 | #include <asm/io.h> | 8 | #include <asm/io.h> |
9 | 9 | ||
10 | struct pt_regs; | ||
11 | |||
12 | typedef int (*nmi_callback_t)(struct pt_regs * regs, int cpu); | ||
13 | |||
14 | /** | ||
15 | * set_nmi_callback | ||
16 | * | ||
17 | * Set a handler for an NMI. Only one handler may be | ||
18 | * set. Return 1 if the NMI was handled. | ||
19 | */ | ||
20 | void set_nmi_callback(nmi_callback_t callback); | ||
21 | |||
22 | /** | 10 | /** |
23 | * unset_nmi_callback | 11 | * do_nmi_callback |
24 | * | 12 | * |
25 | * Remove the handler previously set. | 13 | * Check to see if a callback exists and execute it. Return 1 |
14 | * if the handler exists and was handled successfully. | ||
26 | */ | 15 | */ |
27 | void unset_nmi_callback(void); | 16 | int do_nmi_callback(struct pt_regs *regs, int cpu); |
28 | 17 | ||
29 | #ifdef CONFIG_PM | 18 | #ifdef CONFIG_PM |
30 | 19 | ||
@@ -48,25 +37,32 @@ static inline void unset_nmi_pm_callback(struct pm_dev * dev) | |||
48 | #endif /* CONFIG_PM */ | 37 | #endif /* CONFIG_PM */ |
49 | 38 | ||
50 | extern void default_do_nmi(struct pt_regs *); | 39 | extern void default_do_nmi(struct pt_regs *); |
51 | extern void die_nmi(char *str, struct pt_regs *regs); | 40 | extern void die_nmi(char *str, struct pt_regs *regs, int do_panic); |
52 | 41 | ||
53 | #define get_nmi_reason() inb(0x61) | 42 | #define get_nmi_reason() inb(0x61) |
54 | 43 | ||
55 | extern int panic_on_timeout; | 44 | extern int panic_on_timeout; |
56 | extern int unknown_nmi_panic; | 45 | extern int unknown_nmi_panic; |
46 | extern int nmi_watchdog_enabled; | ||
57 | 47 | ||
58 | extern int check_nmi_watchdog(void); | 48 | extern int check_nmi_watchdog(void); |
59 | 49 | extern int avail_to_resrv_perfctr_nmi_bit(unsigned int); | |
60 | extern void setup_apic_nmi_watchdog (void); | 50 | extern int avail_to_resrv_perfctr_nmi(unsigned int); |
61 | extern int reserve_lapic_nmi(void); | 51 | extern int reserve_perfctr_nmi(unsigned int); |
62 | extern void release_lapic_nmi(void); | 52 | extern void release_perfctr_nmi(unsigned int); |
53 | extern int reserve_evntsel_nmi(unsigned int); | ||
54 | extern void release_evntsel_nmi(unsigned int); | ||
55 | |||
56 | extern void setup_apic_nmi_watchdog (void *); | ||
57 | extern void stop_apic_nmi_watchdog (void *); | ||
63 | extern void disable_timer_nmi_watchdog(void); | 58 | extern void disable_timer_nmi_watchdog(void); |
64 | extern void enable_timer_nmi_watchdog(void); | 59 | extern void enable_timer_nmi_watchdog(void); |
65 | extern void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason); | 60 | extern int nmi_watchdog_tick (struct pt_regs * regs, unsigned reason); |
66 | 61 | ||
67 | extern void nmi_watchdog_default(void); | 62 | extern void nmi_watchdog_default(void); |
68 | extern int setup_nmi_watchdog(char *); | 63 | extern int setup_nmi_watchdog(char *); |
69 | 64 | ||
65 | extern atomic_t nmi_active; | ||
70 | extern unsigned int nmi_watchdog; | 66 | extern unsigned int nmi_watchdog; |
71 | #define NMI_DEFAULT -1 | 67 | #define NMI_DEFAULT -1 |
72 | #define NMI_NONE 0 | 68 | #define NMI_NONE 0 |
diff --git a/include/asm-x86_64/pci-direct.h b/include/asm-x86_64/pci-direct.h index 036b6ca5b53b..eba9cb471df3 100644 --- a/include/asm-x86_64/pci-direct.h +++ b/include/asm-x86_64/pci-direct.h | |||
@@ -2,47 +2,15 @@ | |||
2 | #define ASM_PCI_DIRECT_H 1 | 2 | #define ASM_PCI_DIRECT_H 1 |
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | #include <asm/io.h> | ||
6 | 5 | ||
7 | /* Direct PCI access. This is used for PCI accesses in early boot before | 6 | /* Direct PCI access. This is used for PCI accesses in early boot before |
8 | the PCI subsystem works. */ | 7 | the PCI subsystem works. */ |
9 | 8 | ||
10 | #define PDprintk(x...) | 9 | extern u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset); |
10 | extern u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset); | ||
11 | extern u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset); | ||
12 | extern void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset, u32 val); | ||
11 | 13 | ||
12 | static inline u32 read_pci_config(u8 bus, u8 slot, u8 func, u8 offset) | 14 | extern int early_pci_allowed(void); |
13 | { | ||
14 | u32 v; | ||
15 | outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8); | ||
16 | v = inl(0xcfc); | ||
17 | if (v != 0xffffffff) | ||
18 | PDprintk("%x reading 4 from %x: %x\n", slot, offset, v); | ||
19 | return v; | ||
20 | } | ||
21 | |||
22 | static inline u8 read_pci_config_byte(u8 bus, u8 slot, u8 func, u8 offset) | ||
23 | { | ||
24 | u8 v; | ||
25 | outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8); | ||
26 | v = inb(0xcfc + (offset&3)); | ||
27 | PDprintk("%x reading 1 from %x: %x\n", slot, offset, v); | ||
28 | return v; | ||
29 | } | ||
30 | |||
31 | static inline u16 read_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset) | ||
32 | { | ||
33 | u16 v; | ||
34 | outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8); | ||
35 | v = inw(0xcfc + (offset&2)); | ||
36 | PDprintk("%x reading 2 from %x: %x\n", slot, offset, v); | ||
37 | return v; | ||
38 | } | ||
39 | |||
40 | static inline void write_pci_config(u8 bus, u8 slot, u8 func, u8 offset, | ||
41 | u32 val) | ||
42 | { | ||
43 | PDprintk("%x writing to %x: %x\n", slot, offset, val); | ||
44 | outl(0x80000000 | (bus<<16) | (slot<<11) | (func<<8) | offset, 0xcf8); | ||
45 | outl(val, 0xcfc); | ||
46 | } | ||
47 | 15 | ||
48 | #endif | 16 | #endif |
diff --git a/include/asm-x86_64/pda.h b/include/asm-x86_64/pda.h index b47c3df9ed1d..14996d962bac 100644 --- a/include/asm-x86_64/pda.h +++ b/include/asm-x86_64/pda.h | |||
@@ -9,20 +9,24 @@ | |||
9 | 9 | ||
10 | /* Per processor datastructure. %gs points to it while the kernel runs */ | 10 | /* Per processor datastructure. %gs points to it while the kernel runs */ |
11 | struct x8664_pda { | 11 | struct x8664_pda { |
12 | struct task_struct *pcurrent; /* Current process */ | 12 | struct task_struct *pcurrent; /* 0 Current process */ |
13 | unsigned long data_offset; /* Per cpu data offset from linker address */ | 13 | unsigned long data_offset; /* 8 Per cpu data offset from linker |
14 | unsigned long kernelstack; /* top of kernel stack for current */ | 14 | address */ |
15 | unsigned long oldrsp; /* user rsp for system call */ | 15 | unsigned long kernelstack; /* 16 top of kernel stack for current */ |
16 | #if DEBUG_STKSZ > EXCEPTION_STKSZ | 16 | unsigned long oldrsp; /* 24 user rsp for system call */ |
17 | unsigned long debugstack; /* #DB/#BP stack. */ | 17 | int irqcount; /* 32 Irq nesting counter. Starts with -1 */ |
18 | int cpunumber; /* 36 Logical CPU number */ | ||
19 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
20 | unsigned long stack_canary; /* 40 stack canary value */ | ||
21 | /* gcc-ABI: this canary MUST be at | ||
22 | offset 40!!! */ | ||
18 | #endif | 23 | #endif |
19 | int irqcount; /* Irq nesting counter. Starts with -1 */ | 24 | char *irqstackptr; |
20 | int cpunumber; /* Logical CPU number */ | ||
21 | char *irqstackptr; /* top of irqstack */ | ||
22 | int nodenumber; /* number of current node */ | 25 | int nodenumber; /* number of current node */ |
23 | unsigned int __softirq_pending; | 26 | unsigned int __softirq_pending; |
24 | unsigned int __nmi_count; /* number of NMI on this CPUs */ | 27 | unsigned int __nmi_count; /* number of NMI on this CPUs */ |
25 | int mmu_state; | 28 | short mmu_state; |
29 | short isidle; | ||
26 | struct mm_struct *active_mm; | 30 | struct mm_struct *active_mm; |
27 | unsigned apic_timer_irqs; | 31 | unsigned apic_timer_irqs; |
28 | } ____cacheline_aligned_in_smp; | 32 | } ____cacheline_aligned_in_smp; |
@@ -36,44 +40,69 @@ extern struct x8664_pda boot_cpu_pda[]; | |||
36 | * There is no fast way to get the base address of the PDA, all the accesses | 40 | * There is no fast way to get the base address of the PDA, all the accesses |
37 | * have to mention %fs/%gs. So it needs to be done this Torvaldian way. | 41 | * have to mention %fs/%gs. So it needs to be done this Torvaldian way. |
38 | */ | 42 | */ |
39 | #define sizeof_field(type,field) (sizeof(((type *)0)->field)) | 43 | extern void __bad_pda_field(void) __attribute__((noreturn)); |
40 | #define typeof_field(type,field) typeof(((type *)0)->field) | ||
41 | 44 | ||
42 | extern void __bad_pda_field(void); | 45 | /* |
46 | * proxy_pda doesn't actually exist, but tell gcc it is accessed for | ||
47 | * all PDA accesses so it gets read/write dependencies right. | ||
48 | */ | ||
49 | extern struct x8664_pda _proxy_pda; | ||
43 | 50 | ||
44 | #define pda_offset(field) offsetof(struct x8664_pda, field) | 51 | #define pda_offset(field) offsetof(struct x8664_pda, field) |
45 | 52 | ||
46 | #define pda_to_op(op,field,val) do { \ | 53 | #define pda_to_op(op,field,val) do { \ |
47 | typedef typeof_field(struct x8664_pda, field) T__; \ | 54 | typedef typeof(_proxy_pda.field) T__; \ |
48 | switch (sizeof_field(struct x8664_pda, field)) { \ | 55 | if (0) { T__ tmp__; tmp__ = (val); } /* type checking */ \ |
49 | case 2: \ | 56 | switch (sizeof(_proxy_pda.field)) { \ |
50 | asm volatile(op "w %0,%%gs:%P1"::"ri" ((T__)val),"i"(pda_offset(field)):"memory"); break; \ | 57 | case 2: \ |
51 | case 4: \ | 58 | asm(op "w %1,%%gs:%c2" : \ |
52 | asm volatile(op "l %0,%%gs:%P1"::"ri" ((T__)val),"i"(pda_offset(field)):"memory"); break; \ | 59 | "+m" (_proxy_pda.field) : \ |
53 | case 8: \ | 60 | "ri" ((T__)val), \ |
54 | asm volatile(op "q %0,%%gs:%P1"::"ri" ((T__)val),"i"(pda_offset(field)):"memory"); break; \ | 61 | "i"(pda_offset(field))); \ |
55 | default: __bad_pda_field(); \ | 62 | break; \ |
56 | } \ | 63 | case 4: \ |
64 | asm(op "l %1,%%gs:%c2" : \ | ||
65 | "+m" (_proxy_pda.field) : \ | ||
66 | "ri" ((T__)val), \ | ||
67 | "i" (pda_offset(field))); \ | ||
68 | break; \ | ||
69 | case 8: \ | ||
70 | asm(op "q %1,%%gs:%c2": \ | ||
71 | "+m" (_proxy_pda.field) : \ | ||
72 | "ri" ((T__)val), \ | ||
73 | "i"(pda_offset(field))); \ | ||
74 | break; \ | ||
75 | default: \ | ||
76 | __bad_pda_field(); \ | ||
77 | } \ | ||
57 | } while (0) | 78 | } while (0) |
58 | 79 | ||
59 | /* | 80 | #define pda_from_op(op,field) ({ \ |
60 | * AK: PDA read accesses should be neither volatile nor have an memory clobber. | 81 | typeof(_proxy_pda.field) ret__; \ |
61 | * Unfortunately removing them causes all hell to break lose currently. | 82 | switch (sizeof(_proxy_pda.field)) { \ |
62 | */ | 83 | case 2: \ |
63 | #define pda_from_op(op,field) ({ \ | 84 | asm(op "w %%gs:%c1,%0" : \ |
64 | typeof_field(struct x8664_pda, field) ret__; \ | 85 | "=r" (ret__) : \ |
65 | switch (sizeof_field(struct x8664_pda, field)) { \ | 86 | "i" (pda_offset(field)), \ |
66 | case 2: \ | 87 | "m" (_proxy_pda.field)); \ |
67 | asm volatile(op "w %%gs:%P1,%0":"=r" (ret__):"i"(pda_offset(field)):"memory"); break;\ | 88 | break; \ |
68 | case 4: \ | 89 | case 4: \ |
69 | asm volatile(op "l %%gs:%P1,%0":"=r" (ret__):"i"(pda_offset(field)):"memory"); break;\ | 90 | asm(op "l %%gs:%c1,%0": \ |
70 | case 8: \ | 91 | "=r" (ret__): \ |
71 | asm volatile(op "q %%gs:%P1,%0":"=r" (ret__):"i"(pda_offset(field)):"memory"); break;\ | 92 | "i" (pda_offset(field)), \ |
72 | default: __bad_pda_field(); \ | 93 | "m" (_proxy_pda.field)); \ |
73 | } \ | 94 | break; \ |
95 | case 8: \ | ||
96 | asm(op "q %%gs:%c1,%0": \ | ||
97 | "=r" (ret__) : \ | ||
98 | "i" (pda_offset(field)), \ | ||
99 | "m" (_proxy_pda.field)); \ | ||
100 | break; \ | ||
101 | default: \ | ||
102 | __bad_pda_field(); \ | ||
103 | } \ | ||
74 | ret__; }) | 104 | ret__; }) |
75 | 105 | ||
76 | |||
77 | #define read_pda(field) pda_from_op("mov",field) | 106 | #define read_pda(field) pda_from_op("mov",field) |
78 | #define write_pda(field,val) pda_to_op("mov",field,val) | 107 | #define write_pda(field,val) pda_to_op("mov",field,val) |
79 | #define add_pda(field,val) pda_to_op("add",field,val) | 108 | #define add_pda(field,val) pda_to_op("add",field,val) |
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h index bffb2f886a51..285756010c51 100644 --- a/include/asm-x86_64/percpu.h +++ b/include/asm-x86_64/percpu.h | |||
@@ -11,6 +11,16 @@ | |||
11 | 11 | ||
12 | #include <asm/pda.h> | 12 | #include <asm/pda.h> |
13 | 13 | ||
14 | #ifdef CONFIG_MODULES | ||
15 | # define PERCPU_MODULE_RESERVE 8192 | ||
16 | #else | ||
17 | # define PERCPU_MODULE_RESERVE 0 | ||
18 | #endif | ||
19 | |||
20 | #define PERCPU_ENOUGH_ROOM \ | ||
21 | (ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \ | ||
22 | PERCPU_MODULE_RESERVE) | ||
23 | |||
14 | #define __per_cpu_offset(cpu) (cpu_pda(cpu)->data_offset) | 24 | #define __per_cpu_offset(cpu) (cpu_pda(cpu)->data_offset) |
15 | #define __my_cpu_offset() read_pda(data_offset) | 25 | #define __my_cpu_offset() read_pda(data_offset) |
16 | 26 | ||
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h index 51eba2395171..6899e770b173 100644 --- a/include/asm-x86_64/pgtable.h +++ b/include/asm-x86_64/pgtable.h | |||
@@ -21,12 +21,9 @@ extern unsigned long __supported_pte_mask; | |||
21 | 21 | ||
22 | #define swapper_pg_dir init_level4_pgt | 22 | #define swapper_pg_dir init_level4_pgt |
23 | 23 | ||
24 | extern int nonx_setup(char *str); | ||
25 | extern void paging_init(void); | 24 | extern void paging_init(void); |
26 | extern void clear_kernel_mapping(unsigned long addr, unsigned long size); | 25 | extern void clear_kernel_mapping(unsigned long addr, unsigned long size); |
27 | 26 | ||
28 | extern unsigned long pgkern_mask; | ||
29 | |||
30 | /* | 27 | /* |
31 | * ZERO_PAGE is a global shared page that is always zero: used | 28 | * ZERO_PAGE is a global shared page that is always zero: used |
32 | * for zero-mapped memory areas etc.. | 29 | * for zero-mapped memory areas etc.. |
@@ -265,7 +262,7 @@ static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) | |||
265 | #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT) | 262 | #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT) |
266 | static inline int pte_user(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | 263 | static inline int pte_user(pte_t pte) { return pte_val(pte) & _PAGE_USER; } |
267 | static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | 264 | static inline int pte_read(pte_t pte) { return pte_val(pte) & _PAGE_USER; } |
268 | static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_USER; } | 265 | static inline int pte_exec(pte_t pte) { return !(pte_val(pte) & _PAGE_NX); } |
269 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 266 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
270 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 267 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
271 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | 268 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } |
@@ -278,11 +275,12 @@ static inline pte_t pte_mkclean(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & | |||
278 | static inline pte_t pte_mkold(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED)); return pte; } | 275 | static inline pte_t pte_mkold(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED)); return pte; } |
279 | static inline pte_t pte_wrprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW)); return pte; } | 276 | static inline pte_t pte_wrprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW)); return pte; } |
280 | static inline pte_t pte_mkread(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); return pte; } | 277 | static inline pte_t pte_mkread(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); return pte; } |
281 | static inline pte_t pte_mkexec(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER)); return pte; } | 278 | static inline pte_t pte_mkexec(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_NX)); return pte; } |
282 | static inline pte_t pte_mkdirty(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; } | 279 | static inline pte_t pte_mkdirty(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; } |
283 | static inline pte_t pte_mkyoung(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; } | 280 | static inline pte_t pte_mkyoung(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; } |
284 | static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW)); return pte; } | 281 | static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW)); return pte; } |
285 | static inline pte_t pte_mkhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_PSE)); return pte; } | 282 | static inline pte_t pte_mkhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_PSE)); return pte; } |
283 | static inline pte_t pte_clrhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_PSE)); return pte; } | ||
286 | 284 | ||
287 | struct vm_area_struct; | 285 | struct vm_area_struct; |
288 | 286 | ||
diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h index 038fe1f47e6f..c28fc2db2171 100644 --- a/include/asm-x86_64/proto.h +++ b/include/asm-x86_64/proto.h | |||
@@ -24,8 +24,6 @@ extern void mtrr_bp_init(void); | |||
24 | #define mtrr_bp_init() do {} while (0) | 24 | #define mtrr_bp_init() do {} while (0) |
25 | #endif | 25 | #endif |
26 | extern void init_memory_mapping(unsigned long start, unsigned long end); | 26 | extern void init_memory_mapping(unsigned long start, unsigned long end); |
27 | extern void size_zones(unsigned long *z, unsigned long *h, | ||
28 | unsigned long start_pfn, unsigned long end_pfn); | ||
29 | 27 | ||
30 | extern void system_call(void); | 28 | extern void system_call(void); |
31 | extern int kernel_syscall(void); | 29 | extern int kernel_syscall(void); |
@@ -51,10 +49,8 @@ extern unsigned long long monotonic_base; | |||
51 | extern int sysctl_vsyscall; | 49 | extern int sysctl_vsyscall; |
52 | extern int nohpet; | 50 | extern int nohpet; |
53 | extern unsigned long vxtime_hz; | 51 | extern unsigned long vxtime_hz; |
52 | extern void time_init_gtod(void); | ||
54 | 53 | ||
55 | extern int numa_setup(char *opt); | ||
56 | |||
57 | extern int setup_early_printk(char *); | ||
58 | extern void early_printk(const char *fmt, ...) __attribute__((format(printf,1,2))); | 54 | extern void early_printk(const char *fmt, ...) __attribute__((format(printf,1,2))); |
59 | 55 | ||
60 | extern void early_identify_cpu(struct cpuinfo_x86 *c); | 56 | extern void early_identify_cpu(struct cpuinfo_x86 *c); |
@@ -91,7 +87,7 @@ extern void syscall32_cpu_init(void); | |||
91 | 87 | ||
92 | extern void setup_node_bootmem(int nodeid, unsigned long start, unsigned long end); | 88 | extern void setup_node_bootmem(int nodeid, unsigned long start, unsigned long end); |
93 | 89 | ||
94 | extern void check_ioapic(void); | 90 | extern void early_quirks(void); |
95 | extern void check_efer(void); | 91 | extern void check_efer(void); |
96 | 92 | ||
97 | extern int unhandled_signal(struct task_struct *tsk, int sig); | 93 | extern int unhandled_signal(struct task_struct *tsk, int sig); |
@@ -103,13 +99,7 @@ extern void select_idle_routine(const struct cpuinfo_x86 *c); | |||
103 | extern unsigned long table_start, table_end; | 99 | extern unsigned long table_start, table_end; |
104 | 100 | ||
105 | extern int exception_trace; | 101 | extern int exception_trace; |
106 | extern int using_apic_timer; | ||
107 | extern int disable_apic; | ||
108 | extern unsigned cpu_khz; | 102 | extern unsigned cpu_khz; |
109 | extern int ioapic_force; | ||
110 | extern int skip_ioapic_setup; | ||
111 | extern int acpi_ht; | ||
112 | extern int acpi_disabled; | ||
113 | 103 | ||
114 | extern void no_iommu_init(void); | 104 | extern void no_iommu_init(void); |
115 | extern int force_iommu, no_iommu; | 105 | extern int force_iommu, no_iommu; |
@@ -131,7 +121,8 @@ extern int fix_aperture; | |||
131 | 121 | ||
132 | extern int reboot_force; | 122 | extern int reboot_force; |
133 | extern int notsc_setup(char *); | 123 | extern int notsc_setup(char *); |
134 | extern int setup_additional_cpus(char *); | 124 | |
125 | extern int gsi_irq_sharing(int gsi); | ||
135 | 126 | ||
136 | extern void smp_local_timer_interrupt(struct pt_regs * regs); | 127 | extern void smp_local_timer_interrupt(struct pt_regs * regs); |
137 | 128 | ||
diff --git a/include/asm-x86_64/rwlock.h b/include/asm-x86_64/rwlock.h index dea0e9459264..72aeebed920b 100644 --- a/include/asm-x86_64/rwlock.h +++ b/include/asm-x86_64/rwlock.h | |||
@@ -18,69 +18,9 @@ | |||
18 | #ifndef _ASM_X86_64_RWLOCK_H | 18 | #ifndef _ASM_X86_64_RWLOCK_H |
19 | #define _ASM_X86_64_RWLOCK_H | 19 | #define _ASM_X86_64_RWLOCK_H |
20 | 20 | ||
21 | #include <linux/stringify.h> | ||
22 | |||
23 | #define RW_LOCK_BIAS 0x01000000 | 21 | #define RW_LOCK_BIAS 0x01000000 |
24 | #define RW_LOCK_BIAS_STR "0x01000000" | 22 | #define RW_LOCK_BIAS_STR "0x01000000" |
25 | |||
26 | #define __build_read_lock_ptr(rw, helper) \ | ||
27 | asm volatile(LOCK_PREFIX "subl $1,(%0)\n\t" \ | ||
28 | "js 2f\n" \ | ||
29 | "1:\n" \ | ||
30 | LOCK_SECTION_START("") \ | ||
31 | "2:\tcall " helper "\n\t" \ | ||
32 | "jmp 1b\n" \ | ||
33 | LOCK_SECTION_END \ | ||
34 | ::"a" (rw) : "memory") | ||
35 | |||
36 | #define __build_read_lock_const(rw, helper) \ | ||
37 | asm volatile(LOCK_PREFIX "subl $1,%0\n\t" \ | ||
38 | "js 2f\n" \ | ||
39 | "1:\n" \ | ||
40 | LOCK_SECTION_START("") \ | ||
41 | "2:\tpushq %%rax\n\t" \ | ||
42 | "leaq %0,%%rax\n\t" \ | ||
43 | "call " helper "\n\t" \ | ||
44 | "popq %%rax\n\t" \ | ||
45 | "jmp 1b\n" \ | ||
46 | LOCK_SECTION_END \ | ||
47 | :"=m" (*((volatile int *)rw))::"memory") | ||
48 | |||
49 | #define __build_read_lock(rw, helper) do { \ | ||
50 | if (__builtin_constant_p(rw)) \ | ||
51 | __build_read_lock_const(rw, helper); \ | ||
52 | else \ | ||
53 | __build_read_lock_ptr(rw, helper); \ | ||
54 | } while (0) | ||
55 | |||
56 | #define __build_write_lock_ptr(rw, helper) \ | ||
57 | asm volatile(LOCK_PREFIX "subl $" RW_LOCK_BIAS_STR ",(%0)\n\t" \ | ||
58 | "jnz 2f\n" \ | ||
59 | "1:\n" \ | ||
60 | LOCK_SECTION_START("") \ | ||
61 | "2:\tcall " helper "\n\t" \ | ||
62 | "jmp 1b\n" \ | ||
63 | LOCK_SECTION_END \ | ||
64 | ::"a" (rw) : "memory") | ||
65 | |||
66 | #define __build_write_lock_const(rw, helper) \ | ||
67 | asm volatile(LOCK_PREFIX "subl $" RW_LOCK_BIAS_STR ",%0\n\t" \ | ||
68 | "jnz 2f\n" \ | ||
69 | "1:\n" \ | ||
70 | LOCK_SECTION_START("") \ | ||
71 | "2:\tpushq %%rax\n\t" \ | ||
72 | "leaq %0,%%rax\n\t" \ | ||
73 | "call " helper "\n\t" \ | ||
74 | "popq %%rax\n\t" \ | ||
75 | "jmp 1b\n" \ | ||
76 | LOCK_SECTION_END \ | ||
77 | :"=m" (*((volatile long *)rw))::"memory") | ||
78 | 23 | ||
79 | #define __build_write_lock(rw, helper) do { \ | 24 | /* Actual code is in asm/spinlock.h or in arch/x86_64/lib/rwlock.S */ |
80 | if (__builtin_constant_p(rw)) \ | ||
81 | __build_write_lock_const(rw, helper); \ | ||
82 | else \ | ||
83 | __build_write_lock_ptr(rw, helper); \ | ||
84 | } while (0) | ||
85 | 25 | ||
86 | #endif | 26 | #endif |
diff --git a/include/asm-x86_64/segment.h b/include/asm-x86_64/segment.h index d4bed33fb32c..334ddcdd8f92 100644 --- a/include/asm-x86_64/segment.h +++ b/include/asm-x86_64/segment.h | |||
@@ -20,15 +20,16 @@ | |||
20 | #define __USER_CS 0x33 /* 6*8+3 */ | 20 | #define __USER_CS 0x33 /* 6*8+3 */ |
21 | #define __USER32_DS __USER_DS | 21 | #define __USER32_DS __USER_DS |
22 | 22 | ||
23 | #define GDT_ENTRY_TLS 1 | ||
24 | #define GDT_ENTRY_TSS 8 /* needs two entries */ | 23 | #define GDT_ENTRY_TSS 8 /* needs two entries */ |
25 | #define GDT_ENTRY_LDT 10 /* needs two entries */ | 24 | #define GDT_ENTRY_LDT 10 /* needs two entries */ |
26 | #define GDT_ENTRY_TLS_MIN 12 | 25 | #define GDT_ENTRY_TLS_MIN 12 |
27 | #define GDT_ENTRY_TLS_MAX 14 | 26 | #define GDT_ENTRY_TLS_MAX 14 |
28 | /* 15 free */ | ||
29 | 27 | ||
30 | #define GDT_ENTRY_TLS_ENTRIES 3 | 28 | #define GDT_ENTRY_TLS_ENTRIES 3 |
31 | 29 | ||
30 | #define GDT_ENTRY_PER_CPU 15 /* Abused to load per CPU data from limit */ | ||
31 | #define __PER_CPU_SEG (GDT_ENTRY_PER_CPU * 8 + 3) | ||
32 | |||
32 | /* TLS indexes for 64bit - hardcoded in arch_prctl */ | 33 | /* TLS indexes for 64bit - hardcoded in arch_prctl */ |
33 | #define FS_TLS 0 | 34 | #define FS_TLS 0 |
34 | #define GS_TLS 1 | 35 | #define GS_TLS 1 |
diff --git a/include/asm-x86_64/semaphore.h b/include/asm-x86_64/semaphore.h index 064df08b9a0f..107bd90429e8 100644 --- a/include/asm-x86_64/semaphore.h +++ b/include/asm-x86_64/semaphore.h | |||
@@ -107,12 +107,9 @@ static inline void down(struct semaphore * sem) | |||
107 | __asm__ __volatile__( | 107 | __asm__ __volatile__( |
108 | "# atomic down operation\n\t" | 108 | "# atomic down operation\n\t" |
109 | LOCK_PREFIX "decl %0\n\t" /* --sem->count */ | 109 | LOCK_PREFIX "decl %0\n\t" /* --sem->count */ |
110 | "js 2f\n" | 110 | "jns 1f\n\t" |
111 | "1:\n" | 111 | "call __down_failed\n" |
112 | LOCK_SECTION_START("") | 112 | "1:" |
113 | "2:\tcall __down_failed\n\t" | ||
114 | "jmp 1b\n" | ||
115 | LOCK_SECTION_END | ||
116 | :"=m" (sem->count) | 113 | :"=m" (sem->count) |
117 | :"D" (sem) | 114 | :"D" (sem) |
118 | :"memory"); | 115 | :"memory"); |
@@ -130,14 +127,11 @@ static inline int down_interruptible(struct semaphore * sem) | |||
130 | 127 | ||
131 | __asm__ __volatile__( | 128 | __asm__ __volatile__( |
132 | "# atomic interruptible down operation\n\t" | 129 | "# atomic interruptible down operation\n\t" |
130 | "xorl %0,%0\n\t" | ||
133 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ | 131 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
134 | "js 2f\n\t" | 132 | "jns 2f\n\t" |
135 | "xorl %0,%0\n" | 133 | "call __down_failed_interruptible\n" |
136 | "1:\n" | 134 | "2:\n" |
137 | LOCK_SECTION_START("") | ||
138 | "2:\tcall __down_failed_interruptible\n\t" | ||
139 | "jmp 1b\n" | ||
140 | LOCK_SECTION_END | ||
141 | :"=a" (result), "=m" (sem->count) | 135 | :"=a" (result), "=m" (sem->count) |
142 | :"D" (sem) | 136 | :"D" (sem) |
143 | :"memory"); | 137 | :"memory"); |
@@ -154,14 +148,11 @@ static inline int down_trylock(struct semaphore * sem) | |||
154 | 148 | ||
155 | __asm__ __volatile__( | 149 | __asm__ __volatile__( |
156 | "# atomic interruptible down operation\n\t" | 150 | "# atomic interruptible down operation\n\t" |
151 | "xorl %0,%0\n\t" | ||
157 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ | 152 | LOCK_PREFIX "decl %1\n\t" /* --sem->count */ |
158 | "js 2f\n\t" | 153 | "jns 2f\n\t" |
159 | "xorl %0,%0\n" | 154 | "call __down_failed_trylock\n\t" |
160 | "1:\n" | 155 | "2:\n" |
161 | LOCK_SECTION_START("") | ||
162 | "2:\tcall __down_failed_trylock\n\t" | ||
163 | "jmp 1b\n" | ||
164 | LOCK_SECTION_END | ||
165 | :"=a" (result), "=m" (sem->count) | 156 | :"=a" (result), "=m" (sem->count) |
166 | :"D" (sem) | 157 | :"D" (sem) |
167 | :"memory","cc"); | 158 | :"memory","cc"); |
@@ -179,12 +170,9 @@ static inline void up(struct semaphore * sem) | |||
179 | __asm__ __volatile__( | 170 | __asm__ __volatile__( |
180 | "# atomic up operation\n\t" | 171 | "# atomic up operation\n\t" |
181 | LOCK_PREFIX "incl %0\n\t" /* ++sem->count */ | 172 | LOCK_PREFIX "incl %0\n\t" /* ++sem->count */ |
182 | "jle 2f\n" | 173 | "jg 1f\n\t" |
183 | "1:\n" | 174 | "call __up_wakeup\n" |
184 | LOCK_SECTION_START("") | 175 | "1:" |
185 | "2:\tcall __up_wakeup\n\t" | ||
186 | "jmp 1b\n" | ||
187 | LOCK_SECTION_END | ||
188 | :"=m" (sem->count) | 176 | :"=m" (sem->count) |
189 | :"D" (sem) | 177 | :"D" (sem) |
190 | :"memory"); | 178 | :"memory"); |
diff --git a/include/asm-x86_64/signal.h b/include/asm-x86_64/signal.h index 3ede2a61973a..4581f978b299 100644 --- a/include/asm-x86_64/signal.h +++ b/include/asm-x86_64/signal.h | |||
@@ -24,10 +24,6 @@ typedef struct { | |||
24 | } sigset_t; | 24 | } sigset_t; |
25 | 25 | ||
26 | 26 | ||
27 | struct pt_regs; | ||
28 | asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset); | ||
29 | |||
30 | |||
31 | #else | 27 | #else |
32 | /* Here we must cater to libcs that poke about in kernel headers. */ | 28 | /* Here we must cater to libcs that poke about in kernel headers. */ |
33 | 29 | ||
diff --git a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h index ce97f65e1d10..d6b7c057edba 100644 --- a/include/asm-x86_64/smp.h +++ b/include/asm-x86_64/smp.h | |||
@@ -4,27 +4,18 @@ | |||
4 | /* | 4 | /* |
5 | * We need the APIC definitions automatically as part of 'smp.h' | 5 | * We need the APIC definitions automatically as part of 'smp.h' |
6 | */ | 6 | */ |
7 | #ifndef __ASSEMBLY__ | ||
8 | #include <linux/threads.h> | 7 | #include <linux/threads.h> |
9 | #include <linux/cpumask.h> | 8 | #include <linux/cpumask.h> |
10 | #include <linux/bitops.h> | 9 | #include <linux/bitops.h> |
11 | extern int disable_apic; | 10 | extern int disable_apic; |
12 | #endif | ||
13 | 11 | ||
14 | #ifdef CONFIG_X86_LOCAL_APIC | ||
15 | #ifndef __ASSEMBLY__ | ||
16 | #include <asm/fixmap.h> | 12 | #include <asm/fixmap.h> |
17 | #include <asm/mpspec.h> | 13 | #include <asm/mpspec.h> |
18 | #ifdef CONFIG_X86_IO_APIC | ||
19 | #include <asm/io_apic.h> | 14 | #include <asm/io_apic.h> |
20 | #endif | ||
21 | #include <asm/apic.h> | 15 | #include <asm/apic.h> |
22 | #include <asm/thread_info.h> | 16 | #include <asm/thread_info.h> |
23 | #endif | ||
24 | #endif | ||
25 | 17 | ||
26 | #ifdef CONFIG_SMP | 18 | #ifdef CONFIG_SMP |
27 | #ifndef ASSEMBLY | ||
28 | 19 | ||
29 | #include <asm/pda.h> | 20 | #include <asm/pda.h> |
30 | 21 | ||
@@ -42,7 +33,6 @@ extern cpumask_t cpu_initialized; | |||
42 | 33 | ||
43 | extern void smp_alloc_memory(void); | 34 | extern void smp_alloc_memory(void); |
44 | extern volatile unsigned long smp_invalidate_needed; | 35 | extern volatile unsigned long smp_invalidate_needed; |
45 | extern int pic_mode; | ||
46 | extern void lock_ipi_call_lock(void); | 36 | extern void lock_ipi_call_lock(void); |
47 | extern void unlock_ipi_call_lock(void); | 37 | extern void unlock_ipi_call_lock(void); |
48 | extern int smp_num_siblings; | 38 | extern int smp_num_siblings; |
@@ -74,20 +64,16 @@ static inline int hard_smp_processor_id(void) | |||
74 | return GET_APIC_ID(*(unsigned int *)(APIC_BASE+APIC_ID)); | 64 | return GET_APIC_ID(*(unsigned int *)(APIC_BASE+APIC_ID)); |
75 | } | 65 | } |
76 | 66 | ||
77 | extern int safe_smp_processor_id(void); | ||
78 | extern int __cpu_disable(void); | 67 | extern int __cpu_disable(void); |
79 | extern void __cpu_die(unsigned int cpu); | 68 | extern void __cpu_die(unsigned int cpu); |
80 | extern void prefill_possible_map(void); | 69 | extern void prefill_possible_map(void); |
81 | extern unsigned num_processors; | 70 | extern unsigned num_processors; |
82 | extern unsigned disabled_cpus; | 71 | extern unsigned disabled_cpus; |
83 | 72 | ||
84 | #endif /* !ASSEMBLY */ | ||
85 | |||
86 | #define NO_PROC_ID 0xFF /* No processor magic marker */ | 73 | #define NO_PROC_ID 0xFF /* No processor magic marker */ |
87 | 74 | ||
88 | #endif | 75 | #endif |
89 | 76 | ||
90 | #ifndef ASSEMBLY | ||
91 | /* | 77 | /* |
92 | * Some lowlevel functions might want to know about | 78 | * Some lowlevel functions might want to know about |
93 | * the real APIC ID <-> CPU # mapping. | 79 | * the real APIC ID <-> CPU # mapping. |
@@ -109,11 +95,8 @@ static inline int cpu_present_to_apicid(int mps_cpu) | |||
109 | return BAD_APICID; | 95 | return BAD_APICID; |
110 | } | 96 | } |
111 | 97 | ||
112 | #endif /* !ASSEMBLY */ | ||
113 | |||
114 | #ifndef CONFIG_SMP | 98 | #ifndef CONFIG_SMP |
115 | #define stack_smp_processor_id() 0 | 99 | #define stack_smp_processor_id() 0 |
116 | #define safe_smp_processor_id() 0 | ||
117 | #define cpu_logical_map(x) (x) | 100 | #define cpu_logical_map(x) (x) |
118 | #else | 101 | #else |
119 | #include <asm/thread_info.h> | 102 | #include <asm/thread_info.h> |
@@ -125,19 +108,23 @@ static inline int cpu_present_to_apicid(int mps_cpu) | |||
125 | }) | 108 | }) |
126 | #endif | 109 | #endif |
127 | 110 | ||
128 | #ifndef __ASSEMBLY__ | ||
129 | static __inline int logical_smp_processor_id(void) | 111 | static __inline int logical_smp_processor_id(void) |
130 | { | 112 | { |
131 | /* we don't want to mark this access volatile - bad code generation */ | 113 | /* we don't want to mark this access volatile - bad code generation */ |
132 | return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); | 114 | return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); |
133 | } | 115 | } |
134 | #endif | ||
135 | 116 | ||
136 | #ifdef CONFIG_SMP | 117 | #ifdef CONFIG_SMP |
137 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] | 118 | #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] |
138 | #else | 119 | #else |
139 | #define cpu_physical_id(cpu) boot_cpu_id | 120 | #define cpu_physical_id(cpu) boot_cpu_id |
140 | #endif | 121 | static inline int smp_call_function_single(int cpuid, void (*func) (void *info), |
141 | 122 | void *info, int retry, int wait) | |
123 | { | ||
124 | /* Disable interrupts here? */ | ||
125 | func(info); | ||
126 | return 0; | ||
127 | } | ||
128 | #endif /* !CONFIG_SMP */ | ||
142 | #endif | 129 | #endif |
143 | 130 | ||
diff --git a/include/asm-x86_64/spinlock.h b/include/asm-x86_64/spinlock.h index 248a79f0eaff..3daf5b005905 100644 --- a/include/asm-x86_64/spinlock.h +++ b/include/asm-x86_64/spinlock.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
5 | #include <asm/rwlock.h> | 5 | #include <asm/rwlock.h> |
6 | #include <asm/page.h> | 6 | #include <asm/page.h> |
7 | #include <asm/processor.h> | ||
7 | 8 | ||
8 | /* | 9 | /* |
9 | * Your basic SMP spinlocks, allowing only a single CPU anywhere | 10 | * Your basic SMP spinlocks, allowing only a single CPU anywhere |
@@ -16,31 +17,23 @@ | |||
16 | * (the type definitions are in asm/spinlock_types.h) | 17 | * (the type definitions are in asm/spinlock_types.h) |
17 | */ | 18 | */ |
18 | 19 | ||
19 | #define __raw_spin_is_locked(x) \ | 20 | static inline int __raw_spin_is_locked(raw_spinlock_t *lock) |
20 | (*(volatile signed int *)(&(x)->slock) <= 0) | 21 | { |
21 | 22 | return *(volatile signed int *)(&(lock)->slock) <= 0; | |
22 | #define __raw_spin_lock_string \ | 23 | } |
23 | "\n1:\t" \ | ||
24 | LOCK_PREFIX " ; decl %0\n\t" \ | ||
25 | "js 2f\n" \ | ||
26 | LOCK_SECTION_START("") \ | ||
27 | "2:\t" \ | ||
28 | "rep;nop\n\t" \ | ||
29 | "cmpl $0,%0\n\t" \ | ||
30 | "jle 2b\n\t" \ | ||
31 | "jmp 1b\n" \ | ||
32 | LOCK_SECTION_END | ||
33 | |||
34 | #define __raw_spin_lock_string_up \ | ||
35 | "\n\tdecl %0" | ||
36 | |||
37 | #define __raw_spin_unlock_string \ | ||
38 | "movl $1,%0" \ | ||
39 | :"=m" (lock->slock) : : "memory" | ||
40 | 24 | ||
41 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | 25 | static inline void __raw_spin_lock(raw_spinlock_t *lock) |
42 | { | 26 | { |
43 | asm volatile(__raw_spin_lock_string : "=m" (lock->slock) : : "memory"); | 27 | asm volatile( |
28 | "\n1:\t" | ||
29 | LOCK_PREFIX " ; decl %0\n\t" | ||
30 | "jns 2f\n" | ||
31 | "3:\n" | ||
32 | "rep;nop\n\t" | ||
33 | "cmpl $0,%0\n\t" | ||
34 | "jle 3b\n\t" | ||
35 | "jmp 1b\n" | ||
36 | "2:\t" : "=m" (lock->slock) : : "memory"); | ||
44 | } | 37 | } |
45 | 38 | ||
46 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | 39 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) |
@@ -49,7 +42,7 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
49 | { | 42 | { |
50 | int oldval; | 43 | int oldval; |
51 | 44 | ||
52 | __asm__ __volatile__( | 45 | asm volatile( |
53 | "xchgl %0,%1" | 46 | "xchgl %0,%1" |
54 | :"=q" (oldval), "=m" (lock->slock) | 47 | :"=q" (oldval), "=m" (lock->slock) |
55 | :"0" (0) : "memory"); | 48 | :"0" (0) : "memory"); |
@@ -59,13 +52,14 @@ static inline int __raw_spin_trylock(raw_spinlock_t *lock) | |||
59 | 52 | ||
60 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | 53 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) |
61 | { | 54 | { |
62 | __asm__ __volatile__( | 55 | asm volatile("movl $1,%0" :"=m" (lock->slock) :: "memory"); |
63 | __raw_spin_unlock_string | ||
64 | ); | ||
65 | } | 56 | } |
66 | 57 | ||
67 | #define __raw_spin_unlock_wait(lock) \ | 58 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) |
68 | do { while (__raw_spin_is_locked(lock)) cpu_relax(); } while (0) | 59 | { |
60 | while (__raw_spin_is_locked(lock)) | ||
61 | cpu_relax(); | ||
62 | } | ||
69 | 63 | ||
70 | /* | 64 | /* |
71 | * Read-write spinlocks, allowing multiple readers | 65 | * Read-write spinlocks, allowing multiple readers |
@@ -79,26 +73,34 @@ static inline void __raw_spin_unlock(raw_spinlock_t *lock) | |||
79 | * | 73 | * |
80 | * On x86, we implement read-write locks as a 32-bit counter | 74 | * On x86, we implement read-write locks as a 32-bit counter |
81 | * with the high bit (sign) being the "contended" bit. | 75 | * with the high bit (sign) being the "contended" bit. |
82 | * | ||
83 | * The inline assembly is non-obvious. Think about it. | ||
84 | * | ||
85 | * Changed to use the same technique as rw semaphores. See | ||
86 | * semaphore.h for details. -ben | ||
87 | * | ||
88 | * the helpers are in arch/i386/kernel/semaphore.c | ||
89 | */ | 76 | */ |
90 | 77 | ||
91 | #define __raw_read_can_lock(x) ((int)(x)->lock > 0) | 78 | static inline int __raw_read_can_lock(raw_rwlock_t *lock) |
92 | #define __raw_write_can_lock(x) ((x)->lock == RW_LOCK_BIAS) | 79 | { |
80 | return (int)(lock)->lock > 0; | ||
81 | } | ||
82 | |||
83 | static inline int __raw_write_can_lock(raw_rwlock_t *lock) | ||
84 | { | ||
85 | return (lock)->lock == RW_LOCK_BIAS; | ||
86 | } | ||
93 | 87 | ||
94 | static inline void __raw_read_lock(raw_rwlock_t *rw) | 88 | static inline void __raw_read_lock(raw_rwlock_t *rw) |
95 | { | 89 | { |
96 | __build_read_lock(rw, "__read_lock_failed"); | 90 | asm volatile(LOCK_PREFIX "subl $1,(%0)\n\t" |
91 | "jns 1f\n" | ||
92 | "call __read_lock_failed\n" | ||
93 | "1:\n" | ||
94 | ::"D" (rw), "i" (RW_LOCK_BIAS) : "memory"); | ||
97 | } | 95 | } |
98 | 96 | ||
99 | static inline void __raw_write_lock(raw_rwlock_t *rw) | 97 | static inline void __raw_write_lock(raw_rwlock_t *rw) |
100 | { | 98 | { |
101 | __build_write_lock(rw, "__write_lock_failed"); | 99 | asm volatile(LOCK_PREFIX "subl %1,(%0)\n\t" |
100 | "jz 1f\n" | ||
101 | "\tcall __write_lock_failed\n\t" | ||
102 | "1:\n" | ||
103 | ::"D" (rw), "i" (RW_LOCK_BIAS) : "memory"); | ||
102 | } | 104 | } |
103 | 105 | ||
104 | static inline int __raw_read_trylock(raw_rwlock_t *lock) | 106 | static inline int __raw_read_trylock(raw_rwlock_t *lock) |
diff --git a/include/asm-x86_64/stacktrace.h b/include/asm-x86_64/stacktrace.h new file mode 100644 index 000000000000..5eb9799bef76 --- /dev/null +++ b/include/asm-x86_64/stacktrace.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _ASM_STACKTRACE_H | ||
2 | #define _ASM_STACKTRACE_H 1 | ||
3 | |||
4 | /* Generic stack tracer with callbacks */ | ||
5 | |||
6 | struct stacktrace_ops { | ||
7 | void (*warning)(void *data, char *msg); | ||
8 | /* msg must contain %s for the symbol */ | ||
9 | void (*warning_symbol)(void *data, char *msg, unsigned long symbol); | ||
10 | void (*address)(void *data, unsigned long address); | ||
11 | /* On negative return stop dumping */ | ||
12 | int (*stack)(void *data, char *name); | ||
13 | }; | ||
14 | |||
15 | void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long *stack, | ||
16 | struct stacktrace_ops *ops, void *data); | ||
17 | |||
18 | #endif | ||
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index 6bf170bceae1..bd376bc8c4ab 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
@@ -14,12 +14,13 @@ | |||
14 | #define __RESTORE(reg,offset) "movq (14-" #offset ")*8(%%rsp),%%" #reg "\n\t" | 14 | #define __RESTORE(reg,offset) "movq (14-" #offset ")*8(%%rsp),%%" #reg "\n\t" |
15 | 15 | ||
16 | /* frame pointer must be last for get_wchan */ | 16 | /* frame pointer must be last for get_wchan */ |
17 | #define SAVE_CONTEXT "pushq %%rbp ; movq %%rsi,%%rbp\n\t" | 17 | #define SAVE_CONTEXT "pushf ; pushq %%rbp ; movq %%rsi,%%rbp\n\t" |
18 | #define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp\n\t" | 18 | #define RESTORE_CONTEXT "movq %%rbp,%%rsi ; popq %%rbp ; popf\t" |
19 | 19 | ||
20 | #define __EXTRA_CLOBBER \ | 20 | #define __EXTRA_CLOBBER \ |
21 | ,"rcx","rbx","rdx","r8","r9","r10","r11","r12","r13","r14","r15" | 21 | ,"rcx","rbx","rdx","r8","r9","r10","r11","r12","r13","r14","r15" |
22 | 22 | ||
23 | /* Save restore flags to clear handle leaking NT */ | ||
23 | #define switch_to(prev,next,last) \ | 24 | #define switch_to(prev,next,last) \ |
24 | asm volatile(SAVE_CONTEXT \ | 25 | asm volatile(SAVE_CONTEXT \ |
25 | "movq %%rsp,%P[threadrsp](%[prev])\n\t" /* save RSP */ \ | 26 | "movq %%rsp,%P[threadrsp](%[prev])\n\t" /* save RSP */ \ |
diff --git a/include/asm-x86_64/tce.h b/include/asm-x86_64/tce.h index 53e9a68b3336..dbb047febc5e 100644 --- a/include/asm-x86_64/tce.h +++ b/include/asm-x86_64/tce.h | |||
@@ -24,7 +24,6 @@ | |||
24 | #ifndef _ASM_X86_64_TCE_H | 24 | #ifndef _ASM_X86_64_TCE_H |
25 | #define _ASM_X86_64_TCE_H | 25 | #define _ASM_X86_64_TCE_H |
26 | 26 | ||
27 | extern void* tce_table_kva[]; | ||
28 | extern unsigned int specified_table_size; | 27 | extern unsigned int specified_table_size; |
29 | struct iommu_table; | 28 | struct iommu_table; |
30 | 29 | ||
diff --git a/include/asm-x86_64/therm_throt.h b/include/asm-x86_64/therm_throt.h new file mode 100644 index 000000000000..5aac059007ba --- /dev/null +++ b/include/asm-x86_64/therm_throt.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-i386/therm_throt.h> | |||
diff --git a/include/asm-x86_64/thread_info.h b/include/asm-x86_64/thread_info.h index 2029b00351f3..787a08114b48 100644 --- a/include/asm-x86_64/thread_info.h +++ b/include/asm-x86_64/thread_info.h | |||
@@ -114,11 +114,14 @@ static inline struct thread_info *stack_thread_info(void) | |||
114 | #define TIF_IRET 5 /* force IRET */ | 114 | #define TIF_IRET 5 /* force IRET */ |
115 | #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ | 115 | #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */ |
116 | #define TIF_SECCOMP 8 /* secure computing */ | 116 | #define TIF_SECCOMP 8 /* secure computing */ |
117 | #define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal */ | ||
117 | /* 16 free */ | 118 | /* 16 free */ |
118 | #define TIF_IA32 17 /* 32bit process */ | 119 | #define TIF_IA32 17 /* 32bit process */ |
119 | #define TIF_FORK 18 /* ret_from_fork */ | 120 | #define TIF_FORK 18 /* ret_from_fork */ |
120 | #define TIF_ABI_PENDING 19 | 121 | #define TIF_ABI_PENDING 19 |
121 | #define TIF_MEMDIE 20 | 122 | #define TIF_MEMDIE 20 |
123 | #define TIF_DEBUG 21 /* uses debug registers */ | ||
124 | #define TIF_IO_BITMAP 22 /* uses I/O bitmap */ | ||
122 | 125 | ||
123 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 126 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
124 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | 127 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
@@ -128,9 +131,12 @@ static inline struct thread_info *stack_thread_info(void) | |||
128 | #define _TIF_IRET (1<<TIF_IRET) | 131 | #define _TIF_IRET (1<<TIF_IRET) |
129 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | 132 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) |
130 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) | 133 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) |
134 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | ||
131 | #define _TIF_IA32 (1<<TIF_IA32) | 135 | #define _TIF_IA32 (1<<TIF_IA32) |
132 | #define _TIF_FORK (1<<TIF_FORK) | 136 | #define _TIF_FORK (1<<TIF_FORK) |
133 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) | 137 | #define _TIF_ABI_PENDING (1<<TIF_ABI_PENDING) |
138 | #define _TIF_DEBUG (1<<TIF_DEBUG) | ||
139 | #define _TIF_IO_BITMAP (1<<TIF_IO_BITMAP) | ||
134 | 140 | ||
135 | /* work to do on interrupt/exception return */ | 141 | /* work to do on interrupt/exception return */ |
136 | #define _TIF_WORK_MASK \ | 142 | #define _TIF_WORK_MASK \ |
@@ -138,6 +144,9 @@ static inline struct thread_info *stack_thread_info(void) | |||
138 | /* work to do on any return to user space */ | 144 | /* work to do on any return to user space */ |
139 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) | 145 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) |
140 | 146 | ||
147 | /* flags to check in __switch_to() */ | ||
148 | #define _TIF_WORK_CTXSW (_TIF_DEBUG|_TIF_IO_BITMAP) | ||
149 | |||
141 | #define PREEMPT_ACTIVE 0x10000000 | 150 | #define PREEMPT_ACTIVE 0x10000000 |
142 | 151 | ||
143 | /* | 152 | /* |
diff --git a/include/asm-x86_64/tlbflush.h b/include/asm-x86_64/tlbflush.h index d16d5b60f419..983bd296c81a 100644 --- a/include/asm-x86_64/tlbflush.h +++ b/include/asm-x86_64/tlbflush.h | |||
@@ -4,44 +4,44 @@ | |||
4 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
6 | 6 | ||
7 | #define __flush_tlb() \ | 7 | static inline unsigned long get_cr3(void) |
8 | do { \ | 8 | { |
9 | unsigned long tmpreg; \ | 9 | unsigned long cr3; |
10 | \ | 10 | asm volatile("mov %%cr3,%0" : "=r" (cr3)); |
11 | __asm__ __volatile__( \ | 11 | return cr3; |
12 | "movq %%cr3, %0; # flush TLB \n" \ | 12 | } |
13 | "movq %0, %%cr3; \n" \ | ||
14 | : "=r" (tmpreg) \ | ||
15 | :: "memory"); \ | ||
16 | } while (0) | ||
17 | 13 | ||
18 | /* | 14 | static inline void set_cr3(unsigned long cr3) |
19 | * Global pages have to be flushed a bit differently. Not a real | 15 | { |
20 | * performance problem because this does not happen often. | 16 | asm volatile("mov %0,%%cr3" :: "r" (cr3) : "memory"); |
21 | */ | 17 | } |
22 | #define __flush_tlb_global() \ | 18 | |
23 | do { \ | 19 | static inline void __flush_tlb(void) |
24 | unsigned long tmpreg, cr4, cr4_orig; \ | 20 | { |
25 | \ | 21 | set_cr3(get_cr3()); |
26 | __asm__ __volatile__( \ | 22 | } |
27 | "movq %%cr4, %2; # turn off PGE \n" \ | 23 | |
28 | "movq %2, %1; \n" \ | 24 | static inline unsigned long get_cr4(void) |
29 | "andq %3, %1; \n" \ | 25 | { |
30 | "movq %1, %%cr4; \n" \ | 26 | unsigned long cr4; |
31 | "movq %%cr3, %0; # flush TLB \n" \ | 27 | asm volatile("mov %%cr4,%0" : "=r" (cr4)); |
32 | "movq %0, %%cr3; \n" \ | 28 | return cr4; |
33 | "movq %2, %%cr4; # turn PGE back on \n" \ | 29 | } |
34 | : "=&r" (tmpreg), "=&r" (cr4), "=&r" (cr4_orig) \ | 30 | |
35 | : "i" (~X86_CR4_PGE) \ | 31 | static inline void set_cr4(unsigned long cr4) |
36 | : "memory"); \ | 32 | { |
37 | } while (0) | 33 | asm volatile("mov %0,%%cr4" :: "r" (cr4) : "memory"); |
38 | 34 | } | |
39 | extern unsigned long pgkern_mask; | 35 | |
40 | 36 | static inline void __flush_tlb_all(void) | |
41 | #define __flush_tlb_all() __flush_tlb_global() | 37 | { |
38 | unsigned long cr4 = get_cr4(); | ||
39 | set_cr4(cr4 & ~X86_CR4_PGE); /* clear PGE */ | ||
40 | set_cr4(cr4); /* write old PGE again and flush TLBs */ | ||
41 | } | ||
42 | 42 | ||
43 | #define __flush_tlb_one(addr) \ | 43 | #define __flush_tlb_one(addr) \ |
44 | __asm__ __volatile__("invlpg %0": :"m" (*(char *) addr)) | 44 | __asm__ __volatile__("invlpg (%0)" :: "r" (addr) : "memory") |
45 | 45 | ||
46 | 46 | ||
47 | /* | 47 | /* |
diff --git a/include/asm-x86_64/uaccess.h b/include/asm-x86_64/uaccess.h index 1e1fa003daa3..e856570c0689 100644 --- a/include/asm-x86_64/uaccess.h +++ b/include/asm-x86_64/uaccess.h | |||
@@ -84,7 +84,7 @@ struct exception_table_entry | |||
84 | */ | 84 | */ |
85 | 85 | ||
86 | #define __get_user_x(size,ret,x,ptr) \ | 86 | #define __get_user_x(size,ret,x,ptr) \ |
87 | __asm__ __volatile__("call __get_user_" #size \ | 87 | asm volatile("call __get_user_" #size \ |
88 | :"=a" (ret),"=d" (x) \ | 88 | :"=a" (ret),"=d" (x) \ |
89 | :"c" (ptr) \ | 89 | :"c" (ptr) \ |
90 | :"r8") | 90 | :"r8") |
@@ -101,7 +101,7 @@ struct exception_table_entry | |||
101 | case 8: __get_user_x(8,__ret_gu,__val_gu,ptr); break; \ | 101 | case 8: __get_user_x(8,__ret_gu,__val_gu,ptr); break; \ |
102 | default: __get_user_bad(); break; \ | 102 | default: __get_user_bad(); break; \ |
103 | } \ | 103 | } \ |
104 | (x) = (__typeof__(*(ptr)))__val_gu; \ | 104 | (x) = (typeof(*(ptr)))__val_gu; \ |
105 | __ret_gu; \ | 105 | __ret_gu; \ |
106 | }) | 106 | }) |
107 | 107 | ||
@@ -112,7 +112,7 @@ extern void __put_user_8(void); | |||
112 | extern void __put_user_bad(void); | 112 | extern void __put_user_bad(void); |
113 | 113 | ||
114 | #define __put_user_x(size,ret,x,ptr) \ | 114 | #define __put_user_x(size,ret,x,ptr) \ |
115 | __asm__ __volatile__("call __put_user_" #size \ | 115 | asm volatile("call __put_user_" #size \ |
116 | :"=a" (ret) \ | 116 | :"=a" (ret) \ |
117 | :"c" (ptr),"d" (x) \ | 117 | :"c" (ptr),"d" (x) \ |
118 | :"r8") | 118 | :"r8") |
@@ -139,7 +139,7 @@ extern void __put_user_bad(void); | |||
139 | #define __put_user_check(x,ptr,size) \ | 139 | #define __put_user_check(x,ptr,size) \ |
140 | ({ \ | 140 | ({ \ |
141 | int __pu_err; \ | 141 | int __pu_err; \ |
142 | __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ | 142 | typeof(*(ptr)) __user *__pu_addr = (ptr); \ |
143 | switch (size) { \ | 143 | switch (size) { \ |
144 | case 1: __put_user_x(1,__pu_err,x,__pu_addr); break; \ | 144 | case 1: __put_user_x(1,__pu_err,x,__pu_addr); break; \ |
145 | case 2: __put_user_x(2,__pu_err,x,__pu_addr); break; \ | 145 | case 2: __put_user_x(2,__pu_err,x,__pu_addr); break; \ |
@@ -173,7 +173,7 @@ struct __large_struct { unsigned long buf[100]; }; | |||
173 | * aliasing issues. | 173 | * aliasing issues. |
174 | */ | 174 | */ |
175 | #define __put_user_asm(x, addr, err, itype, rtype, ltype, errno) \ | 175 | #define __put_user_asm(x, addr, err, itype, rtype, ltype, errno) \ |
176 | __asm__ __volatile__( \ | 176 | asm volatile( \ |
177 | "1: mov"itype" %"rtype"1,%2\n" \ | 177 | "1: mov"itype" %"rtype"1,%2\n" \ |
178 | "2:\n" \ | 178 | "2:\n" \ |
179 | ".section .fixup,\"ax\"\n" \ | 179 | ".section .fixup,\"ax\"\n" \ |
@@ -193,7 +193,7 @@ struct __large_struct { unsigned long buf[100]; }; | |||
193 | int __gu_err; \ | 193 | int __gu_err; \ |
194 | unsigned long __gu_val; \ | 194 | unsigned long __gu_val; \ |
195 | __get_user_size(__gu_val,(ptr),(size),__gu_err); \ | 195 | __get_user_size(__gu_val,(ptr),(size),__gu_err); \ |
196 | (x) = (__typeof__(*(ptr)))__gu_val; \ | 196 | (x) = (typeof(*(ptr)))__gu_val; \ |
197 | __gu_err; \ | 197 | __gu_err; \ |
198 | }) | 198 | }) |
199 | 199 | ||
@@ -217,7 +217,7 @@ do { \ | |||
217 | } while (0) | 217 | } while (0) |
218 | 218 | ||
219 | #define __get_user_asm(x, addr, err, itype, rtype, ltype, errno) \ | 219 | #define __get_user_asm(x, addr, err, itype, rtype, ltype, errno) \ |
220 | __asm__ __volatile__( \ | 220 | asm volatile( \ |
221 | "1: mov"itype" %2,%"rtype"1\n" \ | 221 | "1: mov"itype" %2,%"rtype"1\n" \ |
222 | "2:\n" \ | 222 | "2:\n" \ |
223 | ".section .fixup,\"ax\"\n" \ | 223 | ".section .fixup,\"ax\"\n" \ |
@@ -237,15 +237,20 @@ do { \ | |||
237 | */ | 237 | */ |
238 | 238 | ||
239 | /* Handles exceptions in both to and from, but doesn't do access_ok */ | 239 | /* Handles exceptions in both to and from, but doesn't do access_ok */ |
240 | extern unsigned long copy_user_generic(void *to, const void *from, unsigned len); | 240 | __must_check unsigned long |
241 | 241 | copy_user_generic(void *to, const void *from, unsigned len); | |
242 | extern unsigned long copy_to_user(void __user *to, const void *from, unsigned len); | 242 | |
243 | extern unsigned long copy_from_user(void *to, const void __user *from, unsigned len); | 243 | __must_check unsigned long |
244 | extern unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len); | 244 | copy_to_user(void __user *to, const void *from, unsigned len); |
245 | 245 | __must_check unsigned long | |
246 | static __always_inline int __copy_from_user(void *dst, const void __user *src, unsigned size) | 246 | copy_from_user(void *to, const void __user *from, unsigned len); |
247 | __must_check unsigned long | ||
248 | copy_in_user(void __user *to, const void __user *from, unsigned len); | ||
249 | |||
250 | static __always_inline __must_check | ||
251 | int __copy_from_user(void *dst, const void __user *src, unsigned size) | ||
247 | { | 252 | { |
248 | int ret = 0; | 253 | int ret = 0; |
249 | if (!__builtin_constant_p(size)) | 254 | if (!__builtin_constant_p(size)) |
250 | return copy_user_generic(dst,(__force void *)src,size); | 255 | return copy_user_generic(dst,(__force void *)src,size); |
251 | switch (size) { | 256 | switch (size) { |
@@ -272,9 +277,10 @@ static __always_inline int __copy_from_user(void *dst, const void __user *src, u | |||
272 | } | 277 | } |
273 | } | 278 | } |
274 | 279 | ||
275 | static __always_inline int __copy_to_user(void __user *dst, const void *src, unsigned size) | 280 | static __always_inline __must_check |
281 | int __copy_to_user(void __user *dst, const void *src, unsigned size) | ||
276 | { | 282 | { |
277 | int ret = 0; | 283 | int ret = 0; |
278 | if (!__builtin_constant_p(size)) | 284 | if (!__builtin_constant_p(size)) |
279 | return copy_user_generic((__force void *)dst,src,size); | 285 | return copy_user_generic((__force void *)dst,src,size); |
280 | switch (size) { | 286 | switch (size) { |
@@ -303,10 +309,10 @@ static __always_inline int __copy_to_user(void __user *dst, const void *src, uns | |||
303 | } | 309 | } |
304 | } | 310 | } |
305 | 311 | ||
306 | 312 | static __always_inline __must_check | |
307 | static __always_inline int __copy_in_user(void __user *dst, const void __user *src, unsigned size) | 313 | int __copy_in_user(void __user *dst, const void __user *src, unsigned size) |
308 | { | 314 | { |
309 | int ret = 0; | 315 | int ret = 0; |
310 | if (!__builtin_constant_p(size)) | 316 | if (!__builtin_constant_p(size)) |
311 | return copy_user_generic((__force void *)dst,(__force void *)src,size); | 317 | return copy_user_generic((__force void *)dst,(__force void *)src,size); |
312 | switch (size) { | 318 | switch (size) { |
@@ -344,15 +350,17 @@ static __always_inline int __copy_in_user(void __user *dst, const void __user *s | |||
344 | } | 350 | } |
345 | } | 351 | } |
346 | 352 | ||
347 | long strncpy_from_user(char *dst, const char __user *src, long count); | 353 | __must_check long |
348 | long __strncpy_from_user(char *dst, const char __user *src, long count); | 354 | strncpy_from_user(char *dst, const char __user *src, long count); |
349 | long strnlen_user(const char __user *str, long n); | 355 | __must_check long |
350 | long __strnlen_user(const char __user *str, long n); | 356 | __strncpy_from_user(char *dst, const char __user *src, long count); |
351 | long strlen_user(const char __user *str); | 357 | __must_check long strnlen_user(const char __user *str, long n); |
352 | unsigned long clear_user(void __user *mem, unsigned long len); | 358 | __must_check long __strnlen_user(const char __user *str, long n); |
353 | unsigned long __clear_user(void __user *mem, unsigned long len); | 359 | __must_check long strlen_user(const char __user *str); |
354 | 360 | __must_check unsigned long clear_user(void __user *mem, unsigned long len); | |
355 | #define __copy_to_user_inatomic __copy_to_user | 361 | __must_check unsigned long __clear_user(void __user *mem, unsigned long len); |
356 | #define __copy_from_user_inatomic __copy_from_user | 362 | |
363 | __must_check long __copy_from_user_inatomic(void *dst, const void __user *src, unsigned size); | ||
364 | #define __copy_to_user_inatomic copy_user_generic | ||
357 | 365 | ||
358 | #endif /* __X86_64_UACCESS_H */ | 366 | #endif /* __X86_64_UACCESS_H */ |
diff --git a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h index 80fd48e84bbb..6137146516d3 100644 --- a/include/asm-x86_64/unistd.h +++ b/include/asm-x86_64/unistd.h | |||
@@ -600,9 +600,9 @@ __SYSCALL(__NR_fchmodat, sys_fchmodat) | |||
600 | #define __NR_faccessat 269 | 600 | #define __NR_faccessat 269 |
601 | __SYSCALL(__NR_faccessat, sys_faccessat) | 601 | __SYSCALL(__NR_faccessat, sys_faccessat) |
602 | #define __NR_pselect6 270 | 602 | #define __NR_pselect6 270 |
603 | __SYSCALL(__NR_pselect6, sys_ni_syscall) /* for now */ | 603 | __SYSCALL(__NR_pselect6, sys_pselect6) |
604 | #define __NR_ppoll 271 | 604 | #define __NR_ppoll 271 |
605 | __SYSCALL(__NR_ppoll, sys_ni_syscall) /* for now */ | 605 | __SYSCALL(__NR_ppoll, sys_ppoll) |
606 | #define __NR_unshare 272 | 606 | #define __NR_unshare 272 |
607 | __SYSCALL(__NR_unshare, sys_unshare) | 607 | __SYSCALL(__NR_unshare, sys_unshare) |
608 | #define __NR_set_robust_list 273 | 608 | #define __NR_set_robust_list 273 |
@@ -623,16 +623,17 @@ __SYSCALL(__NR_move_pages, sys_move_pages) | |||
623 | #ifdef __KERNEL__ | 623 | #ifdef __KERNEL__ |
624 | 624 | ||
625 | #define __NR_syscall_max __NR_move_pages | 625 | #define __NR_syscall_max __NR_move_pages |
626 | #include <linux/err.h> | ||
626 | 627 | ||
627 | #ifndef __NO_STUBS | 628 | #ifndef __NO_STUBS |
628 | 629 | ||
629 | /* user-visible error numbers are in the range -1 - -4095 */ | 630 | /* user-visible error numbers are in the range -1 - -MAX_ERRNO */ |
630 | 631 | ||
631 | #define __syscall_clobber "r11","rcx","memory" | 632 | #define __syscall_clobber "r11","rcx","memory" |
632 | 633 | ||
633 | #define __syscall_return(type, res) \ | 634 | #define __syscall_return(type, res) \ |
634 | do { \ | 635 | do { \ |
635 | if ((unsigned long)(res) >= (unsigned long)(-127)) { \ | 636 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ |
636 | errno = -(res); \ | 637 | errno = -(res); \ |
637 | res = -1; \ | 638 | res = -1; \ |
638 | } \ | 639 | } \ |
@@ -658,6 +659,7 @@ do { \ | |||
658 | #define __ARCH_WANT_SYS_SIGPENDING | 659 | #define __ARCH_WANT_SYS_SIGPENDING |
659 | #define __ARCH_WANT_SYS_SIGPROCMASK | 660 | #define __ARCH_WANT_SYS_SIGPROCMASK |
660 | #define __ARCH_WANT_SYS_RT_SIGACTION | 661 | #define __ARCH_WANT_SYS_RT_SIGACTION |
662 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
661 | #define __ARCH_WANT_SYS_TIME | 663 | #define __ARCH_WANT_SYS_TIME |
662 | #define __ARCH_WANT_COMPAT_SYS_TIME | 664 | #define __ARCH_WANT_COMPAT_SYS_TIME |
663 | 665 | ||
diff --git a/include/asm-x86_64/unwind.h b/include/asm-x86_64/unwind.h index 1f6e9bfb569e..2e7ff10fd775 100644 --- a/include/asm-x86_64/unwind.h +++ b/include/asm-x86_64/unwind.h | |||
@@ -18,6 +18,7 @@ struct unwind_frame_info | |||
18 | { | 18 | { |
19 | struct pt_regs regs; | 19 | struct pt_regs regs; |
20 | struct task_struct *task; | 20 | struct task_struct *task; |
21 | unsigned call_frame:1; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | #define UNW_PC(frame) (frame)->regs.rip | 24 | #define UNW_PC(frame) (frame)->regs.rip |
@@ -57,6 +58,10 @@ struct unwind_frame_info | |||
57 | PTREGS_INFO(r15), \ | 58 | PTREGS_INFO(r15), \ |
58 | PTREGS_INFO(rip) | 59 | PTREGS_INFO(rip) |
59 | 60 | ||
61 | #define UNW_DEFAULT_RA(raItem, dataAlign) \ | ||
62 | ((raItem).where == Memory && \ | ||
63 | !((raItem).value * (dataAlign) + 8)) | ||
64 | |||
60 | static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, | 65 | static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, |
61 | /*const*/ struct pt_regs *regs) | 66 | /*const*/ struct pt_regs *regs) |
62 | { | 67 | { |
@@ -94,8 +99,8 @@ static inline int arch_unw_user_mode(const struct unwind_frame_info *info) | |||
94 | 99 | ||
95 | #else | 100 | #else |
96 | 101 | ||
97 | #define UNW_PC(frame) ((void)(frame), 0) | 102 | #define UNW_PC(frame) ((void)(frame), 0UL) |
98 | #define UNW_SP(frame) ((void)(frame), 0) | 103 | #define UNW_SP(frame) ((void)(frame), 0UL) |
99 | 104 | ||
100 | static inline int arch_unw_user_mode(const void *info) | 105 | static inline int arch_unw_user_mode(const void *info) |
101 | { | 106 | { |
diff --git a/include/asm-x86_64/vsyscall.h b/include/asm-x86_64/vsyscall.h index 146b24402a5f..2281e9399b96 100644 --- a/include/asm-x86_64/vsyscall.h +++ b/include/asm-x86_64/vsyscall.h | |||
@@ -4,6 +4,7 @@ | |||
4 | enum vsyscall_num { | 4 | enum vsyscall_num { |
5 | __NR_vgettimeofday, | 5 | __NR_vgettimeofday, |
6 | __NR_vtime, | 6 | __NR_vtime, |
7 | __NR_vgetcpu, | ||
7 | }; | 8 | }; |
8 | 9 | ||
9 | #define VSYSCALL_START (-10UL << 20) | 10 | #define VSYSCALL_START (-10UL << 20) |
@@ -15,6 +16,7 @@ enum vsyscall_num { | |||
15 | #include <linux/seqlock.h> | 16 | #include <linux/seqlock.h> |
16 | 17 | ||
17 | #define __section_vxtime __attribute__ ((unused, __section__ (".vxtime"), aligned(16))) | 18 | #define __section_vxtime __attribute__ ((unused, __section__ (".vxtime"), aligned(16))) |
19 | #define __section_vgetcpu_mode __attribute__ ((unused, __section__ (".vgetcpu_mode"), aligned(16))) | ||
18 | #define __section_wall_jiffies __attribute__ ((unused, __section__ (".wall_jiffies"), aligned(16))) | 20 | #define __section_wall_jiffies __attribute__ ((unused, __section__ (".wall_jiffies"), aligned(16))) |
19 | #define __section_jiffies __attribute__ ((unused, __section__ (".jiffies"), aligned(16))) | 21 | #define __section_jiffies __attribute__ ((unused, __section__ (".jiffies"), aligned(16))) |
20 | #define __section_sys_tz __attribute__ ((unused, __section__ (".sys_tz"), aligned(16))) | 22 | #define __section_sys_tz __attribute__ ((unused, __section__ (".sys_tz"), aligned(16))) |
@@ -26,6 +28,9 @@ enum vsyscall_num { | |||
26 | #define VXTIME_HPET 2 | 28 | #define VXTIME_HPET 2 |
27 | #define VXTIME_PMTMR 3 | 29 | #define VXTIME_PMTMR 3 |
28 | 30 | ||
31 | #define VGETCPU_RDTSCP 1 | ||
32 | #define VGETCPU_LSL 2 | ||
33 | |||
29 | struct vxtime_data { | 34 | struct vxtime_data { |
30 | long hpet_address; /* HPET base address */ | 35 | long hpet_address; /* HPET base address */ |
31 | int last; | 36 | int last; |
@@ -40,6 +45,7 @@ struct vxtime_data { | |||
40 | 45 | ||
41 | /* vsyscall space (readonly) */ | 46 | /* vsyscall space (readonly) */ |
42 | extern struct vxtime_data __vxtime; | 47 | extern struct vxtime_data __vxtime; |
48 | extern int __vgetcpu_mode; | ||
43 | extern struct timespec __xtime; | 49 | extern struct timespec __xtime; |
44 | extern volatile unsigned long __jiffies; | 50 | extern volatile unsigned long __jiffies; |
45 | extern unsigned long __wall_jiffies; | 51 | extern unsigned long __wall_jiffies; |
@@ -48,6 +54,7 @@ extern seqlock_t __xtime_lock; | |||
48 | 54 | ||
49 | /* kernel space (writeable) */ | 55 | /* kernel space (writeable) */ |
50 | extern struct vxtime_data vxtime; | 56 | extern struct vxtime_data vxtime; |
57 | extern int vgetcpu_mode; | ||
51 | extern unsigned long wall_jiffies; | 58 | extern unsigned long wall_jiffies; |
52 | extern struct timezone sys_tz; | 59 | extern struct timezone sys_tz; |
53 | extern int sysctl_vsyscall; | 60 | extern int sysctl_vsyscall; |
@@ -55,6 +62,8 @@ extern seqlock_t xtime_lock; | |||
55 | 62 | ||
56 | extern int sysctl_vsyscall; | 63 | extern int sysctl_vsyscall; |
57 | 64 | ||
65 | extern void vsyscall_set_cpu(int cpu); | ||
66 | |||
58 | #define ARCH_HAVE_XTIME_LOCK 1 | 67 | #define ARCH_HAVE_XTIME_LOCK 1 |
59 | 68 | ||
60 | #endif /* __KERNEL__ */ | 69 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/aer.h b/include/linux/aer.h new file mode 100644 index 000000000000..402e178b38eb --- /dev/null +++ b/include/linux/aer.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Intel Corp. | ||
3 | * Tom Long Nguyen (tom.l.nguyen@intel.com) | ||
4 | * Zhang Yanmin (yanmin.zhang@intel.com) | ||
5 | */ | ||
6 | |||
7 | #ifndef _AER_H_ | ||
8 | #define _AER_H_ | ||
9 | |||
10 | #if defined(CONFIG_PCIEAER) | ||
11 | /* pci-e port driver needs this function to enable aer */ | ||
12 | extern int pci_enable_pcie_error_reporting(struct pci_dev *dev); | ||
13 | extern int pci_find_aer_capability(struct pci_dev *dev); | ||
14 | extern int pci_disable_pcie_error_reporting(struct pci_dev *dev); | ||
15 | extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev); | ||
16 | #else | ||
17 | #define pci_enable_pcie_error_reporting(dev) do { } while (0) | ||
18 | #define pci_find_aer_capability(dev) do { } while (0) | ||
19 | #define pci_disable_pcie_error_reporting(dev) do { } while (0) | ||
20 | #define pci_cleanup_aer_uncorrect_error_status(dev) do { } while (0) | ||
21 | #endif | ||
22 | |||
23 | #endif //_AER_H_ | ||
24 | |||
diff --git a/include/linux/cdev.h b/include/linux/cdev.h index 2216638962d2..ee5f53f2ca15 100644 --- a/include/linux/cdev.h +++ b/include/linux/cdev.h | |||
@@ -23,5 +23,7 @@ void cdev_del(struct cdev *); | |||
23 | 23 | ||
24 | void cd_forget(struct inode *); | 24 | void cd_forget(struct inode *); |
25 | 25 | ||
26 | extern struct backing_dev_info directly_mappable_cdev_bdi; | ||
27 | |||
26 | #endif | 28 | #endif |
27 | #endif | 29 | #endif |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 9b4f11094937..060b96112ec6 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
@@ -99,6 +99,11 @@ extern void __chk_io_ptr(void __iomem *); | |||
99 | #define __must_check | 99 | #define __must_check |
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | #ifndef CONFIG_ENABLE_MUST_CHECK | ||
103 | #undef __must_check | ||
104 | #define __must_check | ||
105 | #endif | ||
106 | |||
102 | /* | 107 | /* |
103 | * Allow us to avoid 'defined but not used' warnings on functions and data, | 108 | * Allow us to avoid 'defined but not used' warnings on functions and data, |
104 | * as well as force them to be emitted to the assembly file. | 109 | * as well as force them to be emitted to the assembly file. |
diff --git a/include/linux/device.h b/include/linux/device.h index 1e5f30da98bc..662e6a10144e 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/kobject.h> | 15 | #include <linux/kobject.h> |
16 | #include <linux/klist.h> | 16 | #include <linux/klist.h> |
17 | #include <linux/list.h> | 17 | #include <linux/list.h> |
18 | #include <linux/compiler.h> | ||
18 | #include <linux/types.h> | 19 | #include <linux/types.h> |
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/pm.h> | 21 | #include <linux/pm.h> |
@@ -51,14 +52,17 @@ struct bus_type { | |||
51 | int (*probe)(struct device * dev); | 52 | int (*probe)(struct device * dev); |
52 | int (*remove)(struct device * dev); | 53 | int (*remove)(struct device * dev); |
53 | void (*shutdown)(struct device * dev); | 54 | void (*shutdown)(struct device * dev); |
54 | int (*suspend)(struct device * dev, pm_message_t state); | 55 | |
55 | int (*resume)(struct device * dev); | 56 | int (*suspend)(struct device * dev, pm_message_t state); |
57 | int (*suspend_late)(struct device * dev, pm_message_t state); | ||
58 | int (*resume_early)(struct device * dev); | ||
59 | int (*resume)(struct device * dev); | ||
56 | }; | 60 | }; |
57 | 61 | ||
58 | extern int bus_register(struct bus_type * bus); | 62 | extern int __must_check bus_register(struct bus_type * bus); |
59 | extern void bus_unregister(struct bus_type * bus); | 63 | extern void bus_unregister(struct bus_type * bus); |
60 | 64 | ||
61 | extern void bus_rescan_devices(struct bus_type * bus); | 65 | extern int __must_check bus_rescan_devices(struct bus_type * bus); |
62 | 66 | ||
63 | /* iterator helpers for buses */ | 67 | /* iterator helpers for buses */ |
64 | 68 | ||
@@ -67,9 +71,9 @@ int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data, | |||
67 | struct device * bus_find_device(struct bus_type *bus, struct device *start, | 71 | struct device * bus_find_device(struct bus_type *bus, struct device *start, |
68 | void *data, int (*match)(struct device *, void *)); | 72 | void *data, int (*match)(struct device *, void *)); |
69 | 73 | ||
70 | int bus_for_each_drv(struct bus_type * bus, struct device_driver * start, | 74 | int __must_check bus_for_each_drv(struct bus_type *bus, |
71 | void * data, int (*fn)(struct device_driver *, void *)); | 75 | struct device_driver *start, void *data, |
72 | 76 | int (*fn)(struct device_driver *, void *)); | |
73 | 77 | ||
74 | /* driverfs interface for exporting bus attributes */ | 78 | /* driverfs interface for exporting bus attributes */ |
75 | 79 | ||
@@ -82,7 +86,8 @@ struct bus_attribute { | |||
82 | #define BUS_ATTR(_name,_mode,_show,_store) \ | 86 | #define BUS_ATTR(_name,_mode,_show,_store) \ |
83 | struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store) | 87 | struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store) |
84 | 88 | ||
85 | extern int bus_create_file(struct bus_type *, struct bus_attribute *); | 89 | extern int __must_check bus_create_file(struct bus_type *, |
90 | struct bus_attribute *); | ||
86 | extern void bus_remove_file(struct bus_type *, struct bus_attribute *); | 91 | extern void bus_remove_file(struct bus_type *, struct bus_attribute *); |
87 | 92 | ||
88 | struct device_driver { | 93 | struct device_driver { |
@@ -101,16 +106,18 @@ struct device_driver { | |||
101 | void (*shutdown) (struct device * dev); | 106 | void (*shutdown) (struct device * dev); |
102 | int (*suspend) (struct device * dev, pm_message_t state); | 107 | int (*suspend) (struct device * dev, pm_message_t state); |
103 | int (*resume) (struct device * dev); | 108 | int (*resume) (struct device * dev); |
109 | |||
110 | unsigned int multithread_probe:1; | ||
104 | }; | 111 | }; |
105 | 112 | ||
106 | 113 | ||
107 | extern int driver_register(struct device_driver * drv); | 114 | extern int __must_check driver_register(struct device_driver * drv); |
108 | extern void driver_unregister(struct device_driver * drv); | 115 | extern void driver_unregister(struct device_driver * drv); |
109 | 116 | ||
110 | extern struct device_driver * get_driver(struct device_driver * drv); | 117 | extern struct device_driver * get_driver(struct device_driver * drv); |
111 | extern void put_driver(struct device_driver * drv); | 118 | extern void put_driver(struct device_driver * drv); |
112 | extern struct device_driver *driver_find(const char *name, struct bus_type *bus); | 119 | extern struct device_driver *driver_find(const char *name, struct bus_type *bus); |
113 | 120 | extern int driver_probe_done(void); | |
114 | 121 | ||
115 | /* driverfs interface for exporting driver attributes */ | 122 | /* driverfs interface for exporting driver attributes */ |
116 | 123 | ||
@@ -123,16 +130,17 @@ struct driver_attribute { | |||
123 | #define DRIVER_ATTR(_name,_mode,_show,_store) \ | 130 | #define DRIVER_ATTR(_name,_mode,_show,_store) \ |
124 | struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store) | 131 | struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store) |
125 | 132 | ||
126 | extern int driver_create_file(struct device_driver *, struct driver_attribute *); | 133 | extern int __must_check driver_create_file(struct device_driver *, |
134 | struct driver_attribute *); | ||
127 | extern void driver_remove_file(struct device_driver *, struct driver_attribute *); | 135 | extern void driver_remove_file(struct device_driver *, struct driver_attribute *); |
128 | 136 | ||
129 | extern int driver_for_each_device(struct device_driver * drv, struct device * start, | 137 | extern int __must_check driver_for_each_device(struct device_driver * drv, |
130 | void * data, int (*fn)(struct device *, void *)); | 138 | struct device *start, void *data, |
139 | int (*fn)(struct device *, void *)); | ||
131 | struct device * driver_find_device(struct device_driver *drv, | 140 | struct device * driver_find_device(struct device_driver *drv, |
132 | struct device *start, void *data, | 141 | struct device *start, void *data, |
133 | int (*match)(struct device *, void *)); | 142 | int (*match)(struct device *, void *)); |
134 | 143 | ||
135 | |||
136 | /* | 144 | /* |
137 | * device classes | 145 | * device classes |
138 | */ | 146 | */ |
@@ -146,17 +154,26 @@ struct class { | |||
146 | struct list_head interfaces; | 154 | struct list_head interfaces; |
147 | struct semaphore sem; /* locks both the children and interfaces lists */ | 155 | struct semaphore sem; /* locks both the children and interfaces lists */ |
148 | 156 | ||
157 | struct kobject *virtual_dir; | ||
158 | |||
149 | struct class_attribute * class_attrs; | 159 | struct class_attribute * class_attrs; |
150 | struct class_device_attribute * class_dev_attrs; | 160 | struct class_device_attribute * class_dev_attrs; |
161 | struct device_attribute * dev_attrs; | ||
151 | 162 | ||
152 | int (*uevent)(struct class_device *dev, char **envp, | 163 | int (*uevent)(struct class_device *dev, char **envp, |
153 | int num_envp, char *buffer, int buffer_size); | 164 | int num_envp, char *buffer, int buffer_size); |
165 | int (*dev_uevent)(struct device *dev, char **envp, int num_envp, | ||
166 | char *buffer, int buffer_size); | ||
154 | 167 | ||
155 | void (*release)(struct class_device *dev); | 168 | void (*release)(struct class_device *dev); |
156 | void (*class_release)(struct class *class); | 169 | void (*class_release)(struct class *class); |
170 | void (*dev_release)(struct device *dev); | ||
171 | |||
172 | int (*suspend)(struct device *, pm_message_t state); | ||
173 | int (*resume)(struct device *); | ||
157 | }; | 174 | }; |
158 | 175 | ||
159 | extern int class_register(struct class *); | 176 | extern int __must_check class_register(struct class *); |
160 | extern void class_unregister(struct class *); | 177 | extern void class_unregister(struct class *); |
161 | 178 | ||
162 | 179 | ||
@@ -169,7 +186,8 @@ struct class_attribute { | |||
169 | #define CLASS_ATTR(_name,_mode,_show,_store) \ | 186 | #define CLASS_ATTR(_name,_mode,_show,_store) \ |
170 | struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store) | 187 | struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store) |
171 | 188 | ||
172 | extern int class_create_file(struct class *, const struct class_attribute *); | 189 | extern int __must_check class_create_file(struct class *, |
190 | const struct class_attribute *); | ||
173 | extern void class_remove_file(struct class *, const struct class_attribute *); | 191 | extern void class_remove_file(struct class *, const struct class_attribute *); |
174 | 192 | ||
175 | struct class_device_attribute { | 193 | struct class_device_attribute { |
@@ -182,7 +200,7 @@ struct class_device_attribute { | |||
182 | struct class_device_attribute class_device_attr_##_name = \ | 200 | struct class_device_attribute class_device_attr_##_name = \ |
183 | __ATTR(_name,_mode,_show,_store) | 201 | __ATTR(_name,_mode,_show,_store) |
184 | 202 | ||
185 | extern int class_device_create_file(struct class_device *, | 203 | extern int __must_check class_device_create_file(struct class_device *, |
186 | const struct class_device_attribute *); | 204 | const struct class_device_attribute *); |
187 | 205 | ||
188 | /** | 206 | /** |
@@ -242,10 +260,10 @@ class_set_devdata (struct class_device *dev, void *data) | |||
242 | } | 260 | } |
243 | 261 | ||
244 | 262 | ||
245 | extern int class_device_register(struct class_device *); | 263 | extern int __must_check class_device_register(struct class_device *); |
246 | extern void class_device_unregister(struct class_device *); | 264 | extern void class_device_unregister(struct class_device *); |
247 | extern void class_device_initialize(struct class_device *); | 265 | extern void class_device_initialize(struct class_device *); |
248 | extern int class_device_add(struct class_device *); | 266 | extern int __must_check class_device_add(struct class_device *); |
249 | extern void class_device_del(struct class_device *); | 267 | extern void class_device_del(struct class_device *); |
250 | 268 | ||
251 | extern int class_device_rename(struct class_device *, char *); | 269 | extern int class_device_rename(struct class_device *, char *); |
@@ -255,7 +273,7 @@ extern void class_device_put(struct class_device *); | |||
255 | 273 | ||
256 | extern void class_device_remove_file(struct class_device *, | 274 | extern void class_device_remove_file(struct class_device *, |
257 | const struct class_device_attribute *); | 275 | const struct class_device_attribute *); |
258 | extern int class_device_create_bin_file(struct class_device *, | 276 | extern int __must_check class_device_create_bin_file(struct class_device *, |
259 | struct bin_attribute *); | 277 | struct bin_attribute *); |
260 | extern void class_device_remove_bin_file(struct class_device *, | 278 | extern void class_device_remove_bin_file(struct class_device *, |
261 | struct bin_attribute *); | 279 | struct bin_attribute *); |
@@ -266,22 +284,23 @@ struct class_interface { | |||
266 | 284 | ||
267 | int (*add) (struct class_device *, struct class_interface *); | 285 | int (*add) (struct class_device *, struct class_interface *); |
268 | void (*remove) (struct class_device *, struct class_interface *); | 286 | void (*remove) (struct class_device *, struct class_interface *); |
287 | int (*add_dev) (struct device *, struct class_interface *); | ||
288 | void (*remove_dev) (struct device *, struct class_interface *); | ||
269 | }; | 289 | }; |
270 | 290 | ||
271 | extern int class_interface_register(struct class_interface *); | 291 | extern int __must_check class_interface_register(struct class_interface *); |
272 | extern void class_interface_unregister(struct class_interface *); | 292 | extern void class_interface_unregister(struct class_interface *); |
273 | 293 | ||
274 | extern struct class *class_create(struct module *owner, char *name); | 294 | extern struct class *class_create(struct module *owner, const char *name); |
275 | extern void class_destroy(struct class *cls); | 295 | extern void class_destroy(struct class *cls); |
276 | extern struct class_device *class_device_create(struct class *cls, | 296 | extern struct class_device *class_device_create(struct class *cls, |
277 | struct class_device *parent, | 297 | struct class_device *parent, |
278 | dev_t devt, | 298 | dev_t devt, |
279 | struct device *device, | 299 | struct device *device, |
280 | char *fmt, ...) | 300 | const char *fmt, ...) |
281 | __attribute__((format(printf,5,6))); | 301 | __attribute__((format(printf,5,6))); |
282 | extern void class_device_destroy(struct class *cls, dev_t devt); | 302 | extern void class_device_destroy(struct class *cls, dev_t devt); |
283 | 303 | ||
284 | |||
285 | /* interface for exporting device attributes */ | 304 | /* interface for exporting device attributes */ |
286 | struct device_attribute { | 305 | struct device_attribute { |
287 | struct attribute attr; | 306 | struct attribute attr; |
@@ -294,8 +313,13 @@ struct device_attribute { | |||
294 | #define DEVICE_ATTR(_name,_mode,_show,_store) \ | 313 | #define DEVICE_ATTR(_name,_mode,_show,_store) \ |
295 | struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) | 314 | struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) |
296 | 315 | ||
297 | extern int device_create_file(struct device *device, struct device_attribute * entry); | 316 | extern int __must_check device_create_file(struct device *device, |
317 | struct device_attribute * entry); | ||
298 | extern void device_remove_file(struct device * dev, struct device_attribute * attr); | 318 | extern void device_remove_file(struct device * dev, struct device_attribute * attr); |
319 | extern int __must_check device_create_bin_file(struct device *dev, | ||
320 | struct bin_attribute *attr); | ||
321 | extern void device_remove_bin_file(struct device *dev, | ||
322 | struct bin_attribute *attr); | ||
299 | struct device { | 323 | struct device { |
300 | struct klist klist_children; | 324 | struct klist klist_children; |
301 | struct klist_node knode_parent; /* node in sibling list */ | 325 | struct klist_node knode_parent; /* node in sibling list */ |
@@ -305,6 +329,7 @@ struct device { | |||
305 | 329 | ||
306 | struct kobject kobj; | 330 | struct kobject kobj; |
307 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ | 331 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ |
332 | unsigned is_registered:1; | ||
308 | struct device_attribute uevent_attr; | 333 | struct device_attribute uevent_attr; |
309 | struct device_attribute *devt_attr; | 334 | struct device_attribute *devt_attr; |
310 | 335 | ||
@@ -338,6 +363,7 @@ struct device { | |||
338 | struct list_head node; | 363 | struct list_head node; |
339 | struct class *class; /* optional*/ | 364 | struct class *class; /* optional*/ |
340 | dev_t devt; /* dev_t, creates the sysfs "dev" */ | 365 | dev_t devt; /* dev_t, creates the sysfs "dev" */ |
366 | struct attribute_group **groups; /* optional groups */ | ||
341 | 367 | ||
342 | void (*release)(struct device * dev); | 368 | void (*release)(struct device * dev); |
343 | }; | 369 | }; |
@@ -356,38 +382,41 @@ dev_set_drvdata (struct device *dev, void *data) | |||
356 | 382 | ||
357 | static inline int device_is_registered(struct device *dev) | 383 | static inline int device_is_registered(struct device *dev) |
358 | { | 384 | { |
359 | return klist_node_attached(&dev->knode_bus); | 385 | return dev->is_registered; |
360 | } | 386 | } |
361 | 387 | ||
362 | /* | 388 | /* |
363 | * High level routines for use by the bus drivers | 389 | * High level routines for use by the bus drivers |
364 | */ | 390 | */ |
365 | extern int device_register(struct device * dev); | 391 | extern int __must_check device_register(struct device * dev); |
366 | extern void device_unregister(struct device * dev); | 392 | extern void device_unregister(struct device * dev); |
367 | extern void device_initialize(struct device * dev); | 393 | extern void device_initialize(struct device * dev); |
368 | extern int device_add(struct device * dev); | 394 | extern int __must_check device_add(struct device * dev); |
369 | extern void device_del(struct device * dev); | 395 | extern void device_del(struct device * dev); |
370 | extern int device_for_each_child(struct device *, void *, | 396 | extern int __must_check device_for_each_child(struct device *, void *, |
371 | int (*fn)(struct device *, void *)); | 397 | int (*fn)(struct device *, void *)); |
398 | extern int device_rename(struct device *dev, char *new_name); | ||
372 | 399 | ||
373 | /* | 400 | /* |
374 | * Manual binding of a device to driver. See drivers/base/bus.c | 401 | * Manual binding of a device to driver. See drivers/base/bus.c |
375 | * for information on use. | 402 | * for information on use. |
376 | */ | 403 | */ |
377 | extern void device_bind_driver(struct device * dev); | 404 | extern int __must_check device_bind_driver(struct device *dev); |
378 | extern void device_release_driver(struct device * dev); | 405 | extern void device_release_driver(struct device * dev); |
379 | extern int device_attach(struct device * dev); | 406 | extern int __must_check device_attach(struct device * dev); |
380 | extern void driver_attach(struct device_driver * drv); | 407 | extern int __must_check driver_attach(struct device_driver *drv); |
381 | extern void device_reprobe(struct device *dev); | 408 | extern int __must_check device_reprobe(struct device *dev); |
382 | 409 | ||
383 | /* | 410 | /* |
384 | * Easy functions for dynamically creating devices on the fly | 411 | * Easy functions for dynamically creating devices on the fly |
385 | */ | 412 | */ |
386 | extern struct device *device_create(struct class *cls, struct device *parent, | 413 | extern struct device *device_create(struct class *cls, struct device *parent, |
387 | dev_t devt, char *fmt, ...) | 414 | dev_t devt, const char *fmt, ...) |
388 | __attribute__((format(printf,4,5))); | 415 | __attribute__((format(printf,4,5))); |
389 | extern void device_destroy(struct class *cls, dev_t devt); | 416 | extern void device_destroy(struct class *cls, dev_t devt); |
390 | 417 | ||
418 | extern int virtual_device_parent(struct device *dev); | ||
419 | |||
391 | /* | 420 | /* |
392 | * Platform "fixup" functions - allow the platform to have their say | 421 | * Platform "fixup" functions - allow the platform to have their say |
393 | * about devices and actions that the general device layer doesn't | 422 | * about devices and actions that the general device layer doesn't |
@@ -412,7 +441,7 @@ extern void device_shutdown(void); | |||
412 | 441 | ||
413 | 442 | ||
414 | /* drivers/base/firmware.c */ | 443 | /* drivers/base/firmware.c */ |
415 | extern int firmware_register(struct subsystem *); | 444 | extern int __must_check firmware_register(struct subsystem *); |
416 | extern void firmware_unregister(struct subsystem *); | 445 | extern void firmware_unregister(struct subsystem *); |
417 | 446 | ||
418 | /* debugging and troubleshooting/diagnostic helpers. */ | 447 | /* debugging and troubleshooting/diagnostic helpers. */ |
diff --git a/include/linux/edd.h b/include/linux/edd.h index 162512b886f7..b2b3e68aa512 100644 --- a/include/linux/edd.h +++ b/include/linux/edd.h | |||
@@ -52,6 +52,7 @@ | |||
52 | #define EDD_CL_EQUALS 0x3d646465 /* "edd=" */ | 52 | #define EDD_CL_EQUALS 0x3d646465 /* "edd=" */ |
53 | #define EDD_CL_OFF 0x666f /* "of" for off */ | 53 | #define EDD_CL_OFF 0x666f /* "of" for off */ |
54 | #define EDD_CL_SKIP 0x6b73 /* "sk" for skipmbr */ | 54 | #define EDD_CL_SKIP 0x6b73 /* "sk" for skipmbr */ |
55 | #define EDD_CL_ON 0x6e6f /* "on" for on */ | ||
55 | 56 | ||
56 | #ifndef __ASSEMBLY__ | 57 | #ifndef __ASSEMBLY__ |
57 | 58 | ||
diff --git a/include/linux/eisa.h b/include/linux/eisa.h index 4079242dced8..1ff7c1392525 100644 --- a/include/linux/eisa.h +++ b/include/linux/eisa.h | |||
@@ -3,8 +3,8 @@ | |||
3 | 3 | ||
4 | #include <linux/ioport.h> | 4 | #include <linux/ioport.h> |
5 | #include <linux/device.h> | 5 | #include <linux/device.h> |
6 | #include <linux/mod_devicetable.h> | ||
6 | 7 | ||
7 | #define EISA_SIG_LEN 8 | ||
8 | #define EISA_MAX_SLOTS 8 | 8 | #define EISA_MAX_SLOTS 8 |
9 | 9 | ||
10 | #define EISA_MAX_RESOURCES 4 | 10 | #define EISA_MAX_RESOURCES 4 |
@@ -27,12 +27,6 @@ | |||
27 | #define EISA_CONFIG_ENABLED 1 | 27 | #define EISA_CONFIG_ENABLED 1 |
28 | #define EISA_CONFIG_FORCED 2 | 28 | #define EISA_CONFIG_FORCED 2 |
29 | 29 | ||
30 | /* The EISA signature, in ASCII form, null terminated */ | ||
31 | struct eisa_device_id { | ||
32 | char sig[EISA_SIG_LEN]; | ||
33 | unsigned long driver_data; | ||
34 | }; | ||
35 | |||
36 | /* There is not much we can say about an EISA device, apart from | 30 | /* There is not much we can say about an EISA device, apart from |
37 | * signature, slot number, and base address. dma_mask is set by | 31 | * signature, slot number, and base address. dma_mask is set by |
38 | * default to parent device mask..*/ | 32 | * default to parent device mask..*/ |
diff --git a/include/linux/err.h b/include/linux/err.h index cd3b367f7445..1ab1d44f8d3b 100644 --- a/include/linux/err.h +++ b/include/linux/err.h | |||
@@ -15,6 +15,8 @@ | |||
15 | */ | 15 | */ |
16 | #define MAX_ERRNO 4095 | 16 | #define MAX_ERRNO 4095 |
17 | 17 | ||
18 | #ifndef __ASSEMBLY__ | ||
19 | |||
18 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) | 20 | #define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) |
19 | 21 | ||
20 | static inline void *ERR_PTR(long error) | 22 | static inline void *ERR_PTR(long error) |
@@ -32,4 +34,6 @@ static inline long IS_ERR(const void *ptr) | |||
32 | return IS_ERR_VALUE((unsigned long)ptr); | 34 | return IS_ERR_VALUE((unsigned long)ptr); |
33 | } | 35 | } |
34 | 36 | ||
37 | #endif | ||
38 | |||
35 | #endif /* _LINUX_ERR_H */ | 39 | #endif /* _LINUX_ERR_H */ |
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 0eed918b3816..cc08f56750da 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
@@ -460,7 +460,7 @@ struct ext3_super_block { | |||
460 | */ | 460 | */ |
461 | __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ | 461 | __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ |
462 | __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ | 462 | __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ |
463 | __u16 s_reserved_gdt_blocks; /* Per group desc for online growth */ | 463 | __le16 s_reserved_gdt_blocks; /* Per group desc for online growth */ |
464 | /* | 464 | /* |
465 | * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set. | 465 | * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set. |
466 | */ | 466 | */ |
@@ -473,7 +473,7 @@ struct ext3_super_block { | |||
473 | __u8 s_reserved_char_pad; | 473 | __u8 s_reserved_char_pad; |
474 | __u16 s_reserved_word_pad; | 474 | __u16 s_reserved_word_pad; |
475 | __le32 s_default_mount_opts; | 475 | __le32 s_default_mount_opts; |
476 | __le32 s_first_meta_bg; /* First metablock block group */ | 476 | __le32 s_first_meta_bg; /* First metablock block group */ |
477 | __u32 s_reserved[190]; /* Padding to the end of the block */ | 477 | __u32 s_reserved[190]; /* Padding to the end of the block */ |
478 | }; | 478 | }; |
479 | 479 | ||
diff --git a/include/linux/ext3_fs_i.h b/include/linux/ext3_fs_i.h index 2f18b9511f21..4395e5206746 100644 --- a/include/linux/ext3_fs_i.h +++ b/include/linux/ext3_fs_i.h | |||
@@ -35,7 +35,7 @@ struct ext3_reserve_window { | |||
35 | }; | 35 | }; |
36 | 36 | ||
37 | struct ext3_reserve_window_node { | 37 | struct ext3_reserve_window_node { |
38 | struct rb_node rsv_node; | 38 | struct rb_node rsv_node; |
39 | __u32 rsv_goal_size; | 39 | __u32 rsv_goal_size; |
40 | __u32 rsv_alloc_hit; | 40 | __u32 rsv_alloc_hit; |
41 | struct ext3_reserve_window rsv_window; | 41 | struct ext3_reserve_window rsv_window; |
diff --git a/include/linux/ext3_jbd.h b/include/linux/ext3_jbd.h index c8307c02dd07..ce0e6109aff0 100644 --- a/include/linux/ext3_jbd.h +++ b/include/linux/ext3_jbd.h | |||
@@ -23,7 +23,7 @@ | |||
23 | 23 | ||
24 | /* Define the number of blocks we need to account to a transaction to | 24 | /* Define the number of blocks we need to account to a transaction to |
25 | * modify one block of data. | 25 | * modify one block of data. |
26 | * | 26 | * |
27 | * We may have to touch one inode, one bitmap buffer, up to three | 27 | * We may have to touch one inode, one bitmap buffer, up to three |
28 | * indirection blocks, the group and superblock summaries, and the data | 28 | * indirection blocks, the group and superblock summaries, and the data |
29 | * block to complete the transaction. */ | 29 | * block to complete the transaction. */ |
@@ -88,16 +88,16 @@ | |||
88 | #endif | 88 | #endif |
89 | 89 | ||
90 | int | 90 | int |
91 | ext3_mark_iloc_dirty(handle_t *handle, | 91 | ext3_mark_iloc_dirty(handle_t *handle, |
92 | struct inode *inode, | 92 | struct inode *inode, |
93 | struct ext3_iloc *iloc); | 93 | struct ext3_iloc *iloc); |
94 | 94 | ||
95 | /* | 95 | /* |
96 | * On success, We end up with an outstanding reference count against | 96 | * On success, We end up with an outstanding reference count against |
97 | * iloc->bh. This _must_ be cleaned up later. | 97 | * iloc->bh. This _must_ be cleaned up later. |
98 | */ | 98 | */ |
99 | 99 | ||
100 | int ext3_reserve_inode_write(handle_t *handle, struct inode *inode, | 100 | int ext3_reserve_inode_write(handle_t *handle, struct inode *inode, |
101 | struct ext3_iloc *iloc); | 101 | struct ext3_iloc *iloc); |
102 | 102 | ||
103 | int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode); | 103 | int ext3_mark_inode_dirty(handle_t *handle, struct inode *inode); |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 1d3e601ece73..8f74dfbb2edd 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -512,7 +512,6 @@ struct inode { | |||
512 | struct timespec i_mtime; | 512 | struct timespec i_mtime; |
513 | struct timespec i_ctime; | 513 | struct timespec i_ctime; |
514 | unsigned int i_blkbits; | 514 | unsigned int i_blkbits; |
515 | unsigned long i_blksize; | ||
516 | unsigned long i_version; | 515 | unsigned long i_version; |
517 | blkcnt_t i_blocks; | 516 | blkcnt_t i_blocks; |
518 | unsigned short i_bytes; | 517 | unsigned short i_bytes; |
@@ -528,11 +527,12 @@ struct inode { | |||
528 | #ifdef CONFIG_QUOTA | 527 | #ifdef CONFIG_QUOTA |
529 | struct dquot *i_dquot[MAXQUOTAS]; | 528 | struct dquot *i_dquot[MAXQUOTAS]; |
530 | #endif | 529 | #endif |
531 | /* These three should probably be a union */ | ||
532 | struct list_head i_devices; | 530 | struct list_head i_devices; |
533 | struct pipe_inode_info *i_pipe; | 531 | union { |
534 | struct block_device *i_bdev; | 532 | struct pipe_inode_info *i_pipe; |
535 | struct cdev *i_cdev; | 533 | struct block_device *i_bdev; |
534 | struct cdev *i_cdev; | ||
535 | }; | ||
536 | int i_cindex; | 536 | int i_cindex; |
537 | 537 | ||
538 | __u32 i_generation; | 538 | __u32 i_generation; |
@@ -554,9 +554,7 @@ struct inode { | |||
554 | 554 | ||
555 | atomic_t i_writecount; | 555 | atomic_t i_writecount; |
556 | void *i_security; | 556 | void *i_security; |
557 | union { | 557 | void *i_private; /* fs or device private pointer */ |
558 | void *generic_ip; | ||
559 | } u; | ||
560 | #ifdef __NEED_I_SIZE_ORDERED | 558 | #ifdef __NEED_I_SIZE_ORDERED |
561 | seqcount_t i_size_seqcount; | 559 | seqcount_t i_size_seqcount; |
562 | #endif | 560 | #endif |
diff --git a/include/linux/getcpu.h b/include/linux/getcpu.h new file mode 100644 index 000000000000..031ed3780e45 --- /dev/null +++ b/include/linux/getcpu.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef _LINUX_GETCPU_H | ||
2 | #define _LINUX_GETCPU_H 1 | ||
3 | |||
4 | /* Cache for getcpu() to speed it up. Results might be upto a jiffie | ||
5 | out of date, but will be faster. | ||
6 | User programs should not refer to the contents of this structure. | ||
7 | It is only a cache for vgetcpu(). It might change in future kernels. | ||
8 | The user program must store this information per thread (__thread) | ||
9 | If you want 100% accurate information pass NULL instead. */ | ||
10 | struct getcpu_cache { | ||
11 | unsigned long t0; | ||
12 | unsigned long t1; | ||
13 | unsigned long res[4]; | ||
14 | }; | ||
15 | |||
16 | #endif | ||
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 8b34aabfe4c6..bf2b6bc3f6fd 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -67,7 +67,12 @@ struct vm_area_struct; | |||
67 | #define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \ | 67 | #define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \ |
68 | __GFP_HIGHMEM) | 68 | __GFP_HIGHMEM) |
69 | 69 | ||
70 | #ifdef CONFIG_NUMA | ||
70 | #define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) | 71 | #define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) |
72 | #else | ||
73 | #define GFP_THISNODE 0 | ||
74 | #endif | ||
75 | |||
71 | 76 | ||
72 | /* Flag - indicates that the buffer will be suitable for DMA. Ignored on some | 77 | /* Flag - indicates that the buffer will be suitable for DMA. Ignored on some |
73 | platforms, used as appropriate on others */ | 78 | platforms, used as appropriate on others */ |
diff --git a/include/linux/i2c-algo-bit.h b/include/linux/i2c-algo-bit.h index c0e7fab28ce3..c8f8df25c7e0 100644 --- a/include/linux/i2c-algo-bit.h +++ b/include/linux/i2c-algo-bit.h | |||
@@ -40,7 +40,6 @@ struct i2c_algo_bit_data { | |||
40 | /* local settings */ | 40 | /* local settings */ |
41 | int udelay; /* half-clock-cycle time in microsecs */ | 41 | int udelay; /* half-clock-cycle time in microsecs */ |
42 | /* i.e. clock is (500 / udelay) KHz */ | 42 | /* i.e. clock is (500 / udelay) KHz */ |
43 | int mdelay; /* in millisecs, unused */ | ||
44 | int timeout; /* in jiffies */ | 43 | int timeout; /* in jiffies */ |
45 | }; | 44 | }; |
46 | 45 | ||
diff --git a/include/linux/i2c-algo-pcf.h b/include/linux/i2c-algo-pcf.h index 18b0adf57a3d..9908f3fc4839 100644 --- a/include/linux/i2c-algo-pcf.h +++ b/include/linux/i2c-algo-pcf.h | |||
@@ -35,7 +35,6 @@ struct i2c_algo_pcf_data { | |||
35 | 35 | ||
36 | /* local settings */ | 36 | /* local settings */ |
37 | int udelay; | 37 | int udelay; |
38 | int mdelay; | ||
39 | int timeout; | 38 | int timeout; |
40 | }; | 39 | }; |
41 | 40 | ||
diff --git a/include/linux/i2c-algo-sibyte.h b/include/linux/i2c-algo-sibyte.h deleted file mode 100644 index 03914ded8614..000000000000 --- a/include/linux/i2c-algo-sibyte.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001,2002,2003 Broadcom Corporation | ||
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 2 | ||
7 | * of the License, or (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
17 | */ | ||
18 | |||
19 | #ifndef I2C_ALGO_SIBYTE_H | ||
20 | #define I2C_ALGO_SIBYTE_H 1 | ||
21 | |||
22 | #include <linux/i2c.h> | ||
23 | |||
24 | struct i2c_algo_sibyte_data { | ||
25 | void *data; /* private data */ | ||
26 | int bus; /* which bus */ | ||
27 | void *reg_base; /* CSR base */ | ||
28 | }; | ||
29 | |||
30 | int i2c_sibyte_add_bus(struct i2c_adapter *, int speed); | ||
31 | int i2c_sibyte_del_bus(struct i2c_adapter *); | ||
32 | |||
33 | #endif /* I2C_ALGO_SIBYTE_H */ | ||
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index eb0628a7ecc6..9b5d04768c2c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
@@ -64,14 +64,6 @@ extern int i2c_master_recv(struct i2c_client *,char* ,int); | |||
64 | */ | 64 | */ |
65 | extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num); | 65 | extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num); |
66 | 66 | ||
67 | /* | ||
68 | * Some adapter types (i.e. PCF 8584 based ones) may support slave behaviuor. | ||
69 | * This is not tested/implemented yet and will change in the future. | ||
70 | */ | ||
71 | extern int i2c_slave_send(struct i2c_client *,char*,int); | ||
72 | extern int i2c_slave_recv(struct i2c_client *,char*,int); | ||
73 | |||
74 | |||
75 | 67 | ||
76 | /* This is the very generalized SMBus access routine. You probably do not | 68 | /* This is the very generalized SMBus access routine. You probably do not |
77 | want to use this, though; one of the functions below may be much easier, | 69 | want to use this, though; one of the functions below may be much easier, |
@@ -201,10 +193,6 @@ struct i2c_algorithm { | |||
201 | unsigned short flags, char read_write, | 193 | unsigned short flags, char read_write, |
202 | u8 command, int size, union i2c_smbus_data * data); | 194 | u8 command, int size, union i2c_smbus_data * data); |
203 | 195 | ||
204 | /* --- these optional/future use for some adapter types.*/ | ||
205 | int (*slave_send)(struct i2c_adapter *,char*,int); | ||
206 | int (*slave_recv)(struct i2c_adapter *,char*,int); | ||
207 | |||
208 | /* --- ioctl like call to set div. parameters. */ | 196 | /* --- ioctl like call to set div. parameters. */ |
209 | int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long); | 197 | int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long); |
210 | 198 | ||
@@ -220,7 +208,7 @@ struct i2c_adapter { | |||
220 | struct module *owner; | 208 | struct module *owner; |
221 | unsigned int id; | 209 | unsigned int id; |
222 | unsigned int class; | 210 | unsigned int class; |
223 | struct i2c_algorithm *algo;/* the algorithm to access the bus */ | 211 | const struct i2c_algorithm *algo; /* the algorithm to access the bus */ |
224 | void *algo_data; | 212 | void *algo_data; |
225 | 213 | ||
226 | /* --- administration stuff. */ | 214 | /* --- administration stuff. */ |
diff --git a/include/linux/init.h b/include/linux/init.h index 6667785dd1ff..e92b1455d7af 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -68,6 +68,7 @@ extern initcall_t __security_initcall_start[], __security_initcall_end[]; | |||
68 | 68 | ||
69 | /* Defined in init/main.c */ | 69 | /* Defined in init/main.c */ |
70 | extern char saved_command_line[]; | 70 | extern char saved_command_line[]; |
71 | extern unsigned int reset_devices; | ||
71 | 72 | ||
72 | /* used by init/main.c */ | 73 | /* used by init/main.c */ |
73 | extern void setup_arch(char **); | 74 | extern void setup_arch(char **); |
diff --git a/include/linux/jbd.h b/include/linux/jbd.h index a04c154c5207..a6d9daa38c6d 100644 --- a/include/linux/jbd.h +++ b/include/linux/jbd.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * linux/include/linux/jbd.h | 2 | * linux/include/linux/jbd.h |
3 | * | 3 | * |
4 | * Written by Stephen C. Tweedie <sct@redhat.com> | 4 | * Written by Stephen C. Tweedie <sct@redhat.com> |
5 | * | 5 | * |
6 | * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved | 6 | * Copyright 1998-2000 Red Hat, Inc --- All Rights Reserved |
@@ -64,7 +64,7 @@ extern int journal_enable_debug; | |||
64 | if ((n) <= journal_enable_debug) { \ | 64 | if ((n) <= journal_enable_debug) { \ |
65 | printk (KERN_DEBUG "(%s, %d): %s: ", \ | 65 | printk (KERN_DEBUG "(%s, %d): %s: ", \ |
66 | __FILE__, __LINE__, __FUNCTION__); \ | 66 | __FILE__, __LINE__, __FUNCTION__); \ |
67 | printk (f, ## a); \ | 67 | printk (f, ## a); \ |
68 | } \ | 68 | } \ |
69 | } while (0) | 69 | } while (0) |
70 | #else | 70 | #else |
@@ -97,8 +97,8 @@ extern void jbd_slab_free(void *ptr, size_t size); | |||
97 | * number of outstanding buffers possible at any time. When the | 97 | * number of outstanding buffers possible at any time. When the |
98 | * operation completes, any buffer credits not used are credited back to | 98 | * operation completes, any buffer credits not used are credited back to |
99 | * the transaction, so that at all times we know how many buffers the | 99 | * the transaction, so that at all times we know how many buffers the |
100 | * outstanding updates on a transaction might possibly touch. | 100 | * outstanding updates on a transaction might possibly touch. |
101 | * | 101 | * |
102 | * This is an opaque datatype. | 102 | * This is an opaque datatype. |
103 | **/ | 103 | **/ |
104 | typedef struct handle_s handle_t; /* Atomic operation type */ | 104 | typedef struct handle_s handle_t; /* Atomic operation type */ |
@@ -108,7 +108,7 @@ typedef struct handle_s handle_t; /* Atomic operation type */ | |||
108 | * typedef journal_t - The journal_t maintains all of the journaling state information for a single filesystem. | 108 | * typedef journal_t - The journal_t maintains all of the journaling state information for a single filesystem. |
109 | * | 109 | * |
110 | * journal_t is linked to from the fs superblock structure. | 110 | * journal_t is linked to from the fs superblock structure. |
111 | * | 111 | * |
112 | * We use the journal_t to keep track of all outstanding transaction | 112 | * We use the journal_t to keep track of all outstanding transaction |
113 | * activity on the filesystem, and to manage the state of the log | 113 | * activity on the filesystem, and to manage the state of the log |
114 | * writing process. | 114 | * writing process. |
@@ -128,7 +128,7 @@ typedef struct journal_s journal_t; /* Journal control structure */ | |||
128 | * On-disk structures | 128 | * On-disk structures |
129 | */ | 129 | */ |
130 | 130 | ||
131 | /* | 131 | /* |
132 | * Descriptor block types: | 132 | * Descriptor block types: |
133 | */ | 133 | */ |
134 | 134 | ||
@@ -149,8 +149,8 @@ typedef struct journal_header_s | |||
149 | } journal_header_t; | 149 | } journal_header_t; |
150 | 150 | ||
151 | 151 | ||
152 | /* | 152 | /* |
153 | * The block tag: used to describe a single buffer in the journal | 153 | * The block tag: used to describe a single buffer in the journal |
154 | */ | 154 | */ |
155 | typedef struct journal_block_tag_s | 155 | typedef struct journal_block_tag_s |
156 | { | 156 | { |
@@ -158,9 +158,9 @@ typedef struct journal_block_tag_s | |||
158 | __be32 t_flags; /* See below */ | 158 | __be32 t_flags; /* See below */ |
159 | } journal_block_tag_t; | 159 | } journal_block_tag_t; |
160 | 160 | ||
161 | /* | 161 | /* |
162 | * The revoke descriptor: used on disk to describe a series of blocks to | 162 | * The revoke descriptor: used on disk to describe a series of blocks to |
163 | * be revoked from the log | 163 | * be revoked from the log |
164 | */ | 164 | */ |
165 | typedef struct journal_revoke_header_s | 165 | typedef struct journal_revoke_header_s |
166 | { | 166 | { |
@@ -201,9 +201,9 @@ typedef struct journal_superblock_s | |||
201 | 201 | ||
202 | /* 0x0024 */ | 202 | /* 0x0024 */ |
203 | /* Remaining fields are only valid in a version-2 superblock */ | 203 | /* Remaining fields are only valid in a version-2 superblock */ |
204 | __be32 s_feature_compat; /* compatible feature set */ | 204 | __be32 s_feature_compat; /* compatible feature set */ |
205 | __be32 s_feature_incompat; /* incompatible feature set */ | 205 | __be32 s_feature_incompat; /* incompatible feature set */ |
206 | __be32 s_feature_ro_compat; /* readonly-compatible feature set */ | 206 | __be32 s_feature_ro_compat; /* readonly-compatible feature set */ |
207 | /* 0x0030 */ | 207 | /* 0x0030 */ |
208 | __u8 s_uuid[16]; /* 128-bit uuid for journal */ | 208 | __u8 s_uuid[16]; /* 128-bit uuid for journal */ |
209 | 209 | ||
@@ -374,10 +374,10 @@ struct jbd_revoke_table_s; | |||
374 | **/ | 374 | **/ |
375 | 375 | ||
376 | /* Docbook can't yet cope with the bit fields, but will leave the documentation | 376 | /* Docbook can't yet cope with the bit fields, but will leave the documentation |
377 | * in so it can be fixed later. | 377 | * in so it can be fixed later. |
378 | */ | 378 | */ |
379 | 379 | ||
380 | struct handle_s | 380 | struct handle_s |
381 | { | 381 | { |
382 | /* Which compound transaction is this update a part of? */ | 382 | /* Which compound transaction is this update a part of? */ |
383 | transaction_t *h_transaction; | 383 | transaction_t *h_transaction; |
@@ -435,7 +435,7 @@ struct handle_s | |||
435 | * | 435 | * |
436 | */ | 436 | */ |
437 | 437 | ||
438 | struct transaction_s | 438 | struct transaction_s |
439 | { | 439 | { |
440 | /* Pointer to the journal for this transaction. [no locking] */ | 440 | /* Pointer to the journal for this transaction. [no locking] */ |
441 | journal_t *t_journal; | 441 | journal_t *t_journal; |
@@ -455,7 +455,7 @@ struct transaction_s | |||
455 | T_RUNDOWN, | 455 | T_RUNDOWN, |
456 | T_FLUSH, | 456 | T_FLUSH, |
457 | T_COMMIT, | 457 | T_COMMIT, |
458 | T_FINISHED | 458 | T_FINISHED |
459 | } t_state; | 459 | } t_state; |
460 | 460 | ||
461 | /* | 461 | /* |
@@ -569,7 +569,7 @@ struct transaction_s | |||
569 | * journal_t. | 569 | * journal_t. |
570 | * @j_flags: General journaling state flags | 570 | * @j_flags: General journaling state flags |
571 | * @j_errno: Is there an outstanding uncleared error on the journal (from a | 571 | * @j_errno: Is there an outstanding uncleared error on the journal (from a |
572 | * prior abort)? | 572 | * prior abort)? |
573 | * @j_sb_buffer: First part of superblock buffer | 573 | * @j_sb_buffer: First part of superblock buffer |
574 | * @j_superblock: Second part of superblock buffer | 574 | * @j_superblock: Second part of superblock buffer |
575 | * @j_format_version: Version of the superblock format | 575 | * @j_format_version: Version of the superblock format |
@@ -583,7 +583,7 @@ struct transaction_s | |||
583 | * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction | 583 | * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction |
584 | * to start committing, or for a barrier lock to be released | 584 | * to start committing, or for a barrier lock to be released |
585 | * @j_wait_logspace: Wait queue for waiting for checkpointing to complete | 585 | * @j_wait_logspace: Wait queue for waiting for checkpointing to complete |
586 | * @j_wait_done_commit: Wait queue for waiting for commit to complete | 586 | * @j_wait_done_commit: Wait queue for waiting for commit to complete |
587 | * @j_wait_checkpoint: Wait queue to trigger checkpointing | 587 | * @j_wait_checkpoint: Wait queue to trigger checkpointing |
588 | * @j_wait_commit: Wait queue to trigger commit | 588 | * @j_wait_commit: Wait queue to trigger commit |
589 | * @j_wait_updates: Wait queue to wait for updates to complete | 589 | * @j_wait_updates: Wait queue to wait for updates to complete |
@@ -592,7 +592,7 @@ struct transaction_s | |||
592 | * @j_tail: Journal tail - identifies the oldest still-used block in the | 592 | * @j_tail: Journal tail - identifies the oldest still-used block in the |
593 | * journal. | 593 | * journal. |
594 | * @j_free: Journal free - how many free blocks are there in the journal? | 594 | * @j_free: Journal free - how many free blocks are there in the journal? |
595 | * @j_first: The block number of the first usable block | 595 | * @j_first: The block number of the first usable block |
596 | * @j_last: The block number one beyond the last usable block | 596 | * @j_last: The block number one beyond the last usable block |
597 | * @j_dev: Device where we store the journal | 597 | * @j_dev: Device where we store the journal |
598 | * @j_blocksize: blocksize for the location where we store the journal. | 598 | * @j_blocksize: blocksize for the location where we store the journal. |
@@ -604,12 +604,12 @@ struct transaction_s | |||
604 | * @j_list_lock: Protects the buffer lists and internal buffer state. | 604 | * @j_list_lock: Protects the buffer lists and internal buffer state. |
605 | * @j_inode: Optional inode where we store the journal. If present, all journal | 605 | * @j_inode: Optional inode where we store the journal. If present, all journal |
606 | * block numbers are mapped into this inode via bmap(). | 606 | * block numbers are mapped into this inode via bmap(). |
607 | * @j_tail_sequence: Sequence number of the oldest transaction in the log | 607 | * @j_tail_sequence: Sequence number of the oldest transaction in the log |
608 | * @j_transaction_sequence: Sequence number of the next transaction to grant | 608 | * @j_transaction_sequence: Sequence number of the next transaction to grant |
609 | * @j_commit_sequence: Sequence number of the most recently committed | 609 | * @j_commit_sequence: Sequence number of the most recently committed |
610 | * transaction | 610 | * transaction |
611 | * @j_commit_request: Sequence number of the most recent transaction wanting | 611 | * @j_commit_request: Sequence number of the most recent transaction wanting |
612 | * commit | 612 | * commit |
613 | * @j_uuid: Uuid of client object. | 613 | * @j_uuid: Uuid of client object. |
614 | * @j_task: Pointer to the current commit thread for this journal | 614 | * @j_task: Pointer to the current commit thread for this journal |
615 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a | 615 | * @j_max_transaction_buffers: Maximum number of metadata buffers to allow in a |
@@ -699,7 +699,7 @@ struct journal_s | |||
699 | wait_queue_head_t j_wait_updates; | 699 | wait_queue_head_t j_wait_updates; |
700 | 700 | ||
701 | /* Semaphore for locking against concurrent checkpoints */ | 701 | /* Semaphore for locking against concurrent checkpoints */ |
702 | struct mutex j_checkpoint_mutex; | 702 | struct mutex j_checkpoint_mutex; |
703 | 703 | ||
704 | /* | 704 | /* |
705 | * Journal head: identifies the first unused block in the journal. | 705 | * Journal head: identifies the first unused block in the journal. |
@@ -732,7 +732,7 @@ struct journal_s | |||
732 | */ | 732 | */ |
733 | struct block_device *j_dev; | 733 | struct block_device *j_dev; |
734 | int j_blocksize; | 734 | int j_blocksize; |
735 | unsigned int j_blk_offset; | 735 | unsigned long j_blk_offset; |
736 | 736 | ||
737 | /* | 737 | /* |
738 | * Device which holds the client fs. For internal journal this will be | 738 | * Device which holds the client fs. For internal journal this will be |
@@ -823,8 +823,8 @@ struct journal_s | |||
823 | void *j_private; | 823 | void *j_private; |
824 | }; | 824 | }; |
825 | 825 | ||
826 | /* | 826 | /* |
827 | * Journal flag definitions | 827 | * Journal flag definitions |
828 | */ | 828 | */ |
829 | #define JFS_UNMOUNT 0x001 /* Journal thread is being destroyed */ | 829 | #define JFS_UNMOUNT 0x001 /* Journal thread is being destroyed */ |
830 | #define JFS_ABORT 0x002 /* Journaling has been aborted for errors. */ | 830 | #define JFS_ABORT 0x002 /* Journaling has been aborted for errors. */ |
@@ -833,7 +833,7 @@ struct journal_s | |||
833 | #define JFS_LOADED 0x010 /* The journal superblock has been loaded */ | 833 | #define JFS_LOADED 0x010 /* The journal superblock has been loaded */ |
834 | #define JFS_BARRIER 0x020 /* Use IDE barriers */ | 834 | #define JFS_BARRIER 0x020 /* Use IDE barriers */ |
835 | 835 | ||
836 | /* | 836 | /* |
837 | * Function declarations for the journaling transaction and buffer | 837 | * Function declarations for the journaling transaction and buffer |
838 | * management | 838 | * management |
839 | */ | 839 | */ |
@@ -862,11 +862,11 @@ int __journal_remove_checkpoint(struct journal_head *); | |||
862 | void __journal_insert_checkpoint(struct journal_head *, transaction_t *); | 862 | void __journal_insert_checkpoint(struct journal_head *, transaction_t *); |
863 | 863 | ||
864 | /* Buffer IO */ | 864 | /* Buffer IO */ |
865 | extern int | 865 | extern int |
866 | journal_write_metadata_buffer(transaction_t *transaction, | 866 | journal_write_metadata_buffer(transaction_t *transaction, |
867 | struct journal_head *jh_in, | 867 | struct journal_head *jh_in, |
868 | struct journal_head **jh_out, | 868 | struct journal_head **jh_out, |
869 | int blocknr); | 869 | unsigned long blocknr); |
870 | 870 | ||
871 | /* Transaction locking */ | 871 | /* Transaction locking */ |
872 | extern void __wait_on_journal (journal_t *); | 872 | extern void __wait_on_journal (journal_t *); |
@@ -890,7 +890,7 @@ static inline handle_t *journal_current_handle(void) | |||
890 | /* The journaling code user interface: | 890 | /* The journaling code user interface: |
891 | * | 891 | * |
892 | * Create and destroy handles | 892 | * Create and destroy handles |
893 | * Register buffer modifications against the current transaction. | 893 | * Register buffer modifications against the current transaction. |
894 | */ | 894 | */ |
895 | 895 | ||
896 | extern handle_t *journal_start(journal_t *, int nblocks); | 896 | extern handle_t *journal_start(journal_t *, int nblocks); |
@@ -917,11 +917,11 @@ extern journal_t * journal_init_dev(struct block_device *bdev, | |||
917 | int start, int len, int bsize); | 917 | int start, int len, int bsize); |
918 | extern journal_t * journal_init_inode (struct inode *); | 918 | extern journal_t * journal_init_inode (struct inode *); |
919 | extern int journal_update_format (journal_t *); | 919 | extern int journal_update_format (journal_t *); |
920 | extern int journal_check_used_features | 920 | extern int journal_check_used_features |
921 | (journal_t *, unsigned long, unsigned long, unsigned long); | 921 | (journal_t *, unsigned long, unsigned long, unsigned long); |
922 | extern int journal_check_available_features | 922 | extern int journal_check_available_features |
923 | (journal_t *, unsigned long, unsigned long, unsigned long); | 923 | (journal_t *, unsigned long, unsigned long, unsigned long); |
924 | extern int journal_set_features | 924 | extern int journal_set_features |
925 | (journal_t *, unsigned long, unsigned long, unsigned long); | 925 | (journal_t *, unsigned long, unsigned long, unsigned long); |
926 | extern int journal_create (journal_t *); | 926 | extern int journal_create (journal_t *); |
927 | extern int journal_load (journal_t *journal); | 927 | extern int journal_load (journal_t *journal); |
@@ -1015,7 +1015,7 @@ do { \ | |||
1015 | * bit, when set, indicates that we have had a fatal error somewhere, | 1015 | * bit, when set, indicates that we have had a fatal error somewhere, |
1016 | * either inside the journaling layer or indicated to us by the client | 1016 | * either inside the journaling layer or indicated to us by the client |
1017 | * (eg. ext3), and that we and should not commit any further | 1017 | * (eg. ext3), and that we and should not commit any further |
1018 | * transactions. | 1018 | * transactions. |
1019 | */ | 1019 | */ |
1020 | 1020 | ||
1021 | static inline int is_journal_aborted(journal_t *journal) | 1021 | static inline int is_journal_aborted(journal_t *journal) |
@@ -1082,7 +1082,7 @@ static inline int jbd_space_needed(journal_t *journal) | |||
1082 | #define BJ_Reserved 7 /* Buffer is reserved for access by journal */ | 1082 | #define BJ_Reserved 7 /* Buffer is reserved for access by journal */ |
1083 | #define BJ_Locked 8 /* Locked for I/O during commit */ | 1083 | #define BJ_Locked 8 /* Locked for I/O during commit */ |
1084 | #define BJ_Types 9 | 1084 | #define BJ_Types 9 |
1085 | 1085 | ||
1086 | extern int jbd_blocks_per_page(struct inode *inode); | 1086 | extern int jbd_blocks_per_page(struct inode *inode); |
1087 | 1087 | ||
1088 | #ifdef __KERNEL__ | 1088 | #ifdef __KERNEL__ |
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index 329ebcffa106..c8d5f207c3d4 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h | |||
@@ -115,6 +115,21 @@ static inline u64 get_jiffies_64(void) | |||
115 | ((long)(a) - (long)(b) >= 0)) | 115 | ((long)(a) - (long)(b) >= 0)) |
116 | #define time_before_eq(a,b) time_after_eq(b,a) | 116 | #define time_before_eq(a,b) time_after_eq(b,a) |
117 | 117 | ||
118 | /* Same as above, but does so with platform independent 64bit types. | ||
119 | * These must be used when utilizing jiffies_64 (i.e. return value of | ||
120 | * get_jiffies_64() */ | ||
121 | #define time_after64(a,b) \ | ||
122 | (typecheck(__u64, a) && \ | ||
123 | typecheck(__u64, b) && \ | ||
124 | ((__s64)(b) - (__s64)(a) < 0)) | ||
125 | #define time_before64(a,b) time_after64(b,a) | ||
126 | |||
127 | #define time_after_eq64(a,b) \ | ||
128 | (typecheck(__u64, a) && \ | ||
129 | typecheck(__u64, b) && \ | ||
130 | ((__s64)(a) - (__s64)(b) >= 0)) | ||
131 | #define time_before_eq64(a,b) time_after_eq64(b,a) | ||
132 | |||
118 | /* | 133 | /* |
119 | * Have the 32 bit jiffies value wrap 5 minutes after boot | 134 | * Have the 32 bit jiffies value wrap 5 minutes after boot |
120 | * so jiffies wrap bugs show up earlier. | 135 | * so jiffies wrap bugs show up earlier. |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index e44a37e2c71c..4d00988dad03 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -187,6 +187,7 @@ extern void bust_spinlocks(int yes); | |||
187 | extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ | 187 | extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ |
188 | extern int panic_timeout; | 188 | extern int panic_timeout; |
189 | extern int panic_on_oops; | 189 | extern int panic_on_oops; |
190 | extern int panic_on_unrecovered_nmi; | ||
190 | extern int tainted; | 191 | extern int tainted; |
191 | extern const char *print_tainted(void); | 192 | extern const char *print_tainted(void); |
192 | extern void add_taint(unsigned); | 193 | extern void add_taint(unsigned); |
@@ -349,4 +350,11 @@ struct sysinfo { | |||
349 | /* Trap pasters of __FUNCTION__ at compile-time */ | 350 | /* Trap pasters of __FUNCTION__ at compile-time */ |
350 | #define __FUNCTION__ (__func__) | 351 | #define __FUNCTION__ (__func__) |
351 | 352 | ||
353 | /* This helps us to avoid #ifdef CONFIG_NUMA */ | ||
354 | #ifdef CONFIG_NUMA | ||
355 | #define NUMA_BUILD 1 | ||
356 | #else | ||
357 | #define NUMA_BUILD 0 | ||
358 | #endif | ||
359 | |||
352 | #endif | 360 | #endif |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 2d229327959e..bcd9cd173c2c 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/types.h> | 20 | #include <linux/types.h> |
21 | #include <linux/list.h> | 21 | #include <linux/list.h> |
22 | #include <linux/sysfs.h> | 22 | #include <linux/sysfs.h> |
23 | #include <linux/compiler.h> | ||
23 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
24 | #include <linux/rwsem.h> | 25 | #include <linux/rwsem.h> |
25 | #include <linux/kref.h> | 26 | #include <linux/kref.h> |
@@ -71,12 +72,12 @@ static inline const char * kobject_name(const struct kobject * kobj) | |||
71 | extern void kobject_init(struct kobject *); | 72 | extern void kobject_init(struct kobject *); |
72 | extern void kobject_cleanup(struct kobject *); | 73 | extern void kobject_cleanup(struct kobject *); |
73 | 74 | ||
74 | extern int kobject_add(struct kobject *); | 75 | extern int __must_check kobject_add(struct kobject *); |
75 | extern void kobject_del(struct kobject *); | 76 | extern void kobject_del(struct kobject *); |
76 | 77 | ||
77 | extern int kobject_rename(struct kobject *, const char *new_name); | 78 | extern int __must_check kobject_rename(struct kobject *, const char *new_name); |
78 | 79 | ||
79 | extern int kobject_register(struct kobject *); | 80 | extern int __must_check kobject_register(struct kobject *); |
80 | extern void kobject_unregister(struct kobject *); | 81 | extern void kobject_unregister(struct kobject *); |
81 | 82 | ||
82 | extern struct kobject * kobject_get(struct kobject *); | 83 | extern struct kobject * kobject_get(struct kobject *); |
@@ -128,8 +129,8 @@ struct kset { | |||
128 | 129 | ||
129 | 130 | ||
130 | extern void kset_init(struct kset * k); | 131 | extern void kset_init(struct kset * k); |
131 | extern int kset_add(struct kset * k); | 132 | extern int __must_check kset_add(struct kset * k); |
132 | extern int kset_register(struct kset * k); | 133 | extern int __must_check kset_register(struct kset * k); |
133 | extern void kset_unregister(struct kset * k); | 134 | extern void kset_unregister(struct kset * k); |
134 | 135 | ||
135 | static inline struct kset * to_kset(struct kobject * kobj) | 136 | static inline struct kset * to_kset(struct kobject * kobj) |
@@ -239,7 +240,7 @@ extern struct subsystem hypervisor_subsys; | |||
239 | (obj)->subsys.kset.kobj.kset = &(_subsys).kset | 240 | (obj)->subsys.kset.kobj.kset = &(_subsys).kset |
240 | 241 | ||
241 | extern void subsystem_init(struct subsystem *); | 242 | extern void subsystem_init(struct subsystem *); |
242 | extern int subsystem_register(struct subsystem *); | 243 | extern int __must_check subsystem_register(struct subsystem *); |
243 | extern void subsystem_unregister(struct subsystem *); | 244 | extern void subsystem_unregister(struct subsystem *); |
244 | 245 | ||
245 | static inline struct subsystem * subsys_get(struct subsystem * s) | 246 | static inline struct subsystem * subsys_get(struct subsystem * s) |
@@ -258,7 +259,8 @@ struct subsys_attribute { | |||
258 | ssize_t (*store)(struct subsystem *, const char *, size_t); | 259 | ssize_t (*store)(struct subsystem *, const char *, size_t); |
259 | }; | 260 | }; |
260 | 261 | ||
261 | extern int subsys_create_file(struct subsystem * , struct subsys_attribute *); | 262 | extern int __must_check subsys_create_file(struct subsystem * , |
263 | struct subsys_attribute *); | ||
262 | 264 | ||
263 | #if defined(CONFIG_HOTPLUG) | 265 | #if defined(CONFIG_HOTPLUG) |
264 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); | 266 | void kobject_uevent(struct kobject *kobj, enum kobject_action action); |
diff --git a/include/linux/linkage.h b/include/linux/linkage.h index 932021f872d5..6c9873f88287 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h | |||
@@ -35,9 +35,13 @@ | |||
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | #define KPROBE_ENTRY(name) \ | 37 | #define KPROBE_ENTRY(name) \ |
38 | .section .kprobes.text, "ax"; \ | 38 | .pushsection .kprobes.text, "ax"; \ |
39 | ENTRY(name) | 39 | ENTRY(name) |
40 | 40 | ||
41 | #define KPROBE_END(name) \ | ||
42 | END(name); \ | ||
43 | .popsection | ||
44 | |||
41 | #ifndef END | 45 | #ifndef END |
42 | #define END(name) \ | 46 | #define END(name) \ |
43 | .size name, .-name | 47 | .size name, .-name |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 856f0ee7e84a..7b703b6d4358 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/mutex.h> | 16 | #include <linux/mutex.h> |
17 | #include <linux/debug_locks.h> | 17 | #include <linux/debug_locks.h> |
18 | #include <linux/backing-dev.h> | 18 | #include <linux/backing-dev.h> |
19 | #include <linux/mm_types.h> | ||
19 | 20 | ||
20 | struct mempolicy; | 21 | struct mempolicy; |
21 | struct anon_vma; | 22 | struct anon_vma; |
@@ -198,6 +199,7 @@ struct vm_operations_struct { | |||
198 | void (*open)(struct vm_area_struct * area); | 199 | void (*open)(struct vm_area_struct * area); |
199 | void (*close)(struct vm_area_struct * area); | 200 | void (*close)(struct vm_area_struct * area); |
200 | struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int *type); | 201 | struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int *type); |
202 | unsigned long (*nopfn)(struct vm_area_struct * area, unsigned long address); | ||
201 | int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock); | 203 | int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock); |
202 | 204 | ||
203 | /* notification that a previously read-only page is about to become | 205 | /* notification that a previously read-only page is about to become |
@@ -215,62 +217,6 @@ struct vm_operations_struct { | |||
215 | struct mmu_gather; | 217 | struct mmu_gather; |
216 | struct inode; | 218 | struct inode; |
217 | 219 | ||
218 | /* | ||
219 | * Each physical page in the system has a struct page associated with | ||
220 | * it to keep track of whatever it is we are using the page for at the | ||
221 | * moment. Note that we have no way to track which tasks are using | ||
222 | * a page, though if it is a pagecache page, rmap structures can tell us | ||
223 | * who is mapping it. | ||
224 | */ | ||
225 | struct page { | ||
226 | unsigned long flags; /* Atomic flags, some possibly | ||
227 | * updated asynchronously */ | ||
228 | atomic_t _count; /* Usage count, see below. */ | ||
229 | atomic_t _mapcount; /* Count of ptes mapped in mms, | ||
230 | * to show when page is mapped | ||
231 | * & limit reverse map searches. | ||
232 | */ | ||
233 | union { | ||
234 | struct { | ||
235 | unsigned long private; /* Mapping-private opaque data: | ||
236 | * usually used for buffer_heads | ||
237 | * if PagePrivate set; used for | ||
238 | * swp_entry_t if PageSwapCache; | ||
239 | * indicates order in the buddy | ||
240 | * system if PG_buddy is set. | ||
241 | */ | ||
242 | struct address_space *mapping; /* If low bit clear, points to | ||
243 | * inode address_space, or NULL. | ||
244 | * If page mapped as anonymous | ||
245 | * memory, low bit is set, and | ||
246 | * it points to anon_vma object: | ||
247 | * see PAGE_MAPPING_ANON below. | ||
248 | */ | ||
249 | }; | ||
250 | #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS | ||
251 | spinlock_t ptl; | ||
252 | #endif | ||
253 | }; | ||
254 | pgoff_t index; /* Our offset within mapping. */ | ||
255 | struct list_head lru; /* Pageout list, eg. active_list | ||
256 | * protected by zone->lru_lock ! | ||
257 | */ | ||
258 | /* | ||
259 | * On machines where all RAM is mapped into kernel address space, | ||
260 | * we can simply calculate the virtual address. On machines with | ||
261 | * highmem some memory is mapped into kernel virtual memory | ||
262 | * dynamically, so we need a place to store that address. | ||
263 | * Note that this field could be 16 bits on x86 ... ;) | ||
264 | * | ||
265 | * Architectures with slow multiplication can define | ||
266 | * WANT_PAGE_VIRTUAL in asm/page.h | ||
267 | */ | ||
268 | #if defined(WANT_PAGE_VIRTUAL) | ||
269 | void *virtual; /* Kernel virtual address (NULL if | ||
270 | not kmapped, ie. highmem) */ | ||
271 | #endif /* WANT_PAGE_VIRTUAL */ | ||
272 | }; | ||
273 | |||
274 | #define page_private(page) ((page)->private) | 220 | #define page_private(page) ((page)->private) |
275 | #define set_page_private(page, v) ((page)->private = (v)) | 221 | #define set_page_private(page, v) ((page)->private = (v)) |
276 | 222 | ||
@@ -501,7 +447,11 @@ static inline struct zone *page_zone(struct page *page) | |||
501 | 447 | ||
502 | static inline unsigned long zone_to_nid(struct zone *zone) | 448 | static inline unsigned long zone_to_nid(struct zone *zone) |
503 | { | 449 | { |
504 | return zone->zone_pgdat->node_id; | 450 | #ifdef CONFIG_NUMA |
451 | return zone->node; | ||
452 | #else | ||
453 | return 0; | ||
454 | #endif | ||
505 | } | 455 | } |
506 | 456 | ||
507 | static inline unsigned long page_to_nid(struct page *page) | 457 | static inline unsigned long page_to_nid(struct page *page) |
@@ -546,11 +496,6 @@ static inline void set_page_links(struct page *page, enum zone_type zone, | |||
546 | */ | 496 | */ |
547 | #include <linux/vmstat.h> | 497 | #include <linux/vmstat.h> |
548 | 498 | ||
549 | #ifndef CONFIG_DISCONTIGMEM | ||
550 | /* The array of struct pages - for discontigmem use pgdat->lmem_map */ | ||
551 | extern struct page *mem_map; | ||
552 | #endif | ||
553 | |||
554 | static __always_inline void *lowmem_page_address(struct page *page) | 499 | static __always_inline void *lowmem_page_address(struct page *page) |
555 | { | 500 | { |
556 | return __va(page_to_pfn(page) << PAGE_SHIFT); | 501 | return __va(page_to_pfn(page) << PAGE_SHIFT); |
@@ -650,6 +595,12 @@ static inline int page_mapped(struct page *page) | |||
650 | #define NOPAGE_OOM ((struct page *) (-1)) | 595 | #define NOPAGE_OOM ((struct page *) (-1)) |
651 | 596 | ||
652 | /* | 597 | /* |
598 | * Error return values for the *_nopfn functions | ||
599 | */ | ||
600 | #define NOPFN_SIGBUS ((unsigned long) -1) | ||
601 | #define NOPFN_OOM ((unsigned long) -2) | ||
602 | |||
603 | /* | ||
653 | * Different kinds of faults, as returned by handle_mm_fault(). | 604 | * Different kinds of faults, as returned by handle_mm_fault(). |
654 | * Used to decide whether a process gets delivered SIGBUS or | 605 | * Used to decide whether a process gets delivered SIGBUS or |
655 | * just gets major/minor fault counters bumped up. | 606 | * just gets major/minor fault counters bumped up. |
@@ -937,6 +888,56 @@ extern void free_area_init(unsigned long * zones_size); | |||
937 | extern void free_area_init_node(int nid, pg_data_t *pgdat, | 888 | extern void free_area_init_node(int nid, pg_data_t *pgdat, |
938 | unsigned long * zones_size, unsigned long zone_start_pfn, | 889 | unsigned long * zones_size, unsigned long zone_start_pfn, |
939 | unsigned long *zholes_size); | 890 | unsigned long *zholes_size); |
891 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP | ||
892 | /* | ||
893 | * With CONFIG_ARCH_POPULATES_NODE_MAP set, an architecture may initialise its | ||
894 | * zones, allocate the backing mem_map and account for memory holes in a more | ||
895 | * architecture independent manner. This is a substitute for creating the | ||
896 | * zone_sizes[] and zholes_size[] arrays and passing them to | ||
897 | * free_area_init_node() | ||
898 | * | ||
899 | * An architecture is expected to register range of page frames backed by | ||
900 | * physical memory with add_active_range() before calling | ||
901 | * free_area_init_nodes() passing in the PFN each zone ends at. At a basic | ||
902 | * usage, an architecture is expected to do something like | ||
903 | * | ||
904 | * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn, | ||
905 | * max_highmem_pfn}; | ||
906 | * for_each_valid_physical_page_range() | ||
907 | * add_active_range(node_id, start_pfn, end_pfn) | ||
908 | * free_area_init_nodes(max_zone_pfns); | ||
909 | * | ||
910 | * If the architecture guarantees that there are no holes in the ranges | ||
911 | * registered with add_active_range(), free_bootmem_active_regions() | ||
912 | * will call free_bootmem_node() for each registered physical page range. | ||
913 | * Similarly sparse_memory_present_with_active_regions() calls | ||
914 | * memory_present() for each range when SPARSEMEM is enabled. | ||
915 | * | ||
916 | * See mm/page_alloc.c for more information on each function exposed by | ||
917 | * CONFIG_ARCH_POPULATES_NODE_MAP | ||
918 | */ | ||
919 | extern void free_area_init_nodes(unsigned long *max_zone_pfn); | ||
920 | extern void add_active_range(unsigned int nid, unsigned long start_pfn, | ||
921 | unsigned long end_pfn); | ||
922 | extern void shrink_active_range(unsigned int nid, unsigned long old_end_pfn, | ||
923 | unsigned long new_end_pfn); | ||
924 | extern void push_node_boundaries(unsigned int nid, unsigned long start_pfn, | ||
925 | unsigned long end_pfn); | ||
926 | extern void remove_all_active_ranges(void); | ||
927 | extern unsigned long absent_pages_in_range(unsigned long start_pfn, | ||
928 | unsigned long end_pfn); | ||
929 | extern void get_pfn_range_for_nid(unsigned int nid, | ||
930 | unsigned long *start_pfn, unsigned long *end_pfn); | ||
931 | extern unsigned long find_min_pfn_with_active_regions(void); | ||
932 | extern unsigned long find_max_pfn_with_active_regions(void); | ||
933 | extern void free_bootmem_with_active_regions(int nid, | ||
934 | unsigned long max_low_pfn); | ||
935 | extern void sparse_memory_present_with_active_regions(int nid); | ||
936 | #ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | ||
937 | extern int early_pfn_to_nid(unsigned long pfn); | ||
938 | #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ | ||
939 | #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */ | ||
940 | extern void set_dma_reserve(unsigned long new_dma_reserve); | ||
940 | extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long); | 941 | extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long); |
941 | extern void setup_per_zone_pages_min(void); | 942 | extern void setup_per_zone_pages_min(void); |
942 | extern void mem_init(void); | 943 | extern void mem_init(void); |
@@ -1130,7 +1131,7 @@ void drop_slab(void); | |||
1130 | extern int randomize_va_space; | 1131 | extern int randomize_va_space; |
1131 | #endif | 1132 | #endif |
1132 | 1133 | ||
1133 | const char *arch_vma_name(struct vm_area_struct *vma); | 1134 | __attribute__((weak)) const char *arch_vma_name(struct vm_area_struct *vma); |
1134 | 1135 | ||
1135 | #endif /* __KERNEL__ */ | 1136 | #endif /* __KERNEL__ */ |
1136 | #endif /* _LINUX_MM_H */ | 1137 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h new file mode 100644 index 000000000000..c3852fd4a1cc --- /dev/null +++ b/include/linux/mm_types.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifndef _LINUX_MM_TYPES_H | ||
2 | #define _LINUX_MM_TYPES_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/threads.h> | ||
6 | #include <linux/list.h> | ||
7 | #include <linux/spinlock.h> | ||
8 | |||
9 | struct address_space; | ||
10 | |||
11 | /* | ||
12 | * Each physical page in the system has a struct page associated with | ||
13 | * it to keep track of whatever it is we are using the page for at the | ||
14 | * moment. Note that we have no way to track which tasks are using | ||
15 | * a page, though if it is a pagecache page, rmap structures can tell us | ||
16 | * who is mapping it. | ||
17 | */ | ||
18 | struct page { | ||
19 | unsigned long flags; /* Atomic flags, some possibly | ||
20 | * updated asynchronously */ | ||
21 | atomic_t _count; /* Usage count, see below. */ | ||
22 | atomic_t _mapcount; /* Count of ptes mapped in mms, | ||
23 | * to show when page is mapped | ||
24 | * & limit reverse map searches. | ||
25 | */ | ||
26 | union { | ||
27 | struct { | ||
28 | unsigned long private; /* Mapping-private opaque data: | ||
29 | * usually used for buffer_heads | ||
30 | * if PagePrivate set; used for | ||
31 | * swp_entry_t if PageSwapCache; | ||
32 | * indicates order in the buddy | ||
33 | * system if PG_buddy is set. | ||
34 | */ | ||
35 | struct address_space *mapping; /* If low bit clear, points to | ||
36 | * inode address_space, or NULL. | ||
37 | * If page mapped as anonymous | ||
38 | * memory, low bit is set, and | ||
39 | * it points to anon_vma object: | ||
40 | * see PAGE_MAPPING_ANON below. | ||
41 | */ | ||
42 | }; | ||
43 | #if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS | ||
44 | spinlock_t ptl; | ||
45 | #endif | ||
46 | }; | ||
47 | pgoff_t index; /* Our offset within mapping. */ | ||
48 | struct list_head lru; /* Pageout list, eg. active_list | ||
49 | * protected by zone->lru_lock ! | ||
50 | */ | ||
51 | /* | ||
52 | * On machines where all RAM is mapped into kernel address space, | ||
53 | * we can simply calculate the virtual address. On machines with | ||
54 | * highmem some memory is mapped into kernel virtual memory | ||
55 | * dynamically, so we need a place to store that address. | ||
56 | * Note that this field could be 16 bits on x86 ... ;) | ||
57 | * | ||
58 | * Architectures with slow multiplication can define | ||
59 | * WANT_PAGE_VIRTUAL in asm/page.h | ||
60 | */ | ||
61 | #if defined(WANT_PAGE_VIRTUAL) | ||
62 | void *virtual; /* Kernel virtual address (NULL if | ||
63 | not kmapped, ie. highmem) */ | ||
64 | #endif /* WANT_PAGE_VIRTUAL */ | ||
65 | }; | ||
66 | |||
67 | #endif /* _LINUX_MM_TYPES_H */ | ||
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 3693f1a52788..59855b8718a0 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -58,6 +58,7 @@ enum zone_stat_item { | |||
58 | NR_WRITEBACK, | 58 | NR_WRITEBACK, |
59 | NR_UNSTABLE_NFS, /* NFS unstable pages */ | 59 | NR_UNSTABLE_NFS, /* NFS unstable pages */ |
60 | NR_BOUNCE, | 60 | NR_BOUNCE, |
61 | NR_VMSCAN_WRITE, | ||
61 | #ifdef CONFIG_NUMA | 62 | #ifdef CONFIG_NUMA |
62 | NUMA_HIT, /* allocated in intended node */ | 63 | NUMA_HIT, /* allocated in intended node */ |
63 | NUMA_MISS, /* allocated in non intended node */ | 64 | NUMA_MISS, /* allocated in non intended node */ |
@@ -167,6 +168,7 @@ struct zone { | |||
167 | unsigned long lowmem_reserve[MAX_NR_ZONES]; | 168 | unsigned long lowmem_reserve[MAX_NR_ZONES]; |
168 | 169 | ||
169 | #ifdef CONFIG_NUMA | 170 | #ifdef CONFIG_NUMA |
171 | int node; | ||
170 | /* | 172 | /* |
171 | * zone reclaim becomes active if more unmapped pages exist. | 173 | * zone reclaim becomes active if more unmapped pages exist. |
172 | */ | 174 | */ |
@@ -305,6 +307,18 @@ struct zonelist { | |||
305 | struct zone *zones[MAX_NUMNODES * MAX_NR_ZONES + 1]; // NULL delimited | 307 | struct zone *zones[MAX_NUMNODES * MAX_NR_ZONES + 1]; // NULL delimited |
306 | }; | 308 | }; |
307 | 309 | ||
310 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP | ||
311 | struct node_active_region { | ||
312 | unsigned long start_pfn; | ||
313 | unsigned long end_pfn; | ||
314 | int nid; | ||
315 | }; | ||
316 | #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */ | ||
317 | |||
318 | #ifndef CONFIG_DISCONTIGMEM | ||
319 | /* The array of struct pages - for discontigmem use pgdat->lmem_map */ | ||
320 | extern struct page *mem_map; | ||
321 | #endif | ||
308 | 322 | ||
309 | /* | 323 | /* |
310 | * The pg_data_t structure is used in machines with CONFIG_DISCONTIGMEM | 324 | * The pg_data_t structure is used in machines with CONFIG_DISCONTIGMEM |
@@ -518,7 +532,8 @@ extern struct zone *next_zone(struct zone *zone); | |||
518 | 532 | ||
519 | #endif | 533 | #endif |
520 | 534 | ||
521 | #ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID | 535 | #if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \ |
536 | !defined(CONFIG_ARCH_POPULATES_NODE_MAP) | ||
522 | #define early_pfn_to_nid(nid) (0UL) | 537 | #define early_pfn_to_nid(nid) (0UL) |
523 | #endif | 538 | #endif |
524 | 539 | ||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index f7ca0b09075d..e0c393cc7240 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
@@ -308,4 +308,16 @@ struct input_device_id { | |||
308 | kernel_ulong_t driver_info; | 308 | kernel_ulong_t driver_info; |
309 | }; | 309 | }; |
310 | 310 | ||
311 | /* EISA */ | ||
312 | |||
313 | #define EISA_SIG_LEN 8 | ||
314 | |||
315 | /* The EISA signature, in ASCII form, null terminated */ | ||
316 | struct eisa_device_id { | ||
317 | char sig[EISA_SIG_LEN]; | ||
318 | kernel_ulong_t driver_data; | ||
319 | }; | ||
320 | |||
321 | #define EISA_DEVICE_MODALIAS_FMT "eisa:s%s" | ||
322 | |||
311 | #endif /* LINUX_MOD_DEVICETABLE_H */ | 323 | #endif /* LINUX_MOD_DEVICETABLE_H */ |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index 36f5bcf513b0..98c9b9f667a5 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -315,10 +315,6 @@ extern void nfs_end_data_update(struct inode *); | |||
315 | extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); | 315 | extern struct nfs_open_context *get_nfs_open_context(struct nfs_open_context *ctx); |
316 | extern void put_nfs_open_context(struct nfs_open_context *ctx); | 316 | extern void put_nfs_open_context(struct nfs_open_context *ctx); |
317 | extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, int mode); | 317 | extern struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_cred *cred, int mode); |
318 | extern struct vfsmount *nfs_do_submount(const struct vfsmount *mnt_parent, | ||
319 | const struct dentry *dentry, | ||
320 | struct nfs_fh *fh, | ||
321 | struct nfs_fattr *fattr); | ||
322 | 318 | ||
323 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ | 319 | /* linux/net/ipv4/ipconfig.c: trims ip addr off front of name, too. */ |
324 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ | 320 | extern u32 root_nfs_parse_addr(char *name); /*__init*/ |
diff --git a/include/linux/nfsd/nfsfh.h b/include/linux/nfsd/nfsfh.h index f9edcd2ff3c8..31a3cb617ce0 100644 --- a/include/linux/nfsd/nfsfh.h +++ b/include/linux/nfsd/nfsfh.h | |||
@@ -269,14 +269,8 @@ fill_post_wcc(struct svc_fh *fhp) | |||
269 | fhp->fh_post_uid = inode->i_uid; | 269 | fhp->fh_post_uid = inode->i_uid; |
270 | fhp->fh_post_gid = inode->i_gid; | 270 | fhp->fh_post_gid = inode->i_gid; |
271 | fhp->fh_post_size = inode->i_size; | 271 | fhp->fh_post_size = inode->i_size; |
272 | if (inode->i_blksize) { | 272 | fhp->fh_post_blksize = BLOCK_SIZE; |
273 | fhp->fh_post_blksize = inode->i_blksize; | 273 | fhp->fh_post_blocks = inode->i_blocks; |
274 | fhp->fh_post_blocks = inode->i_blocks; | ||
275 | } else { | ||
276 | fhp->fh_post_blksize = BLOCK_SIZE; | ||
277 | /* how much do we care for accuracy with MinixFS? */ | ||
278 | fhp->fh_post_blocks = (inode->i_size+511) >> 9; | ||
279 | } | ||
280 | fhp->fh_post_rdev[0] = htonl((u32)imajor(inode)); | 274 | fhp->fh_post_rdev[0] = htonl((u32)imajor(inode)); |
281 | fhp->fh_post_rdev[1] = htonl((u32)iminor(inode)); | 275 | fhp->fh_post_rdev[1] = htonl((u32)iminor(inode)); |
282 | fhp->fh_post_atime = inode->i_atime; | 276 | fhp->fh_post_atime = inode->i_atime; |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 8565b81d7fbc..5c3a4176eb64 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -49,6 +49,7 @@ | |||
49 | #include <linux/types.h> | 49 | #include <linux/types.h> |
50 | #include <linux/ioport.h> | 50 | #include <linux/ioport.h> |
51 | #include <linux/list.h> | 51 | #include <linux/list.h> |
52 | #include <linux/compiler.h> | ||
52 | #include <linux/errno.h> | 53 | #include <linux/errno.h> |
53 | #include <linux/device.h> | 54 | #include <linux/device.h> |
54 | 55 | ||
@@ -346,6 +347,8 @@ struct pci_driver { | |||
346 | int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ | 347 | int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ |
347 | void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ | 348 | void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ |
348 | int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ | 349 | int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ |
350 | int (*suspend_late) (struct pci_dev *dev, pm_message_t state); | ||
351 | int (*resume_early) (struct pci_dev *dev); | ||
349 | int (*resume) (struct pci_dev *dev); /* Device woken up */ | 352 | int (*resume) (struct pci_dev *dev); /* Device woken up */ |
350 | int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable); /* Enable wake event */ | 353 | int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable); /* Enable wake event */ |
351 | void (*shutdown) (struct pci_dev *dev); | 354 | void (*shutdown) (struct pci_dev *dev); |
@@ -353,6 +356,8 @@ struct pci_driver { | |||
353 | struct pci_error_handlers *err_handler; | 356 | struct pci_error_handlers *err_handler; |
354 | struct device_driver driver; | 357 | struct device_driver driver; |
355 | struct pci_dynids dynids; | 358 | struct pci_dynids dynids; |
359 | |||
360 | int multithread_probe; | ||
356 | }; | 361 | }; |
357 | 362 | ||
358 | #define to_pci_driver(drv) container_of(drv,struct pci_driver, driver) | 363 | #define to_pci_driver(drv) container_of(drv,struct pci_driver, driver) |
@@ -401,7 +406,7 @@ extern struct list_head pci_root_buses; /* list of all known PCI buses */ | |||
401 | extern struct list_head pci_devices; /* list of all devices */ | 406 | extern struct list_head pci_devices; /* list of all devices */ |
402 | 407 | ||
403 | void pcibios_fixup_bus(struct pci_bus *); | 408 | void pcibios_fixup_bus(struct pci_bus *); |
404 | int pcibios_enable_device(struct pci_dev *, int mask); | 409 | int __must_check pcibios_enable_device(struct pci_dev *, int mask); |
405 | char *pcibios_setup (char *str); | 410 | char *pcibios_setup (char *str); |
406 | 411 | ||
407 | /* Used only when drivers/pci/setup.c is used */ | 412 | /* Used only when drivers/pci/setup.c is used */ |
@@ -428,7 +433,7 @@ int pci_scan_slot(struct pci_bus *bus, int devfn); | |||
428 | struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); | 433 | struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); |
429 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); | 434 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); |
430 | unsigned int pci_scan_child_bus(struct pci_bus *bus); | 435 | unsigned int pci_scan_child_bus(struct pci_bus *bus); |
431 | void pci_bus_add_device(struct pci_dev *dev); | 436 | int __must_check pci_bus_add_device(struct pci_dev *dev); |
432 | void pci_read_bridge_bases(struct pci_bus *child); | 437 | void pci_read_bridge_bases(struct pci_bus *child); |
433 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); | 438 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); |
434 | int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); | 439 | int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); |
@@ -436,6 +441,7 @@ extern struct pci_dev *pci_dev_get(struct pci_dev *dev); | |||
436 | extern void pci_dev_put(struct pci_dev *dev); | 441 | extern void pci_dev_put(struct pci_dev *dev); |
437 | extern void pci_remove_bus(struct pci_bus *b); | 442 | extern void pci_remove_bus(struct pci_bus *b); |
438 | extern void pci_remove_bus_device(struct pci_dev *dev); | 443 | extern void pci_remove_bus_device(struct pci_dev *dev); |
444 | extern void pci_stop_bus_device(struct pci_dev *dev); | ||
439 | void pci_setup_cardbus(struct pci_bus *bus); | 445 | void pci_setup_cardbus(struct pci_bus *bus); |
440 | 446 | ||
441 | /* Generic PCI functions exported to card drivers */ | 447 | /* Generic PCI functions exported to card drivers */ |
@@ -488,19 +494,19 @@ static inline int pci_write_config_dword(struct pci_dev *dev, int where, u32 val | |||
488 | return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val); | 494 | return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val); |
489 | } | 495 | } |
490 | 496 | ||
491 | int pci_enable_device(struct pci_dev *dev); | 497 | int __must_check pci_enable_device(struct pci_dev *dev); |
492 | int pci_enable_device_bars(struct pci_dev *dev, int mask); | 498 | int __must_check pci_enable_device_bars(struct pci_dev *dev, int mask); |
493 | void pci_disable_device(struct pci_dev *dev); | 499 | void pci_disable_device(struct pci_dev *dev); |
494 | void pci_set_master(struct pci_dev *dev); | 500 | void pci_set_master(struct pci_dev *dev); |
495 | #define HAVE_PCI_SET_MWI | 501 | #define HAVE_PCI_SET_MWI |
496 | int pci_set_mwi(struct pci_dev *dev); | 502 | int __must_check pci_set_mwi(struct pci_dev *dev); |
497 | void pci_clear_mwi(struct pci_dev *dev); | 503 | void pci_clear_mwi(struct pci_dev *dev); |
498 | void pci_intx(struct pci_dev *dev, int enable); | 504 | void pci_intx(struct pci_dev *dev, int enable); |
499 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); | 505 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
500 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); | 506 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
501 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); | 507 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); |
502 | int pci_assign_resource(struct pci_dev *dev, int i); | 508 | int __must_check pci_assign_resource(struct pci_dev *dev, int i); |
503 | int pci_assign_resource_fixed(struct pci_dev *dev, int i); | 509 | int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i); |
504 | void pci_restore_bars(struct pci_dev *dev); | 510 | void pci_restore_bars(struct pci_dev *dev); |
505 | 511 | ||
506 | /* ROM control related routines */ | 512 | /* ROM control related routines */ |
@@ -526,23 +532,24 @@ void pdev_sort_resources(struct pci_dev *, struct resource_list *); | |||
526 | void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), | 532 | void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), |
527 | int (*)(struct pci_dev *, u8, u8)); | 533 | int (*)(struct pci_dev *, u8, u8)); |
528 | #define HAVE_PCI_REQ_REGIONS 2 | 534 | #define HAVE_PCI_REQ_REGIONS 2 |
529 | int pci_request_regions(struct pci_dev *, const char *); | 535 | int __must_check pci_request_regions(struct pci_dev *, const char *); |
530 | void pci_release_regions(struct pci_dev *); | 536 | void pci_release_regions(struct pci_dev *); |
531 | int pci_request_region(struct pci_dev *, int, const char *); | 537 | int __must_check pci_request_region(struct pci_dev *, int, const char *); |
532 | void pci_release_region(struct pci_dev *, int); | 538 | void pci_release_region(struct pci_dev *, int); |
533 | 539 | ||
534 | /* drivers/pci/bus.c */ | 540 | /* drivers/pci/bus.c */ |
535 | int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, | 541 | int __must_check pci_bus_alloc_resource(struct pci_bus *bus, |
536 | resource_size_t size, resource_size_t align, | 542 | struct resource *res, resource_size_t size, |
537 | resource_size_t min, unsigned int type_mask, | 543 | resource_size_t align, resource_size_t min, |
538 | void (*alignf)(void *, struct resource *, | 544 | unsigned int type_mask, |
539 | resource_size_t, resource_size_t), | 545 | void (*alignf)(void *, struct resource *, |
540 | void *alignf_data); | 546 | resource_size_t, resource_size_t), |
547 | void *alignf_data); | ||
541 | void pci_enable_bridges(struct pci_bus *bus); | 548 | void pci_enable_bridges(struct pci_bus *bus); |
542 | 549 | ||
543 | /* Proper probing supporting hot-pluggable devices */ | 550 | /* Proper probing supporting hot-pluggable devices */ |
544 | int __pci_register_driver(struct pci_driver *, struct module *); | 551 | int __must_check __pci_register_driver(struct pci_driver *, struct module *); |
545 | static inline int pci_register_driver(struct pci_driver *driver) | 552 | static inline int __must_check pci_register_driver(struct pci_driver *driver) |
546 | { | 553 | { |
547 | return __pci_register_driver(driver, THIS_MODULE); | 554 | return __pci_register_driver(driver, THIS_MODULE); |
548 | } | 555 | } |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 6a1e09834559..ab032ceafa84 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -1411,6 +1411,7 @@ | |||
1411 | #define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009 | 1411 | #define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009 |
1412 | #define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017 | 1412 | #define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017 |
1413 | #define PCI_DEVICE_ID_SERVERWORKS_EPB 0x0103 | 1413 | #define PCI_DEVICE_ID_SERVERWORKS_EPB 0x0103 |
1414 | #define PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE 0x0132 | ||
1414 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 | 1415 | #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 |
1415 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 | 1416 | #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 |
1416 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 | 1417 | #define PCI_DEVICE_ID_SERVERWORKS_CSB6 0x0203 |
@@ -1482,9 +1483,6 @@ | |||
1482 | #define PCI_DEVICE_ID_MARVELL_GT64260 0x6430 | 1483 | #define PCI_DEVICE_ID_MARVELL_GT64260 0x6430 |
1483 | #define PCI_DEVICE_ID_MARVELL_MV64360 0x6460 | 1484 | #define PCI_DEVICE_ID_MARVELL_MV64360 0x6460 |
1484 | #define PCI_DEVICE_ID_MARVELL_MV64460 0x6480 | 1485 | #define PCI_DEVICE_ID_MARVELL_MV64460 0x6480 |
1485 | #define PCI_DEVICE_ID_MARVELL_GT96100 0x9652 | ||
1486 | #define PCI_DEVICE_ID_MARVELL_GT96100A 0x9653 | ||
1487 | |||
1488 | 1486 | ||
1489 | #define PCI_VENDOR_ID_V3 0x11b0 | 1487 | #define PCI_VENDOR_ID_V3 0x11b0 |
1490 | #define PCI_DEVICE_ID_V3_V960 0x0001 | 1488 | #define PCI_DEVICE_ID_V3_V960 0x0001 |
diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 96930cb5927c..7d0e26cba420 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h | |||
@@ -196,7 +196,7 @@ | |||
196 | #define PCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */ | 196 | #define PCI_CAP_ID_MSI 0x05 /* Message Signalled Interrupts */ |
197 | #define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */ | 197 | #define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */ |
198 | #define PCI_CAP_ID_PCIX 0x07 /* PCI-X */ | 198 | #define PCI_CAP_ID_PCIX 0x07 /* PCI-X */ |
199 | #define PCI_CAP_ID_HT_IRQCONF 0x08 /* HyperTransport IRQ Configuration */ | 199 | #define PCI_CAP_ID_HT 0x08 /* HyperTransport */ |
200 | #define PCI_CAP_ID_VNDR 0x09 /* Vendor specific capability */ | 200 | #define PCI_CAP_ID_VNDR 0x09 /* Vendor specific capability */ |
201 | #define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */ | 201 | #define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */ |
202 | #define PCI_CAP_ID_EXP 0x10 /* PCI Express */ | 202 | #define PCI_CAP_ID_EXP 0x10 /* PCI Express */ |
diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h index b44e01a70914..6cd91e3f9820 100644 --- a/include/linux/pcieport_if.h +++ b/include/linux/pcieport_if.h | |||
@@ -62,6 +62,12 @@ struct pcie_port_service_driver { | |||
62 | int (*suspend) (struct pcie_device *dev, pm_message_t state); | 62 | int (*suspend) (struct pcie_device *dev, pm_message_t state); |
63 | int (*resume) (struct pcie_device *dev); | 63 | int (*resume) (struct pcie_device *dev); |
64 | 64 | ||
65 | /* Service Error Recovery Handler */ | ||
66 | struct pci_error_handlers *err_handler; | ||
67 | |||
68 | /* Link Reset Capability - AER service driver specific */ | ||
69 | pci_ers_result_t (*reset_link) (struct pci_dev *dev); | ||
70 | |||
65 | const struct pcie_port_service_id *id_table; | 71 | const struct pcie_port_service_id *id_table; |
66 | struct device_driver driver; | 72 | struct device_driver driver; |
67 | }; | 73 | }; |
diff --git a/include/linux/pid.h b/include/linux/pid.h index 29960b03bef7..93da7e2d9f30 100644 --- a/include/linux/pid.h +++ b/include/linux/pid.h | |||
@@ -76,6 +76,8 @@ extern int FASTCALL(attach_pid(struct task_struct *task, | |||
76 | enum pid_type type, int nr)); | 76 | enum pid_type type, int nr)); |
77 | 77 | ||
78 | extern void FASTCALL(detach_pid(struct task_struct *task, enum pid_type)); | 78 | extern void FASTCALL(detach_pid(struct task_struct *task, enum pid_type)); |
79 | extern void FASTCALL(transfer_pid(struct task_struct *old, | ||
80 | struct task_struct *new, enum pid_type)); | ||
79 | 81 | ||
80 | /* | 82 | /* |
81 | * look up a PID in the hash table. Must be called with the tasklist_lock | 83 | * look up a PID in the hash table. Must be called with the tasklist_lock |
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 782090c68932..29cd6dee13db 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h | |||
@@ -49,6 +49,8 @@ struct platform_driver { | |||
49 | int (*remove)(struct platform_device *); | 49 | int (*remove)(struct platform_device *); |
50 | void (*shutdown)(struct platform_device *); | 50 | void (*shutdown)(struct platform_device *); |
51 | int (*suspend)(struct platform_device *, pm_message_t state); | 51 | int (*suspend)(struct platform_device *, pm_message_t state); |
52 | int (*suspend_late)(struct platform_device *, pm_message_t state); | ||
53 | int (*resume_early)(struct platform_device *); | ||
52 | int (*resume)(struct platform_device *); | 54 | int (*resume)(struct platform_device *); |
53 | struct device_driver driver; | 55 | struct device_driver driver; |
54 | }; | 56 | }; |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 658c1b93d5bb..6b27e07aef19 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
@@ -142,29 +142,61 @@ typedef struct pm_message { | |||
142 | } pm_message_t; | 142 | } pm_message_t; |
143 | 143 | ||
144 | /* | 144 | /* |
145 | * There are 4 important states driver can be in: | 145 | * Several driver power state transitions are externally visible, affecting |
146 | * ON -- driver is working | 146 | * the state of pending I/O queues and (for drivers that touch hardware) |
147 | * FREEZE -- stop operations and apply whatever policy is applicable to a | 147 | * interrupts, wakeups, DMA, and other hardware state. There may also be |
148 | * suspended driver of that class, freeze queues for block like IDE | 148 | * internal transitions to various low power modes, which are transparent |
149 | * does, drop packets for ethernet, etc... stop DMA engine too etc... | 149 | * to the rest of the driver stack (such as a driver that's ON gating off |
150 | * so a consistent image can be saved; but do not power any hardware | 150 | * clocks which are not in active use). |
151 | * down. | ||
152 | * SUSPEND - like FREEZE, but hardware is doing as much powersaving as | ||
153 | * possible. Roughly pci D3. | ||
154 | * | 151 | * |
155 | * Unfortunately, current drivers only recognize numeric values 0 (ON) and 3 | 152 | * One transition is triggered by resume(), after a suspend() call; the |
156 | * (SUSPEND). We'll need to fix the drivers. So yes, putting 3 to all different | 153 | * message is implicit: |
157 | * defines is intentional, and will go away as soon as drivers are fixed. Also | 154 | * |
158 | * note that typedef is neccessary, we'll probably want to switch to | 155 | * ON Driver starts working again, responding to hardware events |
159 | * typedef struct pm_message_t { int event; int flags; } pm_message_t | 156 | * and software requests. The hardware may have gone through |
160 | * or something similar soon. | 157 | * a power-off reset, or it may have maintained state from the |
158 | * previous suspend() which the driver will rely on while | ||
159 | * resuming. On most platforms, there are no restrictions on | ||
160 | * availability of resources like clocks during resume(). | ||
161 | * | ||
162 | * Other transitions are triggered by messages sent using suspend(). All | ||
163 | * these transitions quiesce the driver, so that I/O queues are inactive. | ||
164 | * That commonly entails turning off IRQs and DMA; there may be rules | ||
165 | * about how to quiesce that are specific to the bus or the device's type. | ||
166 | * (For example, network drivers mark the link state.) Other details may | ||
167 | * differ according to the message: | ||
168 | * | ||
169 | * SUSPEND Quiesce, enter a low power device state appropriate for | ||
170 | * the upcoming system state (such as PCI_D3hot), and enable | ||
171 | * wakeup events as appropriate. | ||
172 | * | ||
173 | * FREEZE Quiesce operations so that a consistent image can be saved; | ||
174 | * but do NOT otherwise enter a low power device state, and do | ||
175 | * NOT emit system wakeup events. | ||
176 | * | ||
177 | * PRETHAW Quiesce as if for FREEZE; additionally, prepare for restoring | ||
178 | * the system from a snapshot taken after an earlier FREEZE. | ||
179 | * Some drivers will need to reset their hardware state instead | ||
180 | * of preserving it, to ensure that it's never mistaken for the | ||
181 | * state which that earlier snapshot had set up. | ||
182 | * | ||
183 | * A minimally power-aware driver treats all messages as SUSPEND, fully | ||
184 | * reinitializes its device during resume() -- whether or not it was reset | ||
185 | * during the suspend/resume cycle -- and can't issue wakeup events. | ||
186 | * | ||
187 | * More power-aware drivers may also use low power states at runtime as | ||
188 | * well as during system sleep states like PM_SUSPEND_STANDBY. They may | ||
189 | * be able to use wakeup events to exit from runtime low-power states, | ||
190 | * or from system low-power states such as standby or suspend-to-RAM. | ||
161 | */ | 191 | */ |
162 | 192 | ||
163 | #define PM_EVENT_ON 0 | 193 | #define PM_EVENT_ON 0 |
164 | #define PM_EVENT_FREEZE 1 | 194 | #define PM_EVENT_FREEZE 1 |
165 | #define PM_EVENT_SUSPEND 2 | 195 | #define PM_EVENT_SUSPEND 2 |
196 | #define PM_EVENT_PRETHAW 3 | ||
166 | 197 | ||
167 | #define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) | 198 | #define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) |
199 | #define PMSG_PRETHAW ((struct pm_message){ .event = PM_EVENT_PRETHAW, }) | ||
168 | #define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) | 200 | #define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) |
169 | #define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) | 201 | #define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) |
170 | 202 | ||
@@ -190,6 +222,7 @@ extern void device_resume(void); | |||
190 | extern suspend_disk_method_t pm_disk_mode; | 222 | extern suspend_disk_method_t pm_disk_mode; |
191 | 223 | ||
192 | extern int device_suspend(pm_message_t state); | 224 | extern int device_suspend(pm_message_t state); |
225 | extern int device_prepare_suspend(pm_message_t state); | ||
193 | 226 | ||
194 | #define device_set_wakeup_enable(dev,val) \ | 227 | #define device_set_wakeup_enable(dev,val) \ |
195 | ((dev)->power.should_wakeup = !!(val)) | 228 | ((dev)->power.should_wakeup = !!(val)) |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 3435ca38dd14..57f70bc8b24b 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
@@ -268,7 +268,9 @@ static inline struct proc_dir_entry *PDE(const struct inode *inode) | |||
268 | struct proc_maps_private { | 268 | struct proc_maps_private { |
269 | struct pid *pid; | 269 | struct pid *pid; |
270 | struct task_struct *task; | 270 | struct task_struct *task; |
271 | #ifdef CONFIG_MMU | ||
271 | struct vm_area_struct *tail_vma; | 272 | struct vm_area_struct *tail_vma; |
273 | #endif | ||
272 | }; | 274 | }; |
273 | 275 | ||
274 | #endif /* _LINUX_PROC_FS_H */ | 276 | #endif /* _LINUX_PROC_FS_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 34ed0d99b1bd..9d4aa7f95bc8 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -819,6 +819,11 @@ struct task_struct { | |||
819 | unsigned did_exec:1; | 819 | unsigned did_exec:1; |
820 | pid_t pid; | 820 | pid_t pid; |
821 | pid_t tgid; | 821 | pid_t tgid; |
822 | |||
823 | #ifdef CONFIG_CC_STACKPROTECTOR | ||
824 | /* Canary value for the -fstack-protector gcc feature */ | ||
825 | unsigned long stack_canary; | ||
826 | #endif | ||
822 | /* | 827 | /* |
823 | * pointers to (original) parent process, youngest child, younger sibling, | 828 | * pointers to (original) parent process, youngest child, younger sibling, |
824 | * older sibling, respectively. (p->father can be replaced with | 829 | * older sibling, respectively. (p->father can be replaced with |
@@ -865,6 +870,15 @@ struct task_struct { | |||
865 | struct key *thread_keyring; /* keyring private to this thread */ | 870 | struct key *thread_keyring; /* keyring private to this thread */ |
866 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ | 871 | unsigned char jit_keyring; /* default keyring to attach requested keys to */ |
867 | #endif | 872 | #endif |
873 | /* | ||
874 | * fpu_counter contains the number of consecutive context switches | ||
875 | * that the FPU is used. If this is over a threshold, the lazy fpu | ||
876 | * saving becomes unlazy to save the trap. This is an unsigned char | ||
877 | * so that after 256 times the counter wraps and the behavior turns | ||
878 | * lazy again; this to deal with bursty apps that only use FPU for | ||
879 | * a short time | ||
880 | */ | ||
881 | unsigned char fpu_counter; | ||
868 | int oomkilladj; /* OOM kill score adjustment (bit shift). */ | 882 | int oomkilladj; /* OOM kill score adjustment (bit shift). */ |
869 | char comm[TASK_COMM_LEN]; /* executable name excluding path | 883 | char comm[TASK_COMM_LEN]; /* executable name excluding path |
870 | - access with [gs]et_task_comm (which lock | 884 | - access with [gs]et_task_comm (which lock |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 66d6eb78d1c6..a96fd9310d55 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -60,7 +60,7 @@ extern void __init kmem_cache_init(void); | |||
60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, | 60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, |
61 | void (*)(void *, kmem_cache_t *, unsigned long), | 61 | void (*)(void *, kmem_cache_t *, unsigned long), |
62 | void (*)(void *, kmem_cache_t *, unsigned long)); | 62 | void (*)(void *, kmem_cache_t *, unsigned long)); |
63 | extern int kmem_cache_destroy(kmem_cache_t *); | 63 | extern void kmem_cache_destroy(kmem_cache_t *); |
64 | extern int kmem_cache_shrink(kmem_cache_t *); | 64 | extern int kmem_cache_shrink(kmem_cache_t *); |
65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); | 65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); |
66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
@@ -249,7 +249,7 @@ struct kmem_cache *kmem_cache_create(const char *c, size_t, size_t, | |||
249 | unsigned long, | 249 | unsigned long, |
250 | void (*)(void *, struct kmem_cache *, unsigned long), | 250 | void (*)(void *, struct kmem_cache *, unsigned long), |
251 | void (*)(void *, struct kmem_cache *, unsigned long)); | 251 | void (*)(void *, struct kmem_cache *, unsigned long)); |
252 | int kmem_cache_destroy(struct kmem_cache *c); | 252 | void kmem_cache_destroy(struct kmem_cache *c); |
253 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); | 253 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); |
254 | void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 254 | void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
255 | void kmem_cache_free(struct kmem_cache *c, void *b); | 255 | void kmem_cache_free(struct kmem_cache *c, void *b); |
diff --git a/include/linux/smb.h b/include/linux/smb.h index 6df3b1501559..f098dff93f6b 100644 --- a/include/linux/smb.h +++ b/include/linux/smb.h | |||
@@ -89,7 +89,6 @@ struct smb_fattr { | |||
89 | struct timespec f_atime; | 89 | struct timespec f_atime; |
90 | struct timespec f_mtime; | 90 | struct timespec f_mtime; |
91 | struct timespec f_ctime; | 91 | struct timespec f_ctime; |
92 | unsigned long f_blksize; | ||
93 | unsigned long f_blocks; | 92 | unsigned long f_blocks; |
94 | int f_unix; | 93 | int f_unix; |
95 | }; | 94 | }; |
diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index 9cc81e572224..50e2b01e517c 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h | |||
@@ -5,15 +5,16 @@ | |||
5 | struct stack_trace { | 5 | struct stack_trace { |
6 | unsigned int nr_entries, max_entries; | 6 | unsigned int nr_entries, max_entries; |
7 | unsigned long *entries; | 7 | unsigned long *entries; |
8 | int skip; /* input argument: How many entries to skip */ | ||
9 | int all_contexts; /* input argument: if true do than one stack */ | ||
8 | }; | 10 | }; |
9 | 11 | ||
10 | extern void save_stack_trace(struct stack_trace *trace, | 12 | extern void save_stack_trace(struct stack_trace *trace, |
11 | struct task_struct *task, int all_contexts, | 13 | struct task_struct *task); |
12 | unsigned int skip); | ||
13 | 14 | ||
14 | extern void print_stack_trace(struct stack_trace *trace, int spaces); | 15 | extern void print_stack_trace(struct stack_trace *trace, int spaces); |
15 | #else | 16 | #else |
16 | # define save_stack_trace(trace, task, all, skip) do { } while (0) | 17 | # define save_stack_trace(trace, task) do { } while (0) |
17 | # define print_stack_trace(trace) do { } while (0) | 18 | # define print_stack_trace(trace) do { } while (0) |
18 | #endif | 19 | #endif |
19 | 20 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 008f04c56737..3f0f716225ec 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -53,6 +53,7 @@ struct mq_attr; | |||
53 | struct compat_stat; | 53 | struct compat_stat; |
54 | struct compat_timeval; | 54 | struct compat_timeval; |
55 | struct robust_list_head; | 55 | struct robust_list_head; |
56 | struct getcpu_cache; | ||
56 | 57 | ||
57 | #include <linux/types.h> | 58 | #include <linux/types.h> |
58 | #include <linux/aio_abi.h> | 59 | #include <linux/aio_abi.h> |
@@ -596,5 +597,6 @@ asmlinkage long sys_get_robust_list(int pid, | |||
596 | size_t __user *len_ptr); | 597 | size_t __user *len_ptr); |
597 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, | 598 | asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, |
598 | size_t len); | 599 | size_t len); |
600 | asmlinkage long sys_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *cache); | ||
599 | 601 | ||
600 | #endif | 602 | #endif |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index eca555781d05..1b24bd45e080 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -150,6 +150,8 @@ enum | |||
150 | KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */ | 150 | KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */ |
151 | KERN_COMPAT_LOG=73, /* int: print compat layer messages */ | 151 | KERN_COMPAT_LOG=73, /* int: print compat layer messages */ |
152 | KERN_MAX_LOCK_DEPTH=74, | 152 | KERN_MAX_LOCK_DEPTH=74, |
153 | KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */ | ||
154 | KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */ | ||
153 | }; | 155 | }; |
154 | 156 | ||
155 | 157 | ||
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 1ea5d3cda6ae..6d5c43d31dec 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #ifndef _SYSFS_H_ | 10 | #ifndef _SYSFS_H_ |
11 | #define _SYSFS_H_ | 11 | #define _SYSFS_H_ |
12 | 12 | ||
13 | #include <linux/compiler.h> | ||
13 | #include <asm/atomic.h> | 14 | #include <asm/atomic.h> |
14 | 15 | ||
15 | struct kobject; | 16 | struct kobject; |
@@ -86,40 +87,44 @@ struct sysfs_dirent { | |||
86 | 87 | ||
87 | #ifdef CONFIG_SYSFS | 88 | #ifdef CONFIG_SYSFS |
88 | 89 | ||
89 | extern int | 90 | extern int __must_check |
90 | sysfs_create_dir(struct kobject *); | 91 | sysfs_create_dir(struct kobject *); |
91 | 92 | ||
92 | extern void | 93 | extern void |
93 | sysfs_remove_dir(struct kobject *); | 94 | sysfs_remove_dir(struct kobject *); |
94 | 95 | ||
95 | extern int | 96 | extern int __must_check |
96 | sysfs_rename_dir(struct kobject *, const char *new_name); | 97 | sysfs_rename_dir(struct kobject *, const char *new_name); |
97 | 98 | ||
98 | extern int | 99 | extern int __must_check |
99 | sysfs_create_file(struct kobject *, const struct attribute *); | 100 | sysfs_create_file(struct kobject *, const struct attribute *); |
100 | 101 | ||
101 | extern int | 102 | extern int __must_check |
102 | sysfs_update_file(struct kobject *, const struct attribute *); | 103 | sysfs_update_file(struct kobject *, const struct attribute *); |
103 | 104 | ||
104 | extern int | 105 | extern int __must_check |
105 | sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode); | 106 | sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode); |
106 | 107 | ||
107 | extern void | 108 | extern void |
108 | sysfs_remove_file(struct kobject *, const struct attribute *); | 109 | sysfs_remove_file(struct kobject *, const struct attribute *); |
109 | 110 | ||
110 | extern int | 111 | extern int __must_check |
111 | sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name); | 112 | sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name); |
112 | 113 | ||
113 | extern void | 114 | extern void |
114 | sysfs_remove_link(struct kobject *, const char * name); | 115 | sysfs_remove_link(struct kobject *, const char * name); |
115 | 116 | ||
116 | int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr); | 117 | int __must_check sysfs_create_bin_file(struct kobject *kobj, |
117 | int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr); | 118 | struct bin_attribute *attr); |
119 | void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr); | ||
118 | 120 | ||
119 | int sysfs_create_group(struct kobject *, const struct attribute_group *); | 121 | int __must_check sysfs_create_group(struct kobject *, |
122 | const struct attribute_group *); | ||
120 | void sysfs_remove_group(struct kobject *, const struct attribute_group *); | 123 | void sysfs_remove_group(struct kobject *, const struct attribute_group *); |
121 | void sysfs_notify(struct kobject * k, char *dir, char *attr); | 124 | void sysfs_notify(struct kobject * k, char *dir, char *attr); |
122 | 125 | ||
126 | extern int __must_check sysfs_init(void); | ||
127 | |||
123 | #else /* CONFIG_SYSFS */ | 128 | #else /* CONFIG_SYSFS */ |
124 | 129 | ||
125 | static inline int sysfs_create_dir(struct kobject * k) | 130 | static inline int sysfs_create_dir(struct kobject * k) |
@@ -191,6 +196,11 @@ static inline void sysfs_notify(struct kobject * k, char *dir, char *attr) | |||
191 | { | 196 | { |
192 | } | 197 | } |
193 | 198 | ||
199 | static inline int __must_check sysfs_init(void) | ||
200 | { | ||
201 | return 0; | ||
202 | } | ||
203 | |||
194 | #endif /* CONFIG_SYSFS */ | 204 | #endif /* CONFIG_SYSFS */ |
195 | 205 | ||
196 | #endif /* _SYSFS_H_ */ | 206 | #endif /* _SYSFS_H_ */ |
diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h index 391e7ed1eb3f..a48d7f11c7be 100644 --- a/include/linux/uaccess.h +++ b/include/linux/uaccess.h | |||
@@ -19,4 +19,26 @@ static inline unsigned long __copy_from_user_nocache(void *to, | |||
19 | 19 | ||
20 | #endif /* ARCH_HAS_NOCACHE_UACCESS */ | 20 | #endif /* ARCH_HAS_NOCACHE_UACCESS */ |
21 | 21 | ||
22 | /** | ||
23 | * probe_kernel_address(): safely attempt to read from a location | ||
24 | * @addr: address to read from - its type is type typeof(retval)* | ||
25 | * @retval: read into this variable | ||
26 | * | ||
27 | * Safely read from address @addr into variable @revtal. If a kernel fault | ||
28 | * happens, handle that and return -EFAULT. | ||
29 | * We ensure that the __get_user() is executed in atomic context so that | ||
30 | * do_page_fault() doesn't attempt to take mmap_sem. This makes | ||
31 | * probe_kernel_address() suitable for use within regions where the caller | ||
32 | * already holds mmap_sem, or other locks which nest inside mmap_sem. | ||
33 | */ | ||
34 | #define probe_kernel_address(addr, retval) \ | ||
35 | ({ \ | ||
36 | long ret; \ | ||
37 | \ | ||
38 | inc_preempt_count(); \ | ||
39 | ret = __get_user(retval, addr); \ | ||
40 | dec_preempt_count(); \ | ||
41 | ret; \ | ||
42 | }) | ||
43 | |||
22 | #endif /* __LINUX_UACCESS_H__ */ | 44 | #endif /* __LINUX_UACCESS_H__ */ |
diff --git a/include/linux/usb.h b/include/linux/usb.h index d2bd0c8e0154..0da15b0b02be 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/fs.h> /* for struct file_operations */ | 19 | #include <linux/fs.h> /* for struct file_operations */ |
20 | #include <linux/completion.h> /* for struct completion */ | 20 | #include <linux/completion.h> /* for struct completion */ |
21 | #include <linux/sched.h> /* for current && schedule_timeout */ | 21 | #include <linux/sched.h> /* for current && schedule_timeout */ |
22 | #include <linux/mutex.h> /* for struct mutex */ | ||
22 | 23 | ||
23 | struct usb_device; | 24 | struct usb_device; |
24 | struct usb_driver; | 25 | struct usb_driver; |
@@ -102,8 +103,13 @@ enum usb_interface_condition { | |||
102 | * number from the USB core by calling usb_register_dev(). | 103 | * number from the USB core by calling usb_register_dev(). |
103 | * @condition: binding state of the interface: not bound, binding | 104 | * @condition: binding state of the interface: not bound, binding |
104 | * (in probe()), bound to a driver, or unbinding (in disconnect()) | 105 | * (in probe()), bound to a driver, or unbinding (in disconnect()) |
106 | * @is_active: flag set when the interface is bound and not suspended. | ||
107 | * @needs_remote_wakeup: flag set when the driver requires remote-wakeup | ||
108 | * capability during autosuspend. | ||
105 | * @dev: driver model's view of this device | 109 | * @dev: driver model's view of this device |
106 | * @class_dev: driver model's class view of this device. | 110 | * @class_dev: driver model's class view of this device. |
111 | * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not | ||
112 | * allowed unless the counter is 0. | ||
107 | * | 113 | * |
108 | * USB device drivers attach to interfaces on a physical device. Each | 114 | * USB device drivers attach to interfaces on a physical device. Each |
109 | * interface encapsulates a single high level function, such as feeding | 115 | * interface encapsulates a single high level function, such as feeding |
@@ -142,8 +148,12 @@ struct usb_interface { | |||
142 | int minor; /* minor number this interface is | 148 | int minor; /* minor number this interface is |
143 | * bound to */ | 149 | * bound to */ |
144 | enum usb_interface_condition condition; /* state of binding */ | 150 | enum usb_interface_condition condition; /* state of binding */ |
151 | unsigned is_active:1; /* the interface is not suspended */ | ||
152 | unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */ | ||
153 | |||
145 | struct device dev; /* interface specific device info */ | 154 | struct device dev; /* interface specific device info */ |
146 | struct class_device *class_dev; | 155 | struct class_device *class_dev; |
156 | int pm_usage_cnt; /* usage counter for autosuspend */ | ||
147 | }; | 157 | }; |
148 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 158 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
149 | #define interface_to_usbdev(intf) \ | 159 | #define interface_to_usbdev(intf) \ |
@@ -254,8 +264,6 @@ int __usb_get_extra_descriptor(char *buffer, unsigned size, | |||
254 | 264 | ||
255 | /* ----------------------------------------------------------------------- */ | 265 | /* ----------------------------------------------------------------------- */ |
256 | 266 | ||
257 | struct usb_operations; | ||
258 | |||
259 | /* USB device number allocation bitmap */ | 267 | /* USB device number allocation bitmap */ |
260 | struct usb_devmap { | 268 | struct usb_devmap { |
261 | unsigned long devicemap[128 / (8*sizeof(unsigned long))]; | 269 | unsigned long devicemap[128 / (8*sizeof(unsigned long))]; |
@@ -268,6 +276,7 @@ struct usb_bus { | |||
268 | struct device *controller; /* host/master side hardware */ | 276 | struct device *controller; /* host/master side hardware */ |
269 | int busnum; /* Bus number (in order of reg) */ | 277 | int busnum; /* Bus number (in order of reg) */ |
270 | char *bus_name; /* stable id (PCI slot_name etc) */ | 278 | char *bus_name; /* stable id (PCI slot_name etc) */ |
279 | u8 uses_dma; /* Does the host controller use DMA? */ | ||
271 | u8 otg_port; /* 0, or number of OTG/HNP port */ | 280 | u8 otg_port; /* 0, or number of OTG/HNP port */ |
272 | unsigned is_b_host:1; /* true during some HNP roleswitches */ | 281 | unsigned is_b_host:1; /* true during some HNP roleswitches */ |
273 | unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ | 282 | unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ |
@@ -276,10 +285,8 @@ struct usb_bus { | |||
276 | * round-robin allocation */ | 285 | * round-robin allocation */ |
277 | 286 | ||
278 | struct usb_devmap devmap; /* device address allocation map */ | 287 | struct usb_devmap devmap; /* device address allocation map */ |
279 | struct usb_operations *op; /* Operations (specific to the HC) */ | ||
280 | struct usb_device *root_hub; /* Root hub */ | 288 | struct usb_device *root_hub; /* Root hub */ |
281 | struct list_head bus_list; /* list of busses */ | 289 | struct list_head bus_list; /* list of busses */ |
282 | void *hcpriv; /* Host Controller private data */ | ||
283 | 290 | ||
284 | int bandwidth_allocated; /* on this bus: how much of the time | 291 | int bandwidth_allocated; /* on this bus: how much of the time |
285 | * reserved for periodic (intr/iso) | 292 | * reserved for periodic (intr/iso) |
@@ -294,8 +301,6 @@ struct usb_bus { | |||
294 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ | 301 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the bus */ |
295 | 302 | ||
296 | struct class_device *class_dev; /* class device for this bus */ | 303 | struct class_device *class_dev; /* class device for this bus */ |
297 | struct kref kref; /* reference counting for this bus */ | ||
298 | void (*release)(struct usb_bus *bus); | ||
299 | 304 | ||
300 | #if defined(CONFIG_USB_MON) | 305 | #if defined(CONFIG_USB_MON) |
301 | struct mon_bus *mon_bus; /* non-null when associated */ | 306 | struct mon_bus *mon_bus; /* non-null when associated */ |
@@ -350,6 +355,7 @@ struct usb_device { | |||
350 | 355 | ||
351 | unsigned short bus_mA; /* Current available from the bus */ | 356 | unsigned short bus_mA; /* Current available from the bus */ |
352 | u8 portnum; /* Parent port number (origin 1) */ | 357 | u8 portnum; /* Parent port number (origin 1) */ |
358 | u8 level; /* Number of USB hub ancestors */ | ||
353 | 359 | ||
354 | int have_langid; /* whether string_langid is valid */ | 360 | int have_langid; /* whether string_langid is valid */ |
355 | int string_langid; /* language ID for strings */ | 361 | int string_langid; /* language ID for strings */ |
@@ -373,6 +379,15 @@ struct usb_device { | |||
373 | 379 | ||
374 | int maxchild; /* Number of ports if hub */ | 380 | int maxchild; /* Number of ports if hub */ |
375 | struct usb_device *children[USB_MAXCHILDREN]; | 381 | struct usb_device *children[USB_MAXCHILDREN]; |
382 | |||
383 | #ifdef CONFIG_PM | ||
384 | struct work_struct autosuspend; /* for delayed autosuspends */ | ||
385 | struct mutex pm_mutex; /* protects PM operations */ | ||
386 | int pm_usage_cnt; /* usage counter for autosuspend */ | ||
387 | |||
388 | unsigned auto_pm:1; /* autosuspend/resume in progress */ | ||
389 | unsigned do_remote_wakeup:1; /* remote wakeup should be enabled */ | ||
390 | #endif | ||
376 | }; | 391 | }; |
377 | #define to_usb_device(d) container_of(d, struct usb_device, dev) | 392 | #define to_usb_device(d) container_of(d, struct usb_device, dev) |
378 | 393 | ||
@@ -384,7 +399,7 @@ extern void usb_put_dev(struct usb_device *dev); | |||
384 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) | 399 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) |
385 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) | 400 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) |
386 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 401 | extern int usb_lock_device_for_reset(struct usb_device *udev, |
387 | struct usb_interface *iface); | 402 | const struct usb_interface *iface); |
388 | 403 | ||
389 | /* USB port reset for device reinitialization */ | 404 | /* USB port reset for device reinitialization */ |
390 | extern int usb_reset_device(struct usb_device *dev); | 405 | extern int usb_reset_device(struct usb_device *dev); |
@@ -393,6 +408,17 @@ extern int usb_reset_composite_device(struct usb_device *dev, | |||
393 | 408 | ||
394 | extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); | 409 | extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); |
395 | 410 | ||
411 | /* USB autosuspend and autoresume */ | ||
412 | #ifdef CONFIG_USB_SUSPEND | ||
413 | extern int usb_autopm_get_interface(struct usb_interface *intf); | ||
414 | extern void usb_autopm_put_interface(struct usb_interface *intf); | ||
415 | |||
416 | #else | ||
417 | #define usb_autopm_get_interface(intf) 0 | ||
418 | #define usb_autopm_put_interface(intf) do {} while (0) | ||
419 | #endif | ||
420 | |||
421 | |||
396 | /*-------------------------------------------------------------------------*/ | 422 | /*-------------------------------------------------------------------------*/ |
397 | 423 | ||
398 | /* for drivers using iso endpoints */ | 424 | /* for drivers using iso endpoints */ |
@@ -423,10 +449,10 @@ const struct usb_device_id *usb_match_id(struct usb_interface *interface, | |||
423 | 449 | ||
424 | extern struct usb_interface *usb_find_interface(struct usb_driver *drv, | 450 | extern struct usb_interface *usb_find_interface(struct usb_driver *drv, |
425 | int minor); | 451 | int minor); |
426 | extern struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, | 452 | extern struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, |
427 | unsigned ifnum); | 453 | unsigned ifnum); |
428 | extern struct usb_host_interface *usb_altnum_to_altsetting( | 454 | extern struct usb_host_interface *usb_altnum_to_altsetting( |
429 | struct usb_interface *intf, unsigned int altnum); | 455 | const struct usb_interface *intf, unsigned int altnum); |
430 | 456 | ||
431 | 457 | ||
432 | /** | 458 | /** |
@@ -464,6 +490,20 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
464 | 490 | ||
465 | /*-------------------------------------------------------------------------*/ | 491 | /*-------------------------------------------------------------------------*/ |
466 | 492 | ||
493 | extern int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd); | ||
494 | extern int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd); | ||
495 | extern int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd); | ||
496 | extern int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd); | ||
497 | extern int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd); | ||
498 | extern int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd); | ||
499 | extern int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd); | ||
500 | extern int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd); | ||
501 | extern int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *epd); | ||
502 | extern int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *epd); | ||
503 | extern int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor *epd); | ||
504 | |||
505 | /*-------------------------------------------------------------------------*/ | ||
506 | |||
467 | #define USB_DEVICE_ID_MATCH_DEVICE \ | 507 | #define USB_DEVICE_ID_MATCH_DEVICE \ |
468 | (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) | 508 | (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) |
469 | #define USB_DEVICE_ID_MATCH_DEV_RANGE \ | 509 | #define USB_DEVICE_ID_MATCH_DEV_RANGE \ |
@@ -540,7 +580,17 @@ struct usb_dynids { | |||
540 | }; | 580 | }; |
541 | 581 | ||
542 | /** | 582 | /** |
543 | * struct usb_driver - identifies USB driver to usbcore | 583 | * struct usbdrv_wrap - wrapper for driver-model structure |
584 | * @driver: The driver-model core driver structure. | ||
585 | * @for_devices: Non-zero for device drivers, 0 for interface drivers. | ||
586 | */ | ||
587 | struct usbdrv_wrap { | ||
588 | struct device_driver driver; | ||
589 | int for_devices; | ||
590 | }; | ||
591 | |||
592 | /** | ||
593 | * struct usb_driver - identifies USB interface driver to usbcore | ||
544 | * @name: The driver name should be unique among USB drivers, | 594 | * @name: The driver name should be unique among USB drivers, |
545 | * and should normally be the same as the module name. | 595 | * and should normally be the same as the module name. |
546 | * @probe: Called to see if the driver is willing to manage a particular | 596 | * @probe: Called to see if the driver is willing to manage a particular |
@@ -567,12 +617,14 @@ struct usb_dynids { | |||
567 | * or your driver's probe function will never get called. | 617 | * or your driver's probe function will never get called. |
568 | * @dynids: used internally to hold the list of dynamically added device | 618 | * @dynids: used internally to hold the list of dynamically added device |
569 | * ids for this driver. | 619 | * ids for this driver. |
570 | * @driver: the driver model core driver structure. | 620 | * @drvwrap: Driver-model core structure wrapper. |
571 | * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be | 621 | * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be |
572 | * added to this driver by preventing the sysfs file from being created. | 622 | * added to this driver by preventing the sysfs file from being created. |
623 | * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend | ||
624 | * for interfaces bound to this driver. | ||
573 | * | 625 | * |
574 | * USB drivers must provide a name, probe() and disconnect() methods, | 626 | * USB interface drivers must provide a name, probe() and disconnect() |
575 | * and an id_table. Other driver fields are optional. | 627 | * methods, and an id_table. Other driver fields are optional. |
576 | * | 628 | * |
577 | * The id_table is used in hotplugging. It holds a set of descriptors, | 629 | * The id_table is used in hotplugging. It holds a set of descriptors, |
578 | * and specialized data may be associated with each entry. That table | 630 | * and specialized data may be associated with each entry. That table |
@@ -606,10 +658,44 @@ struct usb_driver { | |||
606 | const struct usb_device_id *id_table; | 658 | const struct usb_device_id *id_table; |
607 | 659 | ||
608 | struct usb_dynids dynids; | 660 | struct usb_dynids dynids; |
609 | struct device_driver driver; | 661 | struct usbdrv_wrap drvwrap; |
610 | unsigned int no_dynamic_id:1; | 662 | unsigned int no_dynamic_id:1; |
663 | unsigned int supports_autosuspend:1; | ||
611 | }; | 664 | }; |
612 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) | 665 | #define to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver) |
666 | |||
667 | /** | ||
668 | * struct usb_device_driver - identifies USB device driver to usbcore | ||
669 | * @name: The driver name should be unique among USB drivers, | ||
670 | * and should normally be the same as the module name. | ||
671 | * @probe: Called to see if the driver is willing to manage a particular | ||
672 | * device. If it is, probe returns zero and uses dev_set_drvdata() | ||
673 | * to associate driver-specific data with the device. If unwilling | ||
674 | * to manage the device, return a negative errno value. | ||
675 | * @disconnect: Called when the device is no longer accessible, usually | ||
676 | * because it has been (or is being) disconnected or the driver's | ||
677 | * module is being unloaded. | ||
678 | * @suspend: Called when the device is going to be suspended by the system. | ||
679 | * @resume: Called when the device is being resumed by the system. | ||
680 | * @drvwrap: Driver-model core structure wrapper. | ||
681 | * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend | ||
682 | * for devices bound to this driver. | ||
683 | * | ||
684 | * USB drivers must provide all the fields listed above except drvwrap. | ||
685 | */ | ||
686 | struct usb_device_driver { | ||
687 | const char *name; | ||
688 | |||
689 | int (*probe) (struct usb_device *udev); | ||
690 | void (*disconnect) (struct usb_device *udev); | ||
691 | |||
692 | int (*suspend) (struct usb_device *udev, pm_message_t message); | ||
693 | int (*resume) (struct usb_device *udev); | ||
694 | struct usbdrv_wrap drvwrap; | ||
695 | unsigned int supports_autosuspend:1; | ||
696 | }; | ||
697 | #define to_usb_device_driver(d) container_of(d, struct usb_device_driver, \ | ||
698 | drvwrap.driver) | ||
613 | 699 | ||
614 | extern struct bus_type usb_bus_type; | 700 | extern struct bus_type usb_bus_type; |
615 | 701 | ||
@@ -633,13 +719,17 @@ struct usb_class_driver { | |||
633 | * use these in module_init()/module_exit() | 719 | * use these in module_init()/module_exit() |
634 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 720 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) |
635 | */ | 721 | */ |
636 | int usb_register_driver(struct usb_driver *, struct module *); | 722 | extern int usb_register_driver(struct usb_driver *, struct module *); |
637 | static inline int usb_register(struct usb_driver *driver) | 723 | static inline int usb_register(struct usb_driver *driver) |
638 | { | 724 | { |
639 | return usb_register_driver(driver, THIS_MODULE); | 725 | return usb_register_driver(driver, THIS_MODULE); |
640 | } | 726 | } |
641 | extern void usb_deregister(struct usb_driver *); | 727 | extern void usb_deregister(struct usb_driver *); |
642 | 728 | ||
729 | extern int usb_register_device_driver(struct usb_device_driver *, | ||
730 | struct module *); | ||
731 | extern void usb_deregister_device_driver(struct usb_device_driver *); | ||
732 | |||
643 | extern int usb_register_dev(struct usb_interface *intf, | 733 | extern int usb_register_dev(struct usb_interface *intf, |
644 | struct usb_class_driver *class_driver); | 734 | struct usb_class_driver *class_driver); |
645 | extern void usb_deregister_dev(struct usb_interface *intf, | 735 | extern void usb_deregister_dev(struct usb_interface *intf, |
@@ -885,7 +975,7 @@ struct urb | |||
885 | * @setup_packet: pointer to the setup_packet buffer | 975 | * @setup_packet: pointer to the setup_packet buffer |
886 | * @transfer_buffer: pointer to the transfer buffer | 976 | * @transfer_buffer: pointer to the transfer buffer |
887 | * @buffer_length: length of the transfer buffer | 977 | * @buffer_length: length of the transfer buffer |
888 | * @complete: pointer to the usb_complete_t function | 978 | * @complete_fn: pointer to the usb_complete_t function |
889 | * @context: what to set the urb context to. | 979 | * @context: what to set the urb context to. |
890 | * | 980 | * |
891 | * Initializes a control urb with the proper information needed to submit | 981 | * Initializes a control urb with the proper information needed to submit |
@@ -897,7 +987,7 @@ static inline void usb_fill_control_urb (struct urb *urb, | |||
897 | unsigned char *setup_packet, | 987 | unsigned char *setup_packet, |
898 | void *transfer_buffer, | 988 | void *transfer_buffer, |
899 | int buffer_length, | 989 | int buffer_length, |
900 | usb_complete_t complete, | 990 | usb_complete_t complete_fn, |
901 | void *context) | 991 | void *context) |
902 | { | 992 | { |
903 | spin_lock_init(&urb->lock); | 993 | spin_lock_init(&urb->lock); |
@@ -906,7 +996,7 @@ static inline void usb_fill_control_urb (struct urb *urb, | |||
906 | urb->setup_packet = setup_packet; | 996 | urb->setup_packet = setup_packet; |
907 | urb->transfer_buffer = transfer_buffer; | 997 | urb->transfer_buffer = transfer_buffer; |
908 | urb->transfer_buffer_length = buffer_length; | 998 | urb->transfer_buffer_length = buffer_length; |
909 | urb->complete = complete; | 999 | urb->complete = complete_fn; |
910 | urb->context = context; | 1000 | urb->context = context; |
911 | } | 1001 | } |
912 | 1002 | ||
@@ -917,7 +1007,7 @@ static inline void usb_fill_control_urb (struct urb *urb, | |||
917 | * @pipe: the endpoint pipe | 1007 | * @pipe: the endpoint pipe |
918 | * @transfer_buffer: pointer to the transfer buffer | 1008 | * @transfer_buffer: pointer to the transfer buffer |
919 | * @buffer_length: length of the transfer buffer | 1009 | * @buffer_length: length of the transfer buffer |
920 | * @complete: pointer to the usb_complete_t function | 1010 | * @complete_fn: pointer to the usb_complete_t function |
921 | * @context: what to set the urb context to. | 1011 | * @context: what to set the urb context to. |
922 | * | 1012 | * |
923 | * Initializes a bulk urb with the proper information needed to submit it | 1013 | * Initializes a bulk urb with the proper information needed to submit it |
@@ -928,7 +1018,7 @@ static inline void usb_fill_bulk_urb (struct urb *urb, | |||
928 | unsigned int pipe, | 1018 | unsigned int pipe, |
929 | void *transfer_buffer, | 1019 | void *transfer_buffer, |
930 | int buffer_length, | 1020 | int buffer_length, |
931 | usb_complete_t complete, | 1021 | usb_complete_t complete_fn, |
932 | void *context) | 1022 | void *context) |
933 | { | 1023 | { |
934 | spin_lock_init(&urb->lock); | 1024 | spin_lock_init(&urb->lock); |
@@ -936,7 +1026,7 @@ static inline void usb_fill_bulk_urb (struct urb *urb, | |||
936 | urb->pipe = pipe; | 1026 | urb->pipe = pipe; |
937 | urb->transfer_buffer = transfer_buffer; | 1027 | urb->transfer_buffer = transfer_buffer; |
938 | urb->transfer_buffer_length = buffer_length; | 1028 | urb->transfer_buffer_length = buffer_length; |
939 | urb->complete = complete; | 1029 | urb->complete = complete_fn; |
940 | urb->context = context; | 1030 | urb->context = context; |
941 | } | 1031 | } |
942 | 1032 | ||
@@ -947,7 +1037,7 @@ static inline void usb_fill_bulk_urb (struct urb *urb, | |||
947 | * @pipe: the endpoint pipe | 1037 | * @pipe: the endpoint pipe |
948 | * @transfer_buffer: pointer to the transfer buffer | 1038 | * @transfer_buffer: pointer to the transfer buffer |
949 | * @buffer_length: length of the transfer buffer | 1039 | * @buffer_length: length of the transfer buffer |
950 | * @complete: pointer to the usb_complete_t function | 1040 | * @complete_fn: pointer to the usb_complete_t function |
951 | * @context: what to set the urb context to. | 1041 | * @context: what to set the urb context to. |
952 | * @interval: what to set the urb interval to, encoded like | 1042 | * @interval: what to set the urb interval to, encoded like |
953 | * the endpoint descriptor's bInterval value. | 1043 | * the endpoint descriptor's bInterval value. |
@@ -963,7 +1053,7 @@ static inline void usb_fill_int_urb (struct urb *urb, | |||
963 | unsigned int pipe, | 1053 | unsigned int pipe, |
964 | void *transfer_buffer, | 1054 | void *transfer_buffer, |
965 | int buffer_length, | 1055 | int buffer_length, |
966 | usb_complete_t complete, | 1056 | usb_complete_t complete_fn, |
967 | void *context, | 1057 | void *context, |
968 | int interval) | 1058 | int interval) |
969 | { | 1059 | { |
@@ -972,7 +1062,7 @@ static inline void usb_fill_int_urb (struct urb *urb, | |||
972 | urb->pipe = pipe; | 1062 | urb->pipe = pipe; |
973 | urb->transfer_buffer = transfer_buffer; | 1063 | urb->transfer_buffer = transfer_buffer; |
974 | urb->transfer_buffer_length = buffer_length; | 1064 | urb->transfer_buffer_length = buffer_length; |
975 | urb->complete = complete; | 1065 | urb->complete = complete_fn; |
976 | urb->context = context; | 1066 | urb->context = context; |
977 | if (dev->speed == USB_SPEED_HIGH) | 1067 | if (dev->speed == USB_SPEED_HIGH) |
978 | urb->interval = 1 << (interval - 1); | 1068 | urb->interval = 1 << (interval - 1); |
@@ -990,7 +1080,6 @@ extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags); | |||
990 | extern int usb_unlink_urb(struct urb *urb); | 1080 | extern int usb_unlink_urb(struct urb *urb); |
991 | extern void usb_kill_urb(struct urb *urb); | 1081 | extern void usb_kill_urb(struct urb *urb); |
992 | 1082 | ||
993 | #define HAVE_USB_BUFFERS | ||
994 | void *usb_buffer_alloc (struct usb_device *dev, size_t size, | 1083 | void *usb_buffer_alloc (struct usb_device *dev, size_t size, |
995 | gfp_t mem_flags, dma_addr_t *dma); | 1084 | gfp_t mem_flags, dma_addr_t *dma); |
996 | void usb_buffer_free (struct usb_device *dev, size_t size, | 1085 | void usb_buffer_free (struct usb_device *dev, size_t size, |
@@ -1003,14 +1092,14 @@ void usb_buffer_unmap (struct urb *urb); | |||
1003 | #endif | 1092 | #endif |
1004 | 1093 | ||
1005 | struct scatterlist; | 1094 | struct scatterlist; |
1006 | int usb_buffer_map_sg (struct usb_device *dev, unsigned pipe, | 1095 | int usb_buffer_map_sg(const struct usb_device *dev, unsigned pipe, |
1007 | struct scatterlist *sg, int nents); | 1096 | struct scatterlist *sg, int nents); |
1008 | #if 0 | 1097 | #if 0 |
1009 | void usb_buffer_dmasync_sg (struct usb_device *dev, unsigned pipe, | 1098 | void usb_buffer_dmasync_sg(const struct usb_device *dev, unsigned pipe, |
1010 | struct scatterlist *sg, int n_hw_ents); | 1099 | struct scatterlist *sg, int n_hw_ents); |
1011 | #endif | 1100 | #endif |
1012 | void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe, | 1101 | void usb_buffer_unmap_sg(const struct usb_device *dev, unsigned pipe, |
1013 | struct scatterlist *sg, int n_hw_ents); | 1102 | struct scatterlist *sg, int n_hw_ents); |
1014 | 1103 | ||
1015 | /*-------------------------------------------------------------------* | 1104 | /*-------------------------------------------------------------------* |
1016 | * SYNCHRONOUS CALL SUPPORT * | 1105 | * SYNCHRONOUS CALL SUPPORT * |
@@ -1038,6 +1127,9 @@ extern int usb_clear_halt(struct usb_device *dev, int pipe); | |||
1038 | extern int usb_reset_configuration(struct usb_device *dev); | 1127 | extern int usb_reset_configuration(struct usb_device *dev); |
1039 | extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate); | 1128 | extern int usb_set_interface(struct usb_device *dev, int ifnum, int alternate); |
1040 | 1129 | ||
1130 | /* this request isn't really synchronous, but it belongs with the others */ | ||
1131 | extern int usb_driver_set_configuration(struct usb_device *udev, int config); | ||
1132 | |||
1041 | /* | 1133 | /* |
1042 | * timeouts, in milliseconds, used for sending/receiving control messages | 1134 | * timeouts, in milliseconds, used for sending/receiving control messages |
1043 | * they typically complete within a few frames (msec) after they're issued | 1135 | * they typically complete within a few frames (msec) after they're issued |
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h new file mode 100644 index 000000000000..6bd235994dc2 --- /dev/null +++ b/include/linux/usb/audio.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * <linux/usb/audio.h> -- USB Audio definitions. | ||
3 | * | ||
4 | * Copyright (C) 2006 Thumtronics Pty Ltd. | ||
5 | * Developed for Thumtronics by Grey Innovation | ||
6 | * Ben Williamson <ben.williamson@greyinnovation.com> | ||
7 | * | ||
8 | * This software is distributed under the terms of the GNU General Public | ||
9 | * License ("GPL") version 2, as published by the Free Software Foundation. | ||
10 | * | ||
11 | * This file holds USB constants and structures defined | ||
12 | * by the USB Device Class Definition for Audio Devices. | ||
13 | * Comments below reference relevant sections of that document: | ||
14 | * | ||
15 | * http://www.usb.org/developers/devclass_docs/audio10.pdf | ||
16 | */ | ||
17 | |||
18 | #ifndef __LINUX_USB_AUDIO_H | ||
19 | #define __LINUX_USB_AUDIO_H | ||
20 | |||
21 | #include <linux/types.h> | ||
22 | |||
23 | /* A.2 Audio Interface Subclass Codes */ | ||
24 | #define USB_SUBCLASS_AUDIOCONTROL 0x01 | ||
25 | #define USB_SUBCLASS_AUDIOSTREAMING 0x02 | ||
26 | #define USB_SUBCLASS_MIDISTREAMING 0x03 | ||
27 | |||
28 | /* 4.3.2 Class-Specific AC Interface Descriptor */ | ||
29 | struct usb_ac_header_descriptor { | ||
30 | __u8 bLength; // 8+n | ||
31 | __u8 bDescriptorType; // USB_DT_CS_INTERFACE | ||
32 | __u8 bDescriptorSubtype; // USB_MS_HEADER | ||
33 | __le16 bcdADC; // 0x0100 | ||
34 | __le16 wTotalLength; // includes Unit and Terminal desc. | ||
35 | __u8 bInCollection; // n | ||
36 | __u8 baInterfaceNr[]; // [n] | ||
37 | } __attribute__ ((packed)); | ||
38 | |||
39 | #define USB_DT_AC_HEADER_SIZE(n) (8+(n)) | ||
40 | |||
41 | /* As above, but more useful for defining your own descriptors: */ | ||
42 | #define DECLARE_USB_AC_HEADER_DESCRIPTOR(n) \ | ||
43 | struct usb_ac_header_descriptor_##n { \ | ||
44 | __u8 bLength; \ | ||
45 | __u8 bDescriptorType; \ | ||
46 | __u8 bDescriptorSubtype; \ | ||
47 | __le16 bcdADC; \ | ||
48 | __le16 wTotalLength; \ | ||
49 | __u8 bInCollection; \ | ||
50 | __u8 baInterfaceNr[n]; \ | ||
51 | } __attribute__ ((packed)) | ||
52 | |||
53 | #endif | ||
diff --git a/include/linux/usb/midi.h b/include/linux/usb/midi.h new file mode 100644 index 000000000000..11a97d5ffd34 --- /dev/null +++ b/include/linux/usb/midi.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * <linux/usb/midi.h> -- USB MIDI definitions. | ||
3 | * | ||
4 | * Copyright (C) 2006 Thumtronics Pty Ltd. | ||
5 | * Developed for Thumtronics by Grey Innovation | ||
6 | * Ben Williamson <ben.williamson@greyinnovation.com> | ||
7 | * | ||
8 | * This software is distributed under the terms of the GNU General Public | ||
9 | * License ("GPL") version 2, as published by the Free Software Foundation. | ||
10 | * | ||
11 | * This file holds USB constants and structures defined | ||
12 | * by the USB Device Class Definition for MIDI Devices. | ||
13 | * Comments below reference relevant sections of that document: | ||
14 | * | ||
15 | * http://www.usb.org/developers/devclass_docs/midi10.pdf | ||
16 | */ | ||
17 | |||
18 | #ifndef __LINUX_USB_MIDI_H | ||
19 | #define __LINUX_USB_MIDI_H | ||
20 | |||
21 | #include <linux/types.h> | ||
22 | |||
23 | /* A.1 MS Class-Specific Interface Descriptor Subtypes */ | ||
24 | #define USB_MS_HEADER 0x01 | ||
25 | #define USB_MS_MIDI_IN_JACK 0x02 | ||
26 | #define USB_MS_MIDI_OUT_JACK 0x03 | ||
27 | #define USB_MS_ELEMENT 0x04 | ||
28 | |||
29 | /* A.2 MS Class-Specific Endpoint Descriptor Subtypes */ | ||
30 | #define USB_MS_GENERAL 0x01 | ||
31 | |||
32 | /* A.3 MS MIDI IN and OUT Jack Types */ | ||
33 | #define USB_MS_EMBEDDED 0x01 | ||
34 | #define USB_MS_EXTERNAL 0x02 | ||
35 | |||
36 | /* 6.1.2.1 Class-Specific MS Interface Header Descriptor */ | ||
37 | struct usb_ms_header_descriptor { | ||
38 | __u8 bLength; | ||
39 | __u8 bDescriptorType; | ||
40 | __u8 bDescriptorSubtype; | ||
41 | __le16 bcdMSC; | ||
42 | __le16 wTotalLength; | ||
43 | } __attribute__ ((packed)); | ||
44 | |||
45 | #define USB_DT_MS_HEADER_SIZE 7 | ||
46 | |||
47 | /* 6.1.2.2 MIDI IN Jack Descriptor */ | ||
48 | struct usb_midi_in_jack_descriptor { | ||
49 | __u8 bLength; | ||
50 | __u8 bDescriptorType; // USB_DT_CS_INTERFACE | ||
51 | __u8 bDescriptorSubtype; // USB_MS_MIDI_IN_JACK | ||
52 | __u8 bJackType; // USB_MS_EMBEDDED/EXTERNAL | ||
53 | __u8 bJackID; | ||
54 | __u8 iJack; | ||
55 | } __attribute__ ((packed)); | ||
56 | |||
57 | #define USB_DT_MIDI_IN_SIZE 6 | ||
58 | |||
59 | struct usb_midi_source_pin { | ||
60 | __u8 baSourceID; | ||
61 | __u8 baSourcePin; | ||
62 | } __attribute__ ((packed)); | ||
63 | |||
64 | /* 6.1.2.3 MIDI OUT Jack Descriptor */ | ||
65 | struct usb_midi_out_jack_descriptor { | ||
66 | __u8 bLength; | ||
67 | __u8 bDescriptorType; // USB_DT_CS_INTERFACE | ||
68 | __u8 bDescriptorSubtype; // USB_MS_MIDI_OUT_JACK | ||
69 | __u8 bJackType; // USB_MS_EMBEDDED/EXTERNAL | ||
70 | __u8 bJackID; | ||
71 | __u8 bNrInputPins; // p | ||
72 | struct usb_midi_source_pin pins[]; // [p] | ||
73 | /*__u8 iJack; -- ommitted due to variable-sized pins[] */ | ||
74 | } __attribute__ ((packed)); | ||
75 | |||
76 | #define USB_DT_MIDI_OUT_SIZE(p) (7 + 2 * (p)) | ||
77 | |||
78 | /* As above, but more useful for defining your own descriptors: */ | ||
79 | #define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p) \ | ||
80 | struct usb_midi_out_jack_descriptor_##p { \ | ||
81 | __u8 bLength; \ | ||
82 | __u8 bDescriptorType; \ | ||
83 | __u8 bDescriptorSubtype; \ | ||
84 | __u8 bJackType; \ | ||
85 | __u8 bJackID; \ | ||
86 | __u8 bNrInputPins; \ | ||
87 | struct usb_midi_source_pin pins[p]; \ | ||
88 | __u8 iJack; \ | ||
89 | } __attribute__ ((packed)) | ||
90 | |||
91 | /* 6.2.2 Class-Specific MS Bulk Data Endpoint Descriptor */ | ||
92 | struct usb_ms_endpoint_descriptor { | ||
93 | __u8 bLength; // 4+n | ||
94 | __u8 bDescriptorType; // USB_DT_CS_ENDPOINT | ||
95 | __u8 bDescriptorSubtype; // USB_MS_GENERAL | ||
96 | __u8 bNumEmbMIDIJack; // n | ||
97 | __u8 baAssocJackID[]; // [n] | ||
98 | } __attribute__ ((packed)); | ||
99 | |||
100 | #define USB_DT_MS_ENDPOINT_SIZE(n) (4 + (n)) | ||
101 | |||
102 | /* As above, but more useful for defining your own descriptors: */ | ||
103 | #define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n) \ | ||
104 | struct usb_ms_endpoint_descriptor_##n { \ | ||
105 | __u8 bLength; \ | ||
106 | __u8 bDescriptorType; \ | ||
107 | __u8 bDescriptorSubtype; \ | ||
108 | __u8 bNumEmbMIDIJack; \ | ||
109 | __u8 baAssocJackID[n]; \ | ||
110 | } __attribute__ ((packed)) | ||
111 | |||
112 | #endif | ||
diff --git a/include/linux/usb_otg.h b/include/linux/usb/otg.h index f827f6e203c2..9897f7a818c5 100644 --- a/include/linux/usb_otg.h +++ b/include/linux/usb/otg.h | |||
@@ -1,4 +1,4 @@ | |||
1 | // include/linux/usb_otg.h | 1 | // include/linux/usb/otg.h |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * These APIs may be used between USB controllers. USB device drivers | 4 | * These APIs may be used between USB controllers. USB device drivers |
@@ -52,7 +52,7 @@ struct otg_transceiver { | |||
52 | u16 port_change; | 52 | u16 port_change; |
53 | 53 | ||
54 | /* bind/unbind the host controller */ | 54 | /* bind/unbind the host controller */ |
55 | int (*set_host)(struct otg_transceiver *otg, | 55 | int (*set_host)(struct otg_transceiver *otg, |
56 | struct usb_bus *host); | 56 | struct usb_bus *host); |
57 | 57 | ||
58 | /* bind/unbind the peripheral controller */ | 58 | /* bind/unbind the peripheral controller */ |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index e7fc5fed5b98..2ae76fe52ff7 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
@@ -108,6 +108,9 @@ enum { US_DO_ALL_FLAGS }; | |||
108 | #ifdef CONFIG_USB_STORAGE_ALAUDA | 108 | #ifdef CONFIG_USB_STORAGE_ALAUDA |
109 | #define US_PR_ALAUDA 0xf4 /* Alauda chipsets */ | 109 | #define US_PR_ALAUDA 0xf4 /* Alauda chipsets */ |
110 | #endif | 110 | #endif |
111 | #ifdef CONFIG_USB_STORAGE_KARMA | ||
112 | #define US_PR_KARMA 0xf5 /* Rio Karma */ | ||
113 | #endif | ||
111 | 114 | ||
112 | #define US_PR_DEVICE 0xff /* Use device's value */ | 115 | #define US_PR_DEVICE 0xff /* Use device's value */ |
113 | 116 | ||
diff --git a/include/linux/vermagic.h b/include/linux/vermagic.h index 46919f9f5eb3..4d0909e53595 100644 --- a/include/linux/vermagic.h +++ b/include/linux/vermagic.h | |||
@@ -24,5 +24,5 @@ | |||
24 | #define VERMAGIC_STRING \ | 24 | #define VERMAGIC_STRING \ |
25 | UTS_RELEASE " " \ | 25 | UTS_RELEASE " " \ |
26 | MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \ | 26 | MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \ |
27 | MODULE_VERMAGIC_MODULE_UNLOAD MODULE_ARCH_VERMAGIC \ | 27 | MODULE_VERMAGIC_MODULE_UNLOAD MODULE_ARCH_VERMAGIC |
28 | "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) | 28 | |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index dee88c6b6fa7..ce5f1482e6be 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -62,7 +62,6 @@ extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, | |||
62 | extern struct vm_struct *get_vm_area_node(unsigned long size, | 62 | extern struct vm_struct *get_vm_area_node(unsigned long size, |
63 | unsigned long flags, int node); | 63 | unsigned long flags, int node); |
64 | extern struct vm_struct *remove_vm_area(void *addr); | 64 | extern struct vm_struct *remove_vm_area(void *addr); |
65 | extern struct vm_struct *__remove_vm_area(void *addr); | ||
66 | extern int map_vm_area(struct vm_struct *area, pgprot_t prot, | 65 | extern int map_vm_area(struct vm_struct *area, pgprot_t prot, |
67 | struct page ***pages); | 66 | struct page ***pages); |
68 | extern void unmap_vm_area(struct vm_struct *area); | 67 | extern void unmap_vm_area(struct vm_struct *area); |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 810462f8a374..bb495b7f4680 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
@@ -341,7 +341,7 @@ extern int video_usercopy(struct inode *inode, struct file *file, | |||
341 | extern struct video_device* video_devdata(struct file*); | 341 | extern struct video_device* video_devdata(struct file*); |
342 | 342 | ||
343 | #define to_video_device(cd) container_of(cd, struct video_device, class_dev) | 343 | #define to_video_device(cd) container_of(cd, struct video_device, class_dev) |
344 | static inline int | 344 | static inline int __must_check |
345 | video_device_create_file(struct video_device *vfd, | 345 | video_device_create_file(struct video_device *vfd, |
346 | struct class_device_attribute *attr) | 346 | struct class_device_attribute *attr) |
347 | { | 347 | { |