diff options
Diffstat (limited to 'include')
484 files changed, 11823 insertions, 5359 deletions
diff --git a/include/asm-alpha/bitops.h b/include/asm-alpha/bitops.h index 9e19a704d484..15f3ae25c511 100644 --- a/include/asm-alpha/bitops.h +++ b/include/asm-alpha/bitops.h | |||
@@ -388,6 +388,11 @@ static inline int fls64(unsigned long x) | |||
388 | } | 388 | } |
389 | #endif | 389 | #endif |
390 | 390 | ||
391 | static inline unsigned long __fls(unsigned long x) | ||
392 | { | ||
393 | return fls64(x) - 1; | ||
394 | } | ||
395 | |||
391 | static inline int fls(int x) | 396 | static inline int fls(int x) |
392 | { | 397 | { |
393 | return fls64((unsigned int) x); | 398 | return fls64((unsigned int) x); |
diff --git a/include/asm-alpha/bug.h b/include/asm-alpha/bug.h index 39a3e2a5017d..695a5ee4b5d3 100644 --- a/include/asm-alpha/bug.h +++ b/include/asm-alpha/bug.h | |||
@@ -1,14 +1,24 @@ | |||
1 | #ifndef _ALPHA_BUG_H | 1 | #ifndef _ALPHA_BUG_H |
2 | #define _ALPHA_BUG_H | 2 | #define _ALPHA_BUG_H |
3 | 3 | ||
4 | #include <linux/linkage.h> | ||
5 | |||
4 | #ifdef CONFIG_BUG | 6 | #ifdef CONFIG_BUG |
5 | #include <asm/pal.h> | 7 | #include <asm/pal.h> |
6 | 8 | ||
7 | /* ??? Would be nice to use .gprel32 here, but we can't be sure that the | 9 | /* ??? Would be nice to use .gprel32 here, but we can't be sure that the |
8 | function loaded the GP, so this could fail in modules. */ | 10 | function loaded the GP, so this could fail in modules. */ |
9 | #define BUG() \ | 11 | static inline void ATTRIB_NORET __BUG(const char *file, int line) |
10 | __asm__ __volatile__("call_pal %0 # bugchk\n\t"".long %1\n\t.8byte %2" \ | 12 | { |
11 | : : "i" (PAL_bugchk), "i"(__LINE__), "i"(__FILE__)) | 13 | __asm__ __volatile__( |
14 | "call_pal %0 # bugchk\n\t" | ||
15 | ".long %1\n\t.8byte %2" | ||
16 | : : "i" (PAL_bugchk), "i"(line), "i"(file)); | ||
17 | for ( ; ; ) | ||
18 | ; | ||
19 | } | ||
20 | |||
21 | #define BUG() __BUG(__FILE__, __LINE__) | ||
12 | 22 | ||
13 | #define HAVE_ARCH_BUG | 23 | #define HAVE_ARCH_BUG |
14 | #endif | 24 | #endif |
diff --git a/include/asm-alpha/byteorder.h b/include/asm-alpha/byteorder.h index 7af2b8d25486..58e958fc7f1b 100644 --- a/include/asm-alpha/byteorder.h +++ b/include/asm-alpha/byteorder.h | |||
@@ -7,7 +7,7 @@ | |||
7 | 7 | ||
8 | #ifdef __GNUC__ | 8 | #ifdef __GNUC__ |
9 | 9 | ||
10 | static __inline __attribute_const__ __u32 __arch__swab32(__u32 x) | 10 | static inline __attribute_const__ __u32 __arch__swab32(__u32 x) |
11 | { | 11 | { |
12 | /* | 12 | /* |
13 | * Unfortunately, we can't use the 6 instruction sequence | 13 | * Unfortunately, we can't use the 6 instruction sequence |
diff --git a/include/asm-alpha/pgtable.h b/include/asm-alpha/pgtable.h index 99037b032357..05ce5fba43e3 100644 --- a/include/asm-alpha/pgtable.h +++ b/include/asm-alpha/pgtable.h | |||
@@ -268,6 +268,7 @@ extern inline int pte_write(pte_t pte) { return !(pte_val(pte) & _PAGE_FOW); } | |||
268 | extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 268 | extern inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
269 | extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 269 | extern inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
270 | extern inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 270 | extern inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
271 | extern inline int pte_special(pte_t pte) { return 0; } | ||
271 | 272 | ||
272 | extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_FOW; return pte; } | 273 | extern inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_FOW; return pte; } |
273 | extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~(__DIRTY_BITS); return pte; } | 274 | extern inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~(__DIRTY_BITS); return pte; } |
@@ -275,6 +276,7 @@ extern inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~(__ACCESS_BITS); ret | |||
275 | extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_FOW; return pte; } | 276 | extern inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) &= ~_PAGE_FOW; return pte; } |
276 | extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= __DIRTY_BITS; return pte; } | 277 | extern inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= __DIRTY_BITS; return pte; } |
277 | extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; return pte; } | 278 | extern inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= __ACCESS_BITS; return pte; } |
279 | extern inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
278 | 280 | ||
279 | #define PAGE_DIR_OFFSET(tsk,address) pgd_offset((tsk),(address)) | 281 | #define PAGE_DIR_OFFSET(tsk,address) pgd_offset((tsk),(address)) |
280 | 282 | ||
diff --git a/include/asm-alpha/unaligned.h b/include/asm-alpha/unaligned.h index a1d72846f61c..3787c60aed3f 100644 --- a/include/asm-alpha/unaligned.h +++ b/include/asm-alpha/unaligned.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef __ALPHA_UNALIGNED_H | 1 | #ifndef _ASM_ALPHA_UNALIGNED_H |
2 | #define __ALPHA_UNALIGNED_H | 2 | #define _ASM_ALPHA_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/le_struct.h> |
5 | #include <linux/unaligned/be_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
5 | 7 | ||
6 | #endif | 8 | #define get_unaligned __get_unaligned_le |
9 | #define put_unaligned __put_unaligned_le | ||
10 | |||
11 | #endif /* _ASM_ALPHA_UNALIGNED_H */ | ||
diff --git a/include/asm-arm/arch-pxa/pxa3xx_nand.h b/include/asm-arm/arch-pxa/pxa3xx_nand.h new file mode 100644 index 000000000000..81a8937486cb --- /dev/null +++ b/include/asm-arm/arch-pxa/pxa3xx_nand.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef __ASM_ARCH_PXA3XX_NAND_H | ||
2 | #define __ASM_ARCH_PXA3XX_NAND_H | ||
3 | |||
4 | #include <linux/mtd/mtd.h> | ||
5 | #include <linux/mtd/partitions.h> | ||
6 | |||
7 | struct pxa3xx_nand_platform_data { | ||
8 | |||
9 | /* the data flash bus is shared between the Static Memory | ||
10 | * Controller and the Data Flash Controller, the arbiter | ||
11 | * controls the ownership of the bus | ||
12 | */ | ||
13 | int enable_arbiter; | ||
14 | |||
15 | struct mtd_partition *parts; | ||
16 | unsigned int nr_parts; | ||
17 | }; | ||
18 | #endif /* __ASM_ARCH_PXA3XX_NAND_H */ | ||
diff --git a/include/asm-arm/arch-sa1100/ide.h b/include/asm-arm/arch-sa1100/ide.h index 98b10bcf9f1b..b14cbda01dc3 100644 --- a/include/asm-arm/arch-sa1100/ide.h +++ b/include/asm-arm/arch-sa1100/ide.h | |||
@@ -37,12 +37,12 @@ static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, | |||
37 | 37 | ||
38 | memset(hw, 0, sizeof(*hw)); | 38 | memset(hw, 0, sizeof(*hw)); |
39 | 39 | ||
40 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { | 40 | for (i = 0; i <= 7; i++) { |
41 | hw->io_ports[i] = reg; | 41 | hw->io_ports_array[i] = reg; |
42 | reg += regincr; | 42 | reg += regincr; |
43 | } | 43 | } |
44 | 44 | ||
45 | hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port; | 45 | hw->io_ports.ctl_addr = ctrl_port; |
46 | 46 | ||
47 | if (irq) | 47 | if (irq) |
48 | *irq = 0; | 48 | *irq = 0; |
diff --git a/include/asm-arm/pgtable.h b/include/asm-arm/pgtable.h index 5e0182485d8c..5571c13c3f3b 100644 --- a/include/asm-arm/pgtable.h +++ b/include/asm-arm/pgtable.h | |||
@@ -260,6 +260,7 @@ extern struct page *empty_zero_page; | |||
260 | #define pte_write(pte) (pte_val(pte) & L_PTE_WRITE) | 260 | #define pte_write(pte) (pte_val(pte) & L_PTE_WRITE) |
261 | #define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) | 261 | #define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) |
262 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) | 262 | #define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) |
263 | #define pte_special(pte) (0) | ||
263 | 264 | ||
264 | /* | 265 | /* |
265 | * The following only works if pte_present() is not true. | 266 | * The following only works if pte_present() is not true. |
@@ -280,6 +281,8 @@ PTE_BIT_FUNC(mkdirty, |= L_PTE_DIRTY); | |||
280 | PTE_BIT_FUNC(mkold, &= ~L_PTE_YOUNG); | 281 | PTE_BIT_FUNC(mkold, &= ~L_PTE_YOUNG); |
281 | PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); | 282 | PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); |
282 | 283 | ||
284 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
285 | |||
283 | /* | 286 | /* |
284 | * Mark the prot value as uncacheable and unbufferable. | 287 | * Mark the prot value as uncacheable and unbufferable. |
285 | */ | 288 | */ |
diff --git a/include/asm-arm/plat-s3c/nand.h b/include/asm-arm/plat-s3c/nand.h index 8816f7f9cee1..ad6bbe90616e 100644 --- a/include/asm-arm/plat-s3c/nand.h +++ b/include/asm-arm/plat-s3c/nand.h | |||
@@ -22,11 +22,14 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | struct s3c2410_nand_set { | 24 | struct s3c2410_nand_set { |
25 | unsigned int disable_ecc : 1; | ||
26 | |||
25 | int nr_chips; | 27 | int nr_chips; |
26 | int nr_partitions; | 28 | int nr_partitions; |
27 | char *name; | 29 | char *name; |
28 | int *nr_map; | 30 | int *nr_map; |
29 | struct mtd_partition *partitions; | 31 | struct mtd_partition *partitions; |
32 | struct nand_ecclayout *ecc_layout; | ||
30 | }; | 33 | }; |
31 | 34 | ||
32 | struct s3c2410_platform_nand { | 35 | struct s3c2410_platform_nand { |
@@ -36,6 +39,8 @@ struct s3c2410_platform_nand { | |||
36 | int twrph0; /* active time for nWE/nOE */ | 39 | int twrph0; /* active time for nWE/nOE */ |
37 | int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ | 40 | int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ |
38 | 41 | ||
42 | unsigned int ignore_unset_ecc : 1; | ||
43 | |||
39 | int nr_sets; | 44 | int nr_sets; |
40 | struct s3c2410_nand_set *sets; | 45 | struct s3c2410_nand_set *sets; |
41 | 46 | ||
diff --git a/include/asm-arm/unaligned.h b/include/asm-arm/unaligned.h index 5db03cf3b905..44593a894903 100644 --- a/include/asm-arm/unaligned.h +++ b/include/asm-arm/unaligned.h | |||
@@ -1,171 +1,9 @@ | |||
1 | #ifndef __ASM_ARM_UNALIGNED_H | 1 | #ifndef _ASM_ARM_UNALIGNED_H |
2 | #define __ASM_ARM_UNALIGNED_H | 2 | #define _ASM_ARM_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <linux/unaligned/le_byteshift.h> |
5 | 5 | #include <linux/unaligned/be_byteshift.h> | |
6 | extern int __bug_unaligned_x(const void *ptr); | 6 | #include <linux/unaligned/generic.h> |
7 | |||
8 | /* | ||
9 | * What is the most efficient way of loading/storing an unaligned value? | ||
10 | * | ||
11 | * That is the subject of this file. Efficiency here is defined as | ||
12 | * minimum code size with minimum register usage for the common cases. | ||
13 | * It is currently not believed that long longs are common, so we | ||
14 | * trade efficiency for the chars, shorts and longs against the long | ||
15 | * longs. | ||
16 | * | ||
17 | * Current stats with gcc 2.7.2.2 for these functions: | ||
18 | * | ||
19 | * ptrsize get: code regs put: code regs | ||
20 | * 1 1 1 1 2 | ||
21 | * 2 3 2 3 2 | ||
22 | * 4 7 3 7 3 | ||
23 | * 8 20 6 16 6 | ||
24 | * | ||
25 | * gcc 2.95.1 seems to code differently: | ||
26 | * | ||
27 | * ptrsize get: code regs put: code regs | ||
28 | * 1 1 1 1 2 | ||
29 | * 2 3 2 3 2 | ||
30 | * 4 7 4 7 4 | ||
31 | * 8 19 8 15 6 | ||
32 | * | ||
33 | * which may or may not be more efficient (depending upon whether | ||
34 | * you can afford the extra registers). Hopefully the gcc 2.95 | ||
35 | * is inteligent enough to decide if it is better to use the | ||
36 | * extra register, but evidence so far seems to suggest otherwise. | ||
37 | * | ||
38 | * Unfortunately, gcc is not able to optimise the high word | ||
39 | * out of long long >> 32, or the low word from long long << 32 | ||
40 | */ | ||
41 | |||
42 | #define __get_unaligned_2_le(__p) \ | ||
43 | (unsigned int)(__p[0] | __p[1] << 8) | ||
44 | |||
45 | #define __get_unaligned_2_be(__p) \ | ||
46 | (unsigned int)(__p[0] << 8 | __p[1]) | ||
47 | |||
48 | #define __get_unaligned_4_le(__p) \ | ||
49 | (unsigned int)(__p[0] | __p[1] << 8 | __p[2] << 16 | __p[3] << 24) | ||
50 | |||
51 | #define __get_unaligned_4_be(__p) \ | ||
52 | (unsigned int)(__p[0] << 24 | __p[1] << 16 | __p[2] << 8 | __p[3]) | ||
53 | |||
54 | #define __get_unaligned_8_le(__p) \ | ||
55 | ((unsigned long long)__get_unaligned_4_le((__p+4)) << 32 | \ | ||
56 | __get_unaligned_4_le(__p)) | ||
57 | |||
58 | #define __get_unaligned_8_be(__p) \ | ||
59 | ((unsigned long long)__get_unaligned_4_be(__p) << 32 | \ | ||
60 | __get_unaligned_4_be((__p+4))) | ||
61 | |||
62 | #define __get_unaligned_le(ptr) \ | ||
63 | ((__force typeof(*(ptr)))({ \ | ||
64 | const __u8 *__p = (const __u8 *)(ptr); \ | ||
65 | __builtin_choose_expr(sizeof(*(ptr)) == 1, *__p, \ | ||
66 | __builtin_choose_expr(sizeof(*(ptr)) == 2, __get_unaligned_2_le(__p), \ | ||
67 | __builtin_choose_expr(sizeof(*(ptr)) == 4, __get_unaligned_4_le(__p), \ | ||
68 | __builtin_choose_expr(sizeof(*(ptr)) == 8, __get_unaligned_8_le(__p), \ | ||
69 | (void)__bug_unaligned_x(__p))))); \ | ||
70 | })) | ||
71 | |||
72 | #define __get_unaligned_be(ptr) \ | ||
73 | ((__force typeof(*(ptr)))({ \ | ||
74 | const __u8 *__p = (const __u8 *)(ptr); \ | ||
75 | __builtin_choose_expr(sizeof(*(ptr)) == 1, *__p, \ | ||
76 | __builtin_choose_expr(sizeof(*(ptr)) == 2, __get_unaligned_2_be(__p), \ | ||
77 | __builtin_choose_expr(sizeof(*(ptr)) == 4, __get_unaligned_4_be(__p), \ | ||
78 | __builtin_choose_expr(sizeof(*(ptr)) == 8, __get_unaligned_8_be(__p), \ | ||
79 | (void)__bug_unaligned_x(__p))))); \ | ||
80 | })) | ||
81 | |||
82 | |||
83 | static inline void __put_unaligned_2_le(__u32 __v, register __u8 *__p) | ||
84 | { | ||
85 | *__p++ = __v; | ||
86 | *__p++ = __v >> 8; | ||
87 | } | ||
88 | |||
89 | static inline void __put_unaligned_2_be(__u32 __v, register __u8 *__p) | ||
90 | { | ||
91 | *__p++ = __v >> 8; | ||
92 | *__p++ = __v; | ||
93 | } | ||
94 | |||
95 | static inline void __put_unaligned_4_le(__u32 __v, register __u8 *__p) | ||
96 | { | ||
97 | __put_unaligned_2_le(__v >> 16, __p + 2); | ||
98 | __put_unaligned_2_le(__v, __p); | ||
99 | } | ||
100 | |||
101 | static inline void __put_unaligned_4_be(__u32 __v, register __u8 *__p) | ||
102 | { | ||
103 | __put_unaligned_2_be(__v >> 16, __p); | ||
104 | __put_unaligned_2_be(__v, __p + 2); | ||
105 | } | ||
106 | |||
107 | static inline void __put_unaligned_8_le(const unsigned long long __v, register __u8 *__p) | ||
108 | { | ||
109 | /* | ||
110 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
111 | * instructions), or an extra register in the long long | ||
112 | * case - go for the extra register. | ||
113 | */ | ||
114 | __put_unaligned_4_le(__v >> 32, __p+4); | ||
115 | __put_unaligned_4_le(__v, __p); | ||
116 | } | ||
117 | |||
118 | static inline void __put_unaligned_8_be(const unsigned long long __v, register __u8 *__p) | ||
119 | { | ||
120 | /* | ||
121 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
122 | * instructions), or an extra register in the long long | ||
123 | * case - go for the extra register. | ||
124 | */ | ||
125 | __put_unaligned_4_be(__v >> 32, __p); | ||
126 | __put_unaligned_4_be(__v, __p+4); | ||
127 | } | ||
128 | |||
129 | /* | ||
130 | * Try to store an unaligned value as efficiently as possible. | ||
131 | */ | ||
132 | #define __put_unaligned_le(val,ptr) \ | ||
133 | ({ \ | ||
134 | (void)sizeof(*(ptr) = (val)); \ | ||
135 | switch (sizeof(*(ptr))) { \ | ||
136 | case 1: \ | ||
137 | *(ptr) = (val); \ | ||
138 | break; \ | ||
139 | case 2: __put_unaligned_2_le((__force u16)(val),(__u8 *)(ptr)); \ | ||
140 | break; \ | ||
141 | case 4: __put_unaligned_4_le((__force u32)(val),(__u8 *)(ptr)); \ | ||
142 | break; \ | ||
143 | case 8: __put_unaligned_8_le((__force u64)(val),(__u8 *)(ptr)); \ | ||
144 | break; \ | ||
145 | default: __bug_unaligned_x(ptr); \ | ||
146 | break; \ | ||
147 | } \ | ||
148 | (void) 0; \ | ||
149 | }) | ||
150 | |||
151 | #define __put_unaligned_be(val,ptr) \ | ||
152 | ({ \ | ||
153 | (void)sizeof(*(ptr) = (val)); \ | ||
154 | switch (sizeof(*(ptr))) { \ | ||
155 | case 1: \ | ||
156 | *(ptr) = (val); \ | ||
157 | break; \ | ||
158 | case 2: __put_unaligned_2_be((__force u16)(val),(__u8 *)(ptr)); \ | ||
159 | break; \ | ||
160 | case 4: __put_unaligned_4_be((__force u32)(val),(__u8 *)(ptr)); \ | ||
161 | break; \ | ||
162 | case 8: __put_unaligned_8_be((__force u64)(val),(__u8 *)(ptr)); \ | ||
163 | break; \ | ||
164 | default: __bug_unaligned_x(ptr); \ | ||
165 | break; \ | ||
166 | } \ | ||
167 | (void) 0; \ | ||
168 | }) | ||
169 | 7 | ||
170 | /* | 8 | /* |
171 | * Select endianness | 9 | * Select endianness |
@@ -178,4 +16,4 @@ static inline void __put_unaligned_8_be(const unsigned long long __v, register _ | |||
178 | #define put_unaligned __put_unaligned_be | 16 | #define put_unaligned __put_unaligned_be |
179 | #endif | 17 | #endif |
180 | 18 | ||
181 | #endif | 19 | #endif /* _ASM_ARM_UNALIGNED_H */ |
diff --git a/include/asm-avr32/pgtable.h b/include/asm-avr32/pgtable.h index 3ae7b548fce7..c0e5e29417df 100644 --- a/include/asm-avr32/pgtable.h +++ b/include/asm-avr32/pgtable.h | |||
@@ -212,6 +212,10 @@ static inline int pte_young(pte_t pte) | |||
212 | { | 212 | { |
213 | return pte_val(pte) & _PAGE_ACCESSED; | 213 | return pte_val(pte) & _PAGE_ACCESSED; |
214 | } | 214 | } |
215 | static inline int pte_special(pte_t pte) | ||
216 | { | ||
217 | return 0; | ||
218 | } | ||
215 | 219 | ||
216 | /* | 220 | /* |
217 | * The following only work if pte_present() is not true. | 221 | * The following only work if pte_present() is not true. |
@@ -252,6 +256,10 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
252 | set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); | 256 | set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); |
253 | return pte; | 257 | return pte; |
254 | } | 258 | } |
259 | static inline pte_t pte_mkspecial(pte_t pte) | ||
260 | { | ||
261 | return pte; | ||
262 | } | ||
255 | 263 | ||
256 | #define pmd_none(x) (!pmd_val(x)) | 264 | #define pmd_none(x) (!pmd_val(x)) |
257 | #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) | 265 | #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT) |
diff --git a/include/asm-avr32/unaligned.h b/include/asm-avr32/unaligned.h index 36f5fd430543..041877290470 100644 --- a/include/asm-avr32/unaligned.h +++ b/include/asm-avr32/unaligned.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef __ASM_AVR32_UNALIGNED_H | 1 | #ifndef _ASM_AVR32_UNALIGNED_H |
2 | #define __ASM_AVR32_UNALIGNED_H | 2 | #define _ASM_AVR32_UNALIGNED_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * AVR32 can handle some unaligned accesses, depending on the | 5 | * AVR32 can handle some unaligned accesses, depending on the |
@@ -11,6 +11,11 @@ | |||
11 | * optimize word loads in general. | 11 | * optimize word loads in general. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <asm-generic/unaligned.h> | 14 | #include <linux/unaligned/be_struct.h> |
15 | #include <linux/unaligned/le_byteshift.h> | ||
16 | #include <linux/unaligned/generic.h> | ||
15 | 17 | ||
16 | #endif /* __ASM_AVR32_UNALIGNED_H */ | 18 | #define get_unaligned __get_unaligned_be |
19 | #define put_unaligned __put_unaligned_be | ||
20 | |||
21 | #endif /* _ASM_AVR32_UNALIGNED_H */ | ||
diff --git a/include/asm-blackfin/.gitignore b/include/asm-blackfin/.gitignore new file mode 100644 index 000000000000..7858564a4466 --- /dev/null +++ b/include/asm-blackfin/.gitignore | |||
@@ -0,0 +1 @@ | |||
+mach | |||
diff --git a/include/asm-blackfin/bfin-global.h b/include/asm-blackfin/bfin-global.h index 5dba3a735596..716df7c85923 100644 --- a/include/asm-blackfin/bfin-global.h +++ b/include/asm-blackfin/bfin-global.h | |||
@@ -112,20 +112,10 @@ extern void init_leds(void); | |||
112 | 112 | ||
113 | extern const char bfin_board_name[]; | 113 | extern const char bfin_board_name[]; |
114 | extern unsigned long wall_jiffies; | 114 | extern unsigned long wall_jiffies; |
115 | extern unsigned long ipdt_table[]; | ||
116 | extern unsigned long dpdt_table[]; | ||
117 | extern unsigned long icplb_table[]; | ||
118 | extern unsigned long dcplb_table[]; | ||
119 | |||
120 | extern unsigned long ipdt_swapcount_table[]; | ||
121 | extern unsigned long dpdt_swapcount_table[]; | ||
122 | |||
123 | extern unsigned long table_start, table_end; | ||
124 | 115 | ||
125 | extern unsigned long bfin_sic_iwr[]; | 116 | extern unsigned long bfin_sic_iwr[]; |
126 | extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */ | 117 | extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */ |
127 | extern struct file_operations dpmc_fops; | 118 | extern struct file_operations dpmc_fops; |
128 | extern char _start; | ||
129 | extern unsigned long _ramstart, _ramend, _rambase; | 119 | extern unsigned long _ramstart, _ramend, _rambase; |
130 | extern unsigned long memory_start, memory_end, physical_mem_end; | 120 | extern unsigned long memory_start, memory_end, physical_mem_end; |
131 | extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[], | 121 | extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[], |
diff --git a/include/asm-blackfin/bug.h b/include/asm-blackfin/bug.h index 41e53b29f167..6d3e11b1fc57 100644 --- a/include/asm-blackfin/bug.h +++ b/include/asm-blackfin/bug.h | |||
@@ -1,4 +1,17 @@ | |||
1 | #ifndef _BLACKFIN_BUG_H | 1 | #ifndef _BLACKFIN_BUG_H |
2 | #define _BLACKFIN_BUG_H | 2 | #define _BLACKFIN_BUG_H |
3 | |||
4 | #ifdef CONFIG_BUG | ||
5 | #define HAVE_ARCH_BUG | ||
6 | |||
7 | #define BUG() do { \ | ||
8 | dump_bfin_trace_buffer(); \ | ||
9 | printk(KERN_EMERG "BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ | ||
10 | panic("BUG!"); \ | ||
11 | } while (0) | ||
12 | |||
13 | #endif | ||
14 | |||
3 | #include <asm-generic/bug.h> | 15 | #include <asm-generic/bug.h> |
16 | |||
4 | #endif | 17 | #endif |
diff --git a/include/asm-blackfin/cplb.h b/include/asm-blackfin/cplb.h index 654375c2b746..5b0da9a69b67 100644 --- a/include/asm-blackfin/cplb.h +++ b/include/asm-blackfin/cplb.h | |||
@@ -74,32 +74,6 @@ | |||
74 | #define ASYNC_MEMORY_CPLB_COVERAGE ((ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ | 74 | #define ASYNC_MEMORY_CPLB_COVERAGE ((ASYNC_BANK0_SIZE + ASYNC_BANK1_SIZE + \ |
75 | ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) / SIZE_4M) | 75 | ASYNC_BANK2_SIZE + ASYNC_BANK3_SIZE) / SIZE_4M) |
76 | 76 | ||
77 | /* | ||
78 | * Number of required data CPLB switchtable entries | ||
79 | * MEMSIZE / 4 (we mostly install 4M page size CPLBs | ||
80 | * approx 16 for smaller 1MB page size CPLBs for allignment purposes | ||
81 | * 1 for L1 Data Memory | ||
82 | * possibly 1 for L2 Data Memory | ||
83 | * 1 for CONFIG_DEBUG_HUNT_FOR_ZERO | ||
84 | * 1 for ASYNC Memory | ||
85 | */ | ||
86 | |||
87 | |||
88 | #define MAX_SWITCH_D_CPLBS (((CONFIG_MEM_SIZE / 4) + 16 + 1 + 1 + 1 \ | ||
89 | + ASYNC_MEMORY_CPLB_COVERAGE) * 2) | ||
90 | |||
91 | /* | ||
92 | * Number of required instruction CPLB switchtable entries | ||
93 | * MEMSIZE / 4 (we mostly install 4M page size CPLBs | ||
94 | * approx 12 for smaller 1MB page size CPLBs for allignment purposes | ||
95 | * 1 for L1 Instruction Memory | ||
96 | * possibly 1 for L2 Instruction Memory | ||
97 | * 1 for CONFIG_DEBUG_HUNT_FOR_ZERO | ||
98 | */ | ||
99 | |||
100 | #define MAX_SWITCH_I_CPLBS (((CONFIG_MEM_SIZE / 4) + 12 + 1 + 1 + 1) * 2) | ||
101 | |||
102 | |||
103 | #define CPLB_ENABLE_ICACHE_P 0 | 77 | #define CPLB_ENABLE_ICACHE_P 0 |
104 | #define CPLB_ENABLE_DCACHE_P 1 | 78 | #define CPLB_ENABLE_DCACHE_P 1 |
105 | #define CPLB_ENABLE_DCACHE2_P 2 | 79 | #define CPLB_ENABLE_DCACHE2_P 2 |
diff --git a/include/asm-blackfin/dma-mapping.h b/include/asm-blackfin/dma-mapping.h index 282fabccf6a6..1a13c2fc3667 100644 --- a/include/asm-blackfin/dma-mapping.h +++ b/include/asm-blackfin/dma-mapping.h | |||
@@ -27,6 +27,14 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr, | |||
27 | extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | 27 | extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, |
28 | enum dma_data_direction direction); | 28 | enum dma_data_direction direction); |
29 | 29 | ||
30 | static inline dma_addr_t | ||
31 | dma_map_page(struct device *dev, struct page *page, | ||
32 | unsigned long offset, size_t size, | ||
33 | enum dma_data_direction dir) | ||
34 | { | ||
35 | return dma_map_single(dev, page_address(page) + offset, size, dir); | ||
36 | } | ||
37 | |||
30 | /* | 38 | /* |
31 | * Unmap a single streaming mode DMA translation. The dma_addr and size | 39 | * Unmap a single streaming mode DMA translation. The dma_addr and size |
32 | * must match what was provided for in a previous pci_map_single call. All | 40 | * must match what was provided for in a previous pci_map_single call. All |
@@ -38,6 +46,13 @@ extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
38 | extern void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | 46 | extern void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, |
39 | enum dma_data_direction direction); | 47 | enum dma_data_direction direction); |
40 | 48 | ||
49 | static inline void | ||
50 | dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
51 | enum dma_data_direction dir) | ||
52 | { | ||
53 | dma_unmap_single(dev, dma_addr, size, dir); | ||
54 | } | ||
55 | |||
41 | /* | 56 | /* |
42 | * Map a set of buffers described by scatterlist in streaming | 57 | * Map a set of buffers described by scatterlist in streaming |
43 | * mode for DMA. This is the scather-gather version of the | 58 | * mode for DMA. This is the scather-gather version of the |
diff --git a/include/asm-blackfin/dma.h b/include/asm-blackfin/dma.h index 16d493574ba8..c0d5259e315b 100644 --- a/include/asm-blackfin/dma.h +++ b/include/asm-blackfin/dma.h | |||
@@ -191,4 +191,7 @@ void clear_dma_irqstat(unsigned int channel); | |||
191 | void *dma_memcpy(void *dest, const void *src, size_t count); | 191 | void *dma_memcpy(void *dest, const void *src, size_t count); |
192 | void *safe_dma_memcpy(void *dest, const void *src, size_t count); | 192 | void *safe_dma_memcpy(void *dest, const void *src, size_t count); |
193 | 193 | ||
194 | extern int channel2irq(unsigned int channel); | ||
195 | extern struct dma_register *dma_io_base_addr[MAX_BLACKFIN_DMA_CHANNEL]; | ||
196 | |||
194 | #endif | 197 | #endif |
diff --git a/include/asm-blackfin/gptimers.h b/include/asm-blackfin/gptimers.h index 4f318f1fd2d9..0520d2aac8f3 100644 --- a/include/asm-blackfin/gptimers.h +++ b/include/asm-blackfin/gptimers.h | |||
@@ -22,6 +22,18 @@ | |||
22 | # define TIMER0_GROUP_REG TIMER_ENABLE | 22 | # define TIMER0_GROUP_REG TIMER_ENABLE |
23 | #endif | 23 | #endif |
24 | /* | 24 | /* |
25 | * BF54x: 11 timers (BF542: 8 timers): | ||
26 | */ | ||
27 | #if defined(BF548_FAMILY) | ||
28 | # ifdef CONFIG_BF542 | ||
29 | # define MAX_BLACKFIN_GPTIMERS 8 | ||
30 | # else | ||
31 | # define MAX_BLACKFIN_GPTIMERS 11 | ||
32 | # define TIMER8_GROUP_REG TIMER_ENABLE1 | ||
33 | # endif | ||
34 | # define TIMER0_GROUP_REG TIMER_ENABLE0 | ||
35 | #endif | ||
36 | /* | ||
25 | * BF561: 12 timers: | 37 | * BF561: 12 timers: |
26 | */ | 38 | */ |
27 | #if defined(CONFIG_BF561) | 39 | #if defined(CONFIG_BF561) |
@@ -44,40 +56,28 @@ | |||
44 | #define TIMER0bit 0x0001 /* 0001b */ | 56 | #define TIMER0bit 0x0001 /* 0001b */ |
45 | #define TIMER1bit 0x0002 /* 0010b */ | 57 | #define TIMER1bit 0x0002 /* 0010b */ |
46 | #define TIMER2bit 0x0004 /* 0100b */ | 58 | #define TIMER2bit 0x0004 /* 0100b */ |
47 | 59 | #define TIMER3bit 0x0008 | |
48 | #if (MAX_BLACKFIN_GPTIMERS > 3) | 60 | #define TIMER4bit 0x0010 |
49 | # define TIMER3bit 0x0008 | 61 | #define TIMER5bit 0x0020 |
50 | # define TIMER4bit 0x0010 | 62 | #define TIMER6bit 0x0040 |
51 | # define TIMER5bit 0x0020 | 63 | #define TIMER7bit 0x0080 |
52 | # define TIMER6bit 0x0040 | 64 | #define TIMER8bit 0x0100 |
53 | # define TIMER7bit 0x0080 | 65 | #define TIMER9bit 0x0200 |
54 | #endif | 66 | #define TIMER10bit 0x0400 |
55 | 67 | #define TIMER11bit 0x0800 | |
56 | #if (MAX_BLACKFIN_GPTIMERS > 8) | ||
57 | # define TIMER8bit 0x0100 | ||
58 | # define TIMER9bit 0x0200 | ||
59 | # define TIMER10bit 0x0400 | ||
60 | # define TIMER11bit 0x0800 | ||
61 | #endif | ||
62 | 68 | ||
63 | #define TIMER0_id 0 | 69 | #define TIMER0_id 0 |
64 | #define TIMER1_id 1 | 70 | #define TIMER1_id 1 |
65 | #define TIMER2_id 2 | 71 | #define TIMER2_id 2 |
66 | 72 | #define TIMER3_id 3 | |
67 | #if (MAX_BLACKFIN_GPTIMERS > 3) | 73 | #define TIMER4_id 4 |
68 | # define TIMER3_id 3 | 74 | #define TIMER5_id 5 |
69 | # define TIMER4_id 4 | 75 | #define TIMER6_id 6 |
70 | # define TIMER5_id 5 | 76 | #define TIMER7_id 7 |
71 | # define TIMER6_id 6 | 77 | #define TIMER8_id 8 |
72 | # define TIMER7_id 7 | 78 | #define TIMER9_id 9 |
73 | #endif | 79 | #define TIMER10_id 10 |
74 | 80 | #define TIMER11_id 11 | |
75 | #if (MAX_BLACKFIN_GPTIMERS > 8) | ||
76 | # define TIMER8_id 8 | ||
77 | # define TIMER9_id 9 | ||
78 | # define TIMER10_id 10 | ||
79 | # define TIMER11_id 11 | ||
80 | #endif | ||
81 | 81 | ||
82 | /* associated timers for ppi framesync: */ | 82 | /* associated timers for ppi framesync: */ |
83 | 83 | ||
@@ -124,45 +124,31 @@ | |||
124 | /* | 124 | /* |
125 | * Timer Status Register Bits | 125 | * Timer Status Register Bits |
126 | */ | 126 | */ |
127 | #define TIMER_STATUS_TIMIL0 0x0001 | 127 | #define TIMER_STATUS_TIMIL0 0x0001 |
128 | #define TIMER_STATUS_TIMIL1 0x0002 | 128 | #define TIMER_STATUS_TIMIL1 0x0002 |
129 | #define TIMER_STATUS_TIMIL2 0x0004 | 129 | #define TIMER_STATUS_TIMIL2 0x0004 |
130 | #if (MAX_BLACKFIN_GPTIMERS > 3) | 130 | #define TIMER_STATUS_TIMIL3 0x00000008 |
131 | # define TIMER_STATUS_TIMIL3 0x00000008 | 131 | #define TIMER_STATUS_TIMIL4 0x00010000 |
132 | # define TIMER_STATUS_TIMIL4 0x00010000 | 132 | #define TIMER_STATUS_TIMIL5 0x00020000 |
133 | # define TIMER_STATUS_TIMIL5 0x00020000 | 133 | #define TIMER_STATUS_TIMIL6 0x00040000 |
134 | # define TIMER_STATUS_TIMIL6 0x00040000 | 134 | #define TIMER_STATUS_TIMIL7 0x00080000 |
135 | # define TIMER_STATUS_TIMIL7 0x00080000 | 135 | #define TIMER_STATUS_TIMIL8 0x0001 |
136 | # if (MAX_BLACKFIN_GPTIMERS > 8) | 136 | #define TIMER_STATUS_TIMIL9 0x0002 |
137 | # define TIMER_STATUS_TIMIL8 0x0001 | 137 | #define TIMER_STATUS_TIMIL10 0x0004 |
138 | # define TIMER_STATUS_TIMIL9 0x0002 | 138 | #define TIMER_STATUS_TIMIL11 0x0008 |
139 | # define TIMER_STATUS_TIMIL10 0x0004 | 139 | |
140 | # define TIMER_STATUS_TIMIL11 0x0008 | 140 | #define TIMER_STATUS_TOVF0 0x0010 /* timer 0 overflow error */ |
141 | # endif | 141 | #define TIMER_STATUS_TOVF1 0x0020 |
142 | # define TIMER_STATUS_INTR 0x000F000F | 142 | #define TIMER_STATUS_TOVF2 0x0040 |
143 | #else | 143 | #define TIMER_STATUS_TOVF3 0x00000080 |
144 | # define TIMER_STATUS_INTR 0x0007 /* any timer interrupt */ | 144 | #define TIMER_STATUS_TOVF4 0x00100000 |
145 | #endif | 145 | #define TIMER_STATUS_TOVF5 0x00200000 |
146 | 146 | #define TIMER_STATUS_TOVF6 0x00400000 | |
147 | #define TIMER_STATUS_TOVF0 0x0010 /* timer 0 overflow error */ | 147 | #define TIMER_STATUS_TOVF7 0x00800000 |
148 | #define TIMER_STATUS_TOVF1 0x0020 | 148 | #define TIMER_STATUS_TOVF8 0x0010 |
149 | #define TIMER_STATUS_TOVF2 0x0040 | 149 | #define TIMER_STATUS_TOVF9 0x0020 |
150 | #if (MAX_BLACKFIN_GPTIMERS > 3) | 150 | #define TIMER_STATUS_TOVF10 0x0040 |
151 | # define TIMER_STATUS_TOVF3 0x00000080 | 151 | #define TIMER_STATUS_TOVF11 0x0080 |
152 | # define TIMER_STATUS_TOVF4 0x00100000 | ||
153 | # define TIMER_STATUS_TOVF5 0x00200000 | ||
154 | # define TIMER_STATUS_TOVF6 0x00400000 | ||
155 | # define TIMER_STATUS_TOVF7 0x00800000 | ||
156 | # if (MAX_BLACKFIN_GPTIMERS > 8) | ||
157 | # define TIMER_STATUS_TOVF8 0x0010 | ||
158 | # define TIMER_STATUS_TOVF9 0x0020 | ||
159 | # define TIMER_STATUS_TOVF10 0x0040 | ||
160 | # define TIMER_STATUS_TOVF11 0x0080 | ||
161 | # endif | ||
162 | # define TIMER_STATUS_OFLOW 0x00F000F0 | ||
163 | #else | ||
164 | # define TIMER_STATUS_OFLOW 0x0070 /* any timer overflow */ | ||
165 | #endif | ||
166 | 152 | ||
167 | /* | 153 | /* |
168 | * Timer Slave Enable Status : write 1 to clear | 154 | * Timer Slave Enable Status : write 1 to clear |
@@ -170,22 +156,16 @@ | |||
170 | #define TIMER_STATUS_TRUN0 0x1000 | 156 | #define TIMER_STATUS_TRUN0 0x1000 |
171 | #define TIMER_STATUS_TRUN1 0x2000 | 157 | #define TIMER_STATUS_TRUN1 0x2000 |
172 | #define TIMER_STATUS_TRUN2 0x4000 | 158 | #define TIMER_STATUS_TRUN2 0x4000 |
173 | #if (MAX_BLACKFIN_GPTIMERS > 3) | 159 | #define TIMER_STATUS_TRUN3 0x00008000 |
174 | # define TIMER_STATUS_TRUN3 0x00008000 | 160 | #define TIMER_STATUS_TRUN4 0x10000000 |
175 | # define TIMER_STATUS_TRUN4 0x10000000 | 161 | #define TIMER_STATUS_TRUN5 0x20000000 |
176 | # define TIMER_STATUS_TRUN5 0x20000000 | 162 | #define TIMER_STATUS_TRUN6 0x40000000 |
177 | # define TIMER_STATUS_TRUN6 0x40000000 | 163 | #define TIMER_STATUS_TRUN7 0x80000000 |
178 | # define TIMER_STATUS_TRUN7 0x80000000 | 164 | #define TIMER_STATUS_TRUN 0xF000F000 |
179 | # define TIMER_STATUS_TRUN 0xF000F000 | 165 | #define TIMER_STATUS_TRUN8 0x1000 |
180 | # if (MAX_BLACKFIN_GPTIMERS > 8) | 166 | #define TIMER_STATUS_TRUN9 0x2000 |
181 | # define TIMER_STATUS_TRUN8 0x1000 | 167 | #define TIMER_STATUS_TRUN10 0x4000 |
182 | # define TIMER_STATUS_TRUN9 0x2000 | 168 | #define TIMER_STATUS_TRUN11 0x8000 |
183 | # define TIMER_STATUS_TRUN10 0x4000 | ||
184 | # define TIMER_STATUS_TRUN11 0x8000 | ||
185 | # endif | ||
186 | #else | ||
187 | # define TIMER_STATUS_TRUN 0x7000 | ||
188 | #endif | ||
189 | 169 | ||
190 | /* The actual gptimer API */ | 170 | /* The actual gptimer API */ |
191 | 171 | ||
diff --git a/include/asm-blackfin/mach-bf527/anomaly.h b/include/asm-blackfin/mach-bf527/anomaly.h index a89120445be6..735fa02fafb2 100644 --- a/include/asm-blackfin/mach-bf527/anomaly.h +++ b/include/asm-blackfin/mach-bf527/anomaly.h | |||
@@ -2,12 +2,12 @@ | |||
2 | * File: include/asm-blackfin/mach-bf527/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf527/anomaly.h |
3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
4 | * | 4 | * |
5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
10 | * - Revision A, May 30, 2007; ADSP-BF527 Blackfin Processor Anomaly List | 10 | * - Revision C, 01/25/2008; ADSP-BF527 Blackfin Processor Anomaly List |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
@@ -15,35 +15,85 @@ | |||
15 | 15 | ||
16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ | 16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
17 | #define ANOMALY_05000074 (1) | 17 | #define ANOMALY_05000074 (1) |
18 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | ||
19 | #define ANOMALY_05000119 (1) | ||
20 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 18 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
21 | #define ANOMALY_05000122 (1) | 19 | #define ANOMALY_05000122 (1) |
22 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ | 20 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ |
23 | #define ANOMALY_05000245 (1) | 21 | #define ANOMALY_05000245 (1) |
24 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 22 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
25 | #define ANOMALY_05000265 (1) | 23 | #define ANOMALY_05000265 (1) |
26 | /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */ | ||
27 | #define ANOMALY_05000301 (1) | ||
28 | /* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | ||
29 | #define ANOMALY_05000312 (1) | ||
30 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ | 24 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ |
31 | #define ANOMALY_05000328 (1) | 25 | #define ANOMALY_05000328 (1) |
32 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ | 26 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ |
33 | #define ANOMALY_05000337 (1) | 27 | #define ANOMALY_05000337 (1) |
34 | /* TWI Does Not Operate Correctly Under Certain Signal Termination Conditions */ | 28 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ |
29 | #define ANOMALY_05000341 (1) | ||
30 | /* TWI May Not Operate Correctly Under Certain Signal Termination Conditions */ | ||
35 | #define ANOMALY_05000342 (1) | 31 | #define ANOMALY_05000342 (1) |
36 | /* Boot ROM Kernel Incorrectly Alters Reset Value of USB Register */ | 32 | /* USB Calibration Value Is Not Initialized */ |
33 | #define ANOMALY_05000346 (1) | ||
34 | /* Preboot Routine Incorrectly Alters Reset Value of USB Register */ | ||
37 | #define ANOMALY_05000347 (1) | 35 | #define ANOMALY_05000347 (1) |
36 | /* Security Features Are Not Functional */ | ||
37 | #define ANOMALY_05000348 (__SILICON_REVISION__ < 1) | ||
38 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | ||
39 | #define ANOMALY_05000355 (1) | ||
40 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | ||
41 | #define ANOMALY_05000357 (1) | ||
42 | /* Incorrect Revision Number in DSPID Register */ | ||
43 | #define ANOMALY_05000364 (__SILICON_REVISION__ > 0) | ||
44 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
45 | #define ANOMALY_05000366 (1) | ||
46 | /* New Feature: Higher Default CCLK Rate */ | ||
47 | #define ANOMALY_05000368 (1) | ||
48 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
49 | #define ANOMALY_05000371 (1) | ||
50 | /* Authentication Fails To Initiate */ | ||
51 | #define ANOMALY_05000376 (__SILICON_REVISION__ > 0) | ||
52 | /* Data Read From L3 Memory by USB DMA May be Corrupted */ | ||
53 | #define ANOMALY_05000380 (1) | ||
54 | /* USB Full-speed Mode not Fully Tested */ | ||
55 | #define ANOMALY_05000381 (1) | ||
56 | /* New Feature: Boot from OTP Memory */ | ||
57 | #define ANOMALY_05000385 (1) | ||
58 | /* New Feature: bfrom_SysControl() Routine */ | ||
59 | #define ANOMALY_05000386 (1) | ||
60 | /* New Feature: Programmable Preboot Settings */ | ||
61 | #define ANOMALY_05000387 (1) | ||
62 | /* Reset Vector Must Not Be in SDRAM Memory Space */ | ||
63 | #define ANOMALY_05000389 (1) | ||
64 | /* New Feature: pTempCurrent Added to ADI_BOOT_DATA Structure */ | ||
65 | #define ANOMALY_05000392 (1) | ||
66 | /* New Feature: dTempByteCount Value Increased in ADI_BOOT_DATA Structure */ | ||
67 | #define ANOMALY_05000393 (1) | ||
68 | /* New Feature: Log Buffer Functionality */ | ||
69 | #define ANOMALY_05000394 (1) | ||
70 | /* New Feature: Hook Routine Functionality */ | ||
71 | #define ANOMALY_05000395 (1) | ||
72 | /* New Feature: Header Indirect Bit */ | ||
73 | #define ANOMALY_05000396 (1) | ||
74 | /* New Feature: BK_ONES, BK_ZEROS, and BK_DATECODE Constants */ | ||
75 | #define ANOMALY_05000397 (1) | ||
76 | /* New Feature: SWRESET, DFRESET and WDRESET Bits Added to SYSCR Register */ | ||
77 | #define ANOMALY_05000398 (1) | ||
78 | /* New Feature: BCODE_NOBOOT Added to BCODE Field of SYSCR Register */ | ||
79 | #define ANOMALY_05000399 (1) | ||
80 | /* PPI Data Signals D0 and D8 do not Tristate After Disabling PPI */ | ||
81 | #define ANOMALY_05000401 (1) | ||
38 | 82 | ||
39 | /* Anomalies that don't exist on this proc */ | 83 | /* Anomalies that don't exist on this proc */ |
40 | #define ANOMALY_05000323 (0) | ||
41 | #define ANOMALY_05000244 (0) | ||
42 | #define ANOMALY_05000198 (0) | ||
43 | #define ANOMALY_05000125 (0) | 84 | #define ANOMALY_05000125 (0) |
44 | #define ANOMALY_05000158 (0) | 85 | #define ANOMALY_05000158 (0) |
45 | #define ANOMALY_05000273 (0) | 86 | #define ANOMALY_05000183 (0) |
87 | #define ANOMALY_05000198 (0) | ||
88 | #define ANOMALY_05000230 (0) | ||
89 | #define ANOMALY_05000244 (0) | ||
90 | #define ANOMALY_05000261 (0) | ||
46 | #define ANOMALY_05000263 (0) | 91 | #define ANOMALY_05000263 (0) |
92 | #define ANOMALY_05000266 (0) | ||
93 | #define ANOMALY_05000273 (0) | ||
47 | #define ANOMALY_05000311 (0) | 94 | #define ANOMALY_05000311 (0) |
48 | #define ANOMALY_05000230 (0) | 95 | #define ANOMALY_05000312 (0) |
96 | #define ANOMALY_05000323 (0) | ||
97 | #define ANOMALY_05000363 (0) | ||
98 | |||
49 | #endif | 99 | #endif |
diff --git a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h index c0694ecd2ecd..f0ab2736a680 100644 --- a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h | |||
@@ -1,22 +1,38 @@ | |||
1 | /* | ||
2 | * file: include/asm-blackfin/mach-bf527/bfin_serial_5xx.h | ||
3 | * based on: | ||
4 | * author: | ||
5 | * | ||
6 | * created: | ||
7 | * description: | ||
8 | * blackfin serial driver head file | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * | ||
14 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | * this program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the gnu general public license as published by | ||
18 | * the free software foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * this program is distributed in the hope that it will be useful, | ||
22 | * but without any warranty; without even the implied warranty of | ||
23 | * merchantability or fitness for a particular purpose. see the | ||
24 | * gnu general public license for more details. | ||
25 | * | ||
26 | * you should have received a copy of the gnu general public license | ||
27 | * along with this program; see the file copying. | ||
28 | * if not, write to the free software foundation, | ||
29 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
30 | */ | ||
31 | |||
1 | #include <linux/serial.h> | 32 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
3 | #include <asm/portmux.h> | 34 | #include <asm/portmux.h> |
4 | 35 | ||
5 | #define NR_PORTS 2 | ||
6 | |||
7 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
8 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
9 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
10 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
11 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
12 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
13 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
14 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
15 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
16 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
17 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
18 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
19 | |||
20 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 36 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
21 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 37 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
22 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) | 38 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) |
@@ -92,7 +108,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart) | |||
92 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); | 108 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); |
93 | } | 109 | } |
94 | 110 | ||
95 | struct bfin_serial_port bfin_serial_ports[NR_PORTS]; | 111 | struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS]; |
96 | struct bfin_serial_res { | 112 | struct bfin_serial_res { |
97 | unsigned long uart_base_addr; | 113 | unsigned long uart_base_addr; |
98 | int uart_irq; | 114 | int uart_irq; |
diff --git a/include/asm-blackfin/mach-bf527/bfin_sir.h b/include/asm-blackfin/mach-bf527/bfin_sir.h new file mode 100644 index 000000000000..0612d0c9501c --- /dev/null +++ b/include/asm-blackfin/mach-bf527/bfin_sir.h | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * Blackfin Infra-red Driver | ||
3 | * | ||
4 | * Copyright 2006-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * Licensed under the GPL-2 or later. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/serial.h> | ||
13 | #include <asm/dma.h> | ||
14 | #include <asm/portmux.h> | ||
15 | |||
16 | #define SIR_UART_GET_CHAR(port) bfin_read16((port)->membase + OFFSET_RBR) | ||
17 | #define SIR_UART_GET_DLL(port) bfin_read16((port)->membase + OFFSET_DLL) | ||
18 | #define SIR_UART_GET_IER(port) bfin_read16((port)->membase + OFFSET_IER) | ||
19 | #define SIR_UART_GET_DLH(port) bfin_read16((port)->membase + OFFSET_DLH) | ||
20 | #define SIR_UART_GET_IIR(port) bfin_read16((port)->membase + OFFSET_IIR) | ||
21 | #define SIR_UART_GET_LCR(port) bfin_read16((port)->membase + OFFSET_LCR) | ||
22 | #define SIR_UART_GET_GCTL(port) bfin_read16((port)->membase + OFFSET_GCTL) | ||
23 | |||
24 | #define SIR_UART_PUT_CHAR(port, v) bfin_write16(((port)->membase + OFFSET_THR), v) | ||
25 | #define SIR_UART_PUT_DLL(port, v) bfin_write16(((port)->membase + OFFSET_DLL), v) | ||
26 | #define SIR_UART_PUT_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER), v) | ||
27 | #define SIR_UART_PUT_DLH(port, v) bfin_write16(((port)->membase + OFFSET_DLH), v) | ||
28 | #define SIR_UART_PUT_LCR(port, v) bfin_write16(((port)->membase + OFFSET_LCR), v) | ||
29 | #define SIR_UART_PUT_GCTL(port, v) bfin_write16(((port)->membase + OFFSET_GCTL), v) | ||
30 | |||
31 | #ifdef CONFIG_SIR_BFIN_DMA | ||
32 | struct dma_rx_buf { | ||
33 | char *buf; | ||
34 | int head; | ||
35 | int tail; | ||
36 | }; | ||
37 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
38 | |||
39 | struct bfin_sir_port { | ||
40 | unsigned char __iomem *membase; | ||
41 | unsigned int irq; | ||
42 | unsigned int lsr; | ||
43 | unsigned long clk; | ||
44 | struct net_device *dev; | ||
45 | #ifdef CONFIG_SIR_BFIN_DMA | ||
46 | int tx_done; | ||
47 | struct dma_rx_buf rx_dma_buf; | ||
48 | struct timer_list rx_dma_timer; | ||
49 | int rx_dma_nrows; | ||
50 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
51 | unsigned int tx_dma_channel; | ||
52 | unsigned int rx_dma_channel; | ||
53 | }; | ||
54 | |||
55 | struct bfin_sir_port sir_ports[BFIN_UART_NR_PORTS]; | ||
56 | |||
57 | struct bfin_sir_port_res { | ||
58 | unsigned long base_addr; | ||
59 | int irq; | ||
60 | unsigned int rx_dma_channel; | ||
61 | unsigned int tx_dma_channel; | ||
62 | }; | ||
63 | |||
64 | struct bfin_sir_port_res bfin_sir_port_resource[] = { | ||
65 | #ifdef CONFIG_BFIN_SIR0 | ||
66 | { | ||
67 | 0xFFC00400, | ||
68 | IRQ_UART0_RX, | ||
69 | CH_UART0_RX, | ||
70 | CH_UART0_TX, | ||
71 | }, | ||
72 | #endif | ||
73 | #ifdef CONFIG_BFIN_SIR1 | ||
74 | { | ||
75 | 0xFFC02000, | ||
76 | IRQ_UART1_RX, | ||
77 | CH_UART1_RX, | ||
78 | CH_UART1_TX, | ||
79 | }, | ||
80 | #endif | ||
81 | }; | ||
82 | |||
83 | int nr_sirs = ARRAY_SIZE(bfin_sir_port_resource); | ||
84 | |||
85 | struct bfin_sir_self { | ||
86 | struct bfin_sir_port *sir_port; | ||
87 | spinlock_t lock; | ||
88 | unsigned int open; | ||
89 | int speed; | ||
90 | int newspeed; | ||
91 | |||
92 | struct sk_buff *txskb; | ||
93 | struct sk_buff *rxskb; | ||
94 | struct net_device_stats stats; | ||
95 | struct device *dev; | ||
96 | struct irlap_cb *irlap; | ||
97 | struct qos_info qos; | ||
98 | |||
99 | iobuff_t tx_buff; | ||
100 | iobuff_t rx_buff; | ||
101 | |||
102 | struct work_struct work; | ||
103 | int mtt; | ||
104 | }; | ||
105 | |||
106 | static inline unsigned int SIR_UART_GET_LSR(struct bfin_sir_port *port) | ||
107 | { | ||
108 | unsigned int lsr = bfin_read16(port->membase + OFFSET_LSR); | ||
109 | port->lsr |= (lsr & (BI|FE|PE|OE)); | ||
110 | return lsr | port->lsr; | ||
111 | } | ||
112 | |||
113 | static inline void SIR_UART_CLEAR_LSR(struct bfin_sir_port *port) | ||
114 | { | ||
115 | port->lsr = 0; | ||
116 | bfin_read16(port->membase + OFFSET_LSR); | ||
117 | } | ||
118 | |||
119 | #define DRIVER_NAME "bfin_sir" | ||
120 | |||
121 | static void bfin_sir_hw_init(void) | ||
122 | { | ||
123 | #ifdef CONFIG_BFIN_SIR0 | ||
124 | peripheral_request(P_UART0_TX, DRIVER_NAME); | ||
125 | peripheral_request(P_UART0_RX, DRIVER_NAME); | ||
126 | #endif | ||
127 | |||
128 | #ifdef CONFIG_BFIN_SIR1 | ||
129 | peripheral_request(P_UART1_TX, DRIVER_NAME); | ||
130 | peripheral_request(P_UART1_RX, DRIVER_NAME); | ||
131 | #endif | ||
132 | SSYNC(); | ||
133 | } | ||
diff --git a/include/asm-blackfin/mach-bf527/blackfin.h b/include/asm-blackfin/mach-bf527/blackfin.h index 1bd07e30781c..2891727b6176 100644 --- a/include/asm-blackfin/mach-bf527/blackfin.h +++ b/include/asm-blackfin/mach-bf527/blackfin.h | |||
@@ -64,6 +64,21 @@ | |||
64 | #define STATUS_P1 0x02 | 64 | #define STATUS_P1 0x02 |
65 | #define STATUS_P0 0x01 | 65 | #define STATUS_P0 0x01 |
66 | 66 | ||
67 | #define BFIN_UART_NR_PORTS 2 | ||
68 | |||
69 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
70 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
71 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
72 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
73 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
74 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
75 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
76 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
77 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
78 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
79 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
80 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
81 | |||
67 | /* DPMC*/ | 82 | /* DPMC*/ |
68 | #define bfin_read_STOPCK_OFF() bfin_read_STOPCK() | 83 | #define bfin_read_STOPCK_OFF() bfin_read_STOPCK() |
69 | #define bfin_write_STOPCK_OFF(val) bfin_write_STOPCK(val) | 84 | #define bfin_write_STOPCK_OFF(val) bfin_write_STOPCK(val) |
diff --git a/include/asm-blackfin/mach-bf527/cdefBF52x_base.h b/include/asm-blackfin/mach-bf527/cdefBF52x_base.h index 3f4de5d9d4cb..9dbdbec8ea1b 100644 --- a/include/asm-blackfin/mach-bf527/cdefBF52x_base.h +++ b/include/asm-blackfin/mach-bf527/cdefBF52x_base.h | |||
@@ -29,18 +29,71 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #ifndef _CDEF_BF52X_H | 31 | #ifndef _CDEF_BF52X_H |
32 | #define _CDEF_BF52X_H | ||
33 | |||
34 | #include <asm/system.h> | ||
35 | #include <asm/blackfin.h> | ||
32 | 36 | ||
33 | #include "defBF52x_base.h" | 37 | #include "defBF52x_base.h" |
34 | 38 | ||
39 | /* Include core specific register pointer definitions */ | ||
40 | #include <asm/mach-common/cdef_LPBlackfin.h> | ||
41 | |||
35 | /* ==== begin from cdefBF534.h ==== */ | 42 | /* ==== begin from cdefBF534.h ==== */ |
36 | 43 | ||
37 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ | 44 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ |
38 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
39 | #define bfin_write_PLL_CTL(val) bfin_write16(PLL_CTL, val) | 46 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ |
47 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
48 | { | ||
49 | unsigned long flags, iwr0, iwr1; | ||
50 | |||
51 | if (val == bfin_read_PLL_CTL()) | ||
52 | return; | ||
53 | |||
54 | local_irq_save(flags); | ||
55 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
56 | iwr0 = bfin_read32(SIC_IWR0); | ||
57 | iwr1 = bfin_read32(SIC_IWR1); | ||
58 | /* Only allow PPL Wakeup) */ | ||
59 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
60 | bfin_write32(SIC_IWR1, 0); | ||
61 | |||
62 | bfin_write16(PLL_CTL, val); | ||
63 | SSYNC(); | ||
64 | asm("IDLE;"); | ||
65 | |||
66 | bfin_write32(SIC_IWR0, iwr0); | ||
67 | bfin_write32(SIC_IWR1, iwr1); | ||
68 | local_irq_restore(flags); | ||
69 | } | ||
40 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 70 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
41 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) | 71 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) |
42 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 72 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
43 | #define bfin_write_VR_CTL(val) bfin_write16(VR_CTL, val) | 73 | /* Writing to VR_CTL initiates a PLL relock sequence. */ |
74 | static __inline__ void bfin_write_VR_CTL(unsigned int val) | ||
75 | { | ||
76 | unsigned long flags, iwr0, iwr1; | ||
77 | |||
78 | if (val == bfin_read_VR_CTL()) | ||
79 | return; | ||
80 | |||
81 | local_irq_save(flags); | ||
82 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
83 | iwr0 = bfin_read32(SIC_IWR0); | ||
84 | iwr1 = bfin_read32(SIC_IWR1); | ||
85 | /* Only allow PPL Wakeup) */ | ||
86 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
87 | bfin_write32(SIC_IWR1, 0); | ||
88 | |||
89 | bfin_write16(VR_CTL, val); | ||
90 | SSYNC(); | ||
91 | asm("IDLE;"); | ||
92 | |||
93 | bfin_write32(SIC_IWR0, iwr0); | ||
94 | bfin_write32(SIC_IWR1, iwr1); | ||
95 | local_irq_restore(flags); | ||
96 | } | ||
44 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 97 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
45 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) | 98 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) |
46 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) | 99 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) |
@@ -873,39 +926,6 @@ | |||
873 | 926 | ||
874 | 927 | ||
875 | /* Two-Wire Interface (0xFFC01400 - 0xFFC014FF) */ | 928 | /* Two-Wire Interface (0xFFC01400 - 0xFFC014FF) */ |
876 | #define bfin_read_TWI_CLKDIV() bfin_read16(TWI_CLKDIV) | ||
877 | #define bfin_write_TWI_CLKDIV(val) bfin_write16(TWI_CLKDIV, val) | ||
878 | #define bfin_read_TWI_CONTROL() bfin_read16(TWI_CONTROL) | ||
879 | #define bfin_write_TWI_CONTROL(val) bfin_write16(TWI_CONTROL, val) | ||
880 | #define bfin_read_TWI_SLAVE_CTL() bfin_read16(TWI_SLAVE_CTL) | ||
881 | #define bfin_write_TWI_SLAVE_CTL(val) bfin_write16(TWI_SLAVE_CTL, val) | ||
882 | #define bfin_read_TWI_SLAVE_STAT() bfin_read16(TWI_SLAVE_STAT) | ||
883 | #define bfin_write_TWI_SLAVE_STAT(val) bfin_write16(TWI_SLAVE_STAT, val) | ||
884 | #define bfin_read_TWI_SLAVE_ADDR() bfin_read16(TWI_SLAVE_ADDR) | ||
885 | #define bfin_write_TWI_SLAVE_ADDR(val) bfin_write16(TWI_SLAVE_ADDR, val) | ||
886 | #define bfin_read_TWI_MASTER_CTL() bfin_read16(TWI_MASTER_CTL) | ||
887 | #define bfin_write_TWI_MASTER_CTL(val) bfin_write16(TWI_MASTER_CTL, val) | ||
888 | #define bfin_read_TWI_MASTER_STAT() bfin_read16(TWI_MASTER_STAT) | ||
889 | #define bfin_write_TWI_MASTER_STAT(val) bfin_write16(TWI_MASTER_STAT, val) | ||
890 | #define bfin_read_TWI_MASTER_ADDR() bfin_read16(TWI_MASTER_ADDR) | ||
891 | #define bfin_write_TWI_MASTER_ADDR(val) bfin_write16(TWI_MASTER_ADDR, val) | ||
892 | #define bfin_read_TWI_INT_STAT() bfin_read16(TWI_INT_STAT) | ||
893 | #define bfin_write_TWI_INT_STAT(val) bfin_write16(TWI_INT_STAT, val) | ||
894 | #define bfin_read_TWI_INT_MASK() bfin_read16(TWI_INT_MASK) | ||
895 | #define bfin_write_TWI_INT_MASK(val) bfin_write16(TWI_INT_MASK, val) | ||
896 | #define bfin_read_TWI_FIFO_CTL() bfin_read16(TWI_FIFO_CTL) | ||
897 | #define bfin_write_TWI_FIFO_CTL(val) bfin_write16(TWI_FIFO_CTL, val) | ||
898 | #define bfin_read_TWI_FIFO_STAT() bfin_read16(TWI_FIFO_STAT) | ||
899 | #define bfin_write_TWI_FIFO_STAT(val) bfin_write16(TWI_FIFO_STAT, val) | ||
900 | #define bfin_read_TWI_XMT_DATA8() bfin_read16(TWI_XMT_DATA8) | ||
901 | #define bfin_write_TWI_XMT_DATA8(val) bfin_write16(TWI_XMT_DATA8, val) | ||
902 | #define bfin_read_TWI_XMT_DATA16() bfin_read16(TWI_XMT_DATA16) | ||
903 | #define bfin_write_TWI_XMT_DATA16(val) bfin_write16(TWI_XMT_DATA16, val) | ||
904 | #define bfin_read_TWI_RCV_DATA8() bfin_read16(TWI_RCV_DATA8) | ||
905 | #define bfin_write_TWI_RCV_DATA8(val) bfin_write16(TWI_RCV_DATA8, val) | ||
906 | #define bfin_read_TWI_RCV_DATA16() bfin_read16(TWI_RCV_DATA16) | ||
907 | #define bfin_write_TWI_RCV_DATA16(val) bfin_write16(TWI_RCV_DATA16, val) | ||
908 | |||
909 | 929 | ||
910 | /* General Purpose I/O Port G (0xFFC01500 - 0xFFC015FF) */ | 930 | /* General Purpose I/O Port G (0xFFC01500 - 0xFFC015FF) */ |
911 | #define bfin_read_PORTGIO() bfin_read16(PORTGIO) | 931 | #define bfin_read_PORTGIO() bfin_read16(PORTGIO) |
diff --git a/include/asm-blackfin/mach-bf527/dma.h b/include/asm-blackfin/mach-bf527/dma.h index 2dfee12864f6..49dd693223e8 100644 --- a/include/asm-blackfin/mach-bf527/dma.h +++ b/include/asm-blackfin/mach-bf527/dma.h | |||
@@ -59,7 +59,4 @@ | |||
59 | #define CH_NFC CH_EMAC_TX /* PPI receive/transmit or NFC */ | 59 | #define CH_NFC CH_EMAC_TX /* PPI receive/transmit or NFC */ |
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | extern int channel2irq(unsigned int channel); | ||
63 | extern struct dma_register *base_addr[]; | ||
64 | |||
65 | #endif | 62 | #endif |
diff --git a/include/asm-blackfin/mach-bf533/anomaly.h b/include/asm-blackfin/mach-bf533/anomaly.h index 98209d40abba..5a6dcc5fa36c 100644 --- a/include/asm-blackfin/mach-bf533/anomaly.h +++ b/include/asm-blackfin/mach-bf533/anomaly.h | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
10 | * - Revision B, 12/10/2007; ADSP-BF531/BF532/BF533 Blackfin Processor Anomaly List | 10 | * - Revision C, 02/08/2008; ADSP-BF531/BF532/BF533 Blackfin Processor Anomaly List |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
@@ -251,10 +251,18 @@ | |||
251 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) | 251 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) |
252 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | 252 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ |
253 | #define ANOMALY_05000357 (1) | 253 | #define ANOMALY_05000357 (1) |
254 | /* UART Break Signal Issues */ | ||
255 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
254 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | 256 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ |
255 | #define ANOMALY_05000366 (1) | 257 | #define ANOMALY_05000366 (1) |
256 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | 258 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ |
257 | #define ANOMALY_05000371 (1) | 259 | #define ANOMALY_05000371 (1) |
260 | /* PPI Does Not Start Properly In Specific Mode */ | ||
261 | #define ANOMALY_05000400 (__SILICON_REVISION__ == 5) | ||
262 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
263 | #define ANOMALY_05000402 (__SILICON_REVISION__ == 5) | ||
264 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
265 | #define ANOMALY_05000403 (1) | ||
258 | 266 | ||
259 | /* Anomalies that don't exist on this proc */ | 267 | /* Anomalies that don't exist on this proc */ |
260 | #define ANOMALY_05000266 (0) | 268 | #define ANOMALY_05000266 (0) |
diff --git a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h index b6f513bee56e..fbe88dee3e2d 100644 --- a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h | |||
@@ -1,22 +1,38 @@ | |||
1 | /* | ||
2 | * file: include/asm-blackfin/mach-bf533/bfin_serial_5xx.h | ||
3 | * based on: | ||
4 | * author: | ||
5 | * | ||
6 | * created: | ||
7 | * description: | ||
8 | * blackfin serial driver head file | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * | ||
14 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | * this program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the gnu general public license as published by | ||
18 | * the free software foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * this program is distributed in the hope that it will be useful, | ||
22 | * but without any warranty; without even the implied warranty of | ||
23 | * merchantability or fitness for a particular purpose. see the | ||
24 | * gnu general public license for more details. | ||
25 | * | ||
26 | * you should have received a copy of the gnu general public license | ||
27 | * along with this program; see the file copying. | ||
28 | * if not, write to the free software foundation, | ||
29 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
30 | */ | ||
31 | |||
1 | #include <linux/serial.h> | 32 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
3 | #include <asm/portmux.h> | 34 | #include <asm/portmux.h> |
4 | 35 | ||
5 | #define NR_PORTS 1 | ||
6 | |||
7 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
8 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
9 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
10 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
11 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
12 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
13 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
14 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
15 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
16 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
17 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
18 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
19 | |||
20 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 36 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
21 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 37 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
22 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) | 38 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) |
@@ -84,7 +100,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart) | |||
84 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); | 100 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); |
85 | } | 101 | } |
86 | 102 | ||
87 | struct bfin_serial_port bfin_serial_ports[NR_PORTS]; | 103 | struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS]; |
88 | struct bfin_serial_res { | 104 | struct bfin_serial_res { |
89 | unsigned long uart_base_addr; | 105 | unsigned long uart_base_addr; |
90 | int uart_irq; | 106 | int uart_irq; |
@@ -115,7 +131,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
115 | 131 | ||
116 | #define DRIVER_NAME "bfin-uart" | 132 | #define DRIVER_NAME "bfin-uart" |
117 | 133 | ||
118 | int nr_ports = NR_PORTS; | 134 | int nr_ports = BFIN_UART_NR_PORTS; |
119 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) | 135 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) |
120 | { | 136 | { |
121 | 137 | ||
diff --git a/include/asm-blackfin/mach-bf533/bfin_sir.h b/include/asm-blackfin/mach-bf533/bfin_sir.h new file mode 100644 index 000000000000..cefcf8bb505b --- /dev/null +++ b/include/asm-blackfin/mach-bf533/bfin_sir.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * Blackfin Infra-red Driver | ||
3 | * | ||
4 | * Copyright 2006-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * Licensed under the GPL-2 or later. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/serial.h> | ||
13 | #include <asm/dma.h> | ||
14 | #include <asm/portmux.h> | ||
15 | |||
16 | #define SIR_UART_GET_CHAR(port) bfin_read16((port)->membase + OFFSET_RBR) | ||
17 | #define SIR_UART_GET_DLL(port) bfin_read16((port)->membase + OFFSET_DLL) | ||
18 | #define SIR_UART_GET_IER(port) bfin_read16((port)->membase + OFFSET_IER) | ||
19 | #define SIR_UART_GET_DLH(port) bfin_read16((port)->membase + OFFSET_DLH) | ||
20 | #define SIR_UART_GET_IIR(port) bfin_read16((port)->membase + OFFSET_IIR) | ||
21 | #define SIR_UART_GET_LCR(port) bfin_read16((port)->membase + OFFSET_LCR) | ||
22 | #define SIR_UART_GET_GCTL(port) bfin_read16((port)->membase + OFFSET_GCTL) | ||
23 | |||
24 | #define SIR_UART_PUT_CHAR(port, v) bfin_write16(((port)->membase + OFFSET_THR), v) | ||
25 | #define SIR_UART_PUT_DLL(port, v) bfin_write16(((port)->membase + OFFSET_DLL), v) | ||
26 | #define SIR_UART_PUT_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER), v) | ||
27 | #define SIR_UART_PUT_DLH(port, v) bfin_write16(((port)->membase + OFFSET_DLH), v) | ||
28 | #define SIR_UART_PUT_LCR(port, v) bfin_write16(((port)->membase + OFFSET_LCR), v) | ||
29 | #define SIR_UART_PUT_GCTL(port, v) bfin_write16(((port)->membase + OFFSET_GCTL), v) | ||
30 | |||
31 | #ifdef CONFIG_SIR_BFIN_DMA | ||
32 | struct dma_rx_buf { | ||
33 | char *buf; | ||
34 | int head; | ||
35 | int tail; | ||
36 | }; | ||
37 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
38 | |||
39 | struct bfin_sir_port { | ||
40 | unsigned char __iomem *membase; | ||
41 | unsigned int irq; | ||
42 | unsigned int lsr; | ||
43 | unsigned long clk; | ||
44 | struct net_device *dev; | ||
45 | #ifdef CONFIG_SIR_BFIN_DMA | ||
46 | int tx_done; | ||
47 | struct dma_rx_buf rx_dma_buf; | ||
48 | struct timer_list rx_dma_timer; | ||
49 | int rx_dma_nrows; | ||
50 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
51 | unsigned int tx_dma_channel; | ||
52 | unsigned int rx_dma_channel; | ||
53 | }; | ||
54 | |||
55 | struct bfin_sir_port sir_ports[BFIN_UART_NR_PORTS]; | ||
56 | |||
57 | struct bfin_sir_port_res { | ||
58 | unsigned long base_addr; | ||
59 | int irq; | ||
60 | unsigned int rx_dma_channel; | ||
61 | unsigned int tx_dma_channel; | ||
62 | }; | ||
63 | |||
64 | struct bfin_sir_port_res bfin_sir_port_resource[] = { | ||
65 | #ifdef CONFIG_BFIN_SIR0 | ||
66 | { | ||
67 | 0xFFC00400, | ||
68 | IRQ_UART_RX, | ||
69 | CH_UART_RX, | ||
70 | CH_UART_TX, | ||
71 | }, | ||
72 | #endif | ||
73 | }; | ||
74 | |||
75 | int nr_sirs = ARRAY_SIZE(bfin_sir_port_resource); | ||
76 | |||
77 | struct bfin_sir_self { | ||
78 | struct bfin_sir_port *sir_port; | ||
79 | spinlock_t lock; | ||
80 | unsigned int open; | ||
81 | int speed; | ||
82 | int newspeed; | ||
83 | |||
84 | struct sk_buff *txskb; | ||
85 | struct sk_buff *rxskb; | ||
86 | struct net_device_stats stats; | ||
87 | struct device *dev; | ||
88 | struct irlap_cb *irlap; | ||
89 | struct qos_info qos; | ||
90 | |||
91 | iobuff_t tx_buff; | ||
92 | iobuff_t rx_buff; | ||
93 | |||
94 | struct work_struct work; | ||
95 | int mtt; | ||
96 | }; | ||
97 | |||
98 | static inline unsigned int SIR_UART_GET_LSR(struct bfin_sir_port *port) | ||
99 | { | ||
100 | unsigned int lsr = bfin_read16(port->membase + OFFSET_LSR); | ||
101 | port->lsr |= (lsr & (BI|FE|PE|OE)); | ||
102 | return lsr | port->lsr; | ||
103 | } | ||
104 | |||
105 | static inline void SIR_UART_CLEAR_LSR(struct bfin_sir_port *port) | ||
106 | { | ||
107 | port->lsr = 0; | ||
108 | bfin_read16(port->membase + OFFSET_LSR); | ||
109 | } | ||
110 | |||
111 | #define DRIVER_NAME "bfin_sir" | ||
112 | |||
113 | static void bfin_sir_hw_init(void) | ||
114 | { | ||
115 | #ifdef CONFIG_BFIN_SIR0 | ||
116 | peripheral_request(P_UART0_TX, DRIVER_NAME); | ||
117 | peripheral_request(P_UART0_RX, DRIVER_NAME); | ||
118 | #endif | ||
119 | SSYNC(); | ||
120 | } | ||
diff --git a/include/asm-blackfin/mach-bf533/blackfin.h b/include/asm-blackfin/mach-bf533/blackfin.h index f3b240abf170..d80971b4e3aa 100644 --- a/include/asm-blackfin/mach-bf533/blackfin.h +++ b/include/asm-blackfin/mach-bf533/blackfin.h | |||
@@ -42,4 +42,19 @@ | |||
42 | #include "cdefBF532.h" | 42 | #include "cdefBF532.h" |
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #define BFIN_UART_NR_PORTS 1 | ||
46 | |||
47 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
48 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
49 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
50 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
51 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
52 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
53 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
54 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
55 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
56 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
57 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
58 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
59 | |||
45 | #endif /* _MACH_BLACKFIN_H_ */ | 60 | #endif /* _MACH_BLACKFIN_H_ */ |
diff --git a/include/asm-blackfin/mach-bf533/cdefBF532.h b/include/asm-blackfin/mach-bf533/cdefBF532.h index c803e14b529c..154655452d4c 100644 --- a/include/asm-blackfin/mach-bf533/cdefBF532.h +++ b/include/asm-blackfin/mach-bf533/cdefBF532.h | |||
@@ -43,7 +43,27 @@ | |||
43 | 43 | ||
44 | /* Clock and System Control (0xFFC0 0400-0xFFC0 07FF) */ | 44 | /* Clock and System Control (0xFFC0 0400-0xFFC0 07FF) */ |
45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
46 | #define bfin_write_PLL_CTL(val) bfin_write16(PLL_CTL,val) | 46 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ |
47 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
48 | { | ||
49 | unsigned long flags, iwr; | ||
50 | |||
51 | if (val == bfin_read_PLL_CTL()) | ||
52 | return; | ||
53 | |||
54 | local_irq_save(flags); | ||
55 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
56 | iwr = bfin_read32(SIC_IWR); | ||
57 | /* Only allow PPL Wakeup) */ | ||
58 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
59 | |||
60 | bfin_write16(PLL_CTL, val); | ||
61 | SSYNC(); | ||
62 | asm("IDLE;"); | ||
63 | |||
64 | bfin_write32(SIC_IWR, iwr); | ||
65 | local_irq_restore(flags); | ||
66 | } | ||
47 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 67 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
48 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) | 68 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) |
49 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) | 69 | #define bfin_read_PLL_LOCKCNT() bfin_read16(PLL_LOCKCNT) |
@@ -57,6 +77,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
57 | { | 77 | { |
58 | unsigned long flags, iwr; | 78 | unsigned long flags, iwr; |
59 | 79 | ||
80 | if (val == bfin_read_VR_CTL()) | ||
81 | return; | ||
82 | |||
83 | local_irq_save(flags); | ||
60 | /* Enable the PLL Wakeup bit in SIC IWR */ | 84 | /* Enable the PLL Wakeup bit in SIC IWR */ |
61 | iwr = bfin_read32(SIC_IWR); | 85 | iwr = bfin_read32(SIC_IWR); |
62 | /* Only allow PPL Wakeup) */ | 86 | /* Only allow PPL Wakeup) */ |
@@ -64,11 +88,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
64 | 88 | ||
65 | bfin_write16(VR_CTL, val); | 89 | bfin_write16(VR_CTL, val); |
66 | SSYNC(); | 90 | SSYNC(); |
67 | |||
68 | local_irq_save(flags); | ||
69 | asm("IDLE;"); | 91 | asm("IDLE;"); |
70 | local_irq_restore(flags); | 92 | |
71 | bfin_write32(SIC_IWR, iwr); | 93 | bfin_write32(SIC_IWR, iwr); |
94 | local_irq_restore(flags); | ||
72 | } | 95 | } |
73 | 96 | ||
74 | /* System Interrupt Controller (0xFFC0 0C00-0xFFC0 0FFF) */ | 97 | /* System Interrupt Controller (0xFFC0 0C00-0xFFC0 0FFF) */ |
diff --git a/include/asm-blackfin/mach-bf533/defBF532.h b/include/asm-blackfin/mach-bf533/defBF532.h index 37134aaf9954..17e1548cec08 100644 --- a/include/asm-blackfin/mach-bf533/defBF532.h +++ b/include/asm-blackfin/mach-bf533/defBF532.h | |||
@@ -88,20 +88,25 @@ | |||
88 | #define RTC_PREN 0xFFC00314 /* RTC Prescaler Enable Register (alternate macro) */ | 88 | #define RTC_PREN 0xFFC00314 /* RTC Prescaler Enable Register (alternate macro) */ |
89 | 89 | ||
90 | /* UART Controller (0xFFC00400 - 0xFFC004FF) */ | 90 | /* UART Controller (0xFFC00400 - 0xFFC004FF) */ |
91 | #define UART_THR 0xFFC00400 /* Transmit Holding register */ | 91 | |
92 | #define UART_RBR 0xFFC00400 /* Receive Buffer register */ | 92 | /* |
93 | #define UART_DLL 0xFFC00400 /* Divisor Latch (Low-Byte) */ | 93 | * Because include/linux/serial_reg.h have defined UART_*, |
94 | #define UART_IER 0xFFC00404 /* Interrupt Enable Register */ | 94 | * So we define blackfin uart regs to BFIN_UART_*. |
95 | #define UART_DLH 0xFFC00404 /* Divisor Latch (High-Byte) */ | 95 | */ |
96 | #define UART_IIR 0xFFC00408 /* Interrupt Identification Register */ | 96 | #define BFIN_UART_THR 0xFFC00400 /* Transmit Holding register */ |
97 | #define UART_LCR 0xFFC0040C /* Line Control Register */ | 97 | #define BFIN_UART_RBR 0xFFC00400 /* Receive Buffer register */ |
98 | #define UART_MCR 0xFFC00410 /* Modem Control Register */ | 98 | #define BFIN_UART_DLL 0xFFC00400 /* Divisor Latch (Low-Byte) */ |
99 | #define UART_LSR 0xFFC00414 /* Line Status Register */ | 99 | #define BFIN_UART_IER 0xFFC00404 /* Interrupt Enable Register */ |
100 | #define BFIN_UART_DLH 0xFFC00404 /* Divisor Latch (High-Byte) */ | ||
101 | #define BFIN_UART_IIR 0xFFC00408 /* Interrupt Identification Register */ | ||
102 | #define BFIN_UART_LCR 0xFFC0040C /* Line Control Register */ | ||
103 | #define BFIN_UART_MCR 0xFFC00410 /* Modem Control Register */ | ||
104 | #define BFIN_UART_LSR 0xFFC00414 /* Line Status Register */ | ||
100 | #if 0 | 105 | #if 0 |
101 | #define UART_MSR 0xFFC00418 /* Modem Status Register (UNUSED in ADSP-BF532) */ | 106 | #define BFIN_UART_MSR 0xFFC00418 /* Modem Status Register (UNUSED in ADSP-BF532) */ |
102 | #endif | 107 | #endif |
103 | #define UART_SCR 0xFFC0041C /* SCR Scratch Register */ | 108 | #define BFIN_UART_SCR 0xFFC0041C /* SCR Scratch Register */ |
104 | #define UART_GCTL 0xFFC00424 /* Global Control Register */ | 109 | #define BFIN_UART_GCTL 0xFFC00424 /* Global Control Register */ |
105 | 110 | ||
106 | /* SPI Controller (0xFFC00500 - 0xFFC005FF) */ | 111 | /* SPI Controller (0xFFC00500 - 0xFFC005FF) */ |
107 | #define SPI0_REGBASE 0xFFC00500 | 112 | #define SPI0_REGBASE 0xFFC00500 |
diff --git a/include/asm-blackfin/mach-bf533/dma.h b/include/asm-blackfin/mach-bf533/dma.h index 16c672c01d80..bd9d5e94307d 100644 --- a/include/asm-blackfin/mach-bf533/dma.h +++ b/include/asm-blackfin/mach-bf533/dma.h | |||
@@ -51,7 +51,4 @@ | |||
51 | #define CH_MEM_STREAM1_DEST 10 /* TX */ | 51 | #define CH_MEM_STREAM1_DEST 10 /* TX */ |
52 | #define CH_MEM_STREAM1_SRC 11 /* RX */ | 52 | #define CH_MEM_STREAM1_SRC 11 /* RX */ |
53 | 53 | ||
54 | extern int channel2irq(unsigned int channel); | ||
55 | extern struct dma_register *base_addr[]; | ||
56 | |||
57 | #endif | 54 | #endif |
diff --git a/include/asm-blackfin/mach-bf533/mem_init.h b/include/asm-blackfin/mach-bf533/mem_init.h index 1620dae5254d..f8f31901fca9 100644 --- a/include/asm-blackfin/mach-bf533/mem_init.h +++ b/include/asm-blackfin/mach-bf533/mem_init.h | |||
@@ -29,7 +29,8 @@ | |||
29 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 29 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #if (CONFIG_MEM_MT48LC16M16A2TG_75 || CONFIG_MEM_MT48LC64M4A2FB_7E || CONFIG_MEM_GENERIC_BOARD) | 32 | #if (CONFIG_MEM_MT48LC16M16A2TG_75 || CONFIG_MEM_MT48LC64M4A2FB_7E || \ |
33 | CONFIG_MEM_MT48LC32M16A2TG_75 || CONFIG_MEM_GENERIC_BOARD) | ||
33 | #if (CONFIG_SCLK_HZ > 119402985) | 34 | #if (CONFIG_SCLK_HZ > 119402985) |
34 | #define SDRAM_tRP TRP_2 | 35 | #define SDRAM_tRP TRP_2 |
35 | #define SDRAM_tRP_num 2 | 36 | #define SDRAM_tRP_num 2 |
@@ -118,6 +119,13 @@ | |||
118 | #define SDRAM_CL CL_3 | 119 | #define SDRAM_CL CL_3 |
119 | #endif | 120 | #endif |
120 | 121 | ||
122 | #if (CONFIG_MEM_MT48LC32M16A2TG_75) | ||
123 | /*SDRAM INFORMATION: */ | ||
124 | #define SDRAM_Tref 64 /* Refresh period in milliseconds */ | ||
125 | #define SDRAM_NRA 8192 /* Number of row addresses in SDRAM */ | ||
126 | #define SDRAM_CL CL_3 | ||
127 | #endif | ||
128 | |||
121 | #if (CONFIG_MEM_GENERIC_BOARD) | 129 | #if (CONFIG_MEM_GENERIC_BOARD) |
122 | /*SDRAM INFORMATION: Modify this for your board */ | 130 | /*SDRAM INFORMATION: Modify this for your board */ |
123 | #define SDRAM_Tref 64 /* Refresh period in milliseconds */ | 131 | #define SDRAM_Tref 64 /* Refresh period in milliseconds */ |
diff --git a/include/asm-blackfin/mach-bf537/anomaly.h b/include/asm-blackfin/mach-bf537/anomaly.h index 746a794b3119..a6b08facb242 100644 --- a/include/asm-blackfin/mach-bf537/anomaly.h +++ b/include/asm-blackfin/mach-bf537/anomaly.h | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
10 | * - Revision A, 09/04/2007; ADSP-BF534/ADSP-BF536/ADSP-BF537 Blackfin Processor Anomaly List | 10 | * - Revision C, 02/08/2008; ADSP-BF534/ADSP-BF536/ADSP-BF537 Blackfin Processor Anomaly List |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
@@ -132,10 +132,24 @@ | |||
132 | #define ANOMALY_05000322 (1) | 132 | #define ANOMALY_05000322 (1) |
133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ | 133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ |
134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) | 134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) |
135 | /* New Feature: UART Remains Enabled after UART Boot (Not Available on Older Silicon) */ | ||
136 | #define ANOMALY_05000350 (__SILICON_REVISION__ < 3) | ||
137 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | ||
138 | #define ANOMALY_05000355 (1) | ||
135 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | 139 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ |
136 | #define ANOMALY_05000357 (1) | 140 | #define ANOMALY_05000357 (1) |
137 | /* DMAs that Go Urgent during Tight Core Writes to External Memory Are Blocked */ | 141 | /* DMAs that Go Urgent during Tight Core Writes to External Memory Are Blocked */ |
138 | #define ANOMALY_05000359 (1) | 142 | #define ANOMALY_05000359 (1) |
143 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
144 | #define ANOMALY_05000366 (1) | ||
145 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
146 | #define ANOMALY_05000371 (1) | ||
147 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
148 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 3) | ||
149 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
150 | #define ANOMALY_05000403 (1) | ||
151 | |||
152 | |||
139 | 153 | ||
140 | /* Anomalies that don't exist on this proc */ | 154 | /* Anomalies that don't exist on this proc */ |
141 | #define ANOMALY_05000125 (0) | 155 | #define ANOMALY_05000125 (0) |
@@ -146,5 +160,6 @@ | |||
146 | #define ANOMALY_05000266 (0) | 160 | #define ANOMALY_05000266 (0) |
147 | #define ANOMALY_05000311 (0) | 161 | #define ANOMALY_05000311 (0) |
148 | #define ANOMALY_05000323 (0) | 162 | #define ANOMALY_05000323 (0) |
163 | #define ANOMALY_05000363 (0) | ||
149 | 164 | ||
150 | #endif | 165 | #endif |
diff --git a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h index 8fc672d31057..fd100a415b98 100644 --- a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h | |||
@@ -1,22 +1,38 @@ | |||
1 | /* | ||
2 | * file: include/asm-blackfin/mach-bf537/bfin_serial_5xx.h | ||
3 | * based on: | ||
4 | * author: | ||
5 | * | ||
6 | * created: | ||
7 | * description: | ||
8 | * blackfin serial driver header files | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * | ||
14 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | * this program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the gnu general public license as published by | ||
18 | * the free software foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * this program is distributed in the hope that it will be useful, | ||
22 | * but without any warranty; without even the implied warranty of | ||
23 | * merchantability or fitness for a particular purpose. see the | ||
24 | * gnu general public license for more details. | ||
25 | * | ||
26 | * you should have received a copy of the gnu general public license | ||
27 | * along with this program; see the file copying. | ||
28 | * if not, write to the free software foundation, | ||
29 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
30 | */ | ||
31 | |||
1 | #include <linux/serial.h> | 32 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
3 | #include <asm/portmux.h> | 34 | #include <asm/portmux.h> |
4 | 35 | ||
5 | #define NR_PORTS 2 | ||
6 | |||
7 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
8 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
9 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
10 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
11 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
12 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
13 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
14 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
15 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
16 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
17 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
18 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
19 | |||
20 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 36 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
21 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 37 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
22 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) | 38 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) |
@@ -92,7 +108,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart) | |||
92 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); | 108 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); |
93 | } | 109 | } |
94 | 110 | ||
95 | struct bfin_serial_port bfin_serial_ports[NR_PORTS]; | 111 | struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS]; |
96 | struct bfin_serial_res { | 112 | struct bfin_serial_res { |
97 | unsigned long uart_base_addr; | 113 | unsigned long uart_base_addr; |
98 | int uart_irq; | 114 | int uart_irq; |
diff --git a/include/asm-blackfin/mach-bf537/bfin_sir.h b/include/asm-blackfin/mach-bf537/bfin_sir.h new file mode 100644 index 000000000000..0612d0c9501c --- /dev/null +++ b/include/asm-blackfin/mach-bf537/bfin_sir.h | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * Blackfin Infra-red Driver | ||
3 | * | ||
4 | * Copyright 2006-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * Licensed under the GPL-2 or later. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/serial.h> | ||
13 | #include <asm/dma.h> | ||
14 | #include <asm/portmux.h> | ||
15 | |||
16 | #define SIR_UART_GET_CHAR(port) bfin_read16((port)->membase + OFFSET_RBR) | ||
17 | #define SIR_UART_GET_DLL(port) bfin_read16((port)->membase + OFFSET_DLL) | ||
18 | #define SIR_UART_GET_IER(port) bfin_read16((port)->membase + OFFSET_IER) | ||
19 | #define SIR_UART_GET_DLH(port) bfin_read16((port)->membase + OFFSET_DLH) | ||
20 | #define SIR_UART_GET_IIR(port) bfin_read16((port)->membase + OFFSET_IIR) | ||
21 | #define SIR_UART_GET_LCR(port) bfin_read16((port)->membase + OFFSET_LCR) | ||
22 | #define SIR_UART_GET_GCTL(port) bfin_read16((port)->membase + OFFSET_GCTL) | ||
23 | |||
24 | #define SIR_UART_PUT_CHAR(port, v) bfin_write16(((port)->membase + OFFSET_THR), v) | ||
25 | #define SIR_UART_PUT_DLL(port, v) bfin_write16(((port)->membase + OFFSET_DLL), v) | ||
26 | #define SIR_UART_PUT_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER), v) | ||
27 | #define SIR_UART_PUT_DLH(port, v) bfin_write16(((port)->membase + OFFSET_DLH), v) | ||
28 | #define SIR_UART_PUT_LCR(port, v) bfin_write16(((port)->membase + OFFSET_LCR), v) | ||
29 | #define SIR_UART_PUT_GCTL(port, v) bfin_write16(((port)->membase + OFFSET_GCTL), v) | ||
30 | |||
31 | #ifdef CONFIG_SIR_BFIN_DMA | ||
32 | struct dma_rx_buf { | ||
33 | char *buf; | ||
34 | int head; | ||
35 | int tail; | ||
36 | }; | ||
37 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
38 | |||
39 | struct bfin_sir_port { | ||
40 | unsigned char __iomem *membase; | ||
41 | unsigned int irq; | ||
42 | unsigned int lsr; | ||
43 | unsigned long clk; | ||
44 | struct net_device *dev; | ||
45 | #ifdef CONFIG_SIR_BFIN_DMA | ||
46 | int tx_done; | ||
47 | struct dma_rx_buf rx_dma_buf; | ||
48 | struct timer_list rx_dma_timer; | ||
49 | int rx_dma_nrows; | ||
50 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
51 | unsigned int tx_dma_channel; | ||
52 | unsigned int rx_dma_channel; | ||
53 | }; | ||
54 | |||
55 | struct bfin_sir_port sir_ports[BFIN_UART_NR_PORTS]; | ||
56 | |||
57 | struct bfin_sir_port_res { | ||
58 | unsigned long base_addr; | ||
59 | int irq; | ||
60 | unsigned int rx_dma_channel; | ||
61 | unsigned int tx_dma_channel; | ||
62 | }; | ||
63 | |||
64 | struct bfin_sir_port_res bfin_sir_port_resource[] = { | ||
65 | #ifdef CONFIG_BFIN_SIR0 | ||
66 | { | ||
67 | 0xFFC00400, | ||
68 | IRQ_UART0_RX, | ||
69 | CH_UART0_RX, | ||
70 | CH_UART0_TX, | ||
71 | }, | ||
72 | #endif | ||
73 | #ifdef CONFIG_BFIN_SIR1 | ||
74 | { | ||
75 | 0xFFC02000, | ||
76 | IRQ_UART1_RX, | ||
77 | CH_UART1_RX, | ||
78 | CH_UART1_TX, | ||
79 | }, | ||
80 | #endif | ||
81 | }; | ||
82 | |||
83 | int nr_sirs = ARRAY_SIZE(bfin_sir_port_resource); | ||
84 | |||
85 | struct bfin_sir_self { | ||
86 | struct bfin_sir_port *sir_port; | ||
87 | spinlock_t lock; | ||
88 | unsigned int open; | ||
89 | int speed; | ||
90 | int newspeed; | ||
91 | |||
92 | struct sk_buff *txskb; | ||
93 | struct sk_buff *rxskb; | ||
94 | struct net_device_stats stats; | ||
95 | struct device *dev; | ||
96 | struct irlap_cb *irlap; | ||
97 | struct qos_info qos; | ||
98 | |||
99 | iobuff_t tx_buff; | ||
100 | iobuff_t rx_buff; | ||
101 | |||
102 | struct work_struct work; | ||
103 | int mtt; | ||
104 | }; | ||
105 | |||
106 | static inline unsigned int SIR_UART_GET_LSR(struct bfin_sir_port *port) | ||
107 | { | ||
108 | unsigned int lsr = bfin_read16(port->membase + OFFSET_LSR); | ||
109 | port->lsr |= (lsr & (BI|FE|PE|OE)); | ||
110 | return lsr | port->lsr; | ||
111 | } | ||
112 | |||
113 | static inline void SIR_UART_CLEAR_LSR(struct bfin_sir_port *port) | ||
114 | { | ||
115 | port->lsr = 0; | ||
116 | bfin_read16(port->membase + OFFSET_LSR); | ||
117 | } | ||
118 | |||
119 | #define DRIVER_NAME "bfin_sir" | ||
120 | |||
121 | static void bfin_sir_hw_init(void) | ||
122 | { | ||
123 | #ifdef CONFIG_BFIN_SIR0 | ||
124 | peripheral_request(P_UART0_TX, DRIVER_NAME); | ||
125 | peripheral_request(P_UART0_RX, DRIVER_NAME); | ||
126 | #endif | ||
127 | |||
128 | #ifdef CONFIG_BFIN_SIR1 | ||
129 | peripheral_request(P_UART1_TX, DRIVER_NAME); | ||
130 | peripheral_request(P_UART1_RX, DRIVER_NAME); | ||
131 | #endif | ||
132 | SSYNC(); | ||
133 | } | ||
diff --git a/include/asm-blackfin/mach-bf537/blackfin.h b/include/asm-blackfin/mach-bf537/blackfin.h index 53fcfa3408d0..cffc786b2a2b 100644 --- a/include/asm-blackfin/mach-bf537/blackfin.h +++ b/include/asm-blackfin/mach-bf537/blackfin.h | |||
@@ -82,8 +82,6 @@ | |||
82 | #define STATUS_P1 0x02 | 82 | #define STATUS_P1 0x02 |
83 | #define STATUS_P0 0x01 | 83 | #define STATUS_P0 0x01 |
84 | 84 | ||
85 | /* UART 0*/ | ||
86 | |||
87 | /* DMA Channnel */ | 85 | /* DMA Channnel */ |
88 | #define bfin_read_CH_UART_RX() bfin_read_CH_UART0_RX() | 86 | #define bfin_read_CH_UART_RX() bfin_read_CH_UART0_RX() |
89 | #define bfin_write_CH_UART_RX(val) bfin_write_CH_UART0_RX(val) | 87 | #define bfin_write_CH_UART_RX(val) bfin_write_CH_UART0_RX(val) |
@@ -106,37 +104,52 @@ | |||
106 | /* MMR Registers*/ | 104 | /* MMR Registers*/ |
107 | #define bfin_read_UART_THR() bfin_read_UART0_THR() | 105 | #define bfin_read_UART_THR() bfin_read_UART0_THR() |
108 | #define bfin_write_UART_THR(val) bfin_write_UART0_THR(val) | 106 | #define bfin_write_UART_THR(val) bfin_write_UART0_THR(val) |
109 | #define UART_THR UART0_THR | 107 | #define BFIN_UART_THR UART0_THR |
110 | #define bfin_read_UART_RBR() bfin_read_UART0_RBR() | 108 | #define bfin_read_UART_RBR() bfin_read_UART0_RBR() |
111 | #define bfin_write_UART_RBR(val) bfin_write_UART0_RBR(val) | 109 | #define bfin_write_UART_RBR(val) bfin_write_UART0_RBR(val) |
112 | #define UART_RBR UART0_RBR | 110 | #define BFIN_UART_RBR UART0_RBR |
113 | #define bfin_read_UART_DLL() bfin_read_UART0_DLL() | 111 | #define bfin_read_UART_DLL() bfin_read_UART0_DLL() |
114 | #define bfin_write_UART_DLL(val) bfin_write_UART0_DLL(val) | 112 | #define bfin_write_UART_DLL(val) bfin_write_UART0_DLL(val) |
115 | #define UART_DLL UART0_DLL | 113 | #define BFIN_UART_DLL UART0_DLL |
116 | #define bfin_read_UART_IER() bfin_read_UART0_IER() | 114 | #define bfin_read_UART_IER() bfin_read_UART0_IER() |
117 | #define bfin_write_UART_IER(val) bfin_write_UART0_IER(val) | 115 | #define bfin_write_UART_IER(val) bfin_write_UART0_IER(val) |
118 | #define UART_IER UART0_IER | 116 | #define BFIN_UART_IER UART0_IER |
119 | #define bfin_read_UART_DLH() bfin_read_UART0_DLH() | 117 | #define bfin_read_UART_DLH() bfin_read_UART0_DLH() |
120 | #define bfin_write_UART_DLH(val) bfin_write_UART0_DLH(val) | 118 | #define bfin_write_UART_DLH(val) bfin_write_UART0_DLH(val) |
121 | #define UART_DLH UART0_DLH | 119 | #define BFIN_UART_DLH UART0_DLH |
122 | #define bfin_read_UART_IIR() bfin_read_UART0_IIR() | 120 | #define bfin_read_UART_IIR() bfin_read_UART0_IIR() |
123 | #define bfin_write_UART_IIR(val) bfin_write_UART0_IIR(val) | 121 | #define bfin_write_UART_IIR(val) bfin_write_UART0_IIR(val) |
124 | #define UART_IIR UART0_IIR | 122 | #define BFIN_UART_IIR UART0_IIR |
125 | #define bfin_read_UART_LCR() bfin_read_UART0_LCR() | 123 | #define bfin_read_UART_LCR() bfin_read_UART0_LCR() |
126 | #define bfin_write_UART_LCR(val) bfin_write_UART0_LCR(val) | 124 | #define bfin_write_UART_LCR(val) bfin_write_UART0_LCR(val) |
127 | #define UART_LCR UART0_LCR | 125 | #define BFIN_UART_LCR UART0_LCR |
128 | #define bfin_read_UART_MCR() bfin_read_UART0_MCR() | 126 | #define bfin_read_UART_MCR() bfin_read_UART0_MCR() |
129 | #define bfin_write_UART_MCR(val) bfin_write_UART0_MCR(val) | 127 | #define bfin_write_UART_MCR(val) bfin_write_UART0_MCR(val) |
130 | #define UART_MCR UART0_MCR | 128 | #define BFIN_UART_MCR UART0_MCR |
131 | #define bfin_read_UART_LSR() bfin_read_UART0_LSR() | 129 | #define bfin_read_UART_LSR() bfin_read_UART0_LSR() |
132 | #define bfin_write_UART_LSR(val) bfin_write_UART0_LSR(val) | 130 | #define bfin_write_UART_LSR(val) bfin_write_UART0_LSR(val) |
133 | #define UART_LSR UART0_LSR | 131 | #define BFIN_UART_LSR UART0_LSR |
134 | #define bfin_read_UART_SCR() bfin_read_UART0_SCR() | 132 | #define bfin_read_UART_SCR() bfin_read_UART0_SCR() |
135 | #define bfin_write_UART_SCR(val) bfin_write_UART0_SCR(val) | 133 | #define bfin_write_UART_SCR(val) bfin_write_UART0_SCR(val) |
136 | #define UART_SCR UART0_SCR | 134 | #define BFIN_UART_SCR UART0_SCR |
137 | #define bfin_read_UART_GCTL() bfin_read_UART0_GCTL() | 135 | #define bfin_read_UART_GCTL() bfin_read_UART0_GCTL() |
138 | #define bfin_write_UART_GCTL(val) bfin_write_UART0_GCTL(val) | 136 | #define bfin_write_UART_GCTL(val) bfin_write_UART0_GCTL(val) |
139 | #define UART_GCTL UART0_GCTL | 137 | #define BFIN_UART_GCTL UART0_GCTL |
138 | |||
139 | #define BFIN_UART_NR_PORTS 2 | ||
140 | |||
141 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
142 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
143 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
144 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
145 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
146 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
147 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
148 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
149 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
150 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
151 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
152 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
140 | 153 | ||
141 | /* DPMC*/ | 154 | /* DPMC*/ |
142 | #define bfin_read_STOPCK_OFF() bfin_read_STOPCK() | 155 | #define bfin_read_STOPCK_OFF() bfin_read_STOPCK() |
diff --git a/include/asm-blackfin/mach-bf537/cdefBF534.h b/include/asm-blackfin/mach-bf537/cdefBF534.h index 78227bc855df..82de526f8097 100644 --- a/include/asm-blackfin/mach-bf537/cdefBF534.h +++ b/include/asm-blackfin/mach-bf537/cdefBF534.h | |||
@@ -44,7 +44,27 @@ | |||
44 | 44 | ||
45 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ | 45 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ |
46 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 46 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
47 | #define bfin_write_PLL_CTL(val) bfin_write16(PLL_CTL,val) | 47 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ |
48 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
49 | { | ||
50 | unsigned long flags, iwr; | ||
51 | |||
52 | if (val == bfin_read_PLL_CTL()) | ||
53 | return; | ||
54 | |||
55 | local_irq_save(flags); | ||
56 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
57 | iwr = bfin_read32(SIC_IWR); | ||
58 | /* Only allow PPL Wakeup) */ | ||
59 | bfin_write32(SIC_IWR, IWR_ENABLE(0)); | ||
60 | |||
61 | bfin_write16(PLL_CTL, val); | ||
62 | SSYNC(); | ||
63 | asm("IDLE;"); | ||
64 | |||
65 | bfin_write32(SIC_IWR, iwr); | ||
66 | local_irq_restore(flags); | ||
67 | } | ||
48 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 68 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
49 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) | 69 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) |
50 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 70 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
@@ -53,6 +73,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
53 | { | 73 | { |
54 | unsigned long flags, iwr; | 74 | unsigned long flags, iwr; |
55 | 75 | ||
76 | if (val == bfin_read_VR_CTL()) | ||
77 | return; | ||
78 | |||
79 | local_irq_save(flags); | ||
56 | /* Enable the PLL Wakeup bit in SIC IWR */ | 80 | /* Enable the PLL Wakeup bit in SIC IWR */ |
57 | iwr = bfin_read32(SIC_IWR); | 81 | iwr = bfin_read32(SIC_IWR); |
58 | /* Only allow PPL Wakeup) */ | 82 | /* Only allow PPL Wakeup) */ |
@@ -60,11 +84,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
60 | 84 | ||
61 | bfin_write16(VR_CTL, val); | 85 | bfin_write16(VR_CTL, val); |
62 | SSYNC(); | 86 | SSYNC(); |
63 | |||
64 | local_irq_save(flags); | ||
65 | asm("IDLE;"); | 87 | asm("IDLE;"); |
66 | local_irq_restore(flags); | 88 | |
67 | bfin_write32(SIC_IWR, iwr); | 89 | bfin_write32(SIC_IWR, iwr); |
90 | local_irq_restore(flags); | ||
68 | } | 91 | } |
69 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 92 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
70 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) | 93 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) |
@@ -858,39 +881,7 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
858 | #define bfin_read_PPI_FRAME() bfin_read16(PPI_FRAME) | 881 | #define bfin_read_PPI_FRAME() bfin_read16(PPI_FRAME) |
859 | #define bfin_write_PPI_FRAME(val) bfin_write16(PPI_FRAME,val) | 882 | #define bfin_write_PPI_FRAME(val) bfin_write16(PPI_FRAME,val) |
860 | 883 | ||
861 | /* Two-Wire Interface (0xFFC01400 - 0xFFC014FF) */ | 884 | /* Two-Wire Interface (0xFFC01400 - 0xFFC014FF) */ |
862 | #define bfin_read_TWI_CLKDIV() bfin_read16(TWI_CLKDIV) | ||
863 | #define bfin_write_TWI_CLKDIV(val) bfin_write16(TWI_CLKDIV,val) | ||
864 | #define bfin_read_TWI_CONTROL() bfin_read16(TWI_CONTROL) | ||
865 | #define bfin_write_TWI_CONTROL(val) bfin_write16(TWI_CONTROL,val) | ||
866 | #define bfin_read_TWI_SLAVE_CTL() bfin_read16(TWI_SLAVE_CTL) | ||
867 | #define bfin_write_TWI_SLAVE_CTL(val) bfin_write16(TWI_SLAVE_CTL,val) | ||
868 | #define bfin_read_TWI_SLAVE_STAT() bfin_read16(TWI_SLAVE_STAT) | ||
869 | #define bfin_write_TWI_SLAVE_STAT(val) bfin_write16(TWI_SLAVE_STAT,val) | ||
870 | #define bfin_read_TWI_SLAVE_ADDR() bfin_read16(TWI_SLAVE_ADDR) | ||
871 | #define bfin_write_TWI_SLAVE_ADDR(val) bfin_write16(TWI_SLAVE_ADDR,val) | ||
872 | #define bfin_read_TWI_MASTER_CTL() bfin_read16(TWI_MASTER_CTL) | ||
873 | #define bfin_write_TWI_MASTER_CTL(val) bfin_write16(TWI_MASTER_CTL,val) | ||
874 | #define bfin_read_TWI_MASTER_STAT() bfin_read16(TWI_MASTER_STAT) | ||
875 | #define bfin_write_TWI_MASTER_STAT(val) bfin_write16(TWI_MASTER_STAT,val) | ||
876 | #define bfin_read_TWI_MASTER_ADDR() bfin_read16(TWI_MASTER_ADDR) | ||
877 | #define bfin_write_TWI_MASTER_ADDR(val) bfin_write16(TWI_MASTER_ADDR,val) | ||
878 | #define bfin_read_TWI_INT_STAT() bfin_read16(TWI_INT_STAT) | ||
879 | #define bfin_write_TWI_INT_STAT(val) bfin_write16(TWI_INT_STAT,val) | ||
880 | #define bfin_read_TWI_INT_MASK() bfin_read16(TWI_INT_MASK) | ||
881 | #define bfin_write_TWI_INT_MASK(val) bfin_write16(TWI_INT_MASK,val) | ||
882 | #define bfin_read_TWI_FIFO_CTL() bfin_read16(TWI_FIFO_CTL) | ||
883 | #define bfin_write_TWI_FIFO_CTL(val) bfin_write16(TWI_FIFO_CTL,val) | ||
884 | #define bfin_read_TWI_FIFO_STAT() bfin_read16(TWI_FIFO_STAT) | ||
885 | #define bfin_write_TWI_FIFO_STAT(val) bfin_write16(TWI_FIFO_STAT,val) | ||
886 | #define bfin_read_TWI_XMT_DATA8() bfin_read16(TWI_XMT_DATA8) | ||
887 | #define bfin_write_TWI_XMT_DATA8(val) bfin_write16(TWI_XMT_DATA8,val) | ||
888 | #define bfin_read_TWI_XMT_DATA16() bfin_read16(TWI_XMT_DATA16) | ||
889 | #define bfin_write_TWI_XMT_DATA16(val) bfin_write16(TWI_XMT_DATA16,val) | ||
890 | #define bfin_read_TWI_RCV_DATA8() bfin_read16(TWI_RCV_DATA8) | ||
891 | #define bfin_write_TWI_RCV_DATA8(val) bfin_write16(TWI_RCV_DATA8,val) | ||
892 | #define bfin_read_TWI_RCV_DATA16() bfin_read16(TWI_RCV_DATA16) | ||
893 | #define bfin_write_TWI_RCV_DATA16(val) bfin_write16(TWI_RCV_DATA16,val) | ||
894 | 885 | ||
895 | /* General Purpose I/O Port G (0xFFC01500 - 0xFFC015FF) */ | 886 | /* General Purpose I/O Port G (0xFFC01500 - 0xFFC015FF) */ |
896 | #define bfin_read_PORTGIO() bfin_read16(PORTGIO) | 887 | #define bfin_read_PORTGIO() bfin_read16(PORTGIO) |
diff --git a/include/asm-blackfin/mach-bf537/dma.h b/include/asm-blackfin/mach-bf537/dma.h index 021991984e6e..7a964040870a 100644 --- a/include/asm-blackfin/mach-bf537/dma.h +++ b/include/asm-blackfin/mach-bf537/dma.h | |||
@@ -52,7 +52,4 @@ | |||
52 | #define CH_MEM_STREAM1_DEST 14 /* TX */ | 52 | #define CH_MEM_STREAM1_DEST 14 /* TX */ |
53 | #define CH_MEM_STREAM1_SRC 15 /* RX */ | 53 | #define CH_MEM_STREAM1_SRC 15 /* RX */ |
54 | 54 | ||
55 | extern int channel2irq(unsigned int channel); | ||
56 | extern struct dma_register *base_addr[]; | ||
57 | |||
58 | #endif | 55 | #endif |
diff --git a/include/asm-blackfin/mach-bf548/anomaly.h b/include/asm-blackfin/mach-bf548/anomaly.h index 850dc12eb7f2..49d3cebc5293 100644 --- a/include/asm-blackfin/mach-bf548/anomaly.h +++ b/include/asm-blackfin/mach-bf548/anomaly.h | |||
@@ -93,5 +93,6 @@ | |||
93 | #define ANOMALY_05000273 (0) | 93 | #define ANOMALY_05000273 (0) |
94 | #define ANOMALY_05000311 (0) | 94 | #define ANOMALY_05000311 (0) |
95 | #define ANOMALY_05000323 (0) | 95 | #define ANOMALY_05000323 (0) |
96 | #define ANOMALY_05000363 (0) | ||
96 | 97 | ||
97 | #endif | 98 | #endif |
diff --git a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h index 7e6339f62a50..6547027cd3e6 100644 --- a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | |||
@@ -1,22 +1,38 @@ | |||
1 | /* | ||
2 | * file: include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | ||
3 | * based on: | ||
4 | * author: | ||
5 | * | ||
6 | * created: | ||
7 | * description: | ||
8 | * blackfin serial driver head file | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * | ||
14 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | * this program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the gnu general public license as published by | ||
18 | * the free software foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * this program is distributed in the hope that it will be useful, | ||
22 | * but without any warranty; without even the implied warranty of | ||
23 | * merchantability or fitness for a particular purpose. see the | ||
24 | * gnu general public license for more details. | ||
25 | * | ||
26 | * you should have received a copy of the gnu general public license | ||
27 | * along with this program; see the file copying. | ||
28 | * if not, write to the free software foundation, | ||
29 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
30 | */ | ||
31 | |||
1 | #include <linux/serial.h> | 32 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
3 | #include <asm/portmux.h> | 34 | #include <asm/portmux.h> |
4 | 35 | ||
5 | #define NR_PORTS 4 | ||
6 | |||
7 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
8 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
9 | #define OFFSET_GCTL 0x08 /* Global Control Register */ | ||
10 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
11 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
12 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
13 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
14 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
15 | #define OFFSET_IER_SET 0x20 /* Set Interrupt Enable Register */ | ||
16 | #define OFFSET_IER_CLEAR 0x24 /* Clear Interrupt Enable Register */ | ||
17 | #define OFFSET_THR 0x28 /* Transmit Holding register */ | ||
18 | #define OFFSET_RBR 0x2C /* Receive Buffer register */ | ||
19 | |||
20 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 36 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
21 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 37 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
22 | #define UART_GET_DLH(uart) bfin_read16(((uart)->port.membase + OFFSET_DLH)) | 38 | #define UART_GET_DLH(uart) bfin_read16(((uart)->port.membase + OFFSET_DLH)) |
@@ -80,7 +96,7 @@ struct bfin_serial_port { | |||
80 | #endif | 96 | #endif |
81 | }; | 97 | }; |
82 | 98 | ||
83 | struct bfin_serial_port bfin_serial_ports[NR_PORTS]; | 99 | struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS]; |
84 | struct bfin_serial_res { | 100 | struct bfin_serial_res { |
85 | unsigned long uart_base_addr; | 101 | unsigned long uart_base_addr; |
86 | int uart_irq; | 102 | int uart_irq; |
diff --git a/include/asm-blackfin/mach-bf548/bfin_sir.h b/include/asm-blackfin/mach-bf548/bfin_sir.h new file mode 100644 index 000000000000..5e94271c7e3b --- /dev/null +++ b/include/asm-blackfin/mach-bf548/bfin_sir.h | |||
@@ -0,0 +1,149 @@ | |||
1 | /* | ||
2 | * Blackfin Infra-red Driver | ||
3 | * | ||
4 | * Copyright 2006-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * Licensed under the GPL-2 or later. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/serial.h> | ||
13 | #include <asm/dma.h> | ||
14 | #include <asm/portmux.h> | ||
15 | |||
16 | #define SIR_UART_GET_CHAR(port) bfin_read16((port)->membase + OFFSET_RBR) | ||
17 | #define SIR_UART_GET_DLL(port) bfin_read16((port)->membase + OFFSET_DLL) | ||
18 | #define SIR_UART_GET_IER(port) bfin_read16((port)->membase + OFFSET_IER_SET) | ||
19 | #define SIR_UART_GET_DLH(port) bfin_read16((port)->membase + OFFSET_DLH) | ||
20 | #define SIR_UART_GET_LCR(port) bfin_read16((port)->membase + OFFSET_LCR) | ||
21 | #define SIR_UART_GET_LSR(port) bfin_read16((port)->membase + OFFSET_LSR) | ||
22 | #define SIR_UART_GET_GCTL(port) bfin_read16((port)->membase + OFFSET_GCTL) | ||
23 | |||
24 | #define SIR_UART_PUT_CHAR(port, v) bfin_write16(((port)->membase + OFFSET_THR), v) | ||
25 | #define SIR_UART_PUT_DLL(port, v) bfin_write16(((port)->membase + OFFSET_DLL), v) | ||
26 | #define SIR_UART_SET_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER_SET), v) | ||
27 | #define SIR_UART_CLEAR_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER_CLEAR), v) | ||
28 | #define SIR_UART_PUT_DLH(port, v) bfin_write16(((port)->membase + OFFSET_DLH), v) | ||
29 | #define SIR_UART_PUT_LSR(port, v) bfin_write16(((port)->membase + OFFSET_LSR), v) | ||
30 | #define SIR_UART_PUT_LCR(port, v) bfin_write16(((port)->membase + OFFSET_LCR), v) | ||
31 | #define SIR_UART_CLEAR_LSR(port) bfin_write16(((port)->membase + OFFSET_LSR), -1) | ||
32 | #define SIR_UART_PUT_GCTL(port, v) bfin_write16(((port)->membase + OFFSET_GCTL), v) | ||
33 | |||
34 | #ifdef CONFIG_SIR_BFIN_DMA | ||
35 | struct dma_rx_buf { | ||
36 | char *buf; | ||
37 | int head; | ||
38 | int tail; | ||
39 | }; | ||
40 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
41 | |||
42 | struct bfin_sir_port { | ||
43 | unsigned char __iomem *membase; | ||
44 | unsigned int irq; | ||
45 | unsigned int lsr; | ||
46 | unsigned long clk; | ||
47 | struct net_device *dev; | ||
48 | #ifdef CONFIG_SIR_BFIN_DMA | ||
49 | int tx_done; | ||
50 | struct dma_rx_buf rx_dma_buf; | ||
51 | struct timer_list rx_dma_timer; | ||
52 | int rx_dma_nrows; | ||
53 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
54 | unsigned int tx_dma_channel; | ||
55 | unsigned int rx_dma_channel; | ||
56 | }; | ||
57 | |||
58 | struct bfin_sir_port sir_ports[BFIN_UART_NR_PORTS]; | ||
59 | |||
60 | struct bfin_sir_port_res { | ||
61 | unsigned long base_addr; | ||
62 | int irq; | ||
63 | unsigned int rx_dma_channel; | ||
64 | unsigned int tx_dma_channel; | ||
65 | }; | ||
66 | |||
67 | struct bfin_sir_port_res bfin_sir_port_resource[] = { | ||
68 | #ifdef CONFIG_BFIN_SIR0 | ||
69 | { | ||
70 | 0xFFC00400, | ||
71 | IRQ_UART0_RX, | ||
72 | CH_UART0_RX, | ||
73 | CH_UART0_TX, | ||
74 | }, | ||
75 | #endif | ||
76 | #ifdef CONFIG_BFIN_SIR1 | ||
77 | { | ||
78 | 0xFFC02000, | ||
79 | IRQ_UART1_RX, | ||
80 | CH_UART1_RX, | ||
81 | CH_UART1_TX, | ||
82 | }, | ||
83 | #endif | ||
84 | #ifdef CONFIG_BFIN_SIR2 | ||
85 | { | ||
86 | 0xFFC02100, | ||
87 | IRQ_UART2_RX, | ||
88 | CH_UART2_RX, | ||
89 | CH_UART2_TX, | ||
90 | }, | ||
91 | #endif | ||
92 | #ifdef CONFIG_BFIN_SIR3 | ||
93 | { | ||
94 | 0xFFC03100, | ||
95 | IRQ_UART3_RX, | ||
96 | CH_UART3_RX, | ||
97 | CH_UART3_TX, | ||
98 | }, | ||
99 | #endif | ||
100 | }; | ||
101 | |||
102 | int nr_sirs = ARRAY_SIZE(bfin_sir_port_resource); | ||
103 | |||
104 | struct bfin_sir_self { | ||
105 | struct bfin_sir_port *sir_port; | ||
106 | spinlock_t lock; | ||
107 | unsigned int open; | ||
108 | int speed; | ||
109 | int newspeed; | ||
110 | |||
111 | struct sk_buff *txskb; | ||
112 | struct sk_buff *rxskb; | ||
113 | struct net_device_stats stats; | ||
114 | struct device *dev; | ||
115 | struct irlap_cb *irlap; | ||
116 | struct qos_info qos; | ||
117 | |||
118 | iobuff_t tx_buff; | ||
119 | iobuff_t rx_buff; | ||
120 | |||
121 | struct work_struct work; | ||
122 | int mtt; | ||
123 | }; | ||
124 | |||
125 | #define DRIVER_NAME "bfin_sir" | ||
126 | |||
127 | static void bfin_sir_hw_init(void) | ||
128 | { | ||
129 | #ifdef CONFIG_BFIN_SIR0 | ||
130 | peripheral_request(P_UART0_TX, DRIVER_NAME); | ||
131 | peripheral_request(P_UART0_RX, DRIVER_NAME); | ||
132 | #endif | ||
133 | |||
134 | #ifdef CONFIG_BFIN_SIR1 | ||
135 | peripheral_request(P_UART1_TX, DRIVER_NAME); | ||
136 | peripheral_request(P_UART1_RX, DRIVER_NAME); | ||
137 | #endif | ||
138 | |||
139 | #ifdef CONFIG_BFIN_SIR2 | ||
140 | peripheral_request(P_UART2_TX, DRIVER_NAME); | ||
141 | peripheral_request(P_UART2_RX, DRIVER_NAME); | ||
142 | #endif | ||
143 | |||
144 | #ifdef CONFIG_BFIN_SIR3 | ||
145 | peripheral_request(P_UART3_TX, DRIVER_NAME); | ||
146 | peripheral_request(P_UART3_RX, DRIVER_NAME); | ||
147 | #endif | ||
148 | SSYNC(); | ||
149 | } | ||
diff --git a/include/asm-blackfin/mach-bf548/blackfin.h b/include/asm-blackfin/mach-bf548/blackfin.h index 3bd67da86053..d6ee74ac0460 100644 --- a/include/asm-blackfin/mach-bf548/blackfin.h +++ b/include/asm-blackfin/mach-bf548/blackfin.h | |||
@@ -153,17 +153,33 @@ | |||
153 | #define bfin_write_UART_SCR(val) bfin_write_UART1_SCR(val) | 153 | #define bfin_write_UART_SCR(val) bfin_write_UART1_SCR(val) |
154 | #define bfin_read_UART_GCTL() bfin_read_UART1_GCTL() | 154 | #define bfin_read_UART_GCTL() bfin_read_UART1_GCTL() |
155 | #define bfin_write_UART_GCTL(val) bfin_write_UART1_GCTL(val) | 155 | #define bfin_write_UART_GCTL(val) bfin_write_UART1_GCTL(val) |
156 | #define UART_THR UART1_THR | 156 | |
157 | #define UART_RBR UART1_RBR | 157 | #define BFIN_UART_THR UART1_THR |
158 | #define UART_DLL UART1_DLL | 158 | #define BFIN_UART_RBR UART1_RBR |
159 | #define UART_IER UART1_IER | 159 | #define BFIN_UART_DLL UART1_DLL |
160 | #define UART_DLH UART1_DLH | 160 | #define BFIN_UART_IER UART1_IER |
161 | #define UART_IIR UART1_IIR | 161 | #define BFIN_UART_DLH UART1_DLH |
162 | #define UART_LCR UART1_LCR | 162 | #define BFIN_UART_IIR UART1_IIR |
163 | #define UART_MCR UART1_MCR | 163 | #define BFIN_UART_LCR UART1_LCR |
164 | #define UART_LSR UART1_LSR | 164 | #define BFIN_UART_MCR UART1_MCR |
165 | #define UART_SCR UART1_SCR | 165 | #define BFIN_UART_LSR UART1_LSR |
166 | #define UART_GCTL UART1_GCTL | 166 | #define BFIN_UART_SCR UART1_SCR |
167 | #define BFIN_UART_GCTL UART1_GCTL | ||
168 | |||
169 | #define BFIN_UART_NR_PORTS 4 | ||
170 | |||
171 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
172 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
173 | #define OFFSET_GCTL 0x08 /* Global Control Register */ | ||
174 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
175 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
176 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
177 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
178 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
179 | #define OFFSET_IER_SET 0x20 /* Set Interrupt Enable Register */ | ||
180 | #define OFFSET_IER_CLEAR 0x24 /* Clear Interrupt Enable Register */ | ||
181 | #define OFFSET_THR 0x28 /* Transmit Holding register */ | ||
182 | #define OFFSET_RBR 0x2C /* Receive Buffer register */ | ||
167 | 183 | ||
168 | /* PLL_DIV Masks */ | 184 | /* PLL_DIV Masks */ |
169 | #define CCLK_DIV1 CSEL_DIV1 /* CCLK = VCO / 1 */ | 185 | #define CCLK_DIV1 CSEL_DIV1 /* CCLK = VCO / 1 */ |
diff --git a/include/asm-blackfin/mach-bf548/cdefBF542.h b/include/asm-blackfin/mach-bf548/cdefBF542.h index 308b33ab5311..60b9f77576f1 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF542.h +++ b/include/asm-blackfin/mach-bf548/cdefBF542.h | |||
@@ -123,12 +123,12 @@ | |||
123 | #define bfin_write_SDH_DATA_LGTH(val) bfin_write16(SDH_DATA_LGTH, val) | 123 | #define bfin_write_SDH_DATA_LGTH(val) bfin_write16(SDH_DATA_LGTH, val) |
124 | #define bfin_read_SDH_DATA_CTL() bfin_read16(SDH_DATA_CTL) | 124 | #define bfin_read_SDH_DATA_CTL() bfin_read16(SDH_DATA_CTL) |
125 | #define bfin_write_SDH_DATA_CTL(val) bfin_write16(SDH_DATA_CTL, val) | 125 | #define bfin_write_SDH_DATA_CTL(val) bfin_write16(SDH_DATA_CTL, val) |
126 | #define bfin_read_SDH_DATA_CNT() fin_read16(SDH_DATA_CNT) | 126 | #define bfin_read_SDH_DATA_CNT() bfin_read16(SDH_DATA_CNT) |
127 | #define bfin_write_SDH_DATA_CNT(val) bfin_write16(SDH_DATA_CNT, val) | 127 | #define bfin_write_SDH_DATA_CNT(val) bfin_write16(SDH_DATA_CNT, val) |
128 | #define bfin_read_SDH_STATUS() bfin_read32(SDH_STATUS) | 128 | #define bfin_read_SDH_STATUS() bfin_read32(SDH_STATUS) |
129 | #define bfin_write_SDH_STATUS(val) bfin_write32(SDH_STATUS, val) | 129 | #define bfin_write_SDH_STATUS(val) bfin_write32(SDH_STATUS, val) |
130 | #define bfin_read_SDH_STATUS_CLR() fin_read16(SDH_STATUS_CLR) | 130 | #define bfin_read_SDH_STATUS_CLR() bfin_read16(SDH_STATUS_CLR) |
131 | #define bfin_write_SDH_STATUS_CLR(val) fin_write16(SDH_STATUS_CLR, val) | 131 | #define bfin_write_SDH_STATUS_CLR(val) bfin_write16(SDH_STATUS_CLR, val) |
132 | #define bfin_read_SDH_MASK0() bfin_read32(SDH_MASK0) | 132 | #define bfin_read_SDH_MASK0() bfin_read32(SDH_MASK0) |
133 | #define bfin_write_SDH_MASK0(val) bfin_write32(SDH_MASK0, val) | 133 | #define bfin_write_SDH_MASK0(val) bfin_write32(SDH_MASK0, val) |
134 | #define bfin_read_SDH_MASK1() bfin_read32(SDH_MASK1) | 134 | #define bfin_read_SDH_MASK1() bfin_read32(SDH_MASK1) |
@@ -184,8 +184,8 @@ | |||
184 | #define bfin_write_USB_FRAME(val) bfin_write16(USB_FRAME, val) | 184 | #define bfin_write_USB_FRAME(val) bfin_write16(USB_FRAME, val) |
185 | #define bfin_read_USB_INDEX() bfin_read16(USB_INDEX) | 185 | #define bfin_read_USB_INDEX() bfin_read16(USB_INDEX) |
186 | #define bfin_write_USB_INDEX(val) bfin_write16(USB_INDEX, val) | 186 | #define bfin_write_USB_INDEX(val) bfin_write16(USB_INDEX, val) |
187 | #define bfin_read_USB_TESTMODE() fin_read16(USB_TESTMODE) | 187 | #define bfin_read_USB_TESTMODE() bfin_read16(USB_TESTMODE) |
188 | #define bfin_write_USB_TESTMODE(val) fin_write16(USB_TESTMODE, val) | 188 | #define bfin_write_USB_TESTMODE(val) bfin_write16(USB_TESTMODE, val) |
189 | #define bfin_read_USB_GLOBINTR() bfin_read16(USB_GLOBINTR) | 189 | #define bfin_read_USB_GLOBINTR() bfin_read16(USB_GLOBINTR) |
190 | #define bfin_write_USB_GLOBINTR(val) bfin_write16(USB_GLOBINTR, val) | 190 | #define bfin_write_USB_GLOBINTR(val) bfin_write16(USB_GLOBINTR, val) |
191 | #define bfin_read_USB_GLOBAL_CTL() bfin_read16(USB_GLOBAL_CTL) | 191 | #define bfin_read_USB_GLOBAL_CTL() bfin_read16(USB_GLOBAL_CTL) |
@@ -244,7 +244,7 @@ | |||
244 | #define bfin_read_USB_OTG_DEV_CTL() bfin_read16(USB_OTG_DEV_CTL) | 244 | #define bfin_read_USB_OTG_DEV_CTL() bfin_read16(USB_OTG_DEV_CTL) |
245 | #define bfin_write_USB_OTG_DEV_CTL(val) bfin_write16(USB_OTG_DEV_CTL, val) | 245 | #define bfin_write_USB_OTG_DEV_CTL(val) bfin_write16(USB_OTG_DEV_CTL, val) |
246 | #define bfin_read_USB_OTG_VBUS_IRQ() bfin_read16(USB_OTG_VBUS_IRQ) | 246 | #define bfin_read_USB_OTG_VBUS_IRQ() bfin_read16(USB_OTG_VBUS_IRQ) |
247 | #define bfin_write_USB_OTG_VBUS_IRQ(val) fin_write16(USB_OTG_VBUS_IRQ, val) | 247 | #define bfin_write_USB_OTG_VBUS_IRQ(val) bfin_write16(USB_OTG_VBUS_IRQ, val) |
248 | #define bfin_read_USB_OTG_VBUS_MASK() bfin_read16(USB_OTG_VBUS_MASK) | 248 | #define bfin_read_USB_OTG_VBUS_MASK() bfin_read16(USB_OTG_VBUS_MASK) |
249 | #define bfin_write_USB_OTG_VBUS_MASK(val) bfin_write16(USB_OTG_VBUS_MASK, val) | 249 | #define bfin_write_USB_OTG_VBUS_MASK(val) bfin_write16(USB_OTG_VBUS_MASK, val) |
250 | 250 | ||
diff --git a/include/asm-blackfin/mach-bf548/cdefBF544.h b/include/asm-blackfin/mach-bf548/cdefBF544.h index 7a2d177c8dc2..ea9b4ab496f3 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF544.h +++ b/include/asm-blackfin/mach-bf548/cdefBF544.h | |||
@@ -113,39 +113,6 @@ | |||
113 | 113 | ||
114 | /* Two Wire Interface Registers (TWI1) */ | 114 | /* Two Wire Interface Registers (TWI1) */ |
115 | 115 | ||
116 | #define bfin_read_TWI1_CLKDIV() bfin_read16(TWI1_CLKDIV) | ||
117 | #define bfin_write_TWI1_CLKDIV(val) bfin_write16(TWI1_CLKDIV, val) | ||
118 | #define bfin_read_TWI1_CONTROL() bfin_read16(TWI1_CONTROL) | ||
119 | #define bfin_write_TWI1_CONTROL(val) bfin_write16(TWI1_CONTROL, val) | ||
120 | #define bfin_read_TWI1_SLAVE_CTRL() bfin_read16(TWI1_SLAVE_CTRL) | ||
121 | #define bfin_write_TWI1_SLAVE_CTRL(val) bfin_write16(TWI1_SLAVE_CTRL, val) | ||
122 | #define bfin_read_TWI1_SLAVE_STAT() bfin_read16(TWI1_SLAVE_STAT) | ||
123 | #define bfin_write_TWI1_SLAVE_STAT(val) bfin_write16(TWI1_SLAVE_STAT, val) | ||
124 | #define bfin_read_TWI1_SLAVE_ADDR() bfin_read16(TWI1_SLAVE_ADDR) | ||
125 | #define bfin_write_TWI1_SLAVE_ADDR(val) bfin_write16(TWI1_SLAVE_ADDR, val) | ||
126 | #define bfin_read_TWI1_MASTER_CTRL() bfin_read16(TWI1_MASTER_CTRL) | ||
127 | #define bfin_write_TWI1_MASTER_CTRL(val) bfin_write16(TWI1_MASTER_CTRL, val) | ||
128 | #define bfin_read_TWI1_MASTER_STAT() bfin_read16(TWI1_MASTER_STAT) | ||
129 | #define bfin_write_TWI1_MASTER_STAT(val) bfin_write16(TWI1_MASTER_STAT, val) | ||
130 | #define bfin_read_TWI1_MASTER_ADDR() bfin_read16(TWI1_MASTER_ADDR) | ||
131 | #define bfin_write_TWI1_MASTER_ADDR(val) bfin_write16(TWI1_MASTER_ADDR, val) | ||
132 | #define bfin_read_TWI1_INT_STAT() bfin_read16(TWI1_INT_STAT) | ||
133 | #define bfin_write_TWI1_INT_STAT(val) bfin_write16(TWI1_INT_STAT, val) | ||
134 | #define bfin_read_TWI1_INT_MASK() bfin_read16(TWI1_INT_MASK) | ||
135 | #define bfin_write_TWI1_INT_MASK(val) bfin_write16(TWI1_INT_MASK, val) | ||
136 | #define bfin_read_TWI1_FIFO_CTRL() bfin_read16(TWI1_FIFO_CTRL) | ||
137 | #define bfin_write_TWI1_FIFO_CTRL(val) bfin_write16(TWI1_FIFO_CTRL, val) | ||
138 | #define bfin_read_TWI1_FIFO_STAT() bfin_read16(TWI1_FIFO_STAT) | ||
139 | #define bfin_write_TWI1_FIFO_STAT(val) bfin_write16(TWI1_FIFO_STAT, val) | ||
140 | #define bfin_read_TWI1_XMT_DATA8() bfin_read16(TWI1_XMT_DATA8) | ||
141 | #define bfin_write_TWI1_XMT_DATA8(val) bfin_write16(TWI1_XMT_DATA8, val) | ||
142 | #define bfin_read_TWI1_XMT_DATA16() bfin_read16(TWI1_XMT_DATA16) | ||
143 | #define bfin_write_TWI1_XMT_DATA16(val) bfin_write16(TWI1_XMT_DATA16, val) | ||
144 | #define bfin_read_TWI1_RCV_DATA8() bfin_read16(TWI1_RCV_DATA8) | ||
145 | #define bfin_write_TWI1_RCV_DATA8(val) bfin_write16(TWI1_RCV_DATA8, val) | ||
146 | #define bfin_read_TWI1_RCV_DATA16() bfin_read16(TWI1_RCV_DATA16) | ||
147 | #define bfin_write_TWI1_RCV_DATA16(val) bfin_write16(TWI1_RCV_DATA16, val) | ||
148 | |||
149 | /* CAN Controller 1 Config 1 Registers */ | 116 | /* CAN Controller 1 Config 1 Registers */ |
150 | 117 | ||
151 | #define bfin_read_CAN1_MC1() bfin_read16(CAN1_MC1) | 118 | #define bfin_read_CAN1_MC1() bfin_read16(CAN1_MC1) |
diff --git a/include/asm-blackfin/mach-bf548/cdefBF547.h b/include/asm-blackfin/mach-bf548/cdefBF547.h index d0a200b08abd..ba716277c00d 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF547.h +++ b/include/asm-blackfin/mach-bf548/cdefBF547.h | |||
@@ -185,39 +185,6 @@ | |||
185 | 185 | ||
186 | /* Two Wire Interface Registers (TWI1) */ | 186 | /* Two Wire Interface Registers (TWI1) */ |
187 | 187 | ||
188 | #define bfin_read_TWI1_CLKDIV() bfin_read16(TWI1_CLKDIV) | ||
189 | #define bfin_write_TWI1_CLKDIV(val) bfin_write16(TWI1_CLKDIV, val) | ||
190 | #define bfin_read_TWI1_CONTROL() bfin_read16(TWI1_CONTROL) | ||
191 | #define bfin_write_TWI1_CONTROL(val) bfin_write16(TWI1_CONTROL, val) | ||
192 | #define bfin_read_TWI1_SLAVE_CTRL() bfin_read16(TWI1_SLAVE_CTRL) | ||
193 | #define bfin_write_TWI1_SLAVE_CTRL(val) bfin_write16(TWI1_SLAVE_CTRL, val) | ||
194 | #define bfin_read_TWI1_SLAVE_STAT() bfin_read16(TWI1_SLAVE_STAT) | ||
195 | #define bfin_write_TWI1_SLAVE_STAT(val) bfin_write16(TWI1_SLAVE_STAT, val) | ||
196 | #define bfin_read_TWI1_SLAVE_ADDR() bfin_read16(TWI1_SLAVE_ADDR) | ||
197 | #define bfin_write_TWI1_SLAVE_ADDR(val) bfin_write16(TWI1_SLAVE_ADDR, val) | ||
198 | #define bfin_read_TWI1_MASTER_CTRL() bfin_read16(TWI1_MASTER_CTRL) | ||
199 | #define bfin_write_TWI1_MASTER_CTRL(val) bfin_write16(TWI1_MASTER_CTRL, val) | ||
200 | #define bfin_read_TWI1_MASTER_STAT() bfin_read16(TWI1_MASTER_STAT) | ||
201 | #define bfin_write_TWI1_MASTER_STAT(val) bfin_write16(TWI1_MASTER_STAT, val) | ||
202 | #define bfin_read_TWI1_MASTER_ADDR() bfin_read16(TWI1_MASTER_ADDR) | ||
203 | #define bfin_write_TWI1_MASTER_ADDR(val) bfin_write16(TWI1_MASTER_ADDR, val) | ||
204 | #define bfin_read_TWI1_INT_STAT() bfin_read16(TWI1_INT_STAT) | ||
205 | #define bfin_write_TWI1_INT_STAT(val) bfin_write16(TWI1_INT_STAT, val) | ||
206 | #define bfin_read_TWI1_INT_MASK() bfin_read16(TWI1_INT_MASK) | ||
207 | #define bfin_write_TWI1_INT_MASK(val) bfin_write16(TWI1_INT_MASK, val) | ||
208 | #define bfin_read_TWI1_FIFO_CTRL() bfin_read16(TWI1_FIFO_CTRL) | ||
209 | #define bfin_write_TWI1_FIFO_CTRL(val) bfin_write16(TWI1_FIFO_CTRL, val) | ||
210 | #define bfin_read_TWI1_FIFO_STAT() bfin_read16(TWI1_FIFO_STAT) | ||
211 | #define bfin_write_TWI1_FIFO_STAT(val) bfin_write16(TWI1_FIFO_STAT, val) | ||
212 | #define bfin_read_TWI1_XMT_DATA8() bfin_read16(TWI1_XMT_DATA8) | ||
213 | #define bfin_write_TWI1_XMT_DATA8(val) bfin_write16(TWI1_XMT_DATA8, val) | ||
214 | #define bfin_read_TWI1_XMT_DATA16() bfin_read16(TWI1_XMT_DATA16) | ||
215 | #define bfin_write_TWI1_XMT_DATA16(val) bfin_write16(TWI1_XMT_DATA16, val) | ||
216 | #define bfin_read_TWI1_RCV_DATA8() bfin_read16(TWI1_RCV_DATA8) | ||
217 | #define bfin_write_TWI1_RCV_DATA8(val) bfin_write16(TWI1_RCV_DATA8, val) | ||
218 | #define bfin_read_TWI1_RCV_DATA16() bfin_read16(TWI1_RCV_DATA16) | ||
219 | #define bfin_write_TWI1_RCV_DATA16(val) bfin_write16(TWI1_RCV_DATA16, val) | ||
220 | |||
221 | /* SPI2 Registers */ | 188 | /* SPI2 Registers */ |
222 | 189 | ||
223 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) | 190 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) |
diff --git a/include/asm-blackfin/mach-bf548/cdefBF548.h b/include/asm-blackfin/mach-bf548/cdefBF548.h index 674be0216bff..ae971ebff6a0 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF548.h +++ b/include/asm-blackfin/mach-bf548/cdefBF548.h | |||
@@ -185,39 +185,6 @@ | |||
185 | 185 | ||
186 | /* Two Wire Interface Registers (TWI1) */ | 186 | /* Two Wire Interface Registers (TWI1) */ |
187 | 187 | ||
188 | #define bfin_read_TWI1_CLKDIV() bfin_read16(TWI1_CLKDIV) | ||
189 | #define bfin_write_TWI1_CLKDIV(val) bfin_write16(TWI1_CLKDIV, val) | ||
190 | #define bfin_read_TWI1_CONTROL() bfin_read16(TWI1_CONTROL) | ||
191 | #define bfin_write_TWI1_CONTROL(val) bfin_write16(TWI1_CONTROL, val) | ||
192 | #define bfin_read_TWI1_SLAVE_CTRL() bfin_read16(TWI1_SLAVE_CTRL) | ||
193 | #define bfin_write_TWI1_SLAVE_CTRL(val) bfin_write16(TWI1_SLAVE_CTRL, val) | ||
194 | #define bfin_read_TWI1_SLAVE_STAT() bfin_read16(TWI1_SLAVE_STAT) | ||
195 | #define bfin_write_TWI1_SLAVE_STAT(val) bfin_write16(TWI1_SLAVE_STAT, val) | ||
196 | #define bfin_read_TWI1_SLAVE_ADDR() bfin_read16(TWI1_SLAVE_ADDR) | ||
197 | #define bfin_write_TWI1_SLAVE_ADDR(val) bfin_write16(TWI1_SLAVE_ADDR, val) | ||
198 | #define bfin_read_TWI1_MASTER_CTRL() bfin_read16(TWI1_MASTER_CTRL) | ||
199 | #define bfin_write_TWI1_MASTER_CTRL(val) bfin_write16(TWI1_MASTER_CTRL, val) | ||
200 | #define bfin_read_TWI1_MASTER_STAT() bfin_read16(TWI1_MASTER_STAT) | ||
201 | #define bfin_write_TWI1_MASTER_STAT(val) bfin_write16(TWI1_MASTER_STAT, val) | ||
202 | #define bfin_read_TWI1_MASTER_ADDR() bfin_read16(TWI1_MASTER_ADDR) | ||
203 | #define bfin_write_TWI1_MASTER_ADDR(val) bfin_write16(TWI1_MASTER_ADDR, val) | ||
204 | #define bfin_read_TWI1_INT_STAT() bfin_read16(TWI1_INT_STAT) | ||
205 | #define bfin_write_TWI1_INT_STAT(val) bfin_write16(TWI1_INT_STAT, val) | ||
206 | #define bfin_read_TWI1_INT_MASK() bfin_read16(TWI1_INT_MASK) | ||
207 | #define bfin_write_TWI1_INT_MASK(val) bfin_write16(TWI1_INT_MASK, val) | ||
208 | #define bfin_read_TWI1_FIFO_CTRL() bfin_read16(TWI1_FIFO_CTRL) | ||
209 | #define bfin_write_TWI1_FIFO_CTRL(val) bfin_write16(TWI1_FIFO_CTRL, val) | ||
210 | #define bfin_read_TWI1_FIFO_STAT() bfin_read16(TWI1_FIFO_STAT) | ||
211 | #define bfin_write_TWI1_FIFO_STAT(val) bfin_write16(TWI1_FIFO_STAT, val) | ||
212 | #define bfin_read_TWI1_XMT_DATA8() bfin_read16(TWI1_XMT_DATA8) | ||
213 | #define bfin_write_TWI1_XMT_DATA8(val) bfin_write16(TWI1_XMT_DATA8, val) | ||
214 | #define bfin_read_TWI1_XMT_DATA16() bfin_read16(TWI1_XMT_DATA16) | ||
215 | #define bfin_write_TWI1_XMT_DATA16(val) bfin_write16(TWI1_XMT_DATA16, val) | ||
216 | #define bfin_read_TWI1_RCV_DATA8() bfin_read16(TWI1_RCV_DATA8) | ||
217 | #define bfin_write_TWI1_RCV_DATA8(val) bfin_write16(TWI1_RCV_DATA8, val) | ||
218 | #define bfin_read_TWI1_RCV_DATA16() bfin_read16(TWI1_RCV_DATA16) | ||
219 | #define bfin_write_TWI1_RCV_DATA16(val) bfin_write16(TWI1_RCV_DATA16, val) | ||
220 | |||
221 | /* SPI2 Registers */ | 188 | /* SPI2 Registers */ |
222 | 189 | ||
223 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) | 190 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) |
diff --git a/include/asm-blackfin/mach-bf548/cdefBF549.h b/include/asm-blackfin/mach-bf548/cdefBF549.h index 2ab5b7c00820..92d07d961999 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF549.h +++ b/include/asm-blackfin/mach-bf548/cdefBF549.h | |||
@@ -185,39 +185,6 @@ | |||
185 | 185 | ||
186 | /* Two Wire Interface Registers (TWI1) */ | 186 | /* Two Wire Interface Registers (TWI1) */ |
187 | 187 | ||
188 | #define bfin_read_TWI1_CLKDIV() bfin_read16(TWI1_CLKDIV) | ||
189 | #define bfin_write_TWI1_CLKDIV(val) bfin_write16(TWI1_CLKDIV, val) | ||
190 | #define bfin_read_TWI1_CONTROL() bfin_read16(TWI1_CONTROL) | ||
191 | #define bfin_write_TWI1_CONTROL(val) bfin_write16(TWI1_CONTROL, val) | ||
192 | #define bfin_read_TWI1_SLAVE_CTRL() bfin_read16(TWI1_SLAVE_CTRL) | ||
193 | #define bfin_write_TWI1_SLAVE_CTRL(val) bfin_write16(TWI1_SLAVE_CTRL, val) | ||
194 | #define bfin_read_TWI1_SLAVE_STAT() bfin_read16(TWI1_SLAVE_STAT) | ||
195 | #define bfin_write_TWI1_SLAVE_STAT(val) bfin_write16(TWI1_SLAVE_STAT, val) | ||
196 | #define bfin_read_TWI1_SLAVE_ADDR() bfin_read16(TWI1_SLAVE_ADDR) | ||
197 | #define bfin_write_TWI1_SLAVE_ADDR(val) bfin_write16(TWI1_SLAVE_ADDR, val) | ||
198 | #define bfin_read_TWI1_MASTER_CTRL() bfin_read16(TWI1_MASTER_CTRL) | ||
199 | #define bfin_write_TWI1_MASTER_CTRL(val) bfin_write16(TWI1_MASTER_CTRL, val) | ||
200 | #define bfin_read_TWI1_MASTER_STAT() bfin_read16(TWI1_MASTER_STAT) | ||
201 | #define bfin_write_TWI1_MASTER_STAT(val) bfin_write16(TWI1_MASTER_STAT, val) | ||
202 | #define bfin_read_TWI1_MASTER_ADDR() bfin_read16(TWI1_MASTER_ADDR) | ||
203 | #define bfin_write_TWI1_MASTER_ADDR(val) bfin_write16(TWI1_MASTER_ADDR, val) | ||
204 | #define bfin_read_TWI1_INT_STAT() bfin_read16(TWI1_INT_STAT) | ||
205 | #define bfin_write_TWI1_INT_STAT(val) bfin_write16(TWI1_INT_STAT, val) | ||
206 | #define bfin_read_TWI1_INT_MASK() bfin_read16(TWI1_INT_MASK) | ||
207 | #define bfin_write_TWI1_INT_MASK(val) bfin_write16(TWI1_INT_MASK, val) | ||
208 | #define bfin_read_TWI1_FIFO_CTRL() bfin_read16(TWI1_FIFO_CTRL) | ||
209 | #define bfin_write_TWI1_FIFO_CTRL(val) bfin_write16(TWI1_FIFO_CTRL, val) | ||
210 | #define bfin_read_TWI1_FIFO_STAT() bfin_read16(TWI1_FIFO_STAT) | ||
211 | #define bfin_write_TWI1_FIFO_STAT(val) bfin_write16(TWI1_FIFO_STAT, val) | ||
212 | #define bfin_read_TWI1_XMT_DATA8() bfin_read16(TWI1_XMT_DATA8) | ||
213 | #define bfin_write_TWI1_XMT_DATA8(val) bfin_write16(TWI1_XMT_DATA8, val) | ||
214 | #define bfin_read_TWI1_XMT_DATA16() bfin_read16(TWI1_XMT_DATA16) | ||
215 | #define bfin_write_TWI1_XMT_DATA16(val) bfin_write16(TWI1_XMT_DATA16, val) | ||
216 | #define bfin_read_TWI1_RCV_DATA8() bfin_read16(TWI1_RCV_DATA8) | ||
217 | #define bfin_write_TWI1_RCV_DATA8(val) bfin_write16(TWI1_RCV_DATA8, val) | ||
218 | #define bfin_read_TWI1_RCV_DATA16() bfin_read16(TWI1_RCV_DATA16) | ||
219 | #define bfin_write_TWI1_RCV_DATA16(val) bfin_write16(TWI1_RCV_DATA16, val) | ||
220 | |||
221 | /* SPI2 Registers */ | 188 | /* SPI2 Registers */ |
222 | 189 | ||
223 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) | 190 | #define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL) |
@@ -1773,7 +1740,7 @@ | |||
1773 | #define bfin_read_USB_DMA5ADDRHIGH() bfin_read16(USB_DMA5ADDRHIGH) | 1740 | #define bfin_read_USB_DMA5ADDRHIGH() bfin_read16(USB_DMA5ADDRHIGH) |
1774 | #define bfin_write_USB_DMA5ADDRHIGH(val) bfin_write16(USB_DMA5ADDRHIGH, val) | 1741 | #define bfin_write_USB_DMA5ADDRHIGH(val) bfin_write16(USB_DMA5ADDRHIGH, val) |
1775 | #define bfin_read_USB_DMA5COUNTLOW() bfin_read16(USB_DMA5COUNTLOW) | 1742 | #define bfin_read_USB_DMA5COUNTLOW() bfin_read16(USB_DMA5COUNTLOW) |
1776 | #define bfin_write_USB_DMA5COUNTLOW(val) fin_write16(USB_DMA5COUNTLOW, val) | 1743 | #define bfin_write_USB_DMA5COUNTLOW(val) bfin_write16(USB_DMA5COUNTLOW, val) |
1777 | #define bfin_read_USB_DMA5COUNTHIGH() bfin_read16(USB_DMA5COUNTHIGH) | 1744 | #define bfin_read_USB_DMA5COUNTHIGH() bfin_read16(USB_DMA5COUNTHIGH) |
1778 | #define bfin_write_USB_DMA5COUNTHIGH(val) bfin_write16(USB_DMA5COUNTHIGH, val) | 1745 | #define bfin_write_USB_DMA5COUNTHIGH(val) bfin_write16(USB_DMA5COUNTHIGH, val) |
1779 | 1746 | ||
diff --git a/include/asm-blackfin/mach-bf548/cdefBF54x_base.h b/include/asm-blackfin/mach-bf548/cdefBF54x_base.h index 19ddcd83c71f..57ac8cb9b1f6 100644 --- a/include/asm-blackfin/mach-bf548/cdefBF54x_base.h +++ b/include/asm-blackfin/mach-bf548/cdefBF54x_base.h | |||
@@ -43,7 +43,33 @@ | |||
43 | /* PLL Registers */ | 43 | /* PLL Registers */ |
44 | 44 | ||
45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 45 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
46 | #define bfin_write_PLL_CTL(val) bfin_write16(PLL_CTL, val) | 46 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ |
47 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
48 | { | ||
49 | unsigned long flags, iwr0, iwr1, iwr2; | ||
50 | |||
51 | if (val == bfin_read_PLL_CTL()) | ||
52 | return; | ||
53 | |||
54 | local_irq_save(flags); | ||
55 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
56 | iwr0 = bfin_read32(SIC_IWR0); | ||
57 | iwr1 = bfin_read32(SIC_IWR1); | ||
58 | iwr2 = bfin_read32(SIC_IWR2); | ||
59 | /* Only allow PPL Wakeup) */ | ||
60 | bfin_write32(SIC_IWR0, IWR_ENABLE(0)); | ||
61 | bfin_write32(SIC_IWR1, 0); | ||
62 | bfin_write32(SIC_IWR2, 0); | ||
63 | |||
64 | bfin_write16(PLL_CTL, val); | ||
65 | SSYNC(); | ||
66 | asm("IDLE;"); | ||
67 | |||
68 | bfin_write32(SIC_IWR0, iwr0); | ||
69 | bfin_write32(SIC_IWR1, iwr1); | ||
70 | bfin_write32(SIC_IWR2, iwr2); | ||
71 | local_irq_restore(flags); | ||
72 | } | ||
47 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 73 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
48 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) | 74 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV, val) |
49 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 75 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
@@ -52,6 +78,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
52 | { | 78 | { |
53 | unsigned long flags, iwr0, iwr1, iwr2; | 79 | unsigned long flags, iwr0, iwr1, iwr2; |
54 | 80 | ||
81 | if (val == bfin_read_VR_CTL()) | ||
82 | return; | ||
83 | |||
84 | local_irq_save(flags); | ||
55 | /* Enable the PLL Wakeup bit in SIC IWR */ | 85 | /* Enable the PLL Wakeup bit in SIC IWR */ |
56 | iwr0 = bfin_read32(SIC_IWR0); | 86 | iwr0 = bfin_read32(SIC_IWR0); |
57 | iwr1 = bfin_read32(SIC_IWR1); | 87 | iwr1 = bfin_read32(SIC_IWR1); |
@@ -63,13 +93,12 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
63 | 93 | ||
64 | bfin_write16(VR_CTL, val); | 94 | bfin_write16(VR_CTL, val); |
65 | SSYNC(); | 95 | SSYNC(); |
66 | |||
67 | local_irq_save(flags); | ||
68 | asm("IDLE;"); | 96 | asm("IDLE;"); |
69 | local_irq_restore(flags); | 97 | |
70 | bfin_write32(SIC_IWR0, iwr0); | 98 | bfin_write32(SIC_IWR0, iwr0); |
71 | bfin_write32(SIC_IWR1, iwr1); | 99 | bfin_write32(SIC_IWR1, iwr1); |
72 | bfin_write32(SIC_IWR2, iwr2); | 100 | bfin_write32(SIC_IWR2, iwr2); |
101 | local_irq_restore(flags); | ||
73 | } | 102 | } |
74 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 103 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
75 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) | 104 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT, val) |
@@ -211,39 +240,6 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
211 | 240 | ||
212 | /* Two Wire Interface Registers (TWI0) */ | 241 | /* Two Wire Interface Registers (TWI0) */ |
213 | 242 | ||
214 | #define bfin_read_TWI0_CLKDIV() bfin_read16(TWI0_CLKDIV) | ||
215 | #define bfin_write_TWI0_CLKDIV(val) bfin_write16(TWI0_CLKDIV, val) | ||
216 | #define bfin_read_TWI0_CONTROL() bfin_read16(TWI0_CONTROL) | ||
217 | #define bfin_write_TWI0_CONTROL(val) bfin_write16(TWI0_CONTROL, val) | ||
218 | #define bfin_read_TWI0_SLAVE_CTRL() bfin_read16(TWI0_SLAVE_CTRL) | ||
219 | #define bfin_write_TWI0_SLAVE_CTRL(val) bfin_write16(TWI0_SLAVE_CTRL, val) | ||
220 | #define bfin_read_TWI0_SLAVE_STAT() bfin_read16(TWI0_SLAVE_STAT) | ||
221 | #define bfin_write_TWI0_SLAVE_STAT(val) bfin_write16(TWI0_SLAVE_STAT, val) | ||
222 | #define bfin_read_TWI0_SLAVE_ADDR() bfin_read16(TWI0_SLAVE_ADDR) | ||
223 | #define bfin_write_TWI0_SLAVE_ADDR(val) bfin_write16(TWI0_SLAVE_ADDR, val) | ||
224 | #define bfin_read_TWI0_MASTER_CTRL() bfin_read16(TWI0_MASTER_CTRL) | ||
225 | #define bfin_write_TWI0_MASTER_CTRL(val) bfin_write16(TWI0_MASTER_CTRL, val) | ||
226 | #define bfin_read_TWI0_MASTER_STAT() bfin_read16(TWI0_MASTER_STAT) | ||
227 | #define bfin_write_TWI0_MASTER_STAT(val) bfin_write16(TWI0_MASTER_STAT, val) | ||
228 | #define bfin_read_TWI0_MASTER_ADDR() bfin_read16(TWI0_MASTER_ADDR) | ||
229 | #define bfin_write_TWI0_MASTER_ADDR(val) bfin_write16(TWI0_MASTER_ADDR, val) | ||
230 | #define bfin_read_TWI0_INT_STAT() bfin_read16(TWI0_INT_STAT) | ||
231 | #define bfin_write_TWI0_INT_STAT(val) bfin_write16(TWI0_INT_STAT, val) | ||
232 | #define bfin_read_TWI0_INT_MASK() bfin_read16(TWI0_INT_MASK) | ||
233 | #define bfin_write_TWI0_INT_MASK(val) bfin_write16(TWI0_INT_MASK, val) | ||
234 | #define bfin_read_TWI0_FIFO_CTRL() bfin_read16(TWI0_FIFO_CTRL) | ||
235 | #define bfin_write_TWI0_FIFO_CTRL(val) bfin_write16(TWI0_FIFO_CTRL, val) | ||
236 | #define bfin_read_TWI0_FIFO_STAT() bfin_read16(TWI0_FIFO_STAT) | ||
237 | #define bfin_write_TWI0_FIFO_STAT(val) bfin_write16(TWI0_FIFO_STAT, val) | ||
238 | #define bfin_read_TWI0_XMT_DATA8() bfin_read16(TWI0_XMT_DATA8) | ||
239 | #define bfin_write_TWI0_XMT_DATA8(val) bfin_write16(TWI0_XMT_DATA8, val) | ||
240 | #define bfin_read_TWI0_XMT_DATA16() bfin_read16(TWI0_XMT_DATA16) | ||
241 | #define bfin_write_TWI0_XMT_DATA16(val) bfin_write16(TWI0_XMT_DATA16, val) | ||
242 | #define bfin_read_TWI0_RCV_DATA8() bfin_read16(TWI0_RCV_DATA8) | ||
243 | #define bfin_write_TWI0_RCV_DATA8(val) bfin_write16(TWI0_RCV_DATA8, val) | ||
244 | #define bfin_read_TWI0_RCV_DATA16() bfin_read16(TWI0_RCV_DATA16) | ||
245 | #define bfin_write_TWI0_RCV_DATA16(val) bfin_write16(TWI0_RCV_DATA16, val) | ||
246 | |||
247 | /* SPORT0 is not defined in the shared file because it is not available on the ADSP-BF542 and ADSP-BF544 bfin_read_()rocessors */ | 243 | /* SPORT0 is not defined in the shared file because it is not available on the ADSP-BF542 and ADSP-BF544 bfin_read_()rocessors */ |
248 | 244 | ||
249 | /* SPORT1 Registers */ | 245 | /* SPORT1 Registers */ |
@@ -323,7 +319,7 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
323 | #define bfin_read_EBIU_DDRQUE() bfin_read32(EBIU_DDRQUE) | 319 | #define bfin_read_EBIU_DDRQUE() bfin_read32(EBIU_DDRQUE) |
324 | #define bfin_write_EBIU_DDRQUE(val) bfin_write32(EBIU_DDRQUE, val) | 320 | #define bfin_write_EBIU_DDRQUE(val) bfin_write32(EBIU_DDRQUE, val) |
325 | #define bfin_read_EBIU_ERRADD() bfin_read32(EBIU_ERRADD) | 321 | #define bfin_read_EBIU_ERRADD() bfin_read32(EBIU_ERRADD) |
326 | #define bfin_write_EBIU_ERRADD(val) bfin_write32(EBIU_ERRADD) | 322 | #define bfin_write_EBIU_ERRADD(val) bfin_write32(EBIU_ERRADD, val) |
327 | #define bfin_read_EBIU_ERRMST() bfin_read16(EBIU_ERRMST) | 323 | #define bfin_read_EBIU_ERRMST() bfin_read16(EBIU_ERRMST) |
328 | #define bfin_write_EBIU_ERRMST(val) bfin_write16(EBIU_ERRMST, val) | 324 | #define bfin_write_EBIU_ERRMST(val) bfin_write16(EBIU_ERRMST, val) |
329 | #define bfin_read_EBIU_RSTCTL() bfin_read16(EBIU_RSTCTL) | 325 | #define bfin_read_EBIU_RSTCTL() bfin_read16(EBIU_RSTCTL) |
@@ -392,23 +388,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
392 | /* DMA Channel 0 Registers */ | 388 | /* DMA Channel 0 Registers */ |
393 | 389 | ||
394 | #define bfin_read_DMA0_NEXT_DESC_PTR() bfin_read32(DMA0_NEXT_DESC_PTR) | 390 | #define bfin_read_DMA0_NEXT_DESC_PTR() bfin_read32(DMA0_NEXT_DESC_PTR) |
395 | #define bfin_write_DMA0_NEXT_DESC_PTR(val) bfin_write32(DMA0_NEXT_DESC_PTR) | 391 | #define bfin_write_DMA0_NEXT_DESC_PTR(val) bfin_write32(DMA0_NEXT_DESC_PTR, val) |
396 | #define bfin_read_DMA0_START_ADDR() bfin_read32(DMA0_START_ADDR) | 392 | #define bfin_read_DMA0_START_ADDR() bfin_read32(DMA0_START_ADDR) |
397 | #define bfin_write_DMA0_START_ADDR(val) bfin_write32(DMA0_START_ADDR) | 393 | #define bfin_write_DMA0_START_ADDR(val) bfin_write32(DMA0_START_ADDR, val) |
398 | #define bfin_read_DMA0_CONFIG() bfin_read16(DMA0_CONFIG) | 394 | #define bfin_read_DMA0_CONFIG() bfin_read16(DMA0_CONFIG) |
399 | #define bfin_write_DMA0_CONFIG(val) bfin_write16(DMA0_CONFIG, val) | 395 | #define bfin_write_DMA0_CONFIG(val) bfin_write16(DMA0_CONFIG, val) |
400 | #define bfin_read_DMA0_X_COUNT() bfin_read16(DMA0_X_COUNT) | 396 | #define bfin_read_DMA0_X_COUNT() bfin_read16(DMA0_X_COUNT) |
401 | #define bfin_write_DMA0_X_COUNT(val) bfin_write16(DMA0_X_COUNT, val) | 397 | #define bfin_write_DMA0_X_COUNT(val) bfin_write16(DMA0_X_COUNT, val) |
402 | #define bfin_read_DMA0_X_MODIFY() bfin_read16(DMA0_X_MODIFY) | 398 | #define bfin_read_DMA0_X_MODIFY() bfin_read16(DMA0_X_MODIFY) |
403 | #define bfin_write_DMA0_X_MODIFY(val) bfin_write16(DMA0_X_MODIFY) | 399 | #define bfin_write_DMA0_X_MODIFY(val) bfin_write16(DMA0_X_MODIFY, val) |
404 | #define bfin_read_DMA0_Y_COUNT() bfin_read16(DMA0_Y_COUNT) | 400 | #define bfin_read_DMA0_Y_COUNT() bfin_read16(DMA0_Y_COUNT) |
405 | #define bfin_write_DMA0_Y_COUNT(val) bfin_write16(DMA0_Y_COUNT, val) | 401 | #define bfin_write_DMA0_Y_COUNT(val) bfin_write16(DMA0_Y_COUNT, val) |
406 | #define bfin_read_DMA0_Y_MODIFY() bfin_read16(DMA0_Y_MODIFY) | 402 | #define bfin_read_DMA0_Y_MODIFY() bfin_read16(DMA0_Y_MODIFY) |
407 | #define bfin_write_DMA0_Y_MODIFY(val) bfin_write16(DMA0_Y_MODIFY) | 403 | #define bfin_write_DMA0_Y_MODIFY(val) bfin_write16(DMA0_Y_MODIFY, val) |
408 | #define bfin_read_DMA0_CURR_DESC_PTR() bfin_read32(DMA0_CURR_DESC_PTR) | 404 | #define bfin_read_DMA0_CURR_DESC_PTR() bfin_read32(DMA0_CURR_DESC_PTR) |
409 | #define bfin_write_DMA0_CURR_DESC_PTR(val) bfin_write32(DMA0_CURR_DESC_PTR) | 405 | #define bfin_write_DMA0_CURR_DESC_PTR(val) bfin_write32(DMA0_CURR_DESC_PTR, val) |
410 | #define bfin_read_DMA0_CURR_ADDR() bfin_read32(DMA0_CURR_ADDR) | 406 | #define bfin_read_DMA0_CURR_ADDR() bfin_read32(DMA0_CURR_ADDR) |
411 | #define bfin_write_DMA0_CURR_ADDR(val) bfin_write32(DMA0_CURR_ADDR) | 407 | #define bfin_write_DMA0_CURR_ADDR(val) bfin_write32(DMA0_CURR_ADDR, val) |
412 | #define bfin_read_DMA0_IRQ_STATUS() bfin_read16(DMA0_IRQ_STATUS) | 408 | #define bfin_read_DMA0_IRQ_STATUS() bfin_read16(DMA0_IRQ_STATUS) |
413 | #define bfin_write_DMA0_IRQ_STATUS(val) bfin_write16(DMA0_IRQ_STATUS, val) | 409 | #define bfin_write_DMA0_IRQ_STATUS(val) bfin_write16(DMA0_IRQ_STATUS, val) |
414 | #define bfin_read_DMA0_PERIPHERAL_MAP() bfin_read16(DMA0_PERIPHERAL_MAP) | 410 | #define bfin_read_DMA0_PERIPHERAL_MAP() bfin_read16(DMA0_PERIPHERAL_MAP) |
@@ -421,23 +417,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
421 | /* DMA Channel 1 Registers */ | 417 | /* DMA Channel 1 Registers */ |
422 | 418 | ||
423 | #define bfin_read_DMA1_NEXT_DESC_PTR() bfin_read32(DMA1_NEXT_DESC_PTR) | 419 | #define bfin_read_DMA1_NEXT_DESC_PTR() bfin_read32(DMA1_NEXT_DESC_PTR) |
424 | #define bfin_write_DMA1_NEXT_DESC_PTR(val) bfin_write32(DMA1_NEXT_DESC_PTR) | 420 | #define bfin_write_DMA1_NEXT_DESC_PTR(val) bfin_write32(DMA1_NEXT_DESC_PTR, val) |
425 | #define bfin_read_DMA1_START_ADDR() bfin_read32(DMA1_START_ADDR) | 421 | #define bfin_read_DMA1_START_ADDR() bfin_read32(DMA1_START_ADDR) |
426 | #define bfin_write_DMA1_START_ADDR(val) bfin_write32(DMA1_START_ADDR) | 422 | #define bfin_write_DMA1_START_ADDR(val) bfin_write32(DMA1_START_ADDR, val) |
427 | #define bfin_read_DMA1_CONFIG() bfin_read16(DMA1_CONFIG) | 423 | #define bfin_read_DMA1_CONFIG() bfin_read16(DMA1_CONFIG) |
428 | #define bfin_write_DMA1_CONFIG(val) bfin_write16(DMA1_CONFIG, val) | 424 | #define bfin_write_DMA1_CONFIG(val) bfin_write16(DMA1_CONFIG, val) |
429 | #define bfin_read_DMA1_X_COUNT() bfin_read16(DMA1_X_COUNT) | 425 | #define bfin_read_DMA1_X_COUNT() bfin_read16(DMA1_X_COUNT) |
430 | #define bfin_write_DMA1_X_COUNT(val) bfin_write16(DMA1_X_COUNT, val) | 426 | #define bfin_write_DMA1_X_COUNT(val) bfin_write16(DMA1_X_COUNT, val) |
431 | #define bfin_read_DMA1_X_MODIFY() bfin_read16(DMA1_X_MODIFY) | 427 | #define bfin_read_DMA1_X_MODIFY() bfin_read16(DMA1_X_MODIFY) |
432 | #define bfin_write_DMA1_X_MODIFY(val) bfin_write16(DMA1_X_MODIFY) | 428 | #define bfin_write_DMA1_X_MODIFY(val) bfin_write16(DMA1_X_MODIFY, val) |
433 | #define bfin_read_DMA1_Y_COUNT() bfin_read16(DMA1_Y_COUNT) | 429 | #define bfin_read_DMA1_Y_COUNT() bfin_read16(DMA1_Y_COUNT) |
434 | #define bfin_write_DMA1_Y_COUNT(val) bfin_write16(DMA1_Y_COUNT, val) | 430 | #define bfin_write_DMA1_Y_COUNT(val) bfin_write16(DMA1_Y_COUNT, val) |
435 | #define bfin_read_DMA1_Y_MODIFY() bfin_read16(DMA1_Y_MODIFY) | 431 | #define bfin_read_DMA1_Y_MODIFY() bfin_read16(DMA1_Y_MODIFY) |
436 | #define bfin_write_DMA1_Y_MODIFY(val) bfin_write16(DMA1_Y_MODIFY) | 432 | #define bfin_write_DMA1_Y_MODIFY(val) bfin_write16(DMA1_Y_MODIFY, val) |
437 | #define bfin_read_DMA1_CURR_DESC_PTR() bfin_read32(DMA1_CURR_DESC_PTR) | 433 | #define bfin_read_DMA1_CURR_DESC_PTR() bfin_read32(DMA1_CURR_DESC_PTR) |
438 | #define bfin_write_DMA1_CURR_DESC_PTR(val) bfin_write32(DMA1_CURR_DESC_PTR) | 434 | #define bfin_write_DMA1_CURR_DESC_PTR(val) bfin_write32(DMA1_CURR_DESC_PTR, val) |
439 | #define bfin_read_DMA1_CURR_ADDR() bfin_read32(DMA1_CURR_ADDR) | 435 | #define bfin_read_DMA1_CURR_ADDR() bfin_read32(DMA1_CURR_ADDR) |
440 | #define bfin_write_DMA1_CURR_ADDR(val) bfin_write32(DMA1_CURR_ADDR) | 436 | #define bfin_write_DMA1_CURR_ADDR(val) bfin_write32(DMA1_CURR_ADDR, val) |
441 | #define bfin_read_DMA1_IRQ_STATUS() bfin_read16(DMA1_IRQ_STATUS) | 437 | #define bfin_read_DMA1_IRQ_STATUS() bfin_read16(DMA1_IRQ_STATUS) |
442 | #define bfin_write_DMA1_IRQ_STATUS(val) bfin_write16(DMA1_IRQ_STATUS, val) | 438 | #define bfin_write_DMA1_IRQ_STATUS(val) bfin_write16(DMA1_IRQ_STATUS, val) |
443 | #define bfin_read_DMA1_PERIPHERAL_MAP() bfin_read16(DMA1_PERIPHERAL_MAP) | 439 | #define bfin_read_DMA1_PERIPHERAL_MAP() bfin_read16(DMA1_PERIPHERAL_MAP) |
@@ -450,23 +446,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
450 | /* DMA Channel 2 Registers */ | 446 | /* DMA Channel 2 Registers */ |
451 | 447 | ||
452 | #define bfin_read_DMA2_NEXT_DESC_PTR() bfin_read32(DMA2_NEXT_DESC_PTR) | 448 | #define bfin_read_DMA2_NEXT_DESC_PTR() bfin_read32(DMA2_NEXT_DESC_PTR) |
453 | #define bfin_write_DMA2_NEXT_DESC_PTR(val) bfin_write32(DMA2_NEXT_DESC_PTR) | 449 | #define bfin_write_DMA2_NEXT_DESC_PTR(val) bfin_write32(DMA2_NEXT_DESC_PTR, val) |
454 | #define bfin_read_DMA2_START_ADDR() bfin_read32(DMA2_START_ADDR) | 450 | #define bfin_read_DMA2_START_ADDR() bfin_read32(DMA2_START_ADDR) |
455 | #define bfin_write_DMA2_START_ADDR(val) bfin_write32(DMA2_START_ADDR) | 451 | #define bfin_write_DMA2_START_ADDR(val) bfin_write32(DMA2_START_ADDR, val) |
456 | #define bfin_read_DMA2_CONFIG() bfin_read16(DMA2_CONFIG) | 452 | #define bfin_read_DMA2_CONFIG() bfin_read16(DMA2_CONFIG) |
457 | #define bfin_write_DMA2_CONFIG(val) bfin_write16(DMA2_CONFIG, val) | 453 | #define bfin_write_DMA2_CONFIG(val) bfin_write16(DMA2_CONFIG, val) |
458 | #define bfin_read_DMA2_X_COUNT() bfin_read16(DMA2_X_COUNT) | 454 | #define bfin_read_DMA2_X_COUNT() bfin_read16(DMA2_X_COUNT) |
459 | #define bfin_write_DMA2_X_COUNT(val) bfin_write16(DMA2_X_COUNT, val) | 455 | #define bfin_write_DMA2_X_COUNT(val) bfin_write16(DMA2_X_COUNT, val) |
460 | #define bfin_read_DMA2_X_MODIFY() bfin_read16(DMA2_X_MODIFY) | 456 | #define bfin_read_DMA2_X_MODIFY() bfin_read16(DMA2_X_MODIFY) |
461 | #define bfin_write_DMA2_X_MODIFY(val) bfin_write16(DMA2_X_MODIFY) | 457 | #define bfin_write_DMA2_X_MODIFY(val) bfin_write16(DMA2_X_MODIFY, val) |
462 | #define bfin_read_DMA2_Y_COUNT() bfin_read16(DMA2_Y_COUNT) | 458 | #define bfin_read_DMA2_Y_COUNT() bfin_read16(DMA2_Y_COUNT) |
463 | #define bfin_write_DMA2_Y_COUNT(val) bfin_write16(DMA2_Y_COUNT, val) | 459 | #define bfin_write_DMA2_Y_COUNT(val) bfin_write16(DMA2_Y_COUNT, val) |
464 | #define bfin_read_DMA2_Y_MODIFY() bfin_read16(DMA2_Y_MODIFY) | 460 | #define bfin_read_DMA2_Y_MODIFY() bfin_read16(DMA2_Y_MODIFY) |
465 | #define bfin_write_DMA2_Y_MODIFY(val) bfin_write16(DMA2_Y_MODIFY) | 461 | #define bfin_write_DMA2_Y_MODIFY(val) bfin_write16(DMA2_Y_MODIFY, val) |
466 | #define bfin_read_DMA2_CURR_DESC_PTR() bfin_read32(DMA2_CURR_DESC_PTR) | 462 | #define bfin_read_DMA2_CURR_DESC_PTR() bfin_read32(DMA2_CURR_DESC_PTR) |
467 | #define bfin_write_DMA2_CURR_DESC_PTR(val) bfin_write32(DMA2_CURR_DESC_PTR) | 463 | #define bfin_write_DMA2_CURR_DESC_PTR(val) bfin_write32(DMA2_CURR_DESC_PTR, val) |
468 | #define bfin_read_DMA2_CURR_ADDR() bfin_read32(DMA2_CURR_ADDR) | 464 | #define bfin_read_DMA2_CURR_ADDR() bfin_read32(DMA2_CURR_ADDR) |
469 | #define bfin_write_DMA2_CURR_ADDR(val) bfin_write32(DMA2_CURR_ADDR) | 465 | #define bfin_write_DMA2_CURR_ADDR(val) bfin_write32(DMA2_CURR_ADDR, val) |
470 | #define bfin_read_DMA2_IRQ_STATUS() bfin_read16(DMA2_IRQ_STATUS) | 466 | #define bfin_read_DMA2_IRQ_STATUS() bfin_read16(DMA2_IRQ_STATUS) |
471 | #define bfin_write_DMA2_IRQ_STATUS(val) bfin_write16(DMA2_IRQ_STATUS, val) | 467 | #define bfin_write_DMA2_IRQ_STATUS(val) bfin_write16(DMA2_IRQ_STATUS, val) |
472 | #define bfin_read_DMA2_PERIPHERAL_MAP() bfin_read16(DMA2_PERIPHERAL_MAP) | 468 | #define bfin_read_DMA2_PERIPHERAL_MAP() bfin_read16(DMA2_PERIPHERAL_MAP) |
@@ -479,23 +475,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
479 | /* DMA Channel 3 Registers */ | 475 | /* DMA Channel 3 Registers */ |
480 | 476 | ||
481 | #define bfin_read_DMA3_NEXT_DESC_PTR() bfin_read32(DMA3_NEXT_DESC_PTR) | 477 | #define bfin_read_DMA3_NEXT_DESC_PTR() bfin_read32(DMA3_NEXT_DESC_PTR) |
482 | #define bfin_write_DMA3_NEXT_DESC_PTR(val) bfin_write32(DMA3_NEXT_DESC_PTR) | 478 | #define bfin_write_DMA3_NEXT_DESC_PTR(val) bfin_write32(DMA3_NEXT_DESC_PTR, val) |
483 | #define bfin_read_DMA3_START_ADDR() bfin_read32(DMA3_START_ADDR) | 479 | #define bfin_read_DMA3_START_ADDR() bfin_read32(DMA3_START_ADDR) |
484 | #define bfin_write_DMA3_START_ADDR(val) bfin_write32(DMA3_START_ADDR) | 480 | #define bfin_write_DMA3_START_ADDR(val) bfin_write32(DMA3_START_ADDR, val) |
485 | #define bfin_read_DMA3_CONFIG() bfin_read16(DMA3_CONFIG) | 481 | #define bfin_read_DMA3_CONFIG() bfin_read16(DMA3_CONFIG) |
486 | #define bfin_write_DMA3_CONFIG(val) bfin_write16(DMA3_CONFIG, val) | 482 | #define bfin_write_DMA3_CONFIG(val) bfin_write16(DMA3_CONFIG, val) |
487 | #define bfin_read_DMA3_X_COUNT() bfin_read16(DMA3_X_COUNT) | 483 | #define bfin_read_DMA3_X_COUNT() bfin_read16(DMA3_X_COUNT) |
488 | #define bfin_write_DMA3_X_COUNT(val) bfin_write16(DMA3_X_COUNT, val) | 484 | #define bfin_write_DMA3_X_COUNT(val) bfin_write16(DMA3_X_COUNT, val) |
489 | #define bfin_read_DMA3_X_MODIFY() bfin_read16(DMA3_X_MODIFY) | 485 | #define bfin_read_DMA3_X_MODIFY() bfin_read16(DMA3_X_MODIFY) |
490 | #define bfin_write_DMA3_X_MODIFY(val) bfin_write16(DMA3_X_MODIFY) | 486 | #define bfin_write_DMA3_X_MODIFY(val) bfin_write16(DMA3_X_MODIFY, val) |
491 | #define bfin_read_DMA3_Y_COUNT() bfin_read16(DMA3_Y_COUNT) | 487 | #define bfin_read_DMA3_Y_COUNT() bfin_read16(DMA3_Y_COUNT) |
492 | #define bfin_write_DMA3_Y_COUNT(val) bfin_write16(DMA3_Y_COUNT, val) | 488 | #define bfin_write_DMA3_Y_COUNT(val) bfin_write16(DMA3_Y_COUNT, val) |
493 | #define bfin_read_DMA3_Y_MODIFY() bfin_read16(DMA3_Y_MODIFY) | 489 | #define bfin_read_DMA3_Y_MODIFY() bfin_read16(DMA3_Y_MODIFY) |
494 | #define bfin_write_DMA3_Y_MODIFY(val) bfin_write16(DMA3_Y_MODIFY) | 490 | #define bfin_write_DMA3_Y_MODIFY(val) bfin_write16(DMA3_Y_MODIFY, val) |
495 | #define bfin_read_DMA3_CURR_DESC_PTR() bfin_read32(DMA3_CURR_DESC_PTR) | 491 | #define bfin_read_DMA3_CURR_DESC_PTR() bfin_read32(DMA3_CURR_DESC_PTR) |
496 | #define bfin_write_DMA3_CURR_DESC_PTR(val) bfin_write32(DMA3_CURR_DESC_PTR) | 492 | #define bfin_write_DMA3_CURR_DESC_PTR(val) bfin_write32(DMA3_CURR_DESC_PTR, val) |
497 | #define bfin_read_DMA3_CURR_ADDR() bfin_read32(DMA3_CURR_ADDR) | 493 | #define bfin_read_DMA3_CURR_ADDR() bfin_read32(DMA3_CURR_ADDR) |
498 | #define bfin_write_DMA3_CURR_ADDR(val) bfin_write32(DMA3_CURR_ADDR) | 494 | #define bfin_write_DMA3_CURR_ADDR(val) bfin_write32(DMA3_CURR_ADDR, val) |
499 | #define bfin_read_DMA3_IRQ_STATUS() bfin_read16(DMA3_IRQ_STATUS) | 495 | #define bfin_read_DMA3_IRQ_STATUS() bfin_read16(DMA3_IRQ_STATUS) |
500 | #define bfin_write_DMA3_IRQ_STATUS(val) bfin_write16(DMA3_IRQ_STATUS, val) | 496 | #define bfin_write_DMA3_IRQ_STATUS(val) bfin_write16(DMA3_IRQ_STATUS, val) |
501 | #define bfin_read_DMA3_PERIPHERAL_MAP() bfin_read16(DMA3_PERIPHERAL_MAP) | 497 | #define bfin_read_DMA3_PERIPHERAL_MAP() bfin_read16(DMA3_PERIPHERAL_MAP) |
@@ -508,23 +504,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
508 | /* DMA Channel 4 Registers */ | 504 | /* DMA Channel 4 Registers */ |
509 | 505 | ||
510 | #define bfin_read_DMA4_NEXT_DESC_PTR() bfin_read32(DMA4_NEXT_DESC_PTR) | 506 | #define bfin_read_DMA4_NEXT_DESC_PTR() bfin_read32(DMA4_NEXT_DESC_PTR) |
511 | #define bfin_write_DMA4_NEXT_DESC_PTR(val) bfin_write32(DMA4_NEXT_DESC_PTR) | 507 | #define bfin_write_DMA4_NEXT_DESC_PTR(val) bfin_write32(DMA4_NEXT_DESC_PTR, val) |
512 | #define bfin_read_DMA4_START_ADDR() bfin_read32(DMA4_START_ADDR) | 508 | #define bfin_read_DMA4_START_ADDR() bfin_read32(DMA4_START_ADDR) |
513 | #define bfin_write_DMA4_START_ADDR(val) bfin_write32(DMA4_START_ADDR) | 509 | #define bfin_write_DMA4_START_ADDR(val) bfin_write32(DMA4_START_ADDR, val) |
514 | #define bfin_read_DMA4_CONFIG() bfin_read16(DMA4_CONFIG) | 510 | #define bfin_read_DMA4_CONFIG() bfin_read16(DMA4_CONFIG) |
515 | #define bfin_write_DMA4_CONFIG(val) bfin_write16(DMA4_CONFIG, val) | 511 | #define bfin_write_DMA4_CONFIG(val) bfin_write16(DMA4_CONFIG, val) |
516 | #define bfin_read_DMA4_X_COUNT() bfin_read16(DMA4_X_COUNT) | 512 | #define bfin_read_DMA4_X_COUNT() bfin_read16(DMA4_X_COUNT) |
517 | #define bfin_write_DMA4_X_COUNT(val) bfin_write16(DMA4_X_COUNT, val) | 513 | #define bfin_write_DMA4_X_COUNT(val) bfin_write16(DMA4_X_COUNT, val) |
518 | #define bfin_read_DMA4_X_MODIFY() bfin_read16(DMA4_X_MODIFY) | 514 | #define bfin_read_DMA4_X_MODIFY() bfin_read16(DMA4_X_MODIFY) |
519 | #define bfin_write_DMA4_X_MODIFY(val) bfin_write16(DMA4_X_MODIFY) | 515 | #define bfin_write_DMA4_X_MODIFY(val) bfin_write16(DMA4_X_MODIFY, val) |
520 | #define bfin_read_DMA4_Y_COUNT() bfin_read16(DMA4_Y_COUNT) | 516 | #define bfin_read_DMA4_Y_COUNT() bfin_read16(DMA4_Y_COUNT) |
521 | #define bfin_write_DMA4_Y_COUNT(val) bfin_write16(DMA4_Y_COUNT, val) | 517 | #define bfin_write_DMA4_Y_COUNT(val) bfin_write16(DMA4_Y_COUNT, val) |
522 | #define bfin_read_DMA4_Y_MODIFY() bfin_read16(DMA4_Y_MODIFY) | 518 | #define bfin_read_DMA4_Y_MODIFY() bfin_read16(DMA4_Y_MODIFY) |
523 | #define bfin_write_DMA4_Y_MODIFY(val) bfin_write16(DMA4_Y_MODIFY) | 519 | #define bfin_write_DMA4_Y_MODIFY(val) bfin_write16(DMA4_Y_MODIFY, val) |
524 | #define bfin_read_DMA4_CURR_DESC_PTR() bfin_read32(DMA4_CURR_DESC_PTR) | 520 | #define bfin_read_DMA4_CURR_DESC_PTR() bfin_read32(DMA4_CURR_DESC_PTR) |
525 | #define bfin_write_DMA4_CURR_DESC_PTR(val) bfin_write32(DMA4_CURR_DESC_PTR) | 521 | #define bfin_write_DMA4_CURR_DESC_PTR(val) bfin_write32(DMA4_CURR_DESC_PTR, val) |
526 | #define bfin_read_DMA4_CURR_ADDR() bfin_read32(DMA4_CURR_ADDR) | 522 | #define bfin_read_DMA4_CURR_ADDR() bfin_read32(DMA4_CURR_ADDR) |
527 | #define bfin_write_DMA4_CURR_ADDR(val) bfin_write32(DMA4_CURR_ADDR) | 523 | #define bfin_write_DMA4_CURR_ADDR(val) bfin_write32(DMA4_CURR_ADDR, val) |
528 | #define bfin_read_DMA4_IRQ_STATUS() bfin_read16(DMA4_IRQ_STATUS) | 524 | #define bfin_read_DMA4_IRQ_STATUS() bfin_read16(DMA4_IRQ_STATUS) |
529 | #define bfin_write_DMA4_IRQ_STATUS(val) bfin_write16(DMA4_IRQ_STATUS, val) | 525 | #define bfin_write_DMA4_IRQ_STATUS(val) bfin_write16(DMA4_IRQ_STATUS, val) |
530 | #define bfin_read_DMA4_PERIPHERAL_MAP() bfin_read16(DMA4_PERIPHERAL_MAP) | 526 | #define bfin_read_DMA4_PERIPHERAL_MAP() bfin_read16(DMA4_PERIPHERAL_MAP) |
@@ -537,23 +533,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
537 | /* DMA Channel 5 Registers */ | 533 | /* DMA Channel 5 Registers */ |
538 | 534 | ||
539 | #define bfin_read_DMA5_NEXT_DESC_PTR() bfin_read32(DMA5_NEXT_DESC_PTR) | 535 | #define bfin_read_DMA5_NEXT_DESC_PTR() bfin_read32(DMA5_NEXT_DESC_PTR) |
540 | #define bfin_write_DMA5_NEXT_DESC_PTR(val) bfin_write32(DMA5_NEXT_DESC_PTR) | 536 | #define bfin_write_DMA5_NEXT_DESC_PTR(val) bfin_write32(DMA5_NEXT_DESC_PTR, val) |
541 | #define bfin_read_DMA5_START_ADDR() bfin_read32(DMA5_START_ADDR) | 537 | #define bfin_read_DMA5_START_ADDR() bfin_read32(DMA5_START_ADDR) |
542 | #define bfin_write_DMA5_START_ADDR(val) bfin_write32(DMA5_START_ADDR) | 538 | #define bfin_write_DMA5_START_ADDR(val) bfin_write32(DMA5_START_ADDR, val) |
543 | #define bfin_read_DMA5_CONFIG() bfin_read16(DMA5_CONFIG) | 539 | #define bfin_read_DMA5_CONFIG() bfin_read16(DMA5_CONFIG) |
544 | #define bfin_write_DMA5_CONFIG(val) bfin_write16(DMA5_CONFIG, val) | 540 | #define bfin_write_DMA5_CONFIG(val) bfin_write16(DMA5_CONFIG, val) |
545 | #define bfin_read_DMA5_X_COUNT() bfin_read16(DMA5_X_COUNT) | 541 | #define bfin_read_DMA5_X_COUNT() bfin_read16(DMA5_X_COUNT) |
546 | #define bfin_write_DMA5_X_COUNT(val) bfin_write16(DMA5_X_COUNT, val) | 542 | #define bfin_write_DMA5_X_COUNT(val) bfin_write16(DMA5_X_COUNT, val) |
547 | #define bfin_read_DMA5_X_MODIFY() bfin_read16(DMA5_X_MODIFY) | 543 | #define bfin_read_DMA5_X_MODIFY() bfin_read16(DMA5_X_MODIFY) |
548 | #define bfin_write_DMA5_X_MODIFY(val) bfin_write16(DMA5_X_MODIFY) | 544 | #define bfin_write_DMA5_X_MODIFY(val) bfin_write16(DMA5_X_MODIFY, val) |
549 | #define bfin_read_DMA5_Y_COUNT() bfin_read16(DMA5_Y_COUNT) | 545 | #define bfin_read_DMA5_Y_COUNT() bfin_read16(DMA5_Y_COUNT) |
550 | #define bfin_write_DMA5_Y_COUNT(val) bfin_write16(DMA5_Y_COUNT, val) | 546 | #define bfin_write_DMA5_Y_COUNT(val) bfin_write16(DMA5_Y_COUNT, val) |
551 | #define bfin_read_DMA5_Y_MODIFY() bfin_read16(DMA5_Y_MODIFY) | 547 | #define bfin_read_DMA5_Y_MODIFY() bfin_read16(DMA5_Y_MODIFY) |
552 | #define bfin_write_DMA5_Y_MODIFY(val) bfin_write16(DMA5_Y_MODIFY) | 548 | #define bfin_write_DMA5_Y_MODIFY(val) bfin_write16(DMA5_Y_MODIFY, val) |
553 | #define bfin_read_DMA5_CURR_DESC_PTR() bfin_read32(DMA5_CURR_DESC_PTR) | 549 | #define bfin_read_DMA5_CURR_DESC_PTR() bfin_read32(DMA5_CURR_DESC_PTR) |
554 | #define bfin_write_DMA5_CURR_DESC_PTR(val) bfin_write32(DMA5_CURR_DESC_PTR) | 550 | #define bfin_write_DMA5_CURR_DESC_PTR(val) bfin_write32(DMA5_CURR_DESC_PTR, val) |
555 | #define bfin_read_DMA5_CURR_ADDR() bfin_read32(DMA5_CURR_ADDR) | 551 | #define bfin_read_DMA5_CURR_ADDR() bfin_read32(DMA5_CURR_ADDR) |
556 | #define bfin_write_DMA5_CURR_ADDR(val) bfin_write32(DMA5_CURR_ADDR) | 552 | #define bfin_write_DMA5_CURR_ADDR(val) bfin_write32(DMA5_CURR_ADDR, val) |
557 | #define bfin_read_DMA5_IRQ_STATUS() bfin_read16(DMA5_IRQ_STATUS) | 553 | #define bfin_read_DMA5_IRQ_STATUS() bfin_read16(DMA5_IRQ_STATUS) |
558 | #define bfin_write_DMA5_IRQ_STATUS(val) bfin_write16(DMA5_IRQ_STATUS, val) | 554 | #define bfin_write_DMA5_IRQ_STATUS(val) bfin_write16(DMA5_IRQ_STATUS, val) |
559 | #define bfin_read_DMA5_PERIPHERAL_MAP() bfin_read16(DMA5_PERIPHERAL_MAP) | 555 | #define bfin_read_DMA5_PERIPHERAL_MAP() bfin_read16(DMA5_PERIPHERAL_MAP) |
@@ -566,23 +562,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
566 | /* DMA Channel 6 Registers */ | 562 | /* DMA Channel 6 Registers */ |
567 | 563 | ||
568 | #define bfin_read_DMA6_NEXT_DESC_PTR() bfin_read32(DMA6_NEXT_DESC_PTR) | 564 | #define bfin_read_DMA6_NEXT_DESC_PTR() bfin_read32(DMA6_NEXT_DESC_PTR) |
569 | #define bfin_write_DMA6_NEXT_DESC_PTR(val) bfin_write32(DMA6_NEXT_DESC_PTR) | 565 | #define bfin_write_DMA6_NEXT_DESC_PTR(val) bfin_write32(DMA6_NEXT_DESC_PTR, val) |
570 | #define bfin_read_DMA6_START_ADDR() bfin_read32(DMA6_START_ADDR) | 566 | #define bfin_read_DMA6_START_ADDR() bfin_read32(DMA6_START_ADDR) |
571 | #define bfin_write_DMA6_START_ADDR(val) bfin_write32(DMA6_START_ADDR) | 567 | #define bfin_write_DMA6_START_ADDR(val) bfin_write32(DMA6_START_ADDR, val) |
572 | #define bfin_read_DMA6_CONFIG() bfin_read16(DMA6_CONFIG) | 568 | #define bfin_read_DMA6_CONFIG() bfin_read16(DMA6_CONFIG) |
573 | #define bfin_write_DMA6_CONFIG(val) bfin_write16(DMA6_CONFIG, val) | 569 | #define bfin_write_DMA6_CONFIG(val) bfin_write16(DMA6_CONFIG, val) |
574 | #define bfin_read_DMA6_X_COUNT() bfin_read16(DMA6_X_COUNT) | 570 | #define bfin_read_DMA6_X_COUNT() bfin_read16(DMA6_X_COUNT) |
575 | #define bfin_write_DMA6_X_COUNT(val) bfin_write16(DMA6_X_COUNT, val) | 571 | #define bfin_write_DMA6_X_COUNT(val) bfin_write16(DMA6_X_COUNT, val) |
576 | #define bfin_read_DMA6_X_MODIFY() bfin_read16(DMA6_X_MODIFY) | 572 | #define bfin_read_DMA6_X_MODIFY() bfin_read16(DMA6_X_MODIFY) |
577 | #define bfin_write_DMA6_X_MODIFY(val) bfin_write16(DMA6_X_MODIFY) | 573 | #define bfin_write_DMA6_X_MODIFY(val) bfin_write16(DMA6_X_MODIFY, val) |
578 | #define bfin_read_DMA6_Y_COUNT() bfin_read16(DMA6_Y_COUNT) | 574 | #define bfin_read_DMA6_Y_COUNT() bfin_read16(DMA6_Y_COUNT) |
579 | #define bfin_write_DMA6_Y_COUNT(val) bfin_write16(DMA6_Y_COUNT, val) | 575 | #define bfin_write_DMA6_Y_COUNT(val) bfin_write16(DMA6_Y_COUNT, val) |
580 | #define bfin_read_DMA6_Y_MODIFY() bfin_read16(DMA6_Y_MODIFY) | 576 | #define bfin_read_DMA6_Y_MODIFY() bfin_read16(DMA6_Y_MODIFY) |
581 | #define bfin_write_DMA6_Y_MODIFY(val) bfin_write16(DMA6_Y_MODIFY) | 577 | #define bfin_write_DMA6_Y_MODIFY(val) bfin_write16(DMA6_Y_MODIFY, val) |
582 | #define bfin_read_DMA6_CURR_DESC_PTR() bfin_read32(DMA6_CURR_DESC_PTR) | 578 | #define bfin_read_DMA6_CURR_DESC_PTR() bfin_read32(DMA6_CURR_DESC_PTR) |
583 | #define bfin_write_DMA6_CURR_DESC_PTR(val) bfin_write32(DMA6_CURR_DESC_PTR) | 579 | #define bfin_write_DMA6_CURR_DESC_PTR(val) bfin_write32(DMA6_CURR_DESC_PTR, val) |
584 | #define bfin_read_DMA6_CURR_ADDR() bfin_read32(DMA6_CURR_ADDR) | 580 | #define bfin_read_DMA6_CURR_ADDR() bfin_read32(DMA6_CURR_ADDR) |
585 | #define bfin_write_DMA6_CURR_ADDR(val) bfin_write32(DMA6_CURR_ADDR) | 581 | #define bfin_write_DMA6_CURR_ADDR(val) bfin_write32(DMA6_CURR_ADDR, val) |
586 | #define bfin_read_DMA6_IRQ_STATUS() bfin_read16(DMA6_IRQ_STATUS) | 582 | #define bfin_read_DMA6_IRQ_STATUS() bfin_read16(DMA6_IRQ_STATUS) |
587 | #define bfin_write_DMA6_IRQ_STATUS(val) bfin_write16(DMA6_IRQ_STATUS, val) | 583 | #define bfin_write_DMA6_IRQ_STATUS(val) bfin_write16(DMA6_IRQ_STATUS, val) |
588 | #define bfin_read_DMA6_PERIPHERAL_MAP() bfin_read16(DMA6_PERIPHERAL_MAP) | 584 | #define bfin_read_DMA6_PERIPHERAL_MAP() bfin_read16(DMA6_PERIPHERAL_MAP) |
@@ -595,23 +591,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
595 | /* DMA Channel 7 Registers */ | 591 | /* DMA Channel 7 Registers */ |
596 | 592 | ||
597 | #define bfin_read_DMA7_NEXT_DESC_PTR() bfin_read32(DMA7_NEXT_DESC_PTR) | 593 | #define bfin_read_DMA7_NEXT_DESC_PTR() bfin_read32(DMA7_NEXT_DESC_PTR) |
598 | #define bfin_write_DMA7_NEXT_DESC_PTR(val) bfin_write32(DMA7_NEXT_DESC_PTR) | 594 | #define bfin_write_DMA7_NEXT_DESC_PTR(val) bfin_write32(DMA7_NEXT_DESC_PTR, val) |
599 | #define bfin_read_DMA7_START_ADDR() bfin_read32(DMA7_START_ADDR) | 595 | #define bfin_read_DMA7_START_ADDR() bfin_read32(DMA7_START_ADDR) |
600 | #define bfin_write_DMA7_START_ADDR(val) bfin_write32(DMA7_START_ADDR) | 596 | #define bfin_write_DMA7_START_ADDR(val) bfin_write32(DMA7_START_ADDR, val) |
601 | #define bfin_read_DMA7_CONFIG() bfin_read16(DMA7_CONFIG) | 597 | #define bfin_read_DMA7_CONFIG() bfin_read16(DMA7_CONFIG) |
602 | #define bfin_write_DMA7_CONFIG(val) bfin_write16(DMA7_CONFIG, val) | 598 | #define bfin_write_DMA7_CONFIG(val) bfin_write16(DMA7_CONFIG, val) |
603 | #define bfin_read_DMA7_X_COUNT() bfin_read16(DMA7_X_COUNT) | 599 | #define bfin_read_DMA7_X_COUNT() bfin_read16(DMA7_X_COUNT) |
604 | #define bfin_write_DMA7_X_COUNT(val) bfin_write16(DMA7_X_COUNT, val) | 600 | #define bfin_write_DMA7_X_COUNT(val) bfin_write16(DMA7_X_COUNT, val) |
605 | #define bfin_read_DMA7_X_MODIFY() bfin_read16(DMA7_X_MODIFY) | 601 | #define bfin_read_DMA7_X_MODIFY() bfin_read16(DMA7_X_MODIFY) |
606 | #define bfin_write_DMA7_X_MODIFY(val) bfin_write16(DMA7_X_MODIFY) | 602 | #define bfin_write_DMA7_X_MODIFY(val) bfin_write16(DMA7_X_MODIFY, val) |
607 | #define bfin_read_DMA7_Y_COUNT() bfin_read16(DMA7_Y_COUNT) | 603 | #define bfin_read_DMA7_Y_COUNT() bfin_read16(DMA7_Y_COUNT) |
608 | #define bfin_write_DMA7_Y_COUNT(val) bfin_write16(DMA7_Y_COUNT, val) | 604 | #define bfin_write_DMA7_Y_COUNT(val) bfin_write16(DMA7_Y_COUNT, val) |
609 | #define bfin_read_DMA7_Y_MODIFY() bfin_read16(DMA7_Y_MODIFY) | 605 | #define bfin_read_DMA7_Y_MODIFY() bfin_read16(DMA7_Y_MODIFY) |
610 | #define bfin_write_DMA7_Y_MODIFY(val) bfin_write16(DMA7_Y_MODIFY) | 606 | #define bfin_write_DMA7_Y_MODIFY(val) bfin_write16(DMA7_Y_MODIFY, val) |
611 | #define bfin_read_DMA7_CURR_DESC_PTR() bfin_read32(DMA7_CURR_DESC_PTR) | 607 | #define bfin_read_DMA7_CURR_DESC_PTR() bfin_read32(DMA7_CURR_DESC_PTR) |
612 | #define bfin_write_DMA7_CURR_DESC_PTR(val) bfin_write32(DMA7_CURR_DESC_PTR) | 608 | #define bfin_write_DMA7_CURR_DESC_PTR(val) bfin_write32(DMA7_CURR_DESC_PTR, val) |
613 | #define bfin_read_DMA7_CURR_ADDR() bfin_read32(DMA7_CURR_ADDR) | 609 | #define bfin_read_DMA7_CURR_ADDR() bfin_read32(DMA7_CURR_ADDR) |
614 | #define bfin_write_DMA7_CURR_ADDR(val) bfin_write32(DMA7_CURR_ADDR) | 610 | #define bfin_write_DMA7_CURR_ADDR(val) bfin_write32(DMA7_CURR_ADDR, val) |
615 | #define bfin_read_DMA7_IRQ_STATUS() bfin_read16(DMA7_IRQ_STATUS) | 611 | #define bfin_read_DMA7_IRQ_STATUS() bfin_read16(DMA7_IRQ_STATUS) |
616 | #define bfin_write_DMA7_IRQ_STATUS(val) bfin_write16(DMA7_IRQ_STATUS, val) | 612 | #define bfin_write_DMA7_IRQ_STATUS(val) bfin_write16(DMA7_IRQ_STATUS, val) |
617 | #define bfin_read_DMA7_PERIPHERAL_MAP() bfin_read16(DMA7_PERIPHERAL_MAP) | 613 | #define bfin_read_DMA7_PERIPHERAL_MAP() bfin_read16(DMA7_PERIPHERAL_MAP) |
@@ -624,23 +620,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
624 | /* DMA Channel 8 Registers */ | 620 | /* DMA Channel 8 Registers */ |
625 | 621 | ||
626 | #define bfin_read_DMA8_NEXT_DESC_PTR() bfin_read32(DMA8_NEXT_DESC_PTR) | 622 | #define bfin_read_DMA8_NEXT_DESC_PTR() bfin_read32(DMA8_NEXT_DESC_PTR) |
627 | #define bfin_write_DMA8_NEXT_DESC_PTR(val) bfin_write32(DMA8_NEXT_DESC_PTR) | 623 | #define bfin_write_DMA8_NEXT_DESC_PTR(val) bfin_write32(DMA8_NEXT_DESC_PTR, val) |
628 | #define bfin_read_DMA8_START_ADDR() bfin_read32(DMA8_START_ADDR) | 624 | #define bfin_read_DMA8_START_ADDR() bfin_read32(DMA8_START_ADDR) |
629 | #define bfin_write_DMA8_START_ADDR(val) bfin_write32(DMA8_START_ADDR) | 625 | #define bfin_write_DMA8_START_ADDR(val) bfin_write32(DMA8_START_ADDR, val) |
630 | #define bfin_read_DMA8_CONFIG() bfin_read16(DMA8_CONFIG) | 626 | #define bfin_read_DMA8_CONFIG() bfin_read16(DMA8_CONFIG) |
631 | #define bfin_write_DMA8_CONFIG(val) bfin_write16(DMA8_CONFIG, val) | 627 | #define bfin_write_DMA8_CONFIG(val) bfin_write16(DMA8_CONFIG, val) |
632 | #define bfin_read_DMA8_X_COUNT() bfin_read16(DMA8_X_COUNT) | 628 | #define bfin_read_DMA8_X_COUNT() bfin_read16(DMA8_X_COUNT) |
633 | #define bfin_write_DMA8_X_COUNT(val) bfin_write16(DMA8_X_COUNT, val) | 629 | #define bfin_write_DMA8_X_COUNT(val) bfin_write16(DMA8_X_COUNT, val) |
634 | #define bfin_read_DMA8_X_MODIFY() bfin_read16(DMA8_X_MODIFY) | 630 | #define bfin_read_DMA8_X_MODIFY() bfin_read16(DMA8_X_MODIFY) |
635 | #define bfin_write_DMA8_X_MODIFY(val) bfin_write16(DMA8_X_MODIFY) | 631 | #define bfin_write_DMA8_X_MODIFY(val) bfin_write16(DMA8_X_MODIFY, val) |
636 | #define bfin_read_DMA8_Y_COUNT() bfin_read16(DMA8_Y_COUNT) | 632 | #define bfin_read_DMA8_Y_COUNT() bfin_read16(DMA8_Y_COUNT) |
637 | #define bfin_write_DMA8_Y_COUNT(val) bfin_write16(DMA8_Y_COUNT, val) | 633 | #define bfin_write_DMA8_Y_COUNT(val) bfin_write16(DMA8_Y_COUNT, val) |
638 | #define bfin_read_DMA8_Y_MODIFY() bfin_read16(DMA8_Y_MODIFY) | 634 | #define bfin_read_DMA8_Y_MODIFY() bfin_read16(DMA8_Y_MODIFY) |
639 | #define bfin_write_DMA8_Y_MODIFY(val) bfin_write16(DMA8_Y_MODIFY) | 635 | #define bfin_write_DMA8_Y_MODIFY(val) bfin_write16(DMA8_Y_MODIFY, val) |
640 | #define bfin_read_DMA8_CURR_DESC_PTR() bfin_read32(DMA8_CURR_DESC_PTR) | 636 | #define bfin_read_DMA8_CURR_DESC_PTR() bfin_read32(DMA8_CURR_DESC_PTR) |
641 | #define bfin_write_DMA8_CURR_DESC_PTR(val) bfin_write32(DMA8_CURR_DESC_PTR) | 637 | #define bfin_write_DMA8_CURR_DESC_PTR(val) bfin_write32(DMA8_CURR_DESC_PTR, val) |
642 | #define bfin_read_DMA8_CURR_ADDR() bfin_read32(DMA8_CURR_ADDR) | 638 | #define bfin_read_DMA8_CURR_ADDR() bfin_read32(DMA8_CURR_ADDR) |
643 | #define bfin_write_DMA8_CURR_ADDR(val) bfin_write32(DMA8_CURR_ADDR) | 639 | #define bfin_write_DMA8_CURR_ADDR(val) bfin_write32(DMA8_CURR_ADDR, val) |
644 | #define bfin_read_DMA8_IRQ_STATUS() bfin_read16(DMA8_IRQ_STATUS) | 640 | #define bfin_read_DMA8_IRQ_STATUS() bfin_read16(DMA8_IRQ_STATUS) |
645 | #define bfin_write_DMA8_IRQ_STATUS(val) bfin_write16(DMA8_IRQ_STATUS, val) | 641 | #define bfin_write_DMA8_IRQ_STATUS(val) bfin_write16(DMA8_IRQ_STATUS, val) |
646 | #define bfin_read_DMA8_PERIPHERAL_MAP() bfin_read16(DMA8_PERIPHERAL_MAP) | 642 | #define bfin_read_DMA8_PERIPHERAL_MAP() bfin_read16(DMA8_PERIPHERAL_MAP) |
@@ -653,23 +649,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
653 | /* DMA Channel 9 Registers */ | 649 | /* DMA Channel 9 Registers */ |
654 | 650 | ||
655 | #define bfin_read_DMA9_NEXT_DESC_PTR() bfin_read32(DMA9_NEXT_DESC_PTR) | 651 | #define bfin_read_DMA9_NEXT_DESC_PTR() bfin_read32(DMA9_NEXT_DESC_PTR) |
656 | #define bfin_write_DMA9_NEXT_DESC_PTR(val) bfin_write32(DMA9_NEXT_DESC_PTR) | 652 | #define bfin_write_DMA9_NEXT_DESC_PTR(val) bfin_write32(DMA9_NEXT_DESC_PTR, val) |
657 | #define bfin_read_DMA9_START_ADDR() bfin_read32(DMA9_START_ADDR) | 653 | #define bfin_read_DMA9_START_ADDR() bfin_read32(DMA9_START_ADDR) |
658 | #define bfin_write_DMA9_START_ADDR(val) bfin_write32(DMA9_START_ADDR) | 654 | #define bfin_write_DMA9_START_ADDR(val) bfin_write32(DMA9_START_ADDR, val) |
659 | #define bfin_read_DMA9_CONFIG() bfin_read16(DMA9_CONFIG) | 655 | #define bfin_read_DMA9_CONFIG() bfin_read16(DMA9_CONFIG) |
660 | #define bfin_write_DMA9_CONFIG(val) bfin_write16(DMA9_CONFIG, val) | 656 | #define bfin_write_DMA9_CONFIG(val) bfin_write16(DMA9_CONFIG, val) |
661 | #define bfin_read_DMA9_X_COUNT() bfin_read16(DMA9_X_COUNT) | 657 | #define bfin_read_DMA9_X_COUNT() bfin_read16(DMA9_X_COUNT) |
662 | #define bfin_write_DMA9_X_COUNT(val) bfin_write16(DMA9_X_COUNT, val) | 658 | #define bfin_write_DMA9_X_COUNT(val) bfin_write16(DMA9_X_COUNT, val) |
663 | #define bfin_read_DMA9_X_MODIFY() bfin_read16(DMA9_X_MODIFY) | 659 | #define bfin_read_DMA9_X_MODIFY() bfin_read16(DMA9_X_MODIFY) |
664 | #define bfin_write_DMA9_X_MODIFY(val) bfin_write16(DMA9_X_MODIFY) | 660 | #define bfin_write_DMA9_X_MODIFY(val) bfin_write16(DMA9_X_MODIFY, val) |
665 | #define bfin_read_DMA9_Y_COUNT() bfin_read16(DMA9_Y_COUNT) | 661 | #define bfin_read_DMA9_Y_COUNT() bfin_read16(DMA9_Y_COUNT) |
666 | #define bfin_write_DMA9_Y_COUNT(val) bfin_write16(DMA9_Y_COUNT, val) | 662 | #define bfin_write_DMA9_Y_COUNT(val) bfin_write16(DMA9_Y_COUNT, val) |
667 | #define bfin_read_DMA9_Y_MODIFY() bfin_read16(DMA9_Y_MODIFY) | 663 | #define bfin_read_DMA9_Y_MODIFY() bfin_read16(DMA9_Y_MODIFY) |
668 | #define bfin_write_DMA9_Y_MODIFY(val) bfin_write16(DMA9_Y_MODIFY) | 664 | #define bfin_write_DMA9_Y_MODIFY(val) bfin_write16(DMA9_Y_MODIFY, val) |
669 | #define bfin_read_DMA9_CURR_DESC_PTR() bfin_read32(DMA9_CURR_DESC_PTR) | 665 | #define bfin_read_DMA9_CURR_DESC_PTR() bfin_read32(DMA9_CURR_DESC_PTR) |
670 | #define bfin_write_DMA9_CURR_DESC_PTR(val) bfin_write32(DMA9_CURR_DESC_PTR) | 666 | #define bfin_write_DMA9_CURR_DESC_PTR(val) bfin_write32(DMA9_CURR_DESC_PTR, val) |
671 | #define bfin_read_DMA9_CURR_ADDR() bfin_read32(DMA9_CURR_ADDR) | 667 | #define bfin_read_DMA9_CURR_ADDR() bfin_read32(DMA9_CURR_ADDR) |
672 | #define bfin_write_DMA9_CURR_ADDR(val) bfin_write32(DMA9_CURR_ADDR) | 668 | #define bfin_write_DMA9_CURR_ADDR(val) bfin_write32(DMA9_CURR_ADDR, val) |
673 | #define bfin_read_DMA9_IRQ_STATUS() bfin_read16(DMA9_IRQ_STATUS) | 669 | #define bfin_read_DMA9_IRQ_STATUS() bfin_read16(DMA9_IRQ_STATUS) |
674 | #define bfin_write_DMA9_IRQ_STATUS(val) bfin_write16(DMA9_IRQ_STATUS, val) | 670 | #define bfin_write_DMA9_IRQ_STATUS(val) bfin_write16(DMA9_IRQ_STATUS, val) |
675 | #define bfin_read_DMA9_PERIPHERAL_MAP() bfin_read16(DMA9_PERIPHERAL_MAP) | 671 | #define bfin_read_DMA9_PERIPHERAL_MAP() bfin_read16(DMA9_PERIPHERAL_MAP) |
@@ -682,23 +678,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
682 | /* DMA Channel 10 Registers */ | 678 | /* DMA Channel 10 Registers */ |
683 | 679 | ||
684 | #define bfin_read_DMA10_NEXT_DESC_PTR() bfin_read32(DMA10_NEXT_DESC_PTR) | 680 | #define bfin_read_DMA10_NEXT_DESC_PTR() bfin_read32(DMA10_NEXT_DESC_PTR) |
685 | #define bfin_write_DMA10_NEXT_DESC_PTR(val) bfin_write32(DMA10_NEXT_DESC_PTR) | 681 | #define bfin_write_DMA10_NEXT_DESC_PTR(val) bfin_write32(DMA10_NEXT_DESC_PTR, val) |
686 | #define bfin_read_DMA10_START_ADDR() bfin_read32(DMA10_START_ADDR) | 682 | #define bfin_read_DMA10_START_ADDR() bfin_read32(DMA10_START_ADDR) |
687 | #define bfin_write_DMA10_START_ADDR(val) bfin_write32(DMA10_START_ADDR) | 683 | #define bfin_write_DMA10_START_ADDR(val) bfin_write32(DMA10_START_ADDR, val) |
688 | #define bfin_read_DMA10_CONFIG() bfin_read16(DMA10_CONFIG) | 684 | #define bfin_read_DMA10_CONFIG() bfin_read16(DMA10_CONFIG) |
689 | #define bfin_write_DMA10_CONFIG(val) bfin_write16(DMA10_CONFIG, val) | 685 | #define bfin_write_DMA10_CONFIG(val) bfin_write16(DMA10_CONFIG, val) |
690 | #define bfin_read_DMA10_X_COUNT() bfin_read16(DMA10_X_COUNT) | 686 | #define bfin_read_DMA10_X_COUNT() bfin_read16(DMA10_X_COUNT) |
691 | #define bfin_write_DMA10_X_COUNT(val) bfin_write16(DMA10_X_COUNT, val) | 687 | #define bfin_write_DMA10_X_COUNT(val) bfin_write16(DMA10_X_COUNT, val) |
692 | #define bfin_read_DMA10_X_MODIFY() bfin_read16(DMA10_X_MODIFY) | 688 | #define bfin_read_DMA10_X_MODIFY() bfin_read16(DMA10_X_MODIFY) |
693 | #define bfin_write_DMA10_X_MODIFY(val) bfin_write16(DMA10_X_MODIFY) | 689 | #define bfin_write_DMA10_X_MODIFY(val) bfin_write16(DMA10_X_MODIFY, val) |
694 | #define bfin_read_DMA10_Y_COUNT() bfin_read16(DMA10_Y_COUNT) | 690 | #define bfin_read_DMA10_Y_COUNT() bfin_read16(DMA10_Y_COUNT) |
695 | #define bfin_write_DMA10_Y_COUNT(val) bfin_write16(DMA10_Y_COUNT, val) | 691 | #define bfin_write_DMA10_Y_COUNT(val) bfin_write16(DMA10_Y_COUNT, val) |
696 | #define bfin_read_DMA10_Y_MODIFY() bfin_read16(DMA10_Y_MODIFY) | 692 | #define bfin_read_DMA10_Y_MODIFY() bfin_read16(DMA10_Y_MODIFY) |
697 | #define bfin_write_DMA10_Y_MODIFY(val) bfin_write16(DMA10_Y_MODIFY) | 693 | #define bfin_write_DMA10_Y_MODIFY(val) bfin_write16(DMA10_Y_MODIFY, val) |
698 | #define bfin_read_DMA10_CURR_DESC_PTR() bfin_read32(DMA10_CURR_DESC_PTR) | 694 | #define bfin_read_DMA10_CURR_DESC_PTR() bfin_read32(DMA10_CURR_DESC_PTR) |
699 | #define bfin_write_DMA10_CURR_DESC_PTR(val) bfin_write32(DMA10_CURR_DESC_PTR) | 695 | #define bfin_write_DMA10_CURR_DESC_PTR(val) bfin_write32(DMA10_CURR_DESC_PTR, val) |
700 | #define bfin_read_DMA10_CURR_ADDR() bfin_read32(DMA10_CURR_ADDR) | 696 | #define bfin_read_DMA10_CURR_ADDR() bfin_read32(DMA10_CURR_ADDR) |
701 | #define bfin_write_DMA10_CURR_ADDR(val) bfin_write32(DMA10_CURR_ADDR) | 697 | #define bfin_write_DMA10_CURR_ADDR(val) bfin_write32(DMA10_CURR_ADDR, val) |
702 | #define bfin_read_DMA10_IRQ_STATUS() bfin_read16(DMA10_IRQ_STATUS) | 698 | #define bfin_read_DMA10_IRQ_STATUS() bfin_read16(DMA10_IRQ_STATUS) |
703 | #define bfin_write_DMA10_IRQ_STATUS(val) bfin_write16(DMA10_IRQ_STATUS, val) | 699 | #define bfin_write_DMA10_IRQ_STATUS(val) bfin_write16(DMA10_IRQ_STATUS, val) |
704 | #define bfin_read_DMA10_PERIPHERAL_MAP() bfin_read16(DMA10_PERIPHERAL_MAP) | 700 | #define bfin_read_DMA10_PERIPHERAL_MAP() bfin_read16(DMA10_PERIPHERAL_MAP) |
@@ -711,23 +707,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
711 | /* DMA Channel 11 Registers */ | 707 | /* DMA Channel 11 Registers */ |
712 | 708 | ||
713 | #define bfin_read_DMA11_NEXT_DESC_PTR() bfin_read32(DMA11_NEXT_DESC_PTR) | 709 | #define bfin_read_DMA11_NEXT_DESC_PTR() bfin_read32(DMA11_NEXT_DESC_PTR) |
714 | #define bfin_write_DMA11_NEXT_DESC_PTR(val) bfin_write32(DMA11_NEXT_DESC_PTR) | 710 | #define bfin_write_DMA11_NEXT_DESC_PTR(val) bfin_write32(DMA11_NEXT_DESC_PTR, val) |
715 | #define bfin_read_DMA11_START_ADDR() bfin_read32(DMA11_START_ADDR) | 711 | #define bfin_read_DMA11_START_ADDR() bfin_read32(DMA11_START_ADDR) |
716 | #define bfin_write_DMA11_START_ADDR(val) bfin_write32(DMA11_START_ADDR) | 712 | #define bfin_write_DMA11_START_ADDR(val) bfin_write32(DMA11_START_ADDR, val) |
717 | #define bfin_read_DMA11_CONFIG() bfin_read16(DMA11_CONFIG) | 713 | #define bfin_read_DMA11_CONFIG() bfin_read16(DMA11_CONFIG) |
718 | #define bfin_write_DMA11_CONFIG(val) bfin_write16(DMA11_CONFIG, val) | 714 | #define bfin_write_DMA11_CONFIG(val) bfin_write16(DMA11_CONFIG, val) |
719 | #define bfin_read_DMA11_X_COUNT() bfin_read16(DMA11_X_COUNT) | 715 | #define bfin_read_DMA11_X_COUNT() bfin_read16(DMA11_X_COUNT) |
720 | #define bfin_write_DMA11_X_COUNT(val) bfin_write16(DMA11_X_COUNT, val) | 716 | #define bfin_write_DMA11_X_COUNT(val) bfin_write16(DMA11_X_COUNT, val) |
721 | #define bfin_read_DMA11_X_MODIFY() bfin_read16(DMA11_X_MODIFY) | 717 | #define bfin_read_DMA11_X_MODIFY() bfin_read16(DMA11_X_MODIFY) |
722 | #define bfin_write_DMA11_X_MODIFY(val) bfin_write16(DMA11_X_MODIFY) | 718 | #define bfin_write_DMA11_X_MODIFY(val) bfin_write16(DMA11_X_MODIFY, val) |
723 | #define bfin_read_DMA11_Y_COUNT() bfin_read16(DMA11_Y_COUNT) | 719 | #define bfin_read_DMA11_Y_COUNT() bfin_read16(DMA11_Y_COUNT) |
724 | #define bfin_write_DMA11_Y_COUNT(val) bfin_write16(DMA11_Y_COUNT, val) | 720 | #define bfin_write_DMA11_Y_COUNT(val) bfin_write16(DMA11_Y_COUNT, val) |
725 | #define bfin_read_DMA11_Y_MODIFY() bfin_read16(DMA11_Y_MODIFY) | 721 | #define bfin_read_DMA11_Y_MODIFY() bfin_read16(DMA11_Y_MODIFY) |
726 | #define bfin_write_DMA11_Y_MODIFY(val) bfin_write16(DMA11_Y_MODIFY) | 722 | #define bfin_write_DMA11_Y_MODIFY(val) bfin_write16(DMA11_Y_MODIFY, val) |
727 | #define bfin_read_DMA11_CURR_DESC_PTR() bfin_read32(DMA11_CURR_DESC_PTR) | 723 | #define bfin_read_DMA11_CURR_DESC_PTR() bfin_read32(DMA11_CURR_DESC_PTR) |
728 | #define bfin_write_DMA11_CURR_DESC_PTR(val) bfin_write32(DMA11_CURR_DESC_PTR) | 724 | #define bfin_write_DMA11_CURR_DESC_PTR(val) bfin_write32(DMA11_CURR_DESC_PTR, val) |
729 | #define bfin_read_DMA11_CURR_ADDR() bfin_read32(DMA11_CURR_ADDR) | 725 | #define bfin_read_DMA11_CURR_ADDR() bfin_read32(DMA11_CURR_ADDR) |
730 | #define bfin_write_DMA11_CURR_ADDR(val) bfin_write32(DMA11_CURR_ADDR) | 726 | #define bfin_write_DMA11_CURR_ADDR(val) bfin_write32(DMA11_CURR_ADDR, val) |
731 | #define bfin_read_DMA11_IRQ_STATUS() bfin_read16(DMA11_IRQ_STATUS) | 727 | #define bfin_read_DMA11_IRQ_STATUS() bfin_read16(DMA11_IRQ_STATUS) |
732 | #define bfin_write_DMA11_IRQ_STATUS(val) bfin_write16(DMA11_IRQ_STATUS, val) | 728 | #define bfin_write_DMA11_IRQ_STATUS(val) bfin_write16(DMA11_IRQ_STATUS, val) |
733 | #define bfin_read_DMA11_PERIPHERAL_MAP() bfin_read16(DMA11_PERIPHERAL_MAP) | 729 | #define bfin_read_DMA11_PERIPHERAL_MAP() bfin_read16(DMA11_PERIPHERAL_MAP) |
@@ -740,7 +736,7 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
740 | /* MDMA Stream 0 Registers */ | 736 | /* MDMA Stream 0 Registers */ |
741 | 737 | ||
742 | #define bfin_read_MDMA_D0_NEXT_DESC_PTR() bfin_read32(MDMA_D0_NEXT_DESC_PTR) | 738 | #define bfin_read_MDMA_D0_NEXT_DESC_PTR() bfin_read32(MDMA_D0_NEXT_DESC_PTR) |
743 | #define bfin_write_MDMA_D0_NEXT_DESC_PTR(val) bfin_write32(MDMA_D0_NEXT_DESC_PTR) | 739 | #define bfin_write_MDMA_D0_NEXT_DESC_PTR(val) bfin_write32(MDMA_D0_NEXT_DESC_PTR, val) |
744 | #define bfin_read_MDMA_D0_START_ADDR() bfin_read32(MDMA_D0_START_ADDR) | 740 | #define bfin_read_MDMA_D0_START_ADDR() bfin_read32(MDMA_D0_START_ADDR) |
745 | #define bfin_write_MDMA_D0_START_ADDR(val) bfin_write32(MDMA_D0_START_ADDR, val) | 741 | #define bfin_write_MDMA_D0_START_ADDR(val) bfin_write32(MDMA_D0_START_ADDR, val) |
746 | #define bfin_read_MDMA_D0_CONFIG() bfin_read16(MDMA_D0_CONFIG) | 742 | #define bfin_read_MDMA_D0_CONFIG() bfin_read16(MDMA_D0_CONFIG) |
@@ -803,11 +799,11 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
803 | #define bfin_read_MDMA_D1_X_COUNT() bfin_read16(MDMA_D1_X_COUNT) | 799 | #define bfin_read_MDMA_D1_X_COUNT() bfin_read16(MDMA_D1_X_COUNT) |
804 | #define bfin_write_MDMA_D1_X_COUNT(val) bfin_write16(MDMA_D1_X_COUNT, val) | 800 | #define bfin_write_MDMA_D1_X_COUNT(val) bfin_write16(MDMA_D1_X_COUNT, val) |
805 | #define bfin_read_MDMA_D1_X_MODIFY() bfin_read16(MDMA_D1_X_MODIFY) | 801 | #define bfin_read_MDMA_D1_X_MODIFY() bfin_read16(MDMA_D1_X_MODIFY) |
806 | #define bfin_write_MDMA_D1_X_MODIFY(val) bfin_write16(MDMA_D1_X_MODIFY) | 802 | #define bfin_write_MDMA_D1_X_MODIFY(val) bfin_write16(MDMA_D1_X_MODIFY, val) |
807 | #define bfin_read_MDMA_D1_Y_COUNT() bfin_read16(MDMA_D1_Y_COUNT) | 803 | #define bfin_read_MDMA_D1_Y_COUNT() bfin_read16(MDMA_D1_Y_COUNT) |
808 | #define bfin_write_MDMA_D1_Y_COUNT(val) bfin_write16(MDMA_D1_Y_COUNT, val) | 804 | #define bfin_write_MDMA_D1_Y_COUNT(val) bfin_write16(MDMA_D1_Y_COUNT, val) |
809 | #define bfin_read_MDMA_D1_Y_MODIFY() bfin_read16(MDMA_D1_Y_MODIFY) | 805 | #define bfin_read_MDMA_D1_Y_MODIFY() bfin_read16(MDMA_D1_Y_MODIFY) |
810 | #define bfin_write_MDMA_D1_Y_MODIFY(val) bfin_write16(MDMA_D1_Y_MODIFY) | 806 | #define bfin_write_MDMA_D1_Y_MODIFY(val) bfin_write16(MDMA_D1_Y_MODIFY, val) |
811 | #define bfin_read_MDMA_D1_CURR_DESC_PTR() bfin_read32(MDMA_D1_CURR_DESC_PTR) | 807 | #define bfin_read_MDMA_D1_CURR_DESC_PTR() bfin_read32(MDMA_D1_CURR_DESC_PTR) |
812 | #define bfin_write_MDMA_D1_CURR_DESC_PTR(val) bfin_write32(MDMA_D1_CURR_DESC_PTR, val) | 808 | #define bfin_write_MDMA_D1_CURR_DESC_PTR(val) bfin_write32(MDMA_D1_CURR_DESC_PTR, val) |
813 | #define bfin_read_MDMA_D1_CURR_ADDR() bfin_read32(MDMA_D1_CURR_ADDR) | 809 | #define bfin_read_MDMA_D1_CURR_ADDR() bfin_read32(MDMA_D1_CURR_ADDR) |
@@ -829,11 +825,11 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
829 | #define bfin_read_MDMA_S1_X_COUNT() bfin_read16(MDMA_S1_X_COUNT) | 825 | #define bfin_read_MDMA_S1_X_COUNT() bfin_read16(MDMA_S1_X_COUNT) |
830 | #define bfin_write_MDMA_S1_X_COUNT(val) bfin_write16(MDMA_S1_X_COUNT, val) | 826 | #define bfin_write_MDMA_S1_X_COUNT(val) bfin_write16(MDMA_S1_X_COUNT, val) |
831 | #define bfin_read_MDMA_S1_X_MODIFY() bfin_read16(MDMA_S1_X_MODIFY) | 827 | #define bfin_read_MDMA_S1_X_MODIFY() bfin_read16(MDMA_S1_X_MODIFY) |
832 | #define bfin_write_MDMA_S1_X_MODIFY(val) bfin_write16(MDMA_S1_X_MODIFY) | 828 | #define bfin_write_MDMA_S1_X_MODIFY(val) bfin_write16(MDMA_S1_X_MODIFY, val) |
833 | #define bfin_read_MDMA_S1_Y_COUNT() bfin_read16(MDMA_S1_Y_COUNT) | 829 | #define bfin_read_MDMA_S1_Y_COUNT() bfin_read16(MDMA_S1_Y_COUNT) |
834 | #define bfin_write_MDMA_S1_Y_COUNT(val) bfin_write16(MDMA_S1_Y_COUNT, val) | 830 | #define bfin_write_MDMA_S1_Y_COUNT(val) bfin_write16(MDMA_S1_Y_COUNT, val) |
835 | #define bfin_read_MDMA_S1_Y_MODIFY() bfin_read16(MDMA_S1_Y_MODIFY) | 831 | #define bfin_read_MDMA_S1_Y_MODIFY() bfin_read16(MDMA_S1_Y_MODIFY) |
836 | #define bfin_write_MDMA_S1_Y_MODIFY(val) bfin_write16(MDMA_S1_Y_MODIFY) | 832 | #define bfin_write_MDMA_S1_Y_MODIFY(val) bfin_write16(MDMA_S1_Y_MODIFY, val) |
837 | #define bfin_read_MDMA_S1_CURR_DESC_PTR() bfin_read32(MDMA_S1_CURR_DESC_PTR) | 833 | #define bfin_read_MDMA_S1_CURR_DESC_PTR() bfin_read32(MDMA_S1_CURR_DESC_PTR) |
838 | #define bfin_write_MDMA_S1_CURR_DESC_PTR(val) bfin_write32(MDMA_S1_CURR_DESC_PTR, val) | 834 | #define bfin_write_MDMA_S1_CURR_DESC_PTR(val) bfin_write32(MDMA_S1_CURR_DESC_PTR, val) |
839 | #define bfin_read_MDMA_S1_CURR_ADDR() bfin_read32(MDMA_S1_CURR_ADDR) | 835 | #define bfin_read_MDMA_S1_CURR_ADDR() bfin_read32(MDMA_S1_CURR_ADDR) |
@@ -1246,23 +1242,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1246 | /* DMA Channel 12 Registers */ | 1242 | /* DMA Channel 12 Registers */ |
1247 | 1243 | ||
1248 | #define bfin_read_DMA12_NEXT_DESC_PTR() bfin_read32(DMA12_NEXT_DESC_PTR) | 1244 | #define bfin_read_DMA12_NEXT_DESC_PTR() bfin_read32(DMA12_NEXT_DESC_PTR) |
1249 | #define bfin_write_DMA12_NEXT_DESC_PTR(val) bfin_write32(DMA12_NEXT_DESC_PTR) | 1245 | #define bfin_write_DMA12_NEXT_DESC_PTR(val) bfin_write32(DMA12_NEXT_DESC_PTR, val) |
1250 | #define bfin_read_DMA12_START_ADDR() bfin_read32(DMA12_START_ADDR) | 1246 | #define bfin_read_DMA12_START_ADDR() bfin_read32(DMA12_START_ADDR) |
1251 | #define bfin_write_DMA12_START_ADDR(val) bfin_write32(DMA12_START_ADDR) | 1247 | #define bfin_write_DMA12_START_ADDR(val) bfin_write32(DMA12_START_ADDR, val) |
1252 | #define bfin_read_DMA12_CONFIG() bfin_read16(DMA12_CONFIG) | 1248 | #define bfin_read_DMA12_CONFIG() bfin_read16(DMA12_CONFIG) |
1253 | #define bfin_write_DMA12_CONFIG(val) bfin_write16(DMA12_CONFIG, val) | 1249 | #define bfin_write_DMA12_CONFIG(val) bfin_write16(DMA12_CONFIG, val) |
1254 | #define bfin_read_DMA12_X_COUNT() bfin_read16(DMA12_X_COUNT) | 1250 | #define bfin_read_DMA12_X_COUNT() bfin_read16(DMA12_X_COUNT) |
1255 | #define bfin_write_DMA12_X_COUNT(val) bfin_write16(DMA12_X_COUNT, val) | 1251 | #define bfin_write_DMA12_X_COUNT(val) bfin_write16(DMA12_X_COUNT, val) |
1256 | #define bfin_read_DMA12_X_MODIFY() bfin_read16(DMA12_X_MODIFY) | 1252 | #define bfin_read_DMA12_X_MODIFY() bfin_read16(DMA12_X_MODIFY) |
1257 | #define bfin_write_DMA12_X_MODIFY(val) bfin_write16(DMA12_X_MODIFY) | 1253 | #define bfin_write_DMA12_X_MODIFY(val) bfin_write16(DMA12_X_MODIFY, val) |
1258 | #define bfin_read_DMA12_Y_COUNT() bfin_read16(DMA12_Y_COUNT) | 1254 | #define bfin_read_DMA12_Y_COUNT() bfin_read16(DMA12_Y_COUNT) |
1259 | #define bfin_write_DMA12_Y_COUNT(val) bfin_write16(DMA12_Y_COUNT, val) | 1255 | #define bfin_write_DMA12_Y_COUNT(val) bfin_write16(DMA12_Y_COUNT, val) |
1260 | #define bfin_read_DMA12_Y_MODIFY() bfin_read16(DMA12_Y_MODIFY) | 1256 | #define bfin_read_DMA12_Y_MODIFY() bfin_read16(DMA12_Y_MODIFY) |
1261 | #define bfin_write_DMA12_Y_MODIFY(val) bfin_write16(DMA12_Y_MODIFY) | 1257 | #define bfin_write_DMA12_Y_MODIFY(val) bfin_write16(DMA12_Y_MODIFY, val) |
1262 | #define bfin_read_DMA12_CURR_DESC_PTR() bfin_read32(DMA12_CURR_DESC_PTR) | 1258 | #define bfin_read_DMA12_CURR_DESC_PTR() bfin_read32(DMA12_CURR_DESC_PTR) |
1263 | #define bfin_write_DMA12_CURR_DESC_PTR(val) bfin_write32(DMA12_CURR_DESC_PTR) | 1259 | #define bfin_write_DMA12_CURR_DESC_PTR(val) bfin_write32(DMA12_CURR_DESC_PTR, val) |
1264 | #define bfin_read_DMA12_CURR_ADDR() bfin_read32(DMA12_CURR_ADDR) | 1260 | #define bfin_read_DMA12_CURR_ADDR() bfin_read32(DMA12_CURR_ADDR) |
1265 | #define bfin_write_DMA12_CURR_ADDR(val) bfin_write32(DMA12_CURR_ADDR) | 1261 | #define bfin_write_DMA12_CURR_ADDR(val) bfin_write32(DMA12_CURR_ADDR, val) |
1266 | #define bfin_read_DMA12_IRQ_STATUS() bfin_read16(DMA12_IRQ_STATUS) | 1262 | #define bfin_read_DMA12_IRQ_STATUS() bfin_read16(DMA12_IRQ_STATUS) |
1267 | #define bfin_write_DMA12_IRQ_STATUS(val) bfin_write16(DMA12_IRQ_STATUS, val) | 1263 | #define bfin_write_DMA12_IRQ_STATUS(val) bfin_write16(DMA12_IRQ_STATUS, val) |
1268 | #define bfin_read_DMA12_PERIPHERAL_MAP() bfin_read16(DMA12_PERIPHERAL_MAP) | 1264 | #define bfin_read_DMA12_PERIPHERAL_MAP() bfin_read16(DMA12_PERIPHERAL_MAP) |
@@ -1275,23 +1271,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1275 | /* DMA Channel 13 Registers */ | 1271 | /* DMA Channel 13 Registers */ |
1276 | 1272 | ||
1277 | #define bfin_read_DMA13_NEXT_DESC_PTR() bfin_read32(DMA13_NEXT_DESC_PTR) | 1273 | #define bfin_read_DMA13_NEXT_DESC_PTR() bfin_read32(DMA13_NEXT_DESC_PTR) |
1278 | #define bfin_write_DMA13_NEXT_DESC_PTR(val) bfin_write32(DMA13_NEXT_DESC_PTR) | 1274 | #define bfin_write_DMA13_NEXT_DESC_PTR(val) bfin_write32(DMA13_NEXT_DESC_PTR, val) |
1279 | #define bfin_read_DMA13_START_ADDR() bfin_read32(DMA13_START_ADDR) | 1275 | #define bfin_read_DMA13_START_ADDR() bfin_read32(DMA13_START_ADDR) |
1280 | #define bfin_write_DMA13_START_ADDR(val) bfin_write32(DMA13_START_ADDR) | 1276 | #define bfin_write_DMA13_START_ADDR(val) bfin_write32(DMA13_START_ADDR, val) |
1281 | #define bfin_read_DMA13_CONFIG() bfin_read16(DMA13_CONFIG) | 1277 | #define bfin_read_DMA13_CONFIG() bfin_read16(DMA13_CONFIG) |
1282 | #define bfin_write_DMA13_CONFIG(val) bfin_write16(DMA13_CONFIG, val) | 1278 | #define bfin_write_DMA13_CONFIG(val) bfin_write16(DMA13_CONFIG, val) |
1283 | #define bfin_read_DMA13_X_COUNT() bfin_read16(DMA13_X_COUNT) | 1279 | #define bfin_read_DMA13_X_COUNT() bfin_read16(DMA13_X_COUNT) |
1284 | #define bfin_write_DMA13_X_COUNT(val) bfin_write16(DMA13_X_COUNT, val) | 1280 | #define bfin_write_DMA13_X_COUNT(val) bfin_write16(DMA13_X_COUNT, val) |
1285 | #define bfin_read_DMA13_X_MODIFY() bfin_read16(DMA13_X_MODIFY) | 1281 | #define bfin_read_DMA13_X_MODIFY() bfin_read16(DMA13_X_MODIFY) |
1286 | #define bfin_write_DMA13_X_MODIFY(val) bfin_write16(DMA13_X_MODIFY) | 1282 | #define bfin_write_DMA13_X_MODIFY(val) bfin_write16(DMA13_X_MODIFY, val) |
1287 | #define bfin_read_DMA13_Y_COUNT() bfin_read16(DMA13_Y_COUNT) | 1283 | #define bfin_read_DMA13_Y_COUNT() bfin_read16(DMA13_Y_COUNT) |
1288 | #define bfin_write_DMA13_Y_COUNT(val) bfin_write16(DMA13_Y_COUNT, val) | 1284 | #define bfin_write_DMA13_Y_COUNT(val) bfin_write16(DMA13_Y_COUNT, val) |
1289 | #define bfin_read_DMA13_Y_MODIFY() bfin_read16(DMA13_Y_MODIFY) | 1285 | #define bfin_read_DMA13_Y_MODIFY() bfin_read16(DMA13_Y_MODIFY) |
1290 | #define bfin_write_DMA13_Y_MODIFY(val) bfin_write16(DMA13_Y_MODIFY) | 1286 | #define bfin_write_DMA13_Y_MODIFY(val) bfin_write16(DMA13_Y_MODIFY, val) |
1291 | #define bfin_read_DMA13_CURR_DESC_PTR() bfin_read32(DMA13_CURR_DESC_PTR) | 1287 | #define bfin_read_DMA13_CURR_DESC_PTR() bfin_read32(DMA13_CURR_DESC_PTR) |
1292 | #define bfin_write_DMA13_CURR_DESC_PTR(val) bfin_write32(DMA13_CURR_DESC_PTR) | 1288 | #define bfin_write_DMA13_CURR_DESC_PTR(val) bfin_write32(DMA13_CURR_DESC_PTR, val) |
1293 | #define bfin_read_DMA13_CURR_ADDR() bfin_read32(DMA13_CURR_ADDR) | 1289 | #define bfin_read_DMA13_CURR_ADDR() bfin_read32(DMA13_CURR_ADDR) |
1294 | #define bfin_write_DMA13_CURR_ADDR(val) bfin_write32(DMA13_CURR_ADDR) | 1290 | #define bfin_write_DMA13_CURR_ADDR(val) bfin_write32(DMA13_CURR_ADDR, val) |
1295 | #define bfin_read_DMA13_IRQ_STATUS() bfin_read16(DMA13_IRQ_STATUS) | 1291 | #define bfin_read_DMA13_IRQ_STATUS() bfin_read16(DMA13_IRQ_STATUS) |
1296 | #define bfin_write_DMA13_IRQ_STATUS(val) bfin_write16(DMA13_IRQ_STATUS, val) | 1292 | #define bfin_write_DMA13_IRQ_STATUS(val) bfin_write16(DMA13_IRQ_STATUS, val) |
1297 | #define bfin_read_DMA13_PERIPHERAL_MAP() bfin_read16(DMA13_PERIPHERAL_MAP) | 1293 | #define bfin_read_DMA13_PERIPHERAL_MAP() bfin_read16(DMA13_PERIPHERAL_MAP) |
@@ -1304,23 +1300,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1304 | /* DMA Channel 14 Registers */ | 1300 | /* DMA Channel 14 Registers */ |
1305 | 1301 | ||
1306 | #define bfin_read_DMA14_NEXT_DESC_PTR() bfin_read32(DMA14_NEXT_DESC_PTR) | 1302 | #define bfin_read_DMA14_NEXT_DESC_PTR() bfin_read32(DMA14_NEXT_DESC_PTR) |
1307 | #define bfin_write_DMA14_NEXT_DESC_PTR(val) bfin_write32(DMA14_NEXT_DESC_PTR) | 1303 | #define bfin_write_DMA14_NEXT_DESC_PTR(val) bfin_write32(DMA14_NEXT_DESC_PTR, val) |
1308 | #define bfin_read_DMA14_START_ADDR() bfin_read32(DMA14_START_ADDR) | 1304 | #define bfin_read_DMA14_START_ADDR() bfin_read32(DMA14_START_ADDR) |
1309 | #define bfin_write_DMA14_START_ADDR(val) bfin_write32(DMA14_START_ADDR) | 1305 | #define bfin_write_DMA14_START_ADDR(val) bfin_write32(DMA14_START_ADDR, val) |
1310 | #define bfin_read_DMA14_CONFIG() bfin_read16(DMA14_CONFIG) | 1306 | #define bfin_read_DMA14_CONFIG() bfin_read16(DMA14_CONFIG) |
1311 | #define bfin_write_DMA14_CONFIG(val) bfin_write16(DMA14_CONFIG, val) | 1307 | #define bfin_write_DMA14_CONFIG(val) bfin_write16(DMA14_CONFIG, val) |
1312 | #define bfin_read_DMA14_X_COUNT() bfin_read16(DMA14_X_COUNT) | 1308 | #define bfin_read_DMA14_X_COUNT() bfin_read16(DMA14_X_COUNT) |
1313 | #define bfin_write_DMA14_X_COUNT(val) bfin_write16(DMA14_X_COUNT, val) | 1309 | #define bfin_write_DMA14_X_COUNT(val) bfin_write16(DMA14_X_COUNT, val) |
1314 | #define bfin_read_DMA14_X_MODIFY() bfin_read16(DMA14_X_MODIFY) | 1310 | #define bfin_read_DMA14_X_MODIFY() bfin_read16(DMA14_X_MODIFY) |
1315 | #define bfin_write_DMA14_X_MODIFY(val) bfin_write16(DMA14_X_MODIFY) | 1311 | #define bfin_write_DMA14_X_MODIFY(val) bfin_write16(DMA14_X_MODIFY, val) |
1316 | #define bfin_read_DMA14_Y_COUNT() bfin_read16(DMA14_Y_COUNT) | 1312 | #define bfin_read_DMA14_Y_COUNT() bfin_read16(DMA14_Y_COUNT) |
1317 | #define bfin_write_DMA14_Y_COUNT(val) bfin_write16(DMA14_Y_COUNT, val) | 1313 | #define bfin_write_DMA14_Y_COUNT(val) bfin_write16(DMA14_Y_COUNT, val) |
1318 | #define bfin_read_DMA14_Y_MODIFY() bfin_read16(DMA14_Y_MODIFY) | 1314 | #define bfin_read_DMA14_Y_MODIFY() bfin_read16(DMA14_Y_MODIFY) |
1319 | #define bfin_write_DMA14_Y_MODIFY(val) bfin_write16(DMA14_Y_MODIFY) | 1315 | #define bfin_write_DMA14_Y_MODIFY(val) bfin_write16(DMA14_Y_MODIFY, val) |
1320 | #define bfin_read_DMA14_CURR_DESC_PTR() bfin_read32(DMA14_CURR_DESC_PTR) | 1316 | #define bfin_read_DMA14_CURR_DESC_PTR() bfin_read32(DMA14_CURR_DESC_PTR) |
1321 | #define bfin_write_DMA14_CURR_DESC_PTR(val) bfin_write32(DMA14_CURR_DESC_PTR) | 1317 | #define bfin_write_DMA14_CURR_DESC_PTR(val) bfin_write32(DMA14_CURR_DESC_PTR, val) |
1322 | #define bfin_read_DMA14_CURR_ADDR() bfin_read32(DMA14_CURR_ADDR) | 1318 | #define bfin_read_DMA14_CURR_ADDR() bfin_read32(DMA14_CURR_ADDR) |
1323 | #define bfin_write_DMA14_CURR_ADDR(val) bfin_write32(DMA14_CURR_ADDR) | 1319 | #define bfin_write_DMA14_CURR_ADDR(val) bfin_write32(DMA14_CURR_ADDR, val) |
1324 | #define bfin_read_DMA14_IRQ_STATUS() bfin_read16(DMA14_IRQ_STATUS) | 1320 | #define bfin_read_DMA14_IRQ_STATUS() bfin_read16(DMA14_IRQ_STATUS) |
1325 | #define bfin_write_DMA14_IRQ_STATUS(val) bfin_write16(DMA14_IRQ_STATUS, val) | 1321 | #define bfin_write_DMA14_IRQ_STATUS(val) bfin_write16(DMA14_IRQ_STATUS, val) |
1326 | #define bfin_read_DMA14_PERIPHERAL_MAP() bfin_read16(DMA14_PERIPHERAL_MAP) | 1322 | #define bfin_read_DMA14_PERIPHERAL_MAP() bfin_read16(DMA14_PERIPHERAL_MAP) |
@@ -1333,23 +1329,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1333 | /* DMA Channel 15 Registers */ | 1329 | /* DMA Channel 15 Registers */ |
1334 | 1330 | ||
1335 | #define bfin_read_DMA15_NEXT_DESC_PTR() bfin_read32(DMA15_NEXT_DESC_PTR) | 1331 | #define bfin_read_DMA15_NEXT_DESC_PTR() bfin_read32(DMA15_NEXT_DESC_PTR) |
1336 | #define bfin_write_DMA15_NEXT_DESC_PTR(val) bfin_write32(DMA15_NEXT_DESC_PTR) | 1332 | #define bfin_write_DMA15_NEXT_DESC_PTR(val) bfin_write32(DMA15_NEXT_DESC_PTR, val) |
1337 | #define bfin_read_DMA15_START_ADDR() bfin_read32(DMA15_START_ADDR) | 1333 | #define bfin_read_DMA15_START_ADDR() bfin_read32(DMA15_START_ADDR) |
1338 | #define bfin_write_DMA15_START_ADDR(val) bfin_write32(DMA15_START_ADDR) | 1334 | #define bfin_write_DMA15_START_ADDR(val) bfin_write32(DMA15_START_ADDR, val) |
1339 | #define bfin_read_DMA15_CONFIG() bfin_read16(DMA15_CONFIG) | 1335 | #define bfin_read_DMA15_CONFIG() bfin_read16(DMA15_CONFIG) |
1340 | #define bfin_write_DMA15_CONFIG(val) bfin_write16(DMA15_CONFIG, val) | 1336 | #define bfin_write_DMA15_CONFIG(val) bfin_write16(DMA15_CONFIG, val) |
1341 | #define bfin_read_DMA15_X_COUNT() bfin_read16(DMA15_X_COUNT) | 1337 | #define bfin_read_DMA15_X_COUNT() bfin_read16(DMA15_X_COUNT) |
1342 | #define bfin_write_DMA15_X_COUNT(val) bfin_write16(DMA15_X_COUNT, val) | 1338 | #define bfin_write_DMA15_X_COUNT(val) bfin_write16(DMA15_X_COUNT, val) |
1343 | #define bfin_read_DMA15_X_MODIFY() bfin_read16(DMA15_X_MODIFY) | 1339 | #define bfin_read_DMA15_X_MODIFY() bfin_read16(DMA15_X_MODIFY) |
1344 | #define bfin_write_DMA15_X_MODIFY(val) bfin_write16(DMA15_X_MODIFY) | 1340 | #define bfin_write_DMA15_X_MODIFY(val) bfin_write16(DMA15_X_MODIFY, val) |
1345 | #define bfin_read_DMA15_Y_COUNT() bfin_read16(DMA15_Y_COUNT) | 1341 | #define bfin_read_DMA15_Y_COUNT() bfin_read16(DMA15_Y_COUNT) |
1346 | #define bfin_write_DMA15_Y_COUNT(val) bfin_write16(DMA15_Y_COUNT, val) | 1342 | #define bfin_write_DMA15_Y_COUNT(val) bfin_write16(DMA15_Y_COUNT, val) |
1347 | #define bfin_read_DMA15_Y_MODIFY() bfin_read16(DMA15_Y_MODIFY) | 1343 | #define bfin_read_DMA15_Y_MODIFY() bfin_read16(DMA15_Y_MODIFY) |
1348 | #define bfin_write_DMA15_Y_MODIFY(val) bfin_write16(DMA15_Y_MODIFY) | 1344 | #define bfin_write_DMA15_Y_MODIFY(val) bfin_write16(DMA15_Y_MODIFY, val) |
1349 | #define bfin_read_DMA15_CURR_DESC_PTR() bfin_read32(DMA15_CURR_DESC_PTR) | 1345 | #define bfin_read_DMA15_CURR_DESC_PTR() bfin_read32(DMA15_CURR_DESC_PTR) |
1350 | #define bfin_write_DMA15_CURR_DESC_PTR(val) bfin_write32(DMA15_CURR_DESC_PTR) | 1346 | #define bfin_write_DMA15_CURR_DESC_PTR(val) bfin_write32(DMA15_CURR_DESC_PTR, val) |
1351 | #define bfin_read_DMA15_CURR_ADDR() bfin_read32(DMA15_CURR_ADDR) | 1347 | #define bfin_read_DMA15_CURR_ADDR() bfin_read32(DMA15_CURR_ADDR) |
1352 | #define bfin_write_DMA15_CURR_ADDR(val) bfin_write32(DMA15_CURR_ADDR) | 1348 | #define bfin_write_DMA15_CURR_ADDR(val) bfin_write32(DMA15_CURR_ADDR, val) |
1353 | #define bfin_read_DMA15_IRQ_STATUS() bfin_read16(DMA15_IRQ_STATUS) | 1349 | #define bfin_read_DMA15_IRQ_STATUS() bfin_read16(DMA15_IRQ_STATUS) |
1354 | #define bfin_write_DMA15_IRQ_STATUS(val) bfin_write16(DMA15_IRQ_STATUS, val) | 1350 | #define bfin_write_DMA15_IRQ_STATUS(val) bfin_write16(DMA15_IRQ_STATUS, val) |
1355 | #define bfin_read_DMA15_PERIPHERAL_MAP() bfin_read16(DMA15_PERIPHERAL_MAP) | 1351 | #define bfin_read_DMA15_PERIPHERAL_MAP() bfin_read16(DMA15_PERIPHERAL_MAP) |
@@ -1362,23 +1358,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1362 | /* DMA Channel 16 Registers */ | 1358 | /* DMA Channel 16 Registers */ |
1363 | 1359 | ||
1364 | #define bfin_read_DMA16_NEXT_DESC_PTR() bfin_read32(DMA16_NEXT_DESC_PTR) | 1360 | #define bfin_read_DMA16_NEXT_DESC_PTR() bfin_read32(DMA16_NEXT_DESC_PTR) |
1365 | #define bfin_write_DMA16_NEXT_DESC_PTR(val) bfin_write32(DMA16_NEXT_DESC_PTR) | 1361 | #define bfin_write_DMA16_NEXT_DESC_PTR(val) bfin_write32(DMA16_NEXT_DESC_PTR, val) |
1366 | #define bfin_read_DMA16_START_ADDR() bfin_read32(DMA16_START_ADDR) | 1362 | #define bfin_read_DMA16_START_ADDR() bfin_read32(DMA16_START_ADDR) |
1367 | #define bfin_write_DMA16_START_ADDR(val) bfin_write32(DMA16_START_ADDR) | 1363 | #define bfin_write_DMA16_START_ADDR(val) bfin_write32(DMA16_START_ADDR, val) |
1368 | #define bfin_read_DMA16_CONFIG() bfin_read16(DMA16_CONFIG) | 1364 | #define bfin_read_DMA16_CONFIG() bfin_read16(DMA16_CONFIG) |
1369 | #define bfin_write_DMA16_CONFIG(val) bfin_write16(DMA16_CONFIG, val) | 1365 | #define bfin_write_DMA16_CONFIG(val) bfin_write16(DMA16_CONFIG, val) |
1370 | #define bfin_read_DMA16_X_COUNT() bfin_read16(DMA16_X_COUNT) | 1366 | #define bfin_read_DMA16_X_COUNT() bfin_read16(DMA16_X_COUNT) |
1371 | #define bfin_write_DMA16_X_COUNT(val) bfin_write16(DMA16_X_COUNT, val) | 1367 | #define bfin_write_DMA16_X_COUNT(val) bfin_write16(DMA16_X_COUNT, val) |
1372 | #define bfin_read_DMA16_X_MODIFY() bfin_read16(DMA16_X_MODIFY) | 1368 | #define bfin_read_DMA16_X_MODIFY() bfin_read16(DMA16_X_MODIFY) |
1373 | #define bfin_write_DMA16_X_MODIFY(val) bfin_write16(DMA16_X_MODIFY) | 1369 | #define bfin_write_DMA16_X_MODIFY(val) bfin_write16(DMA16_X_MODIFY, val) |
1374 | #define bfin_read_DMA16_Y_COUNT() bfin_read16(DMA16_Y_COUNT) | 1370 | #define bfin_read_DMA16_Y_COUNT() bfin_read16(DMA16_Y_COUNT) |
1375 | #define bfin_write_DMA16_Y_COUNT(val) bfin_write16(DMA16_Y_COUNT, val) | 1371 | #define bfin_write_DMA16_Y_COUNT(val) bfin_write16(DMA16_Y_COUNT, val) |
1376 | #define bfin_read_DMA16_Y_MODIFY() bfin_read16(DMA16_Y_MODIFY) | 1372 | #define bfin_read_DMA16_Y_MODIFY() bfin_read16(DMA16_Y_MODIFY) |
1377 | #define bfin_write_DMA16_Y_MODIFY(val) bfin_write16(DMA16_Y_MODIFY) | 1373 | #define bfin_write_DMA16_Y_MODIFY(val) bfin_write16(DMA16_Y_MODIFY, val) |
1378 | #define bfin_read_DMA16_CURR_DESC_PTR() bfin_read32(DMA16_CURR_DESC_PTR) | 1374 | #define bfin_read_DMA16_CURR_DESC_PTR() bfin_read32(DMA16_CURR_DESC_PTR) |
1379 | #define bfin_write_DMA16_CURR_DESC_PTR(val) bfin_write32(DMA16_CURR_DESC_PTR) | 1375 | #define bfin_write_DMA16_CURR_DESC_PTR(val) bfin_write32(DMA16_CURR_DESC_PTR, val) |
1380 | #define bfin_read_DMA16_CURR_ADDR() bfin_read32(DMA16_CURR_ADDR) | 1376 | #define bfin_read_DMA16_CURR_ADDR() bfin_read32(DMA16_CURR_ADDR) |
1381 | #define bfin_write_DMA16_CURR_ADDR(val) bfin_write32(DMA16_CURR_ADDR) | 1377 | #define bfin_write_DMA16_CURR_ADDR(val) bfin_write32(DMA16_CURR_ADDR, val) |
1382 | #define bfin_read_DMA16_IRQ_STATUS() bfin_read16(DMA16_IRQ_STATUS) | 1378 | #define bfin_read_DMA16_IRQ_STATUS() bfin_read16(DMA16_IRQ_STATUS) |
1383 | #define bfin_write_DMA16_IRQ_STATUS(val) bfin_write16(DMA16_IRQ_STATUS, val) | 1379 | #define bfin_write_DMA16_IRQ_STATUS(val) bfin_write16(DMA16_IRQ_STATUS, val) |
1384 | #define bfin_read_DMA16_PERIPHERAL_MAP() bfin_read16(DMA16_PERIPHERAL_MAP) | 1380 | #define bfin_read_DMA16_PERIPHERAL_MAP() bfin_read16(DMA16_PERIPHERAL_MAP) |
@@ -1391,23 +1387,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1391 | /* DMA Channel 17 Registers */ | 1387 | /* DMA Channel 17 Registers */ |
1392 | 1388 | ||
1393 | #define bfin_read_DMA17_NEXT_DESC_PTR() bfin_read32(DMA17_NEXT_DESC_PTR) | 1389 | #define bfin_read_DMA17_NEXT_DESC_PTR() bfin_read32(DMA17_NEXT_DESC_PTR) |
1394 | #define bfin_write_DMA17_NEXT_DESC_PTR(val) bfin_write32(DMA17_NEXT_DESC_PTR) | 1390 | #define bfin_write_DMA17_NEXT_DESC_PTR(val) bfin_write32(DMA17_NEXT_DESC_PTR, val) |
1395 | #define bfin_read_DMA17_START_ADDR() bfin_read32(DMA17_START_ADDR) | 1391 | #define bfin_read_DMA17_START_ADDR() bfin_read32(DMA17_START_ADDR) |
1396 | #define bfin_write_DMA17_START_ADDR(val) bfin_write32(DMA17_START_ADDR) | 1392 | #define bfin_write_DMA17_START_ADDR(val) bfin_write32(DMA17_START_ADDR, val) |
1397 | #define bfin_read_DMA17_CONFIG() bfin_read16(DMA17_CONFIG) | 1393 | #define bfin_read_DMA17_CONFIG() bfin_read16(DMA17_CONFIG) |
1398 | #define bfin_write_DMA17_CONFIG(val) bfin_write16(DMA17_CONFIG, val) | 1394 | #define bfin_write_DMA17_CONFIG(val) bfin_write16(DMA17_CONFIG, val) |
1399 | #define bfin_read_DMA17_X_COUNT() bfin_read16(DMA17_X_COUNT) | 1395 | #define bfin_read_DMA17_X_COUNT() bfin_read16(DMA17_X_COUNT) |
1400 | #define bfin_write_DMA17_X_COUNT(val) bfin_write16(DMA17_X_COUNT, val) | 1396 | #define bfin_write_DMA17_X_COUNT(val) bfin_write16(DMA17_X_COUNT, val) |
1401 | #define bfin_read_DMA17_X_MODIFY() bfin_read16(DMA17_X_MODIFY) | 1397 | #define bfin_read_DMA17_X_MODIFY() bfin_read16(DMA17_X_MODIFY) |
1402 | #define bfin_write_DMA17_X_MODIFY(val) bfin_write16(DMA17_X_MODIFY) | 1398 | #define bfin_write_DMA17_X_MODIFY(val) bfin_write16(DMA17_X_MODIFY, val) |
1403 | #define bfin_read_DMA17_Y_COUNT() bfin_read16(DMA17_Y_COUNT) | 1399 | #define bfin_read_DMA17_Y_COUNT() bfin_read16(DMA17_Y_COUNT) |
1404 | #define bfin_write_DMA17_Y_COUNT(val) bfin_write16(DMA17_Y_COUNT, val) | 1400 | #define bfin_write_DMA17_Y_COUNT(val) bfin_write16(DMA17_Y_COUNT, val) |
1405 | #define bfin_read_DMA17_Y_MODIFY() bfin_read16(DMA17_Y_MODIFY) | 1401 | #define bfin_read_DMA17_Y_MODIFY() bfin_read16(DMA17_Y_MODIFY) |
1406 | #define bfin_write_DMA17_Y_MODIFY(val) bfin_write16(DMA17_Y_MODIFY) | 1402 | #define bfin_write_DMA17_Y_MODIFY(val) bfin_write16(DMA17_Y_MODIFY, val) |
1407 | #define bfin_read_DMA17_CURR_DESC_PTR() bfin_read32(DMA17_CURR_DESC_PTR) | 1403 | #define bfin_read_DMA17_CURR_DESC_PTR() bfin_read32(DMA17_CURR_DESC_PTR) |
1408 | #define bfin_write_DMA17_CURR_DESC_PTR(val) bfin_write32(DMA17_CURR_DESC_PTR) | 1404 | #define bfin_write_DMA17_CURR_DESC_PTR(val) bfin_write32(DMA17_CURR_DESC_PTR, val) |
1409 | #define bfin_read_DMA17_CURR_ADDR() bfin_read32(DMA17_CURR_ADDR) | 1405 | #define bfin_read_DMA17_CURR_ADDR() bfin_read32(DMA17_CURR_ADDR) |
1410 | #define bfin_write_DMA17_CURR_ADDR(val) bfin_write32(DMA17_CURR_ADDR) | 1406 | #define bfin_write_DMA17_CURR_ADDR(val) bfin_write32(DMA17_CURR_ADDR, val) |
1411 | #define bfin_read_DMA17_IRQ_STATUS() bfin_read16(DMA17_IRQ_STATUS) | 1407 | #define bfin_read_DMA17_IRQ_STATUS() bfin_read16(DMA17_IRQ_STATUS) |
1412 | #define bfin_write_DMA17_IRQ_STATUS(val) bfin_write16(DMA17_IRQ_STATUS, val) | 1408 | #define bfin_write_DMA17_IRQ_STATUS(val) bfin_write16(DMA17_IRQ_STATUS, val) |
1413 | #define bfin_read_DMA17_PERIPHERAL_MAP() bfin_read16(DMA17_PERIPHERAL_MAP) | 1409 | #define bfin_read_DMA17_PERIPHERAL_MAP() bfin_read16(DMA17_PERIPHERAL_MAP) |
@@ -1420,23 +1416,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1420 | /* DMA Channel 18 Registers */ | 1416 | /* DMA Channel 18 Registers */ |
1421 | 1417 | ||
1422 | #define bfin_read_DMA18_NEXT_DESC_PTR() bfin_read32(DMA18_NEXT_DESC_PTR) | 1418 | #define bfin_read_DMA18_NEXT_DESC_PTR() bfin_read32(DMA18_NEXT_DESC_PTR) |
1423 | #define bfin_write_DMA18_NEXT_DESC_PTR(val) bfin_write32(DMA18_NEXT_DESC_PTR) | 1419 | #define bfin_write_DMA18_NEXT_DESC_PTR(val) bfin_write32(DMA18_NEXT_DESC_PTR, val) |
1424 | #define bfin_read_DMA18_START_ADDR() bfin_read32(DMA18_START_ADDR) | 1420 | #define bfin_read_DMA18_START_ADDR() bfin_read32(DMA18_START_ADDR) |
1425 | #define bfin_write_DMA18_START_ADDR(val) bfin_write32(DMA18_START_ADDR) | 1421 | #define bfin_write_DMA18_START_ADDR(val) bfin_write32(DMA18_START_ADDR, val) |
1426 | #define bfin_read_DMA18_CONFIG() bfin_read16(DMA18_CONFIG) | 1422 | #define bfin_read_DMA18_CONFIG() bfin_read16(DMA18_CONFIG) |
1427 | #define bfin_write_DMA18_CONFIG(val) bfin_write16(DMA18_CONFIG, val) | 1423 | #define bfin_write_DMA18_CONFIG(val) bfin_write16(DMA18_CONFIG, val) |
1428 | #define bfin_read_DMA18_X_COUNT() bfin_read16(DMA18_X_COUNT) | 1424 | #define bfin_read_DMA18_X_COUNT() bfin_read16(DMA18_X_COUNT) |
1429 | #define bfin_write_DMA18_X_COUNT(val) bfin_write16(DMA18_X_COUNT, val) | 1425 | #define bfin_write_DMA18_X_COUNT(val) bfin_write16(DMA18_X_COUNT, val) |
1430 | #define bfin_read_DMA18_X_MODIFY() bfin_read16(DMA18_X_MODIFY) | 1426 | #define bfin_read_DMA18_X_MODIFY() bfin_read16(DMA18_X_MODIFY) |
1431 | #define bfin_write_DMA18_X_MODIFY(val) bfin_write16(DMA18_X_MODIFY) | 1427 | #define bfin_write_DMA18_X_MODIFY(val) bfin_write16(DMA18_X_MODIFY, val) |
1432 | #define bfin_read_DMA18_Y_COUNT() bfin_read16(DMA18_Y_COUNT) | 1428 | #define bfin_read_DMA18_Y_COUNT() bfin_read16(DMA18_Y_COUNT) |
1433 | #define bfin_write_DMA18_Y_COUNT(val) bfin_write16(DMA18_Y_COUNT, val) | 1429 | #define bfin_write_DMA18_Y_COUNT(val) bfin_write16(DMA18_Y_COUNT, val) |
1434 | #define bfin_read_DMA18_Y_MODIFY() bfin_read16(DMA18_Y_MODIFY) | 1430 | #define bfin_read_DMA18_Y_MODIFY() bfin_read16(DMA18_Y_MODIFY) |
1435 | #define bfin_write_DMA18_Y_MODIFY(val) bfin_write16(DMA18_Y_MODIFY) | 1431 | #define bfin_write_DMA18_Y_MODIFY(val) bfin_write16(DMA18_Y_MODIFY, val) |
1436 | #define bfin_read_DMA18_CURR_DESC_PTR() bfin_read32(DMA18_CURR_DESC_PTR) | 1432 | #define bfin_read_DMA18_CURR_DESC_PTR() bfin_read32(DMA18_CURR_DESC_PTR) |
1437 | #define bfin_write_DMA18_CURR_DESC_PTR(val) bfin_write32(DMA18_CURR_DESC_PTR) | 1433 | #define bfin_write_DMA18_CURR_DESC_PTR(val) bfin_write32(DMA18_CURR_DESC_PTR, val) |
1438 | #define bfin_read_DMA18_CURR_ADDR() bfin_read32(DMA18_CURR_ADDR) | 1434 | #define bfin_read_DMA18_CURR_ADDR() bfin_read32(DMA18_CURR_ADDR) |
1439 | #define bfin_write_DMA18_CURR_ADDR(val) bfin_write32(DMA18_CURR_ADDR) | 1435 | #define bfin_write_DMA18_CURR_ADDR(val) bfin_write32(DMA18_CURR_ADDR, val) |
1440 | #define bfin_read_DMA18_IRQ_STATUS() bfin_read16(DMA18_IRQ_STATUS) | 1436 | #define bfin_read_DMA18_IRQ_STATUS() bfin_read16(DMA18_IRQ_STATUS) |
1441 | #define bfin_write_DMA18_IRQ_STATUS(val) bfin_write16(DMA18_IRQ_STATUS, val) | 1437 | #define bfin_write_DMA18_IRQ_STATUS(val) bfin_write16(DMA18_IRQ_STATUS, val) |
1442 | #define bfin_read_DMA18_PERIPHERAL_MAP() bfin_read16(DMA18_PERIPHERAL_MAP) | 1438 | #define bfin_read_DMA18_PERIPHERAL_MAP() bfin_read16(DMA18_PERIPHERAL_MAP) |
@@ -1449,23 +1445,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1449 | /* DMA Channel 19 Registers */ | 1445 | /* DMA Channel 19 Registers */ |
1450 | 1446 | ||
1451 | #define bfin_read_DMA19_NEXT_DESC_PTR() bfin_read32(DMA19_NEXT_DESC_PTR) | 1447 | #define bfin_read_DMA19_NEXT_DESC_PTR() bfin_read32(DMA19_NEXT_DESC_PTR) |
1452 | #define bfin_write_DMA19_NEXT_DESC_PTR(val) bfin_write32(DMA19_NEXT_DESC_PTR) | 1448 | #define bfin_write_DMA19_NEXT_DESC_PTR(val) bfin_write32(DMA19_NEXT_DESC_PTR, val) |
1453 | #define bfin_read_DMA19_START_ADDR() bfin_read32(DMA19_START_ADDR) | 1449 | #define bfin_read_DMA19_START_ADDR() bfin_read32(DMA19_START_ADDR) |
1454 | #define bfin_write_DMA19_START_ADDR(val) bfin_write32(DMA19_START_ADDR) | 1450 | #define bfin_write_DMA19_START_ADDR(val) bfin_write32(DMA19_START_ADDR, val) |
1455 | #define bfin_read_DMA19_CONFIG() bfin_read16(DMA19_CONFIG) | 1451 | #define bfin_read_DMA19_CONFIG() bfin_read16(DMA19_CONFIG) |
1456 | #define bfin_write_DMA19_CONFIG(val) bfin_write16(DMA19_CONFIG, val) | 1452 | #define bfin_write_DMA19_CONFIG(val) bfin_write16(DMA19_CONFIG, val) |
1457 | #define bfin_read_DMA19_X_COUNT() bfin_read16(DMA19_X_COUNT) | 1453 | #define bfin_read_DMA19_X_COUNT() bfin_read16(DMA19_X_COUNT) |
1458 | #define bfin_write_DMA19_X_COUNT(val) bfin_write16(DMA19_X_COUNT, val) | 1454 | #define bfin_write_DMA19_X_COUNT(val) bfin_write16(DMA19_X_COUNT, val) |
1459 | #define bfin_read_DMA19_X_MODIFY() bfin_read16(DMA19_X_MODIFY) | 1455 | #define bfin_read_DMA19_X_MODIFY() bfin_read16(DMA19_X_MODIFY) |
1460 | #define bfin_write_DMA19_X_MODIFY(val) bfin_write16(DMA19_X_MODIFY) | 1456 | #define bfin_write_DMA19_X_MODIFY(val) bfin_write16(DMA19_X_MODIFY, val) |
1461 | #define bfin_read_DMA19_Y_COUNT() bfin_read16(DMA19_Y_COUNT) | 1457 | #define bfin_read_DMA19_Y_COUNT() bfin_read16(DMA19_Y_COUNT) |
1462 | #define bfin_write_DMA19_Y_COUNT(val) bfin_write16(DMA19_Y_COUNT, val) | 1458 | #define bfin_write_DMA19_Y_COUNT(val) bfin_write16(DMA19_Y_COUNT, val) |
1463 | #define bfin_read_DMA19_Y_MODIFY() bfin_read16(DMA19_Y_MODIFY) | 1459 | #define bfin_read_DMA19_Y_MODIFY() bfin_read16(DMA19_Y_MODIFY) |
1464 | #define bfin_write_DMA19_Y_MODIFY(val) bfin_write16(DMA19_Y_MODIFY) | 1460 | #define bfin_write_DMA19_Y_MODIFY(val) bfin_write16(DMA19_Y_MODIFY, val) |
1465 | #define bfin_read_DMA19_CURR_DESC_PTR() bfin_read32(DMA19_CURR_DESC_PTR) | 1461 | #define bfin_read_DMA19_CURR_DESC_PTR() bfin_read32(DMA19_CURR_DESC_PTR) |
1466 | #define bfin_write_DMA19_CURR_DESC_PTR(val) bfin_write32(DMA19_CURR_DESC_PTR) | 1462 | #define bfin_write_DMA19_CURR_DESC_PTR(val) bfin_write32(DMA19_CURR_DESC_PTR, val) |
1467 | #define bfin_read_DMA19_CURR_ADDR() bfin_read32(DMA19_CURR_ADDR) | 1463 | #define bfin_read_DMA19_CURR_ADDR() bfin_read32(DMA19_CURR_ADDR) |
1468 | #define bfin_write_DMA19_CURR_ADDR(val) bfin_write32(DMA19_CURR_ADDR) | 1464 | #define bfin_write_DMA19_CURR_ADDR(val) bfin_write32(DMA19_CURR_ADDR, val) |
1469 | #define bfin_read_DMA19_IRQ_STATUS() bfin_read16(DMA19_IRQ_STATUS) | 1465 | #define bfin_read_DMA19_IRQ_STATUS() bfin_read16(DMA19_IRQ_STATUS) |
1470 | #define bfin_write_DMA19_IRQ_STATUS(val) bfin_write16(DMA19_IRQ_STATUS, val) | 1466 | #define bfin_write_DMA19_IRQ_STATUS(val) bfin_write16(DMA19_IRQ_STATUS, val) |
1471 | #define bfin_read_DMA19_PERIPHERAL_MAP() bfin_read16(DMA19_PERIPHERAL_MAP) | 1467 | #define bfin_read_DMA19_PERIPHERAL_MAP() bfin_read16(DMA19_PERIPHERAL_MAP) |
@@ -1478,23 +1474,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1478 | /* DMA Channel 20 Registers */ | 1474 | /* DMA Channel 20 Registers */ |
1479 | 1475 | ||
1480 | #define bfin_read_DMA20_NEXT_DESC_PTR() bfin_read32(DMA20_NEXT_DESC_PTR) | 1476 | #define bfin_read_DMA20_NEXT_DESC_PTR() bfin_read32(DMA20_NEXT_DESC_PTR) |
1481 | #define bfin_write_DMA20_NEXT_DESC_PTR(val) bfin_write32(DMA20_NEXT_DESC_PTR) | 1477 | #define bfin_write_DMA20_NEXT_DESC_PTR(val) bfin_write32(DMA20_NEXT_DESC_PTR, val) |
1482 | #define bfin_read_DMA20_START_ADDR() bfin_read32(DMA20_START_ADDR) | 1478 | #define bfin_read_DMA20_START_ADDR() bfin_read32(DMA20_START_ADDR) |
1483 | #define bfin_write_DMA20_START_ADDR(val) bfin_write32(DMA20_START_ADDR) | 1479 | #define bfin_write_DMA20_START_ADDR(val) bfin_write32(DMA20_START_ADDR, val) |
1484 | #define bfin_read_DMA20_CONFIG() bfin_read16(DMA20_CONFIG) | 1480 | #define bfin_read_DMA20_CONFIG() bfin_read16(DMA20_CONFIG) |
1485 | #define bfin_write_DMA20_CONFIG(val) bfin_write16(DMA20_CONFIG, val) | 1481 | #define bfin_write_DMA20_CONFIG(val) bfin_write16(DMA20_CONFIG, val) |
1486 | #define bfin_read_DMA20_X_COUNT() bfin_read16(DMA20_X_COUNT) | 1482 | #define bfin_read_DMA20_X_COUNT() bfin_read16(DMA20_X_COUNT) |
1487 | #define bfin_write_DMA20_X_COUNT(val) bfin_write16(DMA20_X_COUNT, val) | 1483 | #define bfin_write_DMA20_X_COUNT(val) bfin_write16(DMA20_X_COUNT, val) |
1488 | #define bfin_read_DMA20_X_MODIFY() bfin_read16(DMA20_X_MODIFY) | 1484 | #define bfin_read_DMA20_X_MODIFY() bfin_read16(DMA20_X_MODIFY) |
1489 | #define bfin_write_DMA20_X_MODIFY(val) bfin_write16(DMA20_X_MODIFY) | 1485 | #define bfin_write_DMA20_X_MODIFY(val) bfin_write16(DMA20_X_MODIFY, val) |
1490 | #define bfin_read_DMA20_Y_COUNT() bfin_read16(DMA20_Y_COUNT) | 1486 | #define bfin_read_DMA20_Y_COUNT() bfin_read16(DMA20_Y_COUNT) |
1491 | #define bfin_write_DMA20_Y_COUNT(val) bfin_write16(DMA20_Y_COUNT, val) | 1487 | #define bfin_write_DMA20_Y_COUNT(val) bfin_write16(DMA20_Y_COUNT, val) |
1492 | #define bfin_read_DMA20_Y_MODIFY() bfin_read16(DMA20_Y_MODIFY) | 1488 | #define bfin_read_DMA20_Y_MODIFY() bfin_read16(DMA20_Y_MODIFY) |
1493 | #define bfin_write_DMA20_Y_MODIFY(val) bfin_write16(DMA20_Y_MODIFY) | 1489 | #define bfin_write_DMA20_Y_MODIFY(val) bfin_write16(DMA20_Y_MODIFY, val) |
1494 | #define bfin_read_DMA20_CURR_DESC_PTR() bfin_read32(DMA20_CURR_DESC_PTR) | 1490 | #define bfin_read_DMA20_CURR_DESC_PTR() bfin_read32(DMA20_CURR_DESC_PTR) |
1495 | #define bfin_write_DMA20_CURR_DESC_PTR(val) bfin_write32(DMA20_CURR_DESC_PTR) | 1491 | #define bfin_write_DMA20_CURR_DESC_PTR(val) bfin_write32(DMA20_CURR_DESC_PTR, val) |
1496 | #define bfin_read_DMA20_CURR_ADDR() bfin_read32(DMA20_CURR_ADDR) | 1492 | #define bfin_read_DMA20_CURR_ADDR() bfin_read32(DMA20_CURR_ADDR) |
1497 | #define bfin_write_DMA20_CURR_ADDR(val) bfin_write32(DMA20_CURR_ADDR) | 1493 | #define bfin_write_DMA20_CURR_ADDR(val) bfin_write32(DMA20_CURR_ADDR, val) |
1498 | #define bfin_read_DMA20_IRQ_STATUS() bfin_read16(DMA20_IRQ_STATUS) | 1494 | #define bfin_read_DMA20_IRQ_STATUS() bfin_read16(DMA20_IRQ_STATUS) |
1499 | #define bfin_write_DMA20_IRQ_STATUS(val) bfin_write16(DMA20_IRQ_STATUS, val) | 1495 | #define bfin_write_DMA20_IRQ_STATUS(val) bfin_write16(DMA20_IRQ_STATUS, val) |
1500 | #define bfin_read_DMA20_PERIPHERAL_MAP() bfin_read16(DMA20_PERIPHERAL_MAP) | 1496 | #define bfin_read_DMA20_PERIPHERAL_MAP() bfin_read16(DMA20_PERIPHERAL_MAP) |
@@ -1507,23 +1503,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1507 | /* DMA Channel 21 Registers */ | 1503 | /* DMA Channel 21 Registers */ |
1508 | 1504 | ||
1509 | #define bfin_read_DMA21_NEXT_DESC_PTR() bfin_read32(DMA21_NEXT_DESC_PTR) | 1505 | #define bfin_read_DMA21_NEXT_DESC_PTR() bfin_read32(DMA21_NEXT_DESC_PTR) |
1510 | #define bfin_write_DMA21_NEXT_DESC_PTR(val) bfin_write32(DMA21_NEXT_DESC_PTR) | 1506 | #define bfin_write_DMA21_NEXT_DESC_PTR(val) bfin_write32(DMA21_NEXT_DESC_PTR, val) |
1511 | #define bfin_read_DMA21_START_ADDR() bfin_read32(DMA21_START_ADDR) | 1507 | #define bfin_read_DMA21_START_ADDR() bfin_read32(DMA21_START_ADDR) |
1512 | #define bfin_write_DMA21_START_ADDR(val) bfin_write32(DMA21_START_ADDR) | 1508 | #define bfin_write_DMA21_START_ADDR(val) bfin_write32(DMA21_START_ADDR, val) |
1513 | #define bfin_read_DMA21_CONFIG() bfin_read16(DMA21_CONFIG) | 1509 | #define bfin_read_DMA21_CONFIG() bfin_read16(DMA21_CONFIG) |
1514 | #define bfin_write_DMA21_CONFIG(val) bfin_write16(DMA21_CONFIG, val) | 1510 | #define bfin_write_DMA21_CONFIG(val) bfin_write16(DMA21_CONFIG, val) |
1515 | #define bfin_read_DMA21_X_COUNT() bfin_read16(DMA21_X_COUNT) | 1511 | #define bfin_read_DMA21_X_COUNT() bfin_read16(DMA21_X_COUNT) |
1516 | #define bfin_write_DMA21_X_COUNT(val) bfin_write16(DMA21_X_COUNT, val) | 1512 | #define bfin_write_DMA21_X_COUNT(val) bfin_write16(DMA21_X_COUNT, val) |
1517 | #define bfin_read_DMA21_X_MODIFY() bfin_read16(DMA21_X_MODIFY) | 1513 | #define bfin_read_DMA21_X_MODIFY() bfin_read16(DMA21_X_MODIFY) |
1518 | #define bfin_write_DMA21_X_MODIFY(val) bfin_write16(DMA21_X_MODIFY) | 1514 | #define bfin_write_DMA21_X_MODIFY(val) bfin_write16(DMA21_X_MODIFY, val) |
1519 | #define bfin_read_DMA21_Y_COUNT() bfin_read16(DMA21_Y_COUNT) | 1515 | #define bfin_read_DMA21_Y_COUNT() bfin_read16(DMA21_Y_COUNT) |
1520 | #define bfin_write_DMA21_Y_COUNT(val) bfin_write16(DMA21_Y_COUNT, val) | 1516 | #define bfin_write_DMA21_Y_COUNT(val) bfin_write16(DMA21_Y_COUNT, val) |
1521 | #define bfin_read_DMA21_Y_MODIFY() bfin_read16(DMA21_Y_MODIFY) | 1517 | #define bfin_read_DMA21_Y_MODIFY() bfin_read16(DMA21_Y_MODIFY) |
1522 | #define bfin_write_DMA21_Y_MODIFY(val) bfin_write16(DMA21_Y_MODIFY) | 1518 | #define bfin_write_DMA21_Y_MODIFY(val) bfin_write16(DMA21_Y_MODIFY, val) |
1523 | #define bfin_read_DMA21_CURR_DESC_PTR() bfin_read32(DMA21_CURR_DESC_PTR) | 1519 | #define bfin_read_DMA21_CURR_DESC_PTR() bfin_read32(DMA21_CURR_DESC_PTR) |
1524 | #define bfin_write_DMA21_CURR_DESC_PTR(val) bfin_write32(DMA21_CURR_DESC_PTR) | 1520 | #define bfin_write_DMA21_CURR_DESC_PTR(val) bfin_write32(DMA21_CURR_DESC_PTR, val) |
1525 | #define bfin_read_DMA21_CURR_ADDR() bfin_read32(DMA21_CURR_ADDR) | 1521 | #define bfin_read_DMA21_CURR_ADDR() bfin_read32(DMA21_CURR_ADDR) |
1526 | #define bfin_write_DMA21_CURR_ADDR(val) bfin_write32(DMA21_CURR_ADDR) | 1522 | #define bfin_write_DMA21_CURR_ADDR(val) bfin_write32(DMA21_CURR_ADDR, val) |
1527 | #define bfin_read_DMA21_IRQ_STATUS() bfin_read16(DMA21_IRQ_STATUS) | 1523 | #define bfin_read_DMA21_IRQ_STATUS() bfin_read16(DMA21_IRQ_STATUS) |
1528 | #define bfin_write_DMA21_IRQ_STATUS(val) bfin_write16(DMA21_IRQ_STATUS, val) | 1524 | #define bfin_write_DMA21_IRQ_STATUS(val) bfin_write16(DMA21_IRQ_STATUS, val) |
1529 | #define bfin_read_DMA21_PERIPHERAL_MAP() bfin_read16(DMA21_PERIPHERAL_MAP) | 1525 | #define bfin_read_DMA21_PERIPHERAL_MAP() bfin_read16(DMA21_PERIPHERAL_MAP) |
@@ -1536,23 +1532,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1536 | /* DMA Channel 22 Registers */ | 1532 | /* DMA Channel 22 Registers */ |
1537 | 1533 | ||
1538 | #define bfin_read_DMA22_NEXT_DESC_PTR() bfin_read32(DMA22_NEXT_DESC_PTR) | 1534 | #define bfin_read_DMA22_NEXT_DESC_PTR() bfin_read32(DMA22_NEXT_DESC_PTR) |
1539 | #define bfin_write_DMA22_NEXT_DESC_PTR(val) bfin_write32(DMA22_NEXT_DESC_PTR) | 1535 | #define bfin_write_DMA22_NEXT_DESC_PTR(val) bfin_write32(DMA22_NEXT_DESC_PTR, val) |
1540 | #define bfin_read_DMA22_START_ADDR() bfin_read32(DMA22_START_ADDR) | 1536 | #define bfin_read_DMA22_START_ADDR() bfin_read32(DMA22_START_ADDR) |
1541 | #define bfin_write_DMA22_START_ADDR(val) bfin_write32(DMA22_START_ADDR) | 1537 | #define bfin_write_DMA22_START_ADDR(val) bfin_write32(DMA22_START_ADDR, val) |
1542 | #define bfin_read_DMA22_CONFIG() bfin_read16(DMA22_CONFIG) | 1538 | #define bfin_read_DMA22_CONFIG() bfin_read16(DMA22_CONFIG) |
1543 | #define bfin_write_DMA22_CONFIG(val) bfin_write16(DMA22_CONFIG, val) | 1539 | #define bfin_write_DMA22_CONFIG(val) bfin_write16(DMA22_CONFIG, val) |
1544 | #define bfin_read_DMA22_X_COUNT() bfin_read16(DMA22_X_COUNT) | 1540 | #define bfin_read_DMA22_X_COUNT() bfin_read16(DMA22_X_COUNT) |
1545 | #define bfin_write_DMA22_X_COUNT(val) bfin_write16(DMA22_X_COUNT, val) | 1541 | #define bfin_write_DMA22_X_COUNT(val) bfin_write16(DMA22_X_COUNT, val) |
1546 | #define bfin_read_DMA22_X_MODIFY() bfin_read16(DMA22_X_MODIFY) | 1542 | #define bfin_read_DMA22_X_MODIFY() bfin_read16(DMA22_X_MODIFY) |
1547 | #define bfin_write_DMA22_X_MODIFY(val) bfin_write16(DMA22_X_MODIFY) | 1543 | #define bfin_write_DMA22_X_MODIFY(val) bfin_write16(DMA22_X_MODIFY, val) |
1548 | #define bfin_read_DMA22_Y_COUNT() bfin_read16(DMA22_Y_COUNT) | 1544 | #define bfin_read_DMA22_Y_COUNT() bfin_read16(DMA22_Y_COUNT) |
1549 | #define bfin_write_DMA22_Y_COUNT(val) bfin_write16(DMA22_Y_COUNT, val) | 1545 | #define bfin_write_DMA22_Y_COUNT(val) bfin_write16(DMA22_Y_COUNT, val) |
1550 | #define bfin_read_DMA22_Y_MODIFY() bfin_read16(DMA22_Y_MODIFY) | 1546 | #define bfin_read_DMA22_Y_MODIFY() bfin_read16(DMA22_Y_MODIFY) |
1551 | #define bfin_write_DMA22_Y_MODIFY(val) bfin_write16(DMA22_Y_MODIFY) | 1547 | #define bfin_write_DMA22_Y_MODIFY(val) bfin_write16(DMA22_Y_MODIFY, val) |
1552 | #define bfin_read_DMA22_CURR_DESC_PTR() bfin_read32(DMA22_CURR_DESC_PTR) | 1548 | #define bfin_read_DMA22_CURR_DESC_PTR() bfin_read32(DMA22_CURR_DESC_PTR) |
1553 | #define bfin_write_DMA22_CURR_DESC_PTR(val) bfin_write32(DMA22_CURR_DESC_PTR) | 1549 | #define bfin_write_DMA22_CURR_DESC_PTR(val) bfin_write32(DMA22_CURR_DESC_PTR, val) |
1554 | #define bfin_read_DMA22_CURR_ADDR() bfin_read32(DMA22_CURR_ADDR) | 1550 | #define bfin_read_DMA22_CURR_ADDR() bfin_read32(DMA22_CURR_ADDR) |
1555 | #define bfin_write_DMA22_CURR_ADDR(val) bfin_write32(DMA22_CURR_ADDR) | 1551 | #define bfin_write_DMA22_CURR_ADDR(val) bfin_write32(DMA22_CURR_ADDR, val) |
1556 | #define bfin_read_DMA22_IRQ_STATUS() bfin_read16(DMA22_IRQ_STATUS) | 1552 | #define bfin_read_DMA22_IRQ_STATUS() bfin_read16(DMA22_IRQ_STATUS) |
1557 | #define bfin_write_DMA22_IRQ_STATUS(val) bfin_write16(DMA22_IRQ_STATUS, val) | 1553 | #define bfin_write_DMA22_IRQ_STATUS(val) bfin_write16(DMA22_IRQ_STATUS, val) |
1558 | #define bfin_read_DMA22_PERIPHERAL_MAP() bfin_read16(DMA22_PERIPHERAL_MAP) | 1554 | #define bfin_read_DMA22_PERIPHERAL_MAP() bfin_read16(DMA22_PERIPHERAL_MAP) |
@@ -1565,23 +1561,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1565 | /* DMA Channel 23 Registers */ | 1561 | /* DMA Channel 23 Registers */ |
1566 | 1562 | ||
1567 | #define bfin_read_DMA23_NEXT_DESC_PTR() bfin_read32(DMA23_NEXT_DESC_PTR) | 1563 | #define bfin_read_DMA23_NEXT_DESC_PTR() bfin_read32(DMA23_NEXT_DESC_PTR) |
1568 | #define bfin_write_DMA23_NEXT_DESC_PTR(val) bfin_write32(DMA23_NEXT_DESC_PTR) | 1564 | #define bfin_write_DMA23_NEXT_DESC_PTR(val) bfin_write32(DMA23_NEXT_DESC_PTR, val) |
1569 | #define bfin_read_DMA23_START_ADDR() bfin_read32(DMA23_START_ADDR) | 1565 | #define bfin_read_DMA23_START_ADDR() bfin_read32(DMA23_START_ADDR) |
1570 | #define bfin_write_DMA23_START_ADDR(val) bfin_write32(DMA23_START_ADDR) | 1566 | #define bfin_write_DMA23_START_ADDR(val) bfin_write32(DMA23_START_ADDR, val) |
1571 | #define bfin_read_DMA23_CONFIG() bfin_read16(DMA23_CONFIG) | 1567 | #define bfin_read_DMA23_CONFIG() bfin_read16(DMA23_CONFIG) |
1572 | #define bfin_write_DMA23_CONFIG(val) bfin_write16(DMA23_CONFIG, val) | 1568 | #define bfin_write_DMA23_CONFIG(val) bfin_write16(DMA23_CONFIG, val) |
1573 | #define bfin_read_DMA23_X_COUNT() bfin_read16(DMA23_X_COUNT) | 1569 | #define bfin_read_DMA23_X_COUNT() bfin_read16(DMA23_X_COUNT) |
1574 | #define bfin_write_DMA23_X_COUNT(val) bfin_write16(DMA23_X_COUNT, val) | 1570 | #define bfin_write_DMA23_X_COUNT(val) bfin_write16(DMA23_X_COUNT, val) |
1575 | #define bfin_read_DMA23_X_MODIFY() bfin_read16(DMA23_X_MODIFY) | 1571 | #define bfin_read_DMA23_X_MODIFY() bfin_read16(DMA23_X_MODIFY) |
1576 | #define bfin_write_DMA23_X_MODIFY(val) bfin_write16(DMA23_X_MODIFY) | 1572 | #define bfin_write_DMA23_X_MODIFY(val) bfin_write16(DMA23_X_MODIFY, val) |
1577 | #define bfin_read_DMA23_Y_COUNT() bfin_read16(DMA23_Y_COUNT) | 1573 | #define bfin_read_DMA23_Y_COUNT() bfin_read16(DMA23_Y_COUNT) |
1578 | #define bfin_write_DMA23_Y_COUNT(val) bfin_write16(DMA23_Y_COUNT, val) | 1574 | #define bfin_write_DMA23_Y_COUNT(val) bfin_write16(DMA23_Y_COUNT, val) |
1579 | #define bfin_read_DMA23_Y_MODIFY() bfin_read16(DMA23_Y_MODIFY) | 1575 | #define bfin_read_DMA23_Y_MODIFY() bfin_read16(DMA23_Y_MODIFY) |
1580 | #define bfin_write_DMA23_Y_MODIFY(val) bfin_write16(DMA23_Y_MODIFY) | 1576 | #define bfin_write_DMA23_Y_MODIFY(val) bfin_write16(DMA23_Y_MODIFY, val) |
1581 | #define bfin_read_DMA23_CURR_DESC_PTR() bfin_read32(DMA23_CURR_DESC_PTR) | 1577 | #define bfin_read_DMA23_CURR_DESC_PTR() bfin_read32(DMA23_CURR_DESC_PTR) |
1582 | #define bfin_write_DMA23_CURR_DESC_PTR(val) bfin_write32(DMA23_CURR_DESC_PTR) | 1578 | #define bfin_write_DMA23_CURR_DESC_PTR(val) bfin_write32(DMA23_CURR_DESC_PTR, val) |
1583 | #define bfin_read_DMA23_CURR_ADDR() bfin_read32(DMA23_CURR_ADDR) | 1579 | #define bfin_read_DMA23_CURR_ADDR() bfin_read32(DMA23_CURR_ADDR) |
1584 | #define bfin_write_DMA23_CURR_ADDR(val) bfin_write32(DMA23_CURR_ADDR) | 1580 | #define bfin_write_DMA23_CURR_ADDR(val) bfin_write32(DMA23_CURR_ADDR, val) |
1585 | #define bfin_read_DMA23_IRQ_STATUS() bfin_read16(DMA23_IRQ_STATUS) | 1581 | #define bfin_read_DMA23_IRQ_STATUS() bfin_read16(DMA23_IRQ_STATUS) |
1586 | #define bfin_write_DMA23_IRQ_STATUS(val) bfin_write16(DMA23_IRQ_STATUS, val) | 1582 | #define bfin_write_DMA23_IRQ_STATUS(val) bfin_write16(DMA23_IRQ_STATUS, val) |
1587 | #define bfin_read_DMA23_PERIPHERAL_MAP() bfin_read16(DMA23_PERIPHERAL_MAP) | 1583 | #define bfin_read_DMA23_PERIPHERAL_MAP() bfin_read16(DMA23_PERIPHERAL_MAP) |
@@ -1594,23 +1590,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1594 | /* MDMA Stream 2 Registers */ | 1590 | /* MDMA Stream 2 Registers */ |
1595 | 1591 | ||
1596 | #define bfin_read_MDMA_D2_NEXT_DESC_PTR() bfin_read32(MDMA_D2_NEXT_DESC_PTR) | 1592 | #define bfin_read_MDMA_D2_NEXT_DESC_PTR() bfin_read32(MDMA_D2_NEXT_DESC_PTR) |
1597 | #define bfin_write_MDMA_D2_NEXT_DESC_PTR(val) bfin_write32(MDMA_D2_NEXT_DESC_PTR) | 1593 | #define bfin_write_MDMA_D2_NEXT_DESC_PTR(val) bfin_write32(MDMA_D2_NEXT_DESC_PTR, val) |
1598 | #define bfin_read_MDMA_D2_START_ADDR() bfin_read32(MDMA_D2_START_ADDR) | 1594 | #define bfin_read_MDMA_D2_START_ADDR() bfin_read32(MDMA_D2_START_ADDR) |
1599 | #define bfin_write_MDMA_D2_START_ADDR(val) bfin_write32(MDMA_D2_START_ADDR) | 1595 | #define bfin_write_MDMA_D2_START_ADDR(val) bfin_write32(MDMA_D2_START_ADDR, val) |
1600 | #define bfin_read_MDMA_D2_CONFIG() bfin_read16(MDMA_D2_CONFIG) | 1596 | #define bfin_read_MDMA_D2_CONFIG() bfin_read16(MDMA_D2_CONFIG) |
1601 | #define bfin_write_MDMA_D2_CONFIG(val) bfin_write16(MDMA_D2_CONFIG, val) | 1597 | #define bfin_write_MDMA_D2_CONFIG(val) bfin_write16(MDMA_D2_CONFIG, val) |
1602 | #define bfin_read_MDMA_D2_X_COUNT() bfin_read16(MDMA_D2_X_COUNT) | 1598 | #define bfin_read_MDMA_D2_X_COUNT() bfin_read16(MDMA_D2_X_COUNT) |
1603 | #define bfin_write_MDMA_D2_X_COUNT(val) bfin_write16(MDMA_D2_X_COUNT, val) | 1599 | #define bfin_write_MDMA_D2_X_COUNT(val) bfin_write16(MDMA_D2_X_COUNT, val) |
1604 | #define bfin_read_MDMA_D2_X_MODIFY() bfin_read16(MDMA_D2_X_MODIFY) | 1600 | #define bfin_read_MDMA_D2_X_MODIFY() bfin_read16(MDMA_D2_X_MODIFY) |
1605 | #define bfin_write_MDMA_D2_X_MODIFY(val) bfin_write16(MDMA_D2_X_MODIFY) | 1601 | #define bfin_write_MDMA_D2_X_MODIFY(val) bfin_write16(MDMA_D2_X_MODIFY, val) |
1606 | #define bfin_read_MDMA_D2_Y_COUNT() bfin_read16(MDMA_D2_Y_COUNT) | 1602 | #define bfin_read_MDMA_D2_Y_COUNT() bfin_read16(MDMA_D2_Y_COUNT) |
1607 | #define bfin_write_MDMA_D2_Y_COUNT(val) bfin_write16(MDMA_D2_Y_COUNT, val) | 1603 | #define bfin_write_MDMA_D2_Y_COUNT(val) bfin_write16(MDMA_D2_Y_COUNT, val) |
1608 | #define bfin_read_MDMA_D2_Y_MODIFY() bfin_read16(MDMA_D2_Y_MODIFY) | 1604 | #define bfin_read_MDMA_D2_Y_MODIFY() bfin_read16(MDMA_D2_Y_MODIFY) |
1609 | #define bfin_write_MDMA_D2_Y_MODIFY(val) bfin_write16(MDMA_D2_Y_MODIFY) | 1605 | #define bfin_write_MDMA_D2_Y_MODIFY(val) bfin_write16(MDMA_D2_Y_MODIFY, val) |
1610 | #define bfin_read_MDMA_D2_CURR_DESC_PTR() bfin_read32(MDMA_D2_CURR_DESC_PTR) | 1606 | #define bfin_read_MDMA_D2_CURR_DESC_PTR() bfin_read32(MDMA_D2_CURR_DESC_PTR) |
1611 | #define bfin_write_MDMA_D2_CURR_DESC_PTR(val) bfin_write32(MDMA_D2_CURR_DESC_PTR) | 1607 | #define bfin_write_MDMA_D2_CURR_DESC_PTR(val) bfin_write32(MDMA_D2_CURR_DESC_PTR, val) |
1612 | #define bfin_read_MDMA_D2_CURR_ADDR() bfin_read32(MDMA_D2_CURR_ADDR) | 1608 | #define bfin_read_MDMA_D2_CURR_ADDR() bfin_read32(MDMA_D2_CURR_ADDR) |
1613 | #define bfin_write_MDMA_D2_CURR_ADDR(val) bfin_write32(MDMA_D2_CURR_ADDR) | 1609 | #define bfin_write_MDMA_D2_CURR_ADDR(val) bfin_write32(MDMA_D2_CURR_ADDR, val) |
1614 | #define bfin_read_MDMA_D2_IRQ_STATUS() bfin_read16(MDMA_D2_IRQ_STATUS) | 1610 | #define bfin_read_MDMA_D2_IRQ_STATUS() bfin_read16(MDMA_D2_IRQ_STATUS) |
1615 | #define bfin_write_MDMA_D2_IRQ_STATUS(val) bfin_write16(MDMA_D2_IRQ_STATUS, val) | 1611 | #define bfin_write_MDMA_D2_IRQ_STATUS(val) bfin_write16(MDMA_D2_IRQ_STATUS, val) |
1616 | #define bfin_read_MDMA_D2_PERIPHERAL_MAP() bfin_read16(MDMA_D2_PERIPHERAL_MAP) | 1612 | #define bfin_read_MDMA_D2_PERIPHERAL_MAP() bfin_read16(MDMA_D2_PERIPHERAL_MAP) |
@@ -1620,23 +1616,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1620 | #define bfin_read_MDMA_D2_CURR_Y_COUNT() bfin_read16(MDMA_D2_CURR_Y_COUNT) | 1616 | #define bfin_read_MDMA_D2_CURR_Y_COUNT() bfin_read16(MDMA_D2_CURR_Y_COUNT) |
1621 | #define bfin_write_MDMA_D2_CURR_Y_COUNT(val) bfin_write16(MDMA_D2_CURR_Y_COUNT, val) | 1617 | #define bfin_write_MDMA_D2_CURR_Y_COUNT(val) bfin_write16(MDMA_D2_CURR_Y_COUNT, val) |
1622 | #define bfin_read_MDMA_S2_NEXT_DESC_PTR() bfin_read32(MDMA_S2_NEXT_DESC_PTR) | 1618 | #define bfin_read_MDMA_S2_NEXT_DESC_PTR() bfin_read32(MDMA_S2_NEXT_DESC_PTR) |
1623 | #define bfin_write_MDMA_S2_NEXT_DESC_PTR(val) bfin_write32(MDMA_S2_NEXT_DESC_PTR) | 1619 | #define bfin_write_MDMA_S2_NEXT_DESC_PTR(val) bfin_write32(MDMA_S2_NEXT_DESC_PTR, val) |
1624 | #define bfin_read_MDMA_S2_START_ADDR() bfin_read32(MDMA_S2_START_ADDR) | 1620 | #define bfin_read_MDMA_S2_START_ADDR() bfin_read32(MDMA_S2_START_ADDR) |
1625 | #define bfin_write_MDMA_S2_START_ADDR(val) bfin_write32(MDMA_S2_START_ADDR) | 1621 | #define bfin_write_MDMA_S2_START_ADDR(val) bfin_write32(MDMA_S2_START_ADDR, val) |
1626 | #define bfin_read_MDMA_S2_CONFIG() bfin_read16(MDMA_S2_CONFIG) | 1622 | #define bfin_read_MDMA_S2_CONFIG() bfin_read16(MDMA_S2_CONFIG) |
1627 | #define bfin_write_MDMA_S2_CONFIG(val) bfin_write16(MDMA_S2_CONFIG, val) | 1623 | #define bfin_write_MDMA_S2_CONFIG(val) bfin_write16(MDMA_S2_CONFIG, val) |
1628 | #define bfin_read_MDMA_S2_X_COUNT() bfin_read16(MDMA_S2_X_COUNT) | 1624 | #define bfin_read_MDMA_S2_X_COUNT() bfin_read16(MDMA_S2_X_COUNT) |
1629 | #define bfin_write_MDMA_S2_X_COUNT(val) bfin_write16(MDMA_S2_X_COUNT, val) | 1625 | #define bfin_write_MDMA_S2_X_COUNT(val) bfin_write16(MDMA_S2_X_COUNT, val) |
1630 | #define bfin_read_MDMA_S2_X_MODIFY() bfin_read16(MDMA_S2_X_MODIFY) | 1626 | #define bfin_read_MDMA_S2_X_MODIFY() bfin_read16(MDMA_S2_X_MODIFY) |
1631 | #define bfin_write_MDMA_S2_X_MODIFY(val) bfin_write16(MDMA_S2_X_MODIFY) | 1627 | #define bfin_write_MDMA_S2_X_MODIFY(val) bfin_write16(MDMA_S2_X_MODIFY, val) |
1632 | #define bfin_read_MDMA_S2_Y_COUNT() bfin_read16(MDMA_S2_Y_COUNT) | 1628 | #define bfin_read_MDMA_S2_Y_COUNT() bfin_read16(MDMA_S2_Y_COUNT) |
1633 | #define bfin_write_MDMA_S2_Y_COUNT(val) bfin_write16(MDMA_S2_Y_COUNT, val) | 1629 | #define bfin_write_MDMA_S2_Y_COUNT(val) bfin_write16(MDMA_S2_Y_COUNT, val) |
1634 | #define bfin_read_MDMA_S2_Y_MODIFY() bfin_read16(MDMA_S2_Y_MODIFY) | 1630 | #define bfin_read_MDMA_S2_Y_MODIFY() bfin_read16(MDMA_S2_Y_MODIFY) |
1635 | #define bfin_write_MDMA_S2_Y_MODIFY(val) bfin_write16(MDMA_S2_Y_MODIFY) | 1631 | #define bfin_write_MDMA_S2_Y_MODIFY(val) bfin_write16(MDMA_S2_Y_MODIFY, val) |
1636 | #define bfin_read_MDMA_S2_CURR_DESC_PTR() bfin_read32(MDMA_S2_CURR_DESC_PTR) | 1632 | #define bfin_read_MDMA_S2_CURR_DESC_PTR() bfin_read32(MDMA_S2_CURR_DESC_PTR) |
1637 | #define bfin_write_MDMA_S2_CURR_DESC_PTR(val) bfin_write32(MDMA_S2_CURR_DESC_PTR) | 1633 | #define bfin_write_MDMA_S2_CURR_DESC_PTR(val) bfin_write32(MDMA_S2_CURR_DESC_PTR, val) |
1638 | #define bfin_read_MDMA_S2_CURR_ADDR() bfin_read32(MDMA_S2_CURR_ADDR) | 1634 | #define bfin_read_MDMA_S2_CURR_ADDR() bfin_read32(MDMA_S2_CURR_ADDR) |
1639 | #define bfin_write_MDMA_S2_CURR_ADDR(val) bfin_write32(MDMA_S2_CURR_ADDR) | 1635 | #define bfin_write_MDMA_S2_CURR_ADDR(val) bfin_write32(MDMA_S2_CURR_ADDR, val) |
1640 | #define bfin_read_MDMA_S2_IRQ_STATUS() bfin_read16(MDMA_S2_IRQ_STATUS) | 1636 | #define bfin_read_MDMA_S2_IRQ_STATUS() bfin_read16(MDMA_S2_IRQ_STATUS) |
1641 | #define bfin_write_MDMA_S2_IRQ_STATUS(val) bfin_write16(MDMA_S2_IRQ_STATUS, val) | 1637 | #define bfin_write_MDMA_S2_IRQ_STATUS(val) bfin_write16(MDMA_S2_IRQ_STATUS, val) |
1642 | #define bfin_read_MDMA_S2_PERIPHERAL_MAP() bfin_read16(MDMA_S2_PERIPHERAL_MAP) | 1638 | #define bfin_read_MDMA_S2_PERIPHERAL_MAP() bfin_read16(MDMA_S2_PERIPHERAL_MAP) |
@@ -1649,23 +1645,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1649 | /* MDMA Stream 3 Registers */ | 1645 | /* MDMA Stream 3 Registers */ |
1650 | 1646 | ||
1651 | #define bfin_read_MDMA_D3_NEXT_DESC_PTR() bfin_read32(MDMA_D3_NEXT_DESC_PTR) | 1647 | #define bfin_read_MDMA_D3_NEXT_DESC_PTR() bfin_read32(MDMA_D3_NEXT_DESC_PTR) |
1652 | #define bfin_write_MDMA_D3_NEXT_DESC_PTR(val) bfin_write32(MDMA_D3_NEXT_DESC_PTR) | 1648 | #define bfin_write_MDMA_D3_NEXT_DESC_PTR(val) bfin_write32(MDMA_D3_NEXT_DESC_PTR, val) |
1653 | #define bfin_read_MDMA_D3_START_ADDR() bfin_read32(MDMA_D3_START_ADDR) | 1649 | #define bfin_read_MDMA_D3_START_ADDR() bfin_read32(MDMA_D3_START_ADDR) |
1654 | #define bfin_write_MDMA_D3_START_ADDR(val) bfin_write32(MDMA_D3_START_ADDR) | 1650 | #define bfin_write_MDMA_D3_START_ADDR(val) bfin_write32(MDMA_D3_START_ADDR, val) |
1655 | #define bfin_read_MDMA_D3_CONFIG() bfin_read16(MDMA_D3_CONFIG) | 1651 | #define bfin_read_MDMA_D3_CONFIG() bfin_read16(MDMA_D3_CONFIG) |
1656 | #define bfin_write_MDMA_D3_CONFIG(val) bfin_write16(MDMA_D3_CONFIG, val) | 1652 | #define bfin_write_MDMA_D3_CONFIG(val) bfin_write16(MDMA_D3_CONFIG, val) |
1657 | #define bfin_read_MDMA_D3_X_COUNT() bfin_read16(MDMA_D3_X_COUNT) | 1653 | #define bfin_read_MDMA_D3_X_COUNT() bfin_read16(MDMA_D3_X_COUNT) |
1658 | #define bfin_write_MDMA_D3_X_COUNT(val) bfin_write16(MDMA_D3_X_COUNT, val) | 1654 | #define bfin_write_MDMA_D3_X_COUNT(val) bfin_write16(MDMA_D3_X_COUNT, val) |
1659 | #define bfin_read_MDMA_D3_X_MODIFY() bfin_read16(MDMA_D3_X_MODIFY) | 1655 | #define bfin_read_MDMA_D3_X_MODIFY() bfin_read16(MDMA_D3_X_MODIFY) |
1660 | #define bfin_write_MDMA_D3_X_MODIFY(val) bfin_write16(MDMA_D3_X_MODIFY) | 1656 | #define bfin_write_MDMA_D3_X_MODIFY(val) bfin_write16(MDMA_D3_X_MODIFY, val) |
1661 | #define bfin_read_MDMA_D3_Y_COUNT() bfin_read16(MDMA_D3_Y_COUNT) | 1657 | #define bfin_read_MDMA_D3_Y_COUNT() bfin_read16(MDMA_D3_Y_COUNT) |
1662 | #define bfin_write_MDMA_D3_Y_COUNT(val) bfin_write16(MDMA_D3_Y_COUNT, val) | 1658 | #define bfin_write_MDMA_D3_Y_COUNT(val) bfin_write16(MDMA_D3_Y_COUNT, val) |
1663 | #define bfin_read_MDMA_D3_Y_MODIFY() bfin_read16(MDMA_D3_Y_MODIFY) | 1659 | #define bfin_read_MDMA_D3_Y_MODIFY() bfin_read16(MDMA_D3_Y_MODIFY) |
1664 | #define bfin_write_MDMA_D3_Y_MODIFY(val) bfin_write16(MDMA_D3_Y_MODIFY) | 1660 | #define bfin_write_MDMA_D3_Y_MODIFY(val) bfin_write16(MDMA_D3_Y_MODIFY, val) |
1665 | #define bfin_read_MDMA_D3_CURR_DESC_PTR() bfin_read32(MDMA_D3_CURR_DESC_PTR) | 1661 | #define bfin_read_MDMA_D3_CURR_DESC_PTR() bfin_read32(MDMA_D3_CURR_DESC_PTR) |
1666 | #define bfin_write_MDMA_D3_CURR_DESC_PTR(val) bfin_write32(MDMA_D3_CURR_DESC_PTR) | 1662 | #define bfin_write_MDMA_D3_CURR_DESC_PTR(val) bfin_write32(MDMA_D3_CURR_DESC_PTR, val) |
1667 | #define bfin_read_MDMA_D3_CURR_ADDR() bfin_read32(MDMA_D3_CURR_ADDR) | 1663 | #define bfin_read_MDMA_D3_CURR_ADDR() bfin_read32(MDMA_D3_CURR_ADDR) |
1668 | #define bfin_write_MDMA_D3_CURR_ADDR(val) bfin_write32(MDMA_D3_CURR_ADDR) | 1664 | #define bfin_write_MDMA_D3_CURR_ADDR(val) bfin_write32(MDMA_D3_CURR_ADDR, val) |
1669 | #define bfin_read_MDMA_D3_IRQ_STATUS() bfin_read16(MDMA_D3_IRQ_STATUS) | 1665 | #define bfin_read_MDMA_D3_IRQ_STATUS() bfin_read16(MDMA_D3_IRQ_STATUS) |
1670 | #define bfin_write_MDMA_D3_IRQ_STATUS(val) bfin_write16(MDMA_D3_IRQ_STATUS, val) | 1666 | #define bfin_write_MDMA_D3_IRQ_STATUS(val) bfin_write16(MDMA_D3_IRQ_STATUS, val) |
1671 | #define bfin_read_MDMA_D3_PERIPHERAL_MAP() bfin_read16(MDMA_D3_PERIPHERAL_MAP) | 1667 | #define bfin_read_MDMA_D3_PERIPHERAL_MAP() bfin_read16(MDMA_D3_PERIPHERAL_MAP) |
@@ -1675,23 +1671,23 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
1675 | #define bfin_read_MDMA_D3_CURR_Y_COUNT() bfin_read16(MDMA_D3_CURR_Y_COUNT) | 1671 | #define bfin_read_MDMA_D3_CURR_Y_COUNT() bfin_read16(MDMA_D3_CURR_Y_COUNT) |
1676 | #define bfin_write_MDMA_D3_CURR_Y_COUNT(val) bfin_write16(MDMA_D3_CURR_Y_COUNT, val) | 1672 | #define bfin_write_MDMA_D3_CURR_Y_COUNT(val) bfin_write16(MDMA_D3_CURR_Y_COUNT, val) |
1677 | #define bfin_read_MDMA_S3_NEXT_DESC_PTR() bfin_read32(MDMA_S3_NEXT_DESC_PTR) | 1673 | #define bfin_read_MDMA_S3_NEXT_DESC_PTR() bfin_read32(MDMA_S3_NEXT_DESC_PTR) |
1678 | #define bfin_write_MDMA_S3_NEXT_DESC_PTR(val) bfin_write32(MDMA_S3_NEXT_DESC_PTR) | 1674 | #define bfin_write_MDMA_S3_NEXT_DESC_PTR(val) bfin_write32(MDMA_S3_NEXT_DESC_PTR, val) |
1679 | #define bfin_read_MDMA_S3_START_ADDR() bfin_read32(MDMA_S3_START_ADDR) | 1675 | #define bfin_read_MDMA_S3_START_ADDR() bfin_read32(MDMA_S3_START_ADDR) |
1680 | #define bfin_write_MDMA_S3_START_ADDR(val) bfin_write32(MDMA_S3_START_ADDR) | 1676 | #define bfin_write_MDMA_S3_START_ADDR(val) bfin_write32(MDMA_S3_START_ADDR, val) |
1681 | #define bfin_read_MDMA_S3_CONFIG() bfin_read16(MDMA_S3_CONFIG) | 1677 | #define bfin_read_MDMA_S3_CONFIG() bfin_read16(MDMA_S3_CONFIG) |
1682 | #define bfin_write_MDMA_S3_CONFIG(val) bfin_write16(MDMA_S3_CONFIG, val) | 1678 | #define bfin_write_MDMA_S3_CONFIG(val) bfin_write16(MDMA_S3_CONFIG, val) |
1683 | #define bfin_read_MDMA_S3_X_COUNT() bfin_read16(MDMA_S3_X_COUNT) | 1679 | #define bfin_read_MDMA_S3_X_COUNT() bfin_read16(MDMA_S3_X_COUNT) |
1684 | #define bfin_write_MDMA_S3_X_COUNT(val) bfin_write16(MDMA_S3_X_COUNT, val) | 1680 | #define bfin_write_MDMA_S3_X_COUNT(val) bfin_write16(MDMA_S3_X_COUNT, val) |
1685 | #define bfin_read_MDMA_S3_X_MODIFY() bfin_read16(MDMA_S3_X_MODIFY) | 1681 | #define bfin_read_MDMA_S3_X_MODIFY() bfin_read16(MDMA_S3_X_MODIFY) |
1686 | #define bfin_write_MDMA_S3_X_MODIFY(val) bfin_write16(MDMA_S3_X_MODIFY) | 1682 | #define bfin_write_MDMA_S3_X_MODIFY(val) bfin_write16(MDMA_S3_X_MODIFY, val) |
1687 | #define bfin_read_MDMA_S3_Y_COUNT() bfin_read16(MDMA_S3_Y_COUNT) | 1683 | #define bfin_read_MDMA_S3_Y_COUNT() bfin_read16(MDMA_S3_Y_COUNT) |
1688 | #define bfin_write_MDMA_S3_Y_COUNT(val) bfin_write16(MDMA_S3_Y_COUNT, val) | 1684 | #define bfin_write_MDMA_S3_Y_COUNT(val) bfin_write16(MDMA_S3_Y_COUNT, val) |
1689 | #define bfin_read_MDMA_S3_Y_MODIFY() bfin_read16(MDMA_S3_Y_MODIFY) | 1685 | #define bfin_read_MDMA_S3_Y_MODIFY() bfin_read16(MDMA_S3_Y_MODIFY) |
1690 | #define bfin_write_MDMA_S3_Y_MODIFY(val) bfin_write16(MDMA_S3_Y_MODIFY) | 1686 | #define bfin_write_MDMA_S3_Y_MODIFY(val) bfin_write16(MDMA_S3_Y_MODIFY, val) |
1691 | #define bfin_read_MDMA_S3_CURR_DESC_PTR() bfin_read32(MDMA_S3_CURR_DESC_PTR) | 1687 | #define bfin_read_MDMA_S3_CURR_DESC_PTR() bfin_read32(MDMA_S3_CURR_DESC_PTR) |
1692 | #define bfin_write_MDMA_S3_CURR_DESC_PTR(val) bfin_write32(MDMA_S3_CURR_DESC_PTR) | 1688 | #define bfin_write_MDMA_S3_CURR_DESC_PTR(val) bfin_write32(MDMA_S3_CURR_DESC_PTR, val) |
1693 | #define bfin_read_MDMA_S3_CURR_ADDR() bfin_read32(MDMA_S3_CURR_ADDR) | 1689 | #define bfin_read_MDMA_S3_CURR_ADDR() bfin_read32(MDMA_S3_CURR_ADDR) |
1694 | #define bfin_write_MDMA_S3_CURR_ADDR(val) bfin_write32(MDMA_S3_CURR_ADDR) | 1690 | #define bfin_write_MDMA_S3_CURR_ADDR(val) bfin_write32(MDMA_S3_CURR_ADDR, val) |
1695 | #define bfin_read_MDMA_S3_IRQ_STATUS() bfin_read16(MDMA_S3_IRQ_STATUS) | 1691 | #define bfin_read_MDMA_S3_IRQ_STATUS() bfin_read16(MDMA_S3_IRQ_STATUS) |
1696 | #define bfin_write_MDMA_S3_IRQ_STATUS(val) bfin_write16(MDMA_S3_IRQ_STATUS, val) | 1692 | #define bfin_write_MDMA_S3_IRQ_STATUS(val) bfin_write16(MDMA_S3_IRQ_STATUS, val) |
1697 | #define bfin_read_MDMA_S3_PERIPHERAL_MAP() bfin_read16(MDMA_S3_PERIPHERAL_MAP) | 1693 | #define bfin_read_MDMA_S3_PERIPHERAL_MAP() bfin_read16(MDMA_S3_PERIPHERAL_MAP) |
diff --git a/include/asm-blackfin/mach-bf548/dma.h b/include/asm-blackfin/mach-bf548/dma.h index 46ff31f20ae5..36a2ef7e7849 100644 --- a/include/asm-blackfin/mach-bf548/dma.h +++ b/include/asm-blackfin/mach-bf548/dma.h | |||
@@ -73,6 +73,4 @@ | |||
73 | 73 | ||
74 | #define MAX_BLACKFIN_DMA_CHANNEL 32 | 74 | #define MAX_BLACKFIN_DMA_CHANNEL 32 |
75 | 75 | ||
76 | extern int channel2irq(unsigned int channel); | ||
77 | extern struct dma_register *base_addr[MAX_BLACKFIN_DMA_CHANNEL]; | ||
78 | #endif | 76 | #endif |
diff --git a/include/asm-blackfin/mach-bf548/mem_init.h b/include/asm-blackfin/mach-bf548/mem_init.h index befc2903d5a5..ab0b863eee66 100644 --- a/include/asm-blackfin/mach-bf548/mem_init.h +++ b/include/asm-blackfin/mach-bf548/mem_init.h | |||
@@ -29,16 +29,19 @@ | |||
29 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 29 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
30 | */ | 30 | */ |
31 | #define MIN_DDR_SCLK(x) (x*(CONFIG_SCLK_HZ/1000/1000)/1000 + 1) | 31 | #define MIN_DDR_SCLK(x) (x*(CONFIG_SCLK_HZ/1000/1000)/1000 + 1) |
32 | #define MAX_DDR_SCLK(x) (x*(CONFIG_SCLK_HZ/1000/1000)/1000) | ||
33 | #define DDR_CLK_HZ(x) (1000*1000*1000/x) | ||
32 | 34 | ||
33 | #if (CONFIG_MEM_MT46V32M16_6T) | 35 | #if (CONFIG_MEM_MT46V32M16_6T) |
34 | #define DDR_SIZE DEVSZ_512 | 36 | #define DDR_SIZE DEVSZ_512 |
35 | #define DDR_WIDTH DEVWD_16 | 37 | #define DDR_WIDTH DEVWD_16 |
38 | #define DDR_MAX_tCK 13 | ||
36 | 39 | ||
37 | #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(60)) | 40 | #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(60)) |
38 | #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(42)) | 41 | #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(42)) |
39 | #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15)) | 42 | #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15)) |
40 | #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(72)) | 43 | #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(72)) |
41 | #define DDR_tREFI DDR_TREFI(MIN_DDR_SCLK(7800)) | 44 | #define DDR_tREFI DDR_TREFI(MAX_DDR_SCLK(7800)) |
42 | 45 | ||
43 | #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15)) | 46 | #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15)) |
44 | #define DDR_tWTR DDR_TWTR(1) | 47 | #define DDR_tWTR DDR_TWTR(1) |
@@ -49,12 +52,13 @@ | |||
49 | #if (CONFIG_MEM_MT46V32M16_5B) | 52 | #if (CONFIG_MEM_MT46V32M16_5B) |
50 | #define DDR_SIZE DEVSZ_512 | 53 | #define DDR_SIZE DEVSZ_512 |
51 | #define DDR_WIDTH DEVWD_16 | 54 | #define DDR_WIDTH DEVWD_16 |
55 | #define DDR_MAX_tCK 13 | ||
52 | 56 | ||
53 | #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(55)) | 57 | #define DDR_tRC DDR_TRC(MIN_DDR_SCLK(55)) |
54 | #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(40)) | 58 | #define DDR_tRAS DDR_TRAS(MIN_DDR_SCLK(40)) |
55 | #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15)) | 59 | #define DDR_tRP DDR_TRP(MIN_DDR_SCLK(15)) |
56 | #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(70)) | 60 | #define DDR_tRFC DDR_TRFC(MIN_DDR_SCLK(70)) |
57 | #define DDR_tREFI DDR_TREFI(MIN_DDR_SCLK(7800)) | 61 | #define DDR_tREFI DDR_TREFI(MAX_DDR_SCLK(7800)) |
58 | 62 | ||
59 | #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15)) | 63 | #define DDR_tRCD DDR_TRCD(MIN_DDR_SCLK(15)) |
60 | #define DDR_tWTR DDR_TWTR(2) | 64 | #define DDR_tWTR DDR_TWTR(2) |
@@ -65,6 +69,7 @@ | |||
65 | #if (CONFIG_MEM_GENERIC_BOARD) | 69 | #if (CONFIG_MEM_GENERIC_BOARD) |
66 | #define DDR_SIZE DEVSZ_512 | 70 | #define DDR_SIZE DEVSZ_512 |
67 | #define DDR_WIDTH DEVWD_16 | 71 | #define DDR_WIDTH DEVWD_16 |
72 | #define DDR_MAX_tCK 13 | ||
68 | 73 | ||
69 | #define DDR_tRCD DDR_TRCD(3) | 74 | #define DDR_tRCD DDR_TRCD(3) |
70 | #define DDR_tWTR DDR_TWTR(2) | 75 | #define DDR_tWTR DDR_TWTR(2) |
@@ -77,14 +82,15 @@ | |||
77 | #define DDR_tREFI DDR_TREFI(1288) | 82 | #define DDR_tREFI DDR_TREFI(1288) |
78 | #endif | 83 | #endif |
79 | 84 | ||
80 | #if (CONFIG_SCLK_HZ <= 133333333) | 85 | #if (CONFIG_SCLK_HZ < DDR_CLK_HZ(DDR_MAX_tCK)) |
81 | #define DDR_CL CL_2 | 86 | # error "CONFIG_SCLK_HZ is too small (<DDR_CLK_HZ(DDR_MAX_tCK) Hz)." |
82 | #elif (CONFIG_SCLK_HZ <= 166666666) | 87 | #elif(CONFIG_SCLK_HZ <= 133333333) |
83 | #define DDR_CL CL_2_5 | 88 | # define DDR_CL CL_2 |
84 | #else | 89 | #else |
85 | #define DDR_CL CL_3 | 90 | # error "CONFIG_SCLK_HZ is too large (>133333333 Hz)." |
86 | #endif | 91 | #endif |
87 | 92 | ||
93 | |||
88 | #define mem_DDRCTL0 (DDR_tRP | DDR_tRAS | DDR_tRC | DDR_tRFC | DDR_tREFI) | 94 | #define mem_DDRCTL0 (DDR_tRP | DDR_tRAS | DDR_tRC | DDR_tRFC | DDR_tREFI) |
89 | #define mem_DDRCTL1 (DDR_DATWIDTH | EXTBANK_1 | DDR_SIZE | DDR_WIDTH | DDR_tWTR \ | 95 | #define mem_DDRCTL1 (DDR_DATWIDTH | EXTBANK_1 | DDR_SIZE | DDR_WIDTH | DDR_tWTR \ |
90 | | DDR_tMRD | DDR_tWR | DDR_tRCD) | 96 | | DDR_tMRD | DDR_tWR | DDR_tRCD) |
diff --git a/include/asm-blackfin/mach-bf561/anomaly.h b/include/asm-blackfin/mach-bf561/anomaly.h index 0c1d46193939..82157caa96a2 100644 --- a/include/asm-blackfin/mach-bf561/anomaly.h +++ b/include/asm-blackfin/mach-bf561/anomaly.h | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | /* This file shoule be up to date with: | 9 | /* This file shoule be up to date with: |
10 | * - Revision O, 11/15/2007; ADSP-BF561 Blackfin Processor Anomaly List | 10 | * - Revision P, 02/08/2008; ADSP-BF561 Blackfin Processor Anomaly List |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _MACH_ANOMALY_H_ | 13 | #ifndef _MACH_ANOMALY_H_ |
@@ -256,10 +256,14 @@ | |||
256 | #define ANOMALY_05000357 (1) | 256 | #define ANOMALY_05000357 (1) |
257 | /* Conflicting Column Address Widths Causes SDRAM Errors */ | 257 | /* Conflicting Column Address Widths Causes SDRAM Errors */ |
258 | #define ANOMALY_05000362 (1) | 258 | #define ANOMALY_05000362 (1) |
259 | /* UART Break Signal Issues */ | ||
260 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
259 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | 261 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ |
260 | #define ANOMALY_05000366 (1) | 262 | #define ANOMALY_05000366 (1) |
261 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | 263 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ |
262 | #define ANOMALY_05000371 (1) | 264 | #define ANOMALY_05000371 (1) |
265 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
266 | #define ANOMALY_05000403 (1) | ||
263 | 267 | ||
264 | /* Anomalies that don't exist on this proc */ | 268 | /* Anomalies that don't exist on this proc */ |
265 | #define ANOMALY_05000158 (0) | 269 | #define ANOMALY_05000158 (0) |
diff --git a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h index b6f513bee56e..8a4e66d1db37 100644 --- a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h +++ b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h | |||
@@ -1,22 +1,38 @@ | |||
1 | /* | ||
2 | * file: include/asm-blackfin/mach-bf561/bfin_serial_5xx.h | ||
3 | * based on: | ||
4 | * author: | ||
5 | * | ||
6 | * created: | ||
7 | * description: | ||
8 | * blackfin serial driver head file | ||
9 | * rev: | ||
10 | * | ||
11 | * modified: | ||
12 | * | ||
13 | * | ||
14 | * bugs: enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | * this program is free software; you can redistribute it and/or modify | ||
17 | * it under the terms of the gnu general public license as published by | ||
18 | * the free software foundation; either version 2, or (at your option) | ||
19 | * any later version. | ||
20 | * | ||
21 | * this program is distributed in the hope that it will be useful, | ||
22 | * but without any warranty; without even the implied warranty of | ||
23 | * merchantability or fitness for a particular purpose. see the | ||
24 | * gnu general public license for more details. | ||
25 | * | ||
26 | * you should have received a copy of the gnu general public license | ||
27 | * along with this program; see the file copying. | ||
28 | * if not, write to the free software foundation, | ||
29 | * 59 temple place - suite 330, boston, ma 02111-1307, usa. | ||
30 | */ | ||
31 | |||
1 | #include <linux/serial.h> | 32 | #include <linux/serial.h> |
2 | #include <asm/dma.h> | 33 | #include <asm/dma.h> |
3 | #include <asm/portmux.h> | 34 | #include <asm/portmux.h> |
4 | 35 | ||
5 | #define NR_PORTS 1 | ||
6 | |||
7 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
8 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
9 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
10 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
11 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
12 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
13 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
14 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
15 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
16 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
17 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
18 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
19 | |||
20 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) | 36 | #define UART_GET_CHAR(uart) bfin_read16(((uart)->port.membase + OFFSET_RBR)) |
21 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) | 37 | #define UART_GET_DLL(uart) bfin_read16(((uart)->port.membase + OFFSET_DLL)) |
22 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) | 38 | #define UART_GET_IER(uart) bfin_read16(((uart)->port.membase + OFFSET_IER)) |
@@ -84,7 +100,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart) | |||
84 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); | 100 | bfin_write16(uart->port.membase + OFFSET_LSR, -1); |
85 | } | 101 | } |
86 | 102 | ||
87 | struct bfin_serial_port bfin_serial_ports[NR_PORTS]; | 103 | struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS]; |
88 | struct bfin_serial_res { | 104 | struct bfin_serial_res { |
89 | unsigned long uart_base_addr; | 105 | unsigned long uart_base_addr; |
90 | int uart_irq; | 106 | int uart_irq; |
@@ -115,7 +131,7 @@ struct bfin_serial_res bfin_serial_resource[] = { | |||
115 | 131 | ||
116 | #define DRIVER_NAME "bfin-uart" | 132 | #define DRIVER_NAME "bfin-uart" |
117 | 133 | ||
118 | int nr_ports = NR_PORTS; | 134 | int nr_ports = BFIN_UART_NR_PORTS; |
119 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) | 135 | static void bfin_serial_hw_init(struct bfin_serial_port *uart) |
120 | { | 136 | { |
121 | 137 | ||
diff --git a/include/asm-blackfin/mach-bf561/bfin_sir.h b/include/asm-blackfin/mach-bf561/bfin_sir.h new file mode 100644 index 000000000000..cefcf8bb505b --- /dev/null +++ b/include/asm-blackfin/mach-bf561/bfin_sir.h | |||
@@ -0,0 +1,120 @@ | |||
1 | /* | ||
2 | * Blackfin Infra-red Driver | ||
3 | * | ||
4 | * Copyright 2006-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * Licensed under the GPL-2 or later. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/serial.h> | ||
13 | #include <asm/dma.h> | ||
14 | #include <asm/portmux.h> | ||
15 | |||
16 | #define SIR_UART_GET_CHAR(port) bfin_read16((port)->membase + OFFSET_RBR) | ||
17 | #define SIR_UART_GET_DLL(port) bfin_read16((port)->membase + OFFSET_DLL) | ||
18 | #define SIR_UART_GET_IER(port) bfin_read16((port)->membase + OFFSET_IER) | ||
19 | #define SIR_UART_GET_DLH(port) bfin_read16((port)->membase + OFFSET_DLH) | ||
20 | #define SIR_UART_GET_IIR(port) bfin_read16((port)->membase + OFFSET_IIR) | ||
21 | #define SIR_UART_GET_LCR(port) bfin_read16((port)->membase + OFFSET_LCR) | ||
22 | #define SIR_UART_GET_GCTL(port) bfin_read16((port)->membase + OFFSET_GCTL) | ||
23 | |||
24 | #define SIR_UART_PUT_CHAR(port, v) bfin_write16(((port)->membase + OFFSET_THR), v) | ||
25 | #define SIR_UART_PUT_DLL(port, v) bfin_write16(((port)->membase + OFFSET_DLL), v) | ||
26 | #define SIR_UART_PUT_IER(port, v) bfin_write16(((port)->membase + OFFSET_IER), v) | ||
27 | #define SIR_UART_PUT_DLH(port, v) bfin_write16(((port)->membase + OFFSET_DLH), v) | ||
28 | #define SIR_UART_PUT_LCR(port, v) bfin_write16(((port)->membase + OFFSET_LCR), v) | ||
29 | #define SIR_UART_PUT_GCTL(port, v) bfin_write16(((port)->membase + OFFSET_GCTL), v) | ||
30 | |||
31 | #ifdef CONFIG_SIR_BFIN_DMA | ||
32 | struct dma_rx_buf { | ||
33 | char *buf; | ||
34 | int head; | ||
35 | int tail; | ||
36 | }; | ||
37 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
38 | |||
39 | struct bfin_sir_port { | ||
40 | unsigned char __iomem *membase; | ||
41 | unsigned int irq; | ||
42 | unsigned int lsr; | ||
43 | unsigned long clk; | ||
44 | struct net_device *dev; | ||
45 | #ifdef CONFIG_SIR_BFIN_DMA | ||
46 | int tx_done; | ||
47 | struct dma_rx_buf rx_dma_buf; | ||
48 | struct timer_list rx_dma_timer; | ||
49 | int rx_dma_nrows; | ||
50 | #endif /* CONFIG_SIR_BFIN_DMA */ | ||
51 | unsigned int tx_dma_channel; | ||
52 | unsigned int rx_dma_channel; | ||
53 | }; | ||
54 | |||
55 | struct bfin_sir_port sir_ports[BFIN_UART_NR_PORTS]; | ||
56 | |||
57 | struct bfin_sir_port_res { | ||
58 | unsigned long base_addr; | ||
59 | int irq; | ||
60 | unsigned int rx_dma_channel; | ||
61 | unsigned int tx_dma_channel; | ||
62 | }; | ||
63 | |||
64 | struct bfin_sir_port_res bfin_sir_port_resource[] = { | ||
65 | #ifdef CONFIG_BFIN_SIR0 | ||
66 | { | ||
67 | 0xFFC00400, | ||
68 | IRQ_UART_RX, | ||
69 | CH_UART_RX, | ||
70 | CH_UART_TX, | ||
71 | }, | ||
72 | #endif | ||
73 | }; | ||
74 | |||
75 | int nr_sirs = ARRAY_SIZE(bfin_sir_port_resource); | ||
76 | |||
77 | struct bfin_sir_self { | ||
78 | struct bfin_sir_port *sir_port; | ||
79 | spinlock_t lock; | ||
80 | unsigned int open; | ||
81 | int speed; | ||
82 | int newspeed; | ||
83 | |||
84 | struct sk_buff *txskb; | ||
85 | struct sk_buff *rxskb; | ||
86 | struct net_device_stats stats; | ||
87 | struct device *dev; | ||
88 | struct irlap_cb *irlap; | ||
89 | struct qos_info qos; | ||
90 | |||
91 | iobuff_t tx_buff; | ||
92 | iobuff_t rx_buff; | ||
93 | |||
94 | struct work_struct work; | ||
95 | int mtt; | ||
96 | }; | ||
97 | |||
98 | static inline unsigned int SIR_UART_GET_LSR(struct bfin_sir_port *port) | ||
99 | { | ||
100 | unsigned int lsr = bfin_read16(port->membase + OFFSET_LSR); | ||
101 | port->lsr |= (lsr & (BI|FE|PE|OE)); | ||
102 | return lsr | port->lsr; | ||
103 | } | ||
104 | |||
105 | static inline void SIR_UART_CLEAR_LSR(struct bfin_sir_port *port) | ||
106 | { | ||
107 | port->lsr = 0; | ||
108 | bfin_read16(port->membase + OFFSET_LSR); | ||
109 | } | ||
110 | |||
111 | #define DRIVER_NAME "bfin_sir" | ||
112 | |||
113 | static void bfin_sir_hw_init(void) | ||
114 | { | ||
115 | #ifdef CONFIG_BFIN_SIR0 | ||
116 | peripheral_request(P_UART0_TX, DRIVER_NAME); | ||
117 | peripheral_request(P_UART0_RX, DRIVER_NAME); | ||
118 | #endif | ||
119 | SSYNC(); | ||
120 | } | ||
diff --git a/include/asm-blackfin/mach-bf561/blackfin.h b/include/asm-blackfin/mach-bf561/blackfin.h index 3a16df2c86d8..0ea8666e6764 100644 --- a/include/asm-blackfin/mach-bf561/blackfin.h +++ b/include/asm-blackfin/mach-bf561/blackfin.h | |||
@@ -69,5 +69,19 @@ | |||
69 | #define bfin_read_SIC_ISR(x) bfin_read32(SICA_ISR0 + (x << 2)) | 69 | #define bfin_read_SIC_ISR(x) bfin_read32(SICA_ISR0 + (x << 2)) |
70 | #define bfin_write_SIC_ISR(x, val) bfin_write32((SICA_ISR0 + (x << 2)), val) | 70 | #define bfin_write_SIC_ISR(x, val) bfin_write32((SICA_ISR0 + (x << 2)), val) |
71 | 71 | ||
72 | #define BFIN_UART_NR_PORTS 1 | ||
73 | |||
74 | #define OFFSET_THR 0x00 /* Transmit Holding register */ | ||
75 | #define OFFSET_RBR 0x00 /* Receive Buffer register */ | ||
76 | #define OFFSET_DLL 0x00 /* Divisor Latch (Low-Byte) */ | ||
77 | #define OFFSET_IER 0x04 /* Interrupt Enable Register */ | ||
78 | #define OFFSET_DLH 0x04 /* Divisor Latch (High-Byte) */ | ||
79 | #define OFFSET_IIR 0x08 /* Interrupt Identification Register */ | ||
80 | #define OFFSET_LCR 0x0C /* Line Control Register */ | ||
81 | #define OFFSET_MCR 0x10 /* Modem Control Register */ | ||
82 | #define OFFSET_LSR 0x14 /* Line Status Register */ | ||
83 | #define OFFSET_MSR 0x18 /* Modem Status Register */ | ||
84 | #define OFFSET_SCR 0x1C /* SCR Scratch Register */ | ||
85 | #define OFFSET_GCTL 0x24 /* Global Control Register */ | ||
72 | 86 | ||
73 | #endif /* _MACH_BLACKFIN_H_ */ | 87 | #endif /* _MACH_BLACKFIN_H_ */ |
diff --git a/include/asm-blackfin/mach-bf561/cdefBF561.h b/include/asm-blackfin/mach-bf561/cdefBF561.h index 1bc8d2f89ccc..b07ffccd66dd 100644 --- a/include/asm-blackfin/mach-bf561/cdefBF561.h +++ b/include/asm-blackfin/mach-bf561/cdefBF561.h | |||
@@ -47,7 +47,30 @@ | |||
47 | 47 | ||
48 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ | 48 | /* Clock and System Control (0xFFC00000 - 0xFFC000FF) */ |
49 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) | 49 | #define bfin_read_PLL_CTL() bfin_read16(PLL_CTL) |
50 | #define bfin_write_PLL_CTL(val) bfin_write16(PLL_CTL,val) | 50 | /* Writing to PLL_CTL initiates a PLL relock sequence. */ |
51 | static __inline__ void bfin_write_PLL_CTL(unsigned int val) | ||
52 | { | ||
53 | unsigned long flags, iwr0, iwr1; | ||
54 | |||
55 | if (val == bfin_read_PLL_CTL()) | ||
56 | return; | ||
57 | |||
58 | local_irq_save(flags); | ||
59 | /* Enable the PLL Wakeup bit in SIC IWR */ | ||
60 | iwr0 = bfin_read32(SICA_IWR0); | ||
61 | iwr1 = bfin_read32(SICA_IWR1); | ||
62 | /* Only allow PPL Wakeup) */ | ||
63 | bfin_write32(SICA_IWR0, IWR_ENABLE(0)); | ||
64 | bfin_write32(SICA_IWR1, 0); | ||
65 | |||
66 | bfin_write16(PLL_CTL, val); | ||
67 | SSYNC(); | ||
68 | asm("IDLE;"); | ||
69 | |||
70 | bfin_write32(SICA_IWR0, iwr0); | ||
71 | bfin_write32(SICA_IWR1, iwr1); | ||
72 | local_irq_restore(flags); | ||
73 | } | ||
51 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) | 74 | #define bfin_read_PLL_DIV() bfin_read16(PLL_DIV) |
52 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) | 75 | #define bfin_write_PLL_DIV(val) bfin_write16(PLL_DIV,val) |
53 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) | 76 | #define bfin_read_VR_CTL() bfin_read16(VR_CTL) |
@@ -56,6 +79,10 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
56 | { | 79 | { |
57 | unsigned long flags, iwr0, iwr1; | 80 | unsigned long flags, iwr0, iwr1; |
58 | 81 | ||
82 | if (val == bfin_read_VR_CTL()) | ||
83 | return; | ||
84 | |||
85 | local_irq_save(flags); | ||
59 | /* Enable the PLL Wakeup bit in SIC IWR */ | 86 | /* Enable the PLL Wakeup bit in SIC IWR */ |
60 | iwr0 = bfin_read32(SICA_IWR0); | 87 | iwr0 = bfin_read32(SICA_IWR0); |
61 | iwr1 = bfin_read32(SICA_IWR1); | 88 | iwr1 = bfin_read32(SICA_IWR1); |
@@ -65,12 +92,11 @@ static __inline__ void bfin_write_VR_CTL(unsigned int val) | |||
65 | 92 | ||
66 | bfin_write16(VR_CTL, val); | 93 | bfin_write16(VR_CTL, val); |
67 | SSYNC(); | 94 | SSYNC(); |
68 | |||
69 | local_irq_save(flags); | ||
70 | asm("IDLE;"); | 95 | asm("IDLE;"); |
71 | local_irq_restore(flags); | 96 | |
72 | bfin_write32(SICA_IWR0, iwr0); | 97 | bfin_write32(SICA_IWR0, iwr0); |
73 | bfin_write32(SICA_IWR1, iwr1); | 98 | bfin_write32(SICA_IWR1, iwr1); |
99 | local_irq_restore(flags); | ||
74 | } | 100 | } |
75 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) | 101 | #define bfin_read_PLL_STAT() bfin_read16(PLL_STAT) |
76 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) | 102 | #define bfin_write_PLL_STAT(val) bfin_write16(PLL_STAT,val) |
diff --git a/include/asm-blackfin/mach-bf561/defBF561.h b/include/asm-blackfin/mach-bf561/defBF561.h index c3c0eb13c819..366c9b9a0cb7 100644 --- a/include/asm-blackfin/mach-bf561/defBF561.h +++ b/include/asm-blackfin/mach-bf561/defBF561.h | |||
@@ -110,18 +110,23 @@ | |||
110 | #define WDOGB_STAT 0xFFC01208 /* Watchdog Status register */ | 110 | #define WDOGB_STAT 0xFFC01208 /* Watchdog Status register */ |
111 | 111 | ||
112 | /* UART Controller (0xFFC00400 - 0xFFC004FF) */ | 112 | /* UART Controller (0xFFC00400 - 0xFFC004FF) */ |
113 | #define UART_THR 0xFFC00400 /* Transmit Holding register */ | 113 | |
114 | #define UART_RBR 0xFFC00400 /* Receive Buffer register */ | 114 | /* |
115 | #define UART_DLL 0xFFC00400 /* Divisor Latch (Low-Byte) */ | 115 | * Because include/linux/serial_reg.h have defined UART_*, |
116 | #define UART_IER 0xFFC00404 /* Interrupt Enable Register */ | 116 | * So we define blackfin uart regs to BFIN_UART0_*. |
117 | #define UART_DLH 0xFFC00404 /* Divisor Latch (High-Byte) */ | 117 | */ |
118 | #define UART_IIR 0xFFC00408 /* Interrupt Identification Register */ | 118 | #define BFIN_UART_THR 0xFFC00400 /* Transmit Holding register */ |
119 | #define UART_LCR 0xFFC0040C /* Line Control Register */ | 119 | #define BFIN_UART_RBR 0xFFC00400 /* Receive Buffer register */ |
120 | #define UART_MCR 0xFFC00410 /* Modem Control Register */ | 120 | #define BFIN_UART_DLL 0xFFC00400 /* Divisor Latch (Low-Byte) */ |
121 | #define UART_LSR 0xFFC00414 /* Line Status Register */ | 121 | #define BFIN_UART_IER 0xFFC00404 /* Interrupt Enable Register */ |
122 | #define UART_MSR 0xFFC00418 /* Modem Status Register */ | 122 | #define BFIN_UART_DLH 0xFFC00404 /* Divisor Latch (High-Byte) */ |
123 | #define UART_SCR 0xFFC0041C /* SCR Scratch Register */ | 123 | #define BFIN_UART_IIR 0xFFC00408 /* Interrupt Identification Register */ |
124 | #define UART_GCTL 0xFFC00424 /* Global Control Register */ | 124 | #define BFIN_UART_LCR 0xFFC0040C /* Line Control Register */ |
125 | #define BFIN_UART_MCR 0xFFC00410 /* Modem Control Register */ | ||
126 | #define BFIN_UART_LSR 0xFFC00414 /* Line Status Register */ | ||
127 | #define BFIN_UART_MSR 0xFFC00418 /* Modem Status Register */ | ||
128 | #define BFIN_UART_SCR 0xFFC0041C /* SCR Scratch Register */ | ||
129 | #define BFIN_UART_GCTL 0xFFC00424 /* Global Control Register */ | ||
125 | 130 | ||
126 | /* SPI Controller (0xFFC00500 - 0xFFC005FF) */ | 131 | /* SPI Controller (0xFFC00500 - 0xFFC005FF) */ |
127 | #define SPI0_REGBASE 0xFFC00500 | 132 | #define SPI0_REGBASE 0xFFC00500 |
@@ -866,6 +871,8 @@ | |||
866 | /* PLL_DIV Masks */ | 871 | /* PLL_DIV Masks */ |
867 | #define SCLK_DIV(x) (x) /* SCLK = VCO / x */ | 872 | #define SCLK_DIV(x) (x) /* SCLK = VCO / x */ |
868 | 873 | ||
874 | #define CSEL 0x30 /* Core Select */ | ||
875 | #define SSEL 0xf /* System Select */ | ||
869 | #define CCLK_DIV1 0x00000000 /* CCLK = VCO / 1 */ | 876 | #define CCLK_DIV1 0x00000000 /* CCLK = VCO / 1 */ |
870 | #define CCLK_DIV2 0x00000010 /* CCLK = VCO / 2 */ | 877 | #define CCLK_DIV2 0x00000010 /* CCLK = VCO / 2 */ |
871 | #define CCLK_DIV4 0x00000020 /* CCLK = VCO / 4 */ | 878 | #define CCLK_DIV4 0x00000020 /* CCLK = VCO / 4 */ |
diff --git a/include/asm-blackfin/mach-bf561/dma.h b/include/asm-blackfin/mach-bf561/dma.h index 766334b7d8ab..21d982003e75 100644 --- a/include/asm-blackfin/mach-bf561/dma.h +++ b/include/asm-blackfin/mach-bf561/dma.h | |||
@@ -32,7 +32,4 @@ | |||
32 | #define CH_IMEM_STREAM1_SRC 34 | 32 | #define CH_IMEM_STREAM1_SRC 34 |
33 | #define CH_IMEM_STREAM1_DEST 35 | 33 | #define CH_IMEM_STREAM1_DEST 35 |
34 | 34 | ||
35 | extern int channel2irq(unsigned int channel); | ||
36 | extern struct dma_register *base_addr[]; | ||
37 | |||
38 | #endif | 35 | #endif |
diff --git a/include/asm-blackfin/portmux.h b/include/asm-blackfin/portmux.h index 0d3f650d2d99..0807b286cd9e 100644 --- a/include/asm-blackfin/portmux.h +++ b/include/asm-blackfin/portmux.h | |||
@@ -17,8 +17,8 @@ | |||
17 | 17 | ||
18 | int peripheral_request(unsigned short per, const char *label); | 18 | int peripheral_request(unsigned short per, const char *label); |
19 | void peripheral_free(unsigned short per); | 19 | void peripheral_free(unsigned short per); |
20 | int peripheral_request_list(unsigned short per[], const char *label); | 20 | int peripheral_request_list(const unsigned short per[], const char *label); |
21 | void peripheral_free_list(unsigned short per[]); | 21 | void peripheral_free_list(const unsigned short per[]); |
22 | 22 | ||
23 | #include <asm/gpio.h> | 23 | #include <asm/gpio.h> |
24 | #include <asm/mach/portmux.h> | 24 | #include <asm/mach/portmux.h> |
diff --git a/include/asm-blackfin/processor.h b/include/asm-blackfin/processor.h index 1033e5c76011..1c0040724612 100644 --- a/include/asm-blackfin/processor.h +++ b/include/asm-blackfin/processor.h | |||
@@ -26,9 +26,10 @@ static inline void wrusp(unsigned long usp) | |||
26 | 26 | ||
27 | /* | 27 | /* |
28 | * User space process size: 1st byte beyond user address space. | 28 | * User space process size: 1st byte beyond user address space. |
29 | * Fairly meaningless on nommu. Parts of user programs can be scattered | ||
30 | * in a lot of places, so just disable this by setting it to 0xFFFFFFFF. | ||
29 | */ | 31 | */ |
30 | extern unsigned long memory_end; | 32 | #define TASK_SIZE 0xFFFFFFFF |
31 | #define TASK_SIZE (memory_end) | ||
32 | 33 | ||
33 | #ifdef __KERNEL__ | 34 | #ifdef __KERNEL__ |
34 | #define STACK_TOP TASK_SIZE | 35 | #define STACK_TOP TASK_SIZE |
diff --git a/include/asm-blackfin/signal.h b/include/asm-blackfin/signal.h index 0250429b736a..87951d251458 100644 --- a/include/asm-blackfin/signal.h +++ b/include/asm-blackfin/signal.h | |||
@@ -143,7 +143,7 @@ struct sigaction { | |||
143 | #endif /* __KERNEL__ */ | 143 | #endif /* __KERNEL__ */ |
144 | 144 | ||
145 | typedef struct sigaltstack { | 145 | typedef struct sigaltstack { |
146 | void *ss_sp; | 146 | void __user *ss_sp; |
147 | int ss_flags; | 147 | int ss_flags; |
148 | size_t ss_size; | 148 | size_t ss_size; |
149 | } stack_t; | 149 | } stack_t; |
diff --git a/include/asm-blackfin/thread_info.h b/include/asm-blackfin/thread_info.h index 15b99cf4f50b..bc2fe5accf20 100644 --- a/include/asm-blackfin/thread_info.h +++ b/include/asm-blackfin/thread_info.h | |||
@@ -81,14 +81,11 @@ struct thread_info { | |||
81 | #define init_thread_info (init_thread_union.thread_info) | 81 | #define init_thread_info (init_thread_union.thread_info) |
82 | #define init_stack (init_thread_union.stack) | 82 | #define init_stack (init_thread_union.stack) |
83 | 83 | ||
84 | /* How to get the thread information struct from C */ | 84 | /* Given a task stack pointer, you can find its corresponding |
85 | 85 | * thread_info structure just by masking it to the THREAD_SIZE | |
86 | static inline struct thread_info *current_thread_info(void) | 86 | * boundary (currently 8K as you can see above). |
87 | __attribute__ ((__const__)); | ||
88 | |||
89 | /* Given a task stack pointer, you can find it's task structure | ||
90 | * just by masking it to the 8K boundary. | ||
91 | */ | 87 | */ |
88 | __attribute_const__ | ||
92 | static inline struct thread_info *current_thread_info(void) | 89 | static inline struct thread_info *current_thread_info(void) |
93 | { | 90 | { |
94 | struct thread_info *ti; | 91 | struct thread_info *ti; |
diff --git a/include/asm-blackfin/time.h b/include/asm-blackfin/time.h new file mode 100644 index 000000000000..6e5859b6ea32 --- /dev/null +++ b/include/asm-blackfin/time.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * asm-blackfin/time.h: | ||
3 | * | ||
4 | * Copyright 2004-2008 Analog Devices Inc. | ||
5 | * | ||
6 | * Licensed under the GPL-2 or later. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_BLACKFIN_TIME_H | ||
10 | #define _ASM_BLACKFIN_TIME_H | ||
11 | |||
12 | /* | ||
13 | * The way that the Blackfin core timer works is: | ||
14 | * - CCLK is divided by a programmable 8-bit pre-scaler (TSCALE) | ||
15 | * - Every time TSCALE ticks, a 32bit is counted down (TCOUNT) | ||
16 | * | ||
17 | * If you take the fastest clock (1ns, or 1GHz to make the math work easier) | ||
18 | * 10ms is 10,000,000 clock ticks, which fits easy into a 32-bit counter | ||
19 | * (32 bit counter is 4,294,967,296ns or 4.2 seconds) so, we don't need | ||
20 | * to use TSCALE, and program it to zero (which is pass CCLK through). | ||
21 | * If you feel like using it, try to keep HZ * TIMESCALE to some | ||
22 | * value that divides easy (like power of 2). | ||
23 | */ | ||
24 | |||
25 | #ifndef CONFIG_CPU_FREQ | ||
26 | #define TIME_SCALE 1 | ||
27 | #else | ||
28 | /* | ||
29 | * Blackfin CPU frequency scaling supports max Core Clock 1, 1/2 and 1/4 . | ||
30 | * Whenever we change the Core Clock frequency changes we immediately | ||
31 | * adjust the Core Timer Presale Register. This way we don't lose time. | ||
32 | */ | ||
33 | #define TIME_SCALE 4 | ||
34 | #endif | ||
35 | |||
36 | #endif | ||
diff --git a/include/asm-blackfin/timex.h b/include/asm-blackfin/timex.h index 828590117f51..22b0806161bb 100644 --- a/include/asm-blackfin/timex.h +++ b/include/asm-blackfin/timex.h | |||
@@ -1,18 +1,23 @@ | |||
1 | /* blackfin architecture timex specifications: Lineo Inc. 2001 | 1 | /* |
2 | * asm-blackfin/timex.h: cpu cycles! | ||
2 | * | 3 | * |
3 | * Based on: include/asm-m68knommu/timex.h | 4 | * Copyright 2004-2008 Analog Devices Inc. |
5 | * | ||
6 | * Licensed under the GPL-2 or later. | ||
4 | */ | 7 | */ |
5 | 8 | ||
6 | #ifndef _ASMBLACKFIN_TIMEX_H | 9 | #ifndef _ASM_BLACKFIN_TIMEX_H |
7 | #define _ASMBLACKFIN_TIMEX_H | 10 | #define _ASM_BLACKFIN_TIMEX_H |
8 | 11 | ||
9 | #define CLOCK_TICK_RATE 1000000 /* Underlying HZ */ | 12 | #define CLOCK_TICK_RATE 1000000 /* Underlying HZ */ |
10 | 13 | ||
11 | typedef unsigned long cycles_t; | 14 | typedef unsigned long long cycles_t; |
12 | 15 | ||
13 | static inline cycles_t get_cycles(void) | 16 | static inline cycles_t get_cycles(void) |
14 | { | 17 | { |
15 | return 0; | 18 | unsigned long tmp, tmp2; |
19 | __asm__("%0 = cycles; %1 = cycles2;" : "=d"(tmp), "=d"(tmp2)); | ||
20 | return tmp | ((cycles_t)tmp2 << 32); | ||
16 | } | 21 | } |
17 | 22 | ||
18 | #endif | 23 | #endif |
diff --git a/include/asm-blackfin/trace.h b/include/asm-blackfin/trace.h index ef18afbc2101..312b596b9731 100644 --- a/include/asm-blackfin/trace.h +++ b/include/asm-blackfin/trace.h | |||
@@ -62,14 +62,14 @@ extern unsigned long software_trace_buff[]; | |||
62 | preg.L = LO(TBUFCTL); \ | 62 | preg.L = LO(TBUFCTL); \ |
63 | preg.H = HI(TBUFCTL); \ | 63 | preg.H = HI(TBUFCTL); \ |
64 | dreg = [preg]; \ | 64 | dreg = [preg]; \ |
65 | [sp++] = dreg; \ | 65 | [--sp] = dreg; \ |
66 | dreg = 0x1; \ | 66 | dreg = 0x1; \ |
67 | [preg] = dreg; | 67 | [preg] = dreg; |
68 | 68 | ||
69 | #define trace_buffer_restore(preg, dreg) \ | 69 | #define trace_buffer_restore(preg, dreg) \ |
70 | preg.L = LO(TBUFCTL); \ | 70 | preg.L = LO(TBUFCTL); \ |
71 | preg.H = HI(TBUFCTL); \ | 71 | preg.H = HI(TBUFCTL); \ |
72 | dreg = [sp--]; \ | 72 | dreg = [sp++]; \ |
73 | [preg] = dreg; | 73 | [preg] = dreg; |
74 | 74 | ||
75 | #else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */ | 75 | #else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */ |
diff --git a/include/asm-blackfin/uaccess.h b/include/asm-blackfin/uaccess.h index 22a410b8003b..d928b8099056 100644 --- a/include/asm-blackfin/uaccess.h +++ b/include/asm-blackfin/uaccess.h | |||
@@ -133,7 +133,7 @@ static inline int bad_user_access_length(void) | |||
133 | } | 133 | } |
134 | 134 | ||
135 | #define __put_user_bad() (printk(KERN_INFO "put_user_bad %s:%d %s\n",\ | 135 | #define __put_user_bad() (printk(KERN_INFO "put_user_bad %s:%d %s\n",\ |
136 | __FILE__, __LINE__, __FUNCTION__),\ | 136 | __FILE__, __LINE__, __func__),\ |
137 | bad_user_access_length(), (-EFAULT)) | 137 | bad_user_access_length(), (-EFAULT)) |
138 | 138 | ||
139 | /* | 139 | /* |
@@ -177,7 +177,7 @@ static inline int bad_user_access_length(void) | |||
177 | default: \ | 177 | default: \ |
178 | x = 0; \ | 178 | x = 0; \ |
179 | printk(KERN_INFO "get_user_bad: %s:%d %s\n", \ | 179 | printk(KERN_INFO "get_user_bad: %s:%d %s\n", \ |
180 | __FILE__, __LINE__, __FUNCTION__); \ | 180 | __FILE__, __LINE__, __func__); \ |
181 | _err = __get_user_bad(); \ | 181 | _err = __get_user_bad(); \ |
182 | break; \ | 182 | break; \ |
183 | } \ | 183 | } \ |
diff --git a/include/asm-blackfin/unaligned.h b/include/asm-blackfin/unaligned.h index 10081dc241ef..fd8a1d634945 100644 --- a/include/asm-blackfin/unaligned.h +++ b/include/asm-blackfin/unaligned.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef __BFIN_UNALIGNED_H | 1 | #ifndef _ASM_BLACKFIN_UNALIGNED_H |
2 | #define __BFIN_UNALIGNED_H | 2 | #define _ASM_BLACKFIN_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/le_struct.h> |
5 | #include <linux/unaligned/be_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
5 | 7 | ||
6 | #endif /* __BFIN_UNALIGNED_H */ | 8 | #define get_unaligned __get_unaligned_le |
9 | #define put_unaligned __put_unaligned_le | ||
10 | |||
11 | #endif /* _ASM_BLACKFIN_UNALIGNED_H */ | ||
diff --git a/include/asm-blackfin/unistd.h b/include/asm-blackfin/unistd.h index c18a399f6e3e..42955d0c439b 100644 --- a/include/asm-blackfin/unistd.h +++ b/include/asm-blackfin/unistd.h | |||
@@ -265,14 +265,14 @@ | |||
265 | /* 258 __NR_remap_file_pages */ | 265 | /* 258 __NR_remap_file_pages */ |
266 | #define __NR_set_tid_address 259 | 266 | #define __NR_set_tid_address 259 |
267 | #define __NR_timer_create 260 | 267 | #define __NR_timer_create 260 |
268 | #define __NR_timer_settime (__NR_timer_create+1) | 268 | #define __NR_timer_settime 261 |
269 | #define __NR_timer_gettime (__NR_timer_create+2) | 269 | #define __NR_timer_gettime 262 |
270 | #define __NR_timer_getoverrun (__NR_timer_create+3) | 270 | #define __NR_timer_getoverrun 263 |
271 | #define __NR_timer_delete (__NR_timer_create+4) | 271 | #define __NR_timer_delete 264 |
272 | #define __NR_clock_settime (__NR_timer_create+5) | 272 | #define __NR_clock_settime 265 |
273 | #define __NR_clock_gettime (__NR_timer_create+6) | 273 | #define __NR_clock_gettime 266 |
274 | #define __NR_clock_getres (__NR_timer_create+7) | 274 | #define __NR_clock_getres 267 |
275 | #define __NR_clock_nanosleep (__NR_timer_create+8) | 275 | #define __NR_clock_nanosleep 268 |
276 | #define __NR_statfs64 269 | 276 | #define __NR_statfs64 269 |
277 | #define __NR_fstatfs64 270 | 277 | #define __NR_fstatfs64 270 |
278 | #define __NR_tgkill 271 | 278 | #define __NR_tgkill 271 |
@@ -283,11 +283,11 @@ | |||
283 | /* 276 __NR_get_mempolicy */ | 283 | /* 276 __NR_get_mempolicy */ |
284 | /* 277 __NR_set_mempolicy */ | 284 | /* 277 __NR_set_mempolicy */ |
285 | #define __NR_mq_open 278 | 285 | #define __NR_mq_open 278 |
286 | #define __NR_mq_unlink (__NR_mq_open+1) | 286 | #define __NR_mq_unlink 279 |
287 | #define __NR_mq_timedsend (__NR_mq_open+2) | 287 | #define __NR_mq_timedsend 280 |
288 | #define __NR_mq_timedreceive (__NR_mq_open+3) | 288 | #define __NR_mq_timedreceive 281 |
289 | #define __NR_mq_notify (__NR_mq_open+4) | 289 | #define __NR_mq_notify 282 |
290 | #define __NR_mq_getsetattr (__NR_mq_open+5) | 290 | #define __NR_mq_getsetattr 283 |
291 | #define __NR_kexec_load 284 | 291 | #define __NR_kexec_load 284 |
292 | #define __NR_waitid 285 | 292 | #define __NR_waitid 285 |
293 | #define __NR_add_key 286 | 293 | #define __NR_add_key 286 |
diff --git a/include/asm-cris/arch-v10/ide.h b/include/asm-cris/arch-v10/ide.h index ea34e0d0a388..5366e6239328 100644 --- a/include/asm-cris/arch-v10/ide.h +++ b/include/asm-cris/arch-v10/ide.h | |||
@@ -59,22 +59,19 @@ static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port, u | |||
59 | int i; | 59 | int i; |
60 | 60 | ||
61 | /* fill in ports for ATA addresses 0 to 7 */ | 61 | /* fill in ports for ATA addresses 0 to 7 */ |
62 | 62 | for (i = 0; i <= 7; i++) { | |
63 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) { | 63 | hw->io_ports_array[i] = data_port | |
64 | hw->io_ports[i] = data_port | | ||
65 | IO_FIELD(R_ATA_CTRL_DATA, addr, i) | | 64 | IO_FIELD(R_ATA_CTRL_DATA, addr, i) | |
66 | IO_STATE(R_ATA_CTRL_DATA, cs0, active); | 65 | IO_STATE(R_ATA_CTRL_DATA, cs0, active); |
67 | } | 66 | } |
68 | 67 | ||
69 | /* the IDE control register is at ATA address 6, with CS1 active instead of CS0 */ | 68 | /* the IDE control register is at ATA address 6, with CS1 active instead of CS0 */ |
70 | 69 | hw->io_ports.ctl_addr = data_port | | |
71 | hw->io_ports[IDE_CONTROL_OFFSET] = data_port | | ||
72 | IO_FIELD(R_ATA_CTRL_DATA, addr, 6) | | 70 | IO_FIELD(R_ATA_CTRL_DATA, addr, 6) | |
73 | IO_STATE(R_ATA_CTRL_DATA, cs1, active); | 71 | IO_STATE(R_ATA_CTRL_DATA, cs1, active); |
74 | 72 | ||
75 | /* whats this for ? */ | 73 | /* whats this for ? */ |
76 | 74 | hw->io_ports.irq_addr = 0; | |
77 | hw->io_ports[IDE_IRQ_OFFSET] = 0; | ||
78 | } | 75 | } |
79 | 76 | ||
80 | static inline void ide_init_default_hwifs(void) | 77 | static inline void ide_init_default_hwifs(void) |
diff --git a/include/asm-cris/pgtable.h b/include/asm-cris/pgtable.h index a2607575681b..829e7a7d9fb9 100644 --- a/include/asm-cris/pgtable.h +++ b/include/asm-cris/pgtable.h | |||
@@ -115,6 +115,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WR | |||
115 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_MODIFIED; } | 115 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_MODIFIED; } |
116 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 116 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
117 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 117 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
118 | static inline int pte_special(pte_t pte) { return 0; } | ||
118 | 119 | ||
119 | static inline pte_t pte_wrprotect(pte_t pte) | 120 | static inline pte_t pte_wrprotect(pte_t pte) |
120 | { | 121 | { |
@@ -162,6 +163,7 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
162 | } | 163 | } |
163 | return pte; | 164 | return pte; |
164 | } | 165 | } |
166 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
165 | 167 | ||
166 | /* | 168 | /* |
167 | * Conversion functions: convert a page and protection to a page entry, | 169 | * Conversion functions: convert a page and protection to a page entry, |
@@ -229,7 +231,7 @@ static inline void pmd_set(pmd_t * pmdp, pte_t * ptep) | |||
229 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) | 231 | #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) |
230 | 232 | ||
231 | /* to find an entry in a page-table-directory */ | 233 | /* to find an entry in a page-table-directory */ |
232 | static inline pgd_t * pgd_offset(struct mm_struct * mm, unsigned long address) | 234 | static inline pgd_t * pgd_offset(const struct mm_struct *mm, unsigned long address) |
233 | { | 235 | { |
234 | return mm->pgd + pgd_index(address); | 236 | return mm->pgd + pgd_index(address); |
235 | } | 237 | } |
diff --git a/include/asm-cris/unaligned.h b/include/asm-cris/unaligned.h index 7fbbb399f6f1..7b3f3fec567c 100644 --- a/include/asm-cris/unaligned.h +++ b/include/asm-cris/unaligned.h | |||
@@ -1,16 +1,13 @@ | |||
1 | #ifndef __CRIS_UNALIGNED_H | 1 | #ifndef _ASM_CRIS_UNALIGNED_H |
2 | #define __CRIS_UNALIGNED_H | 2 | #define _ASM_CRIS_UNALIGNED_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * CRIS can do unaligned accesses itself. | 5 | * CRIS can do unaligned accesses itself. |
6 | * | ||
7 | * The strange macros are there to make sure these can't | ||
8 | * be misused in a way that makes them not work on other | ||
9 | * architectures where unaligned accesses aren't as simple. | ||
10 | */ | 6 | */ |
7 | #include <linux/unaligned/access_ok.h> | ||
8 | #include <linux/unaligned/generic.h> | ||
11 | 9 | ||
12 | #define get_unaligned(ptr) (*(ptr)) | 10 | #define get_unaligned __get_unaligned_le |
11 | #define put_unaligned __put_unaligned_le | ||
13 | 12 | ||
14 | #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) | 13 | #endif /* _ASM_CRIS_UNALIGNED_H */ |
15 | |||
16 | #endif | ||
diff --git a/include/asm-frv/pgtable.h b/include/asm-frv/pgtable.h index 4e219046fe42..83c51aba534b 100644 --- a/include/asm-frv/pgtable.h +++ b/include/asm-frv/pgtable.h | |||
@@ -380,6 +380,7 @@ static inline pmd_t *pmd_offset(pud_t *dir, unsigned long address) | |||
380 | static inline int pte_dirty(pte_t pte) { return (pte).pte & _PAGE_DIRTY; } | 380 | static inline int pte_dirty(pte_t pte) { return (pte).pte & _PAGE_DIRTY; } |
381 | static inline int pte_young(pte_t pte) { return (pte).pte & _PAGE_ACCESSED; } | 381 | static inline int pte_young(pte_t pte) { return (pte).pte & _PAGE_ACCESSED; } |
382 | static inline int pte_write(pte_t pte) { return !((pte).pte & _PAGE_WP); } | 382 | static inline int pte_write(pte_t pte) { return !((pte).pte & _PAGE_WP); } |
383 | static inline int pte_special(pte_t pte) { return 0; } | ||
383 | 384 | ||
384 | static inline pte_t pte_mkclean(pte_t pte) { (pte).pte &= ~_PAGE_DIRTY; return pte; } | 385 | static inline pte_t pte_mkclean(pte_t pte) { (pte).pte &= ~_PAGE_DIRTY; return pte; } |
385 | static inline pte_t pte_mkold(pte_t pte) { (pte).pte &= ~_PAGE_ACCESSED; return pte; } | 386 | static inline pte_t pte_mkold(pte_t pte) { (pte).pte &= ~_PAGE_ACCESSED; return pte; } |
@@ -387,6 +388,7 @@ static inline pte_t pte_wrprotect(pte_t pte) { (pte).pte |= _PAGE_WP; return pte | |||
387 | static inline pte_t pte_mkdirty(pte_t pte) { (pte).pte |= _PAGE_DIRTY; return pte; } | 388 | static inline pte_t pte_mkdirty(pte_t pte) { (pte).pte |= _PAGE_DIRTY; return pte; } |
388 | static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte |= _PAGE_ACCESSED; return pte; } | 389 | static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte |= _PAGE_ACCESSED; return pte; } |
389 | static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte &= ~_PAGE_WP; return pte; } | 390 | static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte &= ~_PAGE_WP; return pte; } |
391 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
390 | 392 | ||
391 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | 393 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) |
392 | { | 394 | { |
diff --git a/include/asm-frv/unaligned.h b/include/asm-frv/unaligned.h index dc8e9c9bf6bd..64ccc736f2d8 100644 --- a/include/asm-frv/unaligned.h +++ b/include/asm-frv/unaligned.h | |||
@@ -9,194 +9,14 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #ifndef _ASM_UNALIGNED_H | 12 | #ifndef _ASM_FRV_UNALIGNED_H |
13 | #define _ASM_UNALIGNED_H | 13 | #define _ASM_FRV_UNALIGNED_H |
14 | 14 | ||
15 | #include <linux/unaligned/le_byteshift.h> | ||
16 | #include <linux/unaligned/be_byteshift.h> | ||
17 | #include <linux/unaligned/generic.h> | ||
15 | 18 | ||
16 | /* | 19 | #define get_unaligned __get_unaligned_be |
17 | * Unaligned accesses on uClinux can't be performed in a fault handler - the | 20 | #define put_unaligned __put_unaligned_be |
18 | * CPU detects them as imprecise exceptions making this impossible. | ||
19 | * | ||
20 | * With the FR451, however, they are precise, and so we used to fix them up in | ||
21 | * the memory access fault handler. However, instruction bundling make this | ||
22 | * impractical. So, now we fall back to using memcpy. | ||
23 | */ | ||
24 | #ifdef CONFIG_MMU | ||
25 | |||
26 | /* | ||
27 | * The asm statement in the macros below is a way to get GCC to copy a | ||
28 | * value from one variable to another without having any clue it's | ||
29 | * actually doing so, so that it won't have any idea that the values | ||
30 | * in the two variables are related. | ||
31 | */ | ||
32 | |||
33 | #define get_unaligned(ptr) ({ \ | ||
34 | typeof((*(ptr))) __x; \ | ||
35 | void *__ptrcopy; \ | ||
36 | asm("" : "=r" (__ptrcopy) : "0" (ptr)); \ | ||
37 | memcpy(&__x, __ptrcopy, sizeof(*(ptr))); \ | ||
38 | __x; \ | ||
39 | }) | ||
40 | |||
41 | #define put_unaligned(val, ptr) ({ \ | ||
42 | typeof((*(ptr))) __x = (val); \ | ||
43 | void *__ptrcopy; \ | ||
44 | asm("" : "=r" (__ptrcopy) : "0" (ptr)); \ | ||
45 | memcpy(__ptrcopy, &__x, sizeof(*(ptr))); \ | ||
46 | }) | ||
47 | |||
48 | extern int handle_misalignment(unsigned long esr0, unsigned long ear0, unsigned long epcr0); | ||
49 | |||
50 | #else | ||
51 | |||
52 | #define get_unaligned(ptr) \ | ||
53 | ({ \ | ||
54 | typeof(*(ptr)) x; \ | ||
55 | const char *__p = (const char *) (ptr); \ | ||
56 | \ | ||
57 | switch (sizeof(x)) { \ | ||
58 | case 1: \ | ||
59 | x = *(ptr); \ | ||
60 | break; \ | ||
61 | case 2: \ | ||
62 | { \ | ||
63 | uint8_t a; \ | ||
64 | asm(" ldub%I2 %M2,%0 \n" \ | ||
65 | " ldub%I3.p %M3,%1 \n" \ | ||
66 | " slli %0,#8,%0 \n" \ | ||
67 | " or %0,%1,%0 \n" \ | ||
68 | : "=&r"(x), "=&r"(a) \ | ||
69 | : "m"(__p[0]), "m"(__p[1]) \ | ||
70 | ); \ | ||
71 | break; \ | ||
72 | } \ | ||
73 | \ | ||
74 | case 4: \ | ||
75 | { \ | ||
76 | uint8_t a; \ | ||
77 | asm(" ldub%I2 %M2,%0 \n" \ | ||
78 | " ldub%I3.p %M3,%1 \n" \ | ||
79 | " slli %0,#8,%0 \n" \ | ||
80 | " or %0,%1,%0 \n" \ | ||
81 | " ldub%I4.p %M4,%1 \n" \ | ||
82 | " slli %0,#8,%0 \n" \ | ||
83 | " or %0,%1,%0 \n" \ | ||
84 | " ldub%I5.p %M5,%1 \n" \ | ||
85 | " slli %0,#8,%0 \n" \ | ||
86 | " or %0,%1,%0 \n" \ | ||
87 | : "=&r"(x), "=&r"(a) \ | ||
88 | : "m"(__p[0]), "m"(__p[1]), "m"(__p[2]), "m"(__p[3]) \ | ||
89 | ); \ | ||
90 | break; \ | ||
91 | } \ | ||
92 | \ | ||
93 | case 8: \ | ||
94 | { \ | ||
95 | union { uint64_t x; u32 y[2]; } z; \ | ||
96 | uint8_t a; \ | ||
97 | asm(" ldub%I3 %M3,%0 \n" \ | ||
98 | " ldub%I4.p %M4,%2 \n" \ | ||
99 | " slli %0,#8,%0 \n" \ | ||
100 | " or %0,%2,%0 \n" \ | ||
101 | " ldub%I5.p %M5,%2 \n" \ | ||
102 | " slli %0,#8,%0 \n" \ | ||
103 | " or %0,%2,%0 \n" \ | ||
104 | " ldub%I6.p %M6,%2 \n" \ | ||
105 | " slli %0,#8,%0 \n" \ | ||
106 | " or %0,%2,%0 \n" \ | ||
107 | " ldub%I7 %M7,%1 \n" \ | ||
108 | " ldub%I8.p %M8,%2 \n" \ | ||
109 | " slli %1,#8,%1 \n" \ | ||
110 | " or %1,%2,%1 \n" \ | ||
111 | " ldub%I9.p %M9,%2 \n" \ | ||
112 | " slli %1,#8,%1 \n" \ | ||
113 | " or %1,%2,%1 \n" \ | ||
114 | " ldub%I10.p %M10,%2 \n" \ | ||
115 | " slli %1,#8,%1 \n" \ | ||
116 | " or %1,%2,%1 \n" \ | ||
117 | : "=&r"(z.y[0]), "=&r"(z.y[1]), "=&r"(a) \ | ||
118 | : "m"(__p[0]), "m"(__p[1]), "m"(__p[2]), "m"(__p[3]), \ | ||
119 | "m"(__p[4]), "m"(__p[5]), "m"(__p[6]), "m"(__p[7]) \ | ||
120 | ); \ | ||
121 | x = z.x; \ | ||
122 | break; \ | ||
123 | } \ | ||
124 | \ | ||
125 | default: \ | ||
126 | x = 0; \ | ||
127 | BUG(); \ | ||
128 | break; \ | ||
129 | } \ | ||
130 | \ | ||
131 | x; \ | ||
132 | }) | ||
133 | |||
134 | #define put_unaligned(val, ptr) \ | ||
135 | do { \ | ||
136 | char *__p = (char *) (ptr); \ | ||
137 | int x; \ | ||
138 | \ | ||
139 | switch (sizeof(*ptr)) { \ | ||
140 | case 2: \ | ||
141 | { \ | ||
142 | asm(" stb%I1.p %0,%M1 \n" \ | ||
143 | " srli %0,#8,%0 \n" \ | ||
144 | " stb%I2 %0,%M2 \n" \ | ||
145 | : "=r"(x), "=m"(__p[1]), "=m"(__p[0]) \ | ||
146 | : "0"(val) \ | ||
147 | ); \ | ||
148 | break; \ | ||
149 | } \ | ||
150 | \ | ||
151 | case 4: \ | ||
152 | { \ | ||
153 | asm(" stb%I1.p %0,%M1 \n" \ | ||
154 | " srli %0,#8,%0 \n" \ | ||
155 | " stb%I2.p %0,%M2 \n" \ | ||
156 | " srli %0,#8,%0 \n" \ | ||
157 | " stb%I3.p %0,%M3 \n" \ | ||
158 | " srli %0,#8,%0 \n" \ | ||
159 | " stb%I4 %0,%M4 \n" \ | ||
160 | : "=r"(x), "=m"(__p[3]), "=m"(__p[2]), "=m"(__p[1]), "=m"(__p[0]) \ | ||
161 | : "0"(val) \ | ||
162 | ); \ | ||
163 | break; \ | ||
164 | } \ | ||
165 | \ | ||
166 | case 8: \ | ||
167 | { \ | ||
168 | uint32_t __high, __low; \ | ||
169 | __high = (uint64_t)val >> 32; \ | ||
170 | __low = val & 0xffffffff; \ | ||
171 | asm(" stb%I2.p %0,%M2 \n" \ | ||
172 | " srli %0,#8,%0 \n" \ | ||
173 | " stb%I3.p %0,%M3 \n" \ | ||
174 | " srli %0,#8,%0 \n" \ | ||
175 | " stb%I4.p %0,%M4 \n" \ | ||
176 | " srli %0,#8,%0 \n" \ | ||
177 | " stb%I5.p %0,%M5 \n" \ | ||
178 | " srli %0,#8,%0 \n" \ | ||
179 | " stb%I6.p %1,%M6 \n" \ | ||
180 | " srli %1,#8,%1 \n" \ | ||
181 | " stb%I7.p %1,%M7 \n" \ | ||
182 | " srli %1,#8,%1 \n" \ | ||
183 | " stb%I8.p %1,%M8 \n" \ | ||
184 | " srli %1,#8,%1 \n" \ | ||
185 | " stb%I9 %1,%M9 \n" \ | ||
186 | : "=&r"(__low), "=&r"(__high), "=m"(__p[7]), "=m"(__p[6]), \ | ||
187 | "=m"(__p[5]), "=m"(__p[4]), "=m"(__p[3]), "=m"(__p[2]), \ | ||
188 | "=m"(__p[1]), "=m"(__p[0]) \ | ||
189 | : "0"(__low), "1"(__high) \ | ||
190 | ); \ | ||
191 | break; \ | ||
192 | } \ | ||
193 | \ | ||
194 | default: \ | ||
195 | *(ptr) = (val); \ | ||
196 | break; \ | ||
197 | } \ | ||
198 | } while(0) | ||
199 | |||
200 | #endif | ||
201 | 21 | ||
202 | #endif | 22 | #endif /* _ASM_FRV_UNALIGNED_H */ |
diff --git a/include/asm-generic/bitops/__fls.h b/include/asm-generic/bitops/__fls.h new file mode 100644 index 000000000000..be24465403d6 --- /dev/null +++ b/include/asm-generic/bitops/__fls.h | |||
@@ -0,0 +1,43 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS___FLS_H_ | ||
2 | #define _ASM_GENERIC_BITOPS___FLS_H_ | ||
3 | |||
4 | #include <asm/types.h> | ||
5 | |||
6 | /** | ||
7 | * __fls - find last (most-significant) set bit in a long word | ||
8 | * @word: the word to search | ||
9 | * | ||
10 | * Undefined if no set bit exists, so code should check against 0 first. | ||
11 | */ | ||
12 | static inline unsigned long __fls(unsigned long word) | ||
13 | { | ||
14 | int num = BITS_PER_LONG - 1; | ||
15 | |||
16 | #if BITS_PER_LONG == 64 | ||
17 | if (!(word & (~0ul << 32))) { | ||
18 | num -= 32; | ||
19 | word <<= 32; | ||
20 | } | ||
21 | #endif | ||
22 | if (!(word & (~0ul << (BITS_PER_LONG-16)))) { | ||
23 | num -= 16; | ||
24 | word <<= 16; | ||
25 | } | ||
26 | if (!(word & (~0ul << (BITS_PER_LONG-8)))) { | ||
27 | num -= 8; | ||
28 | word <<= 8; | ||
29 | } | ||
30 | if (!(word & (~0ul << (BITS_PER_LONG-4)))) { | ||
31 | num -= 4; | ||
32 | word <<= 4; | ||
33 | } | ||
34 | if (!(word & (~0ul << (BITS_PER_LONG-2)))) { | ||
35 | num -= 2; | ||
36 | word <<= 2; | ||
37 | } | ||
38 | if (!(word & (~0ul << (BITS_PER_LONG-1)))) | ||
39 | num -= 1; | ||
40 | return num; | ||
41 | } | ||
42 | |||
43 | #endif /* _ASM_GENERIC_BITOPS___FLS_H_ */ | ||
diff --git a/include/asm-generic/bitops/find.h b/include/asm-generic/bitops/find.h index 72a51e5a12ef..1914e9742512 100644 --- a/include/asm-generic/bitops/find.h +++ b/include/asm-generic/bitops/find.h | |||
@@ -1,11 +1,13 @@ | |||
1 | #ifndef _ASM_GENERIC_BITOPS_FIND_H_ | 1 | #ifndef _ASM_GENERIC_BITOPS_FIND_H_ |
2 | #define _ASM_GENERIC_BITOPS_FIND_H_ | 2 | #define _ASM_GENERIC_BITOPS_FIND_H_ |
3 | 3 | ||
4 | #ifndef CONFIG_GENERIC_FIND_NEXT_BIT | ||
4 | extern unsigned long find_next_bit(const unsigned long *addr, unsigned long | 5 | extern unsigned long find_next_bit(const unsigned long *addr, unsigned long |
5 | size, unsigned long offset); | 6 | size, unsigned long offset); |
6 | 7 | ||
7 | extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned | 8 | extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned |
8 | long size, unsigned long offset); | 9 | long size, unsigned long offset); |
10 | #endif | ||
9 | 11 | ||
10 | #define find_first_bit(addr, size) find_next_bit((addr), (size), 0) | 12 | #define find_first_bit(addr, size) find_next_bit((addr), (size), 0) |
11 | #define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) | 13 | #define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) |
diff --git a/include/asm-generic/bitops/fls64.h b/include/asm-generic/bitops/fls64.h index 1b6b17ce2428..86d403f8b256 100644 --- a/include/asm-generic/bitops/fls64.h +++ b/include/asm-generic/bitops/fls64.h | |||
@@ -3,6 +3,18 @@ | |||
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
5 | 5 | ||
6 | /** | ||
7 | * fls64 - find last set bit in a 64-bit word | ||
8 | * @x: the word to search | ||
9 | * | ||
10 | * This is defined in a similar way as the libc and compiler builtin | ||
11 | * ffsll, but returns the position of the most significant set bit. | ||
12 | * | ||
13 | * fls64(value) returns 0 if value is 0 or the position of the last | ||
14 | * set bit if value is nonzero. The last (most significant) bit is | ||
15 | * at position 64. | ||
16 | */ | ||
17 | #if BITS_PER_LONG == 32 | ||
6 | static inline int fls64(__u64 x) | 18 | static inline int fls64(__u64 x) |
7 | { | 19 | { |
8 | __u32 h = x >> 32; | 20 | __u32 h = x >> 32; |
@@ -10,5 +22,15 @@ static inline int fls64(__u64 x) | |||
10 | return fls(h) + 32; | 22 | return fls(h) + 32; |
11 | return fls(x); | 23 | return fls(x); |
12 | } | 24 | } |
25 | #elif BITS_PER_LONG == 64 | ||
26 | static inline int fls64(__u64 x) | ||
27 | { | ||
28 | if (x == 0) | ||
29 | return 0; | ||
30 | return __fls(x) + 1; | ||
31 | } | ||
32 | #else | ||
33 | #error BITS_PER_LONG not 32 or 64 | ||
34 | #endif | ||
13 | 35 | ||
14 | #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ | 36 | #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ |
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index f29a502f4a6c..ecf675a59d21 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h | |||
@@ -16,7 +16,14 @@ | |||
16 | #define ARCH_NR_GPIOS 256 | 16 | #define ARCH_NR_GPIOS 256 |
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | static inline int gpio_is_valid(int number) | ||
20 | { | ||
21 | /* only some non-negative numbers are valid */ | ||
22 | return ((unsigned)number) < ARCH_NR_GPIOS; | ||
23 | } | ||
24 | |||
19 | struct seq_file; | 25 | struct seq_file; |
26 | struct module; | ||
20 | 27 | ||
21 | /** | 28 | /** |
22 | * struct gpio_chip - abstract a GPIO controller | 29 | * struct gpio_chip - abstract a GPIO controller |
@@ -48,6 +55,7 @@ struct seq_file; | |||
48 | */ | 55 | */ |
49 | struct gpio_chip { | 56 | struct gpio_chip { |
50 | char *label; | 57 | char *label; |
58 | struct module *owner; | ||
51 | 59 | ||
52 | int (*direction_input)(struct gpio_chip *chip, | 60 | int (*direction_input)(struct gpio_chip *chip, |
53 | unsigned offset); | 61 | unsigned offset); |
@@ -66,6 +74,7 @@ struct gpio_chip { | |||
66 | 74 | ||
67 | extern const char *gpiochip_is_requested(struct gpio_chip *chip, | 75 | extern const char *gpiochip_is_requested(struct gpio_chip *chip, |
68 | unsigned offset); | 76 | unsigned offset); |
77 | extern int __init __must_check gpiochip_reserve(int start, int ngpio); | ||
69 | 78 | ||
70 | /* add/remove chips */ | 79 | /* add/remove chips */ |
71 | extern int gpiochip_add(struct gpio_chip *chip); | 80 | extern int gpiochip_add(struct gpio_chip *chip); |
@@ -97,6 +106,12 @@ extern int __gpio_cansleep(unsigned gpio); | |||
97 | 106 | ||
98 | #else | 107 | #else |
99 | 108 | ||
109 | static inline int gpio_is_valid(int number) | ||
110 | { | ||
111 | /* only non-negative numbers are valid */ | ||
112 | return number >= 0; | ||
113 | } | ||
114 | |||
100 | /* platforms that don't directly support access to GPIOs through I2C, SPI, | 115 | /* platforms that don't directly support access to GPIOs through I2C, SPI, |
101 | * or other blocking infrastructure can use these wrappers. | 116 | * or other blocking infrastructure can use these wrappers. |
102 | */ | 117 | */ |
diff --git a/include/asm-generic/ioctl.h b/include/asm-generic/ioctl.h index cd027298beb1..864181385579 100644 --- a/include/asm-generic/ioctl.h +++ b/include/asm-generic/ioctl.h | |||
@@ -21,8 +21,19 @@ | |||
21 | */ | 21 | */ |
22 | #define _IOC_NRBITS 8 | 22 | #define _IOC_NRBITS 8 |
23 | #define _IOC_TYPEBITS 8 | 23 | #define _IOC_TYPEBITS 8 |
24 | #define _IOC_SIZEBITS 14 | 24 | |
25 | #define _IOC_DIRBITS 2 | 25 | /* |
26 | * Let any architecture override either of the following before | ||
27 | * including this file. | ||
28 | */ | ||
29 | |||
30 | #ifndef _IOC_SIZEBITS | ||
31 | # define _IOC_SIZEBITS 14 | ||
32 | #endif | ||
33 | |||
34 | #ifndef _IOC_DIRBITS | ||
35 | # define _IOC_DIRBITS 2 | ||
36 | #endif | ||
26 | 37 | ||
27 | #define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) | 38 | #define _IOC_NRMASK ((1 << _IOC_NRBITS)-1) |
28 | #define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) | 39 | #define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1) |
@@ -35,11 +46,21 @@ | |||
35 | #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) | 46 | #define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS) |
36 | 47 | ||
37 | /* | 48 | /* |
38 | * Direction bits. | 49 | * Direction bits, which any architecture can choose to override |
50 | * before including this file. | ||
39 | */ | 51 | */ |
40 | #define _IOC_NONE 0U | 52 | |
41 | #define _IOC_WRITE 1U | 53 | #ifndef _IOC_NONE |
42 | #define _IOC_READ 2U | 54 | # define _IOC_NONE 0U |
55 | #endif | ||
56 | |||
57 | #ifndef _IOC_WRITE | ||
58 | # define _IOC_WRITE 1U | ||
59 | #endif | ||
60 | |||
61 | #ifndef _IOC_READ | ||
62 | # define _IOC_READ 2U | ||
63 | #endif | ||
43 | 64 | ||
44 | #define _IOC(dir,type,nr,size) \ | 65 | #define _IOC(dir,type,nr,size) \ |
45 | (((dir) << _IOC_DIRSHIFT) | \ | 66 | (((dir) << _IOC_DIRSHIFT) | \ |
diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h index 67dc84cd1343..76b0cc5637f8 100644 --- a/include/asm-generic/iomap.h +++ b/include/asm-generic/iomap.h | |||
@@ -60,6 +60,10 @@ extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long cou | |||
60 | extern void __iomem *ioport_map(unsigned long port, unsigned int nr); | 60 | extern void __iomem *ioport_map(unsigned long port, unsigned int nr); |
61 | extern void ioport_unmap(void __iomem *); | 61 | extern void ioport_unmap(void __iomem *); |
62 | 62 | ||
63 | #ifndef ARCH_HAS_IOREMAP_WC | ||
64 | #define ioremap_wc ioremap_nocache | ||
65 | #endif | ||
66 | |||
63 | /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ | 67 | /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ |
64 | struct pci_dev; | 68 | struct pci_dev; |
65 | extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); | 69 | extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); |
diff --git a/include/asm-generic/unaligned.h b/include/asm-generic/unaligned.h deleted file mode 100644 index 2fe1b2e67f01..000000000000 --- a/include/asm-generic/unaligned.h +++ /dev/null | |||
@@ -1,124 +0,0 @@ | |||
1 | #ifndef _ASM_GENERIC_UNALIGNED_H_ | ||
2 | #define _ASM_GENERIC_UNALIGNED_H_ | ||
3 | |||
4 | /* | ||
5 | * For the benefit of those who are trying to port Linux to another | ||
6 | * architecture, here are some C-language equivalents. | ||
7 | * | ||
8 | * This is based almost entirely upon Richard Henderson's | ||
9 | * asm-alpha/unaligned.h implementation. Some comments were | ||
10 | * taken from David Mosberger's asm-ia64/unaligned.h header. | ||
11 | */ | ||
12 | |||
13 | #include <linux/types.h> | ||
14 | |||
15 | /* | ||
16 | * The main single-value unaligned transfer routines. | ||
17 | */ | ||
18 | #define get_unaligned(ptr) \ | ||
19 | __get_unaligned((ptr), sizeof(*(ptr))) | ||
20 | #define put_unaligned(x,ptr) \ | ||
21 | ((void)sizeof(*(ptr)=(x)),\ | ||
22 | __put_unaligned((__force __u64)(x), (ptr), sizeof(*(ptr)))) | ||
23 | |||
24 | /* | ||
25 | * This function doesn't actually exist. The idea is that when | ||
26 | * someone uses the macros below with an unsupported size (datatype), | ||
27 | * the linker will alert us to the problem via an unresolved reference | ||
28 | * error. | ||
29 | */ | ||
30 | extern void bad_unaligned_access_length(void) __attribute__((noreturn)); | ||
31 | |||
32 | struct __una_u64 { __u64 x __attribute__((packed)); }; | ||
33 | struct __una_u32 { __u32 x __attribute__((packed)); }; | ||
34 | struct __una_u16 { __u16 x __attribute__((packed)); }; | ||
35 | |||
36 | /* | ||
37 | * Elemental unaligned loads | ||
38 | */ | ||
39 | |||
40 | static inline __u64 __uldq(const __u64 *addr) | ||
41 | { | ||
42 | const struct __una_u64 *ptr = (const struct __una_u64 *) addr; | ||
43 | return ptr->x; | ||
44 | } | ||
45 | |||
46 | static inline __u32 __uldl(const __u32 *addr) | ||
47 | { | ||
48 | const struct __una_u32 *ptr = (const struct __una_u32 *) addr; | ||
49 | return ptr->x; | ||
50 | } | ||
51 | |||
52 | static inline __u16 __uldw(const __u16 *addr) | ||
53 | { | ||
54 | const struct __una_u16 *ptr = (const struct __una_u16 *) addr; | ||
55 | return ptr->x; | ||
56 | } | ||
57 | |||
58 | /* | ||
59 | * Elemental unaligned stores | ||
60 | */ | ||
61 | |||
62 | static inline void __ustq(__u64 val, __u64 *addr) | ||
63 | { | ||
64 | struct __una_u64 *ptr = (struct __una_u64 *) addr; | ||
65 | ptr->x = val; | ||
66 | } | ||
67 | |||
68 | static inline void __ustl(__u32 val, __u32 *addr) | ||
69 | { | ||
70 | struct __una_u32 *ptr = (struct __una_u32 *) addr; | ||
71 | ptr->x = val; | ||
72 | } | ||
73 | |||
74 | static inline void __ustw(__u16 val, __u16 *addr) | ||
75 | { | ||
76 | struct __una_u16 *ptr = (struct __una_u16 *) addr; | ||
77 | ptr->x = val; | ||
78 | } | ||
79 | |||
80 | #define __get_unaligned(ptr, size) ({ \ | ||
81 | const void *__gu_p = ptr; \ | ||
82 | __u64 __val; \ | ||
83 | switch (size) { \ | ||
84 | case 1: \ | ||
85 | __val = *(const __u8 *)__gu_p; \ | ||
86 | break; \ | ||
87 | case 2: \ | ||
88 | __val = __uldw(__gu_p); \ | ||
89 | break; \ | ||
90 | case 4: \ | ||
91 | __val = __uldl(__gu_p); \ | ||
92 | break; \ | ||
93 | case 8: \ | ||
94 | __val = __uldq(__gu_p); \ | ||
95 | break; \ | ||
96 | default: \ | ||
97 | bad_unaligned_access_length(); \ | ||
98 | }; \ | ||
99 | (__force __typeof__(*(ptr)))__val; \ | ||
100 | }) | ||
101 | |||
102 | #define __put_unaligned(val, ptr, size) \ | ||
103 | ({ \ | ||
104 | void *__gu_p = ptr; \ | ||
105 | switch (size) { \ | ||
106 | case 1: \ | ||
107 | *(__u8 *)__gu_p = (__force __u8)val; \ | ||
108 | break; \ | ||
109 | case 2: \ | ||
110 | __ustw((__force __u16)val, __gu_p); \ | ||
111 | break; \ | ||
112 | case 4: \ | ||
113 | __ustl((__force __u32)val, __gu_p); \ | ||
114 | break; \ | ||
115 | case 8: \ | ||
116 | __ustq(val, __gu_p); \ | ||
117 | break; \ | ||
118 | default: \ | ||
119 | bad_unaligned_access_length(); \ | ||
120 | }; \ | ||
121 | (void)0; \ | ||
122 | }) | ||
123 | |||
124 | #endif /* _ASM_GENERIC_UNALIGNED_H */ | ||
diff --git a/include/asm-h8300/unaligned.h b/include/asm-h8300/unaligned.h index ffb67f472070..b8d06c70c2da 100644 --- a/include/asm-h8300/unaligned.h +++ b/include/asm-h8300/unaligned.h | |||
@@ -1,15 +1,11 @@ | |||
1 | #ifndef __H8300_UNALIGNED_H | 1 | #ifndef _ASM_H8300_UNALIGNED_H |
2 | #define __H8300_UNALIGNED_H | 2 | #define _ASM_H8300_UNALIGNED_H |
3 | 3 | ||
4 | #include <linux/unaligned/be_memmove.h> | ||
5 | #include <linux/unaligned/le_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
4 | 7 | ||
5 | /* Use memmove here, so gcc does not insert a __builtin_memcpy. */ | 8 | #define get_unaligned __get_unaligned_be |
9 | #define put_unaligned __put_unaligned_be | ||
6 | 10 | ||
7 | #define get_unaligned(ptr) \ | 11 | #endif /* _ASM_H8300_UNALIGNED_H */ |
8 | ({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) | ||
9 | |||
10 | #define put_unaligned(val, ptr) \ | ||
11 | ({ __typeof__(*(ptr)) __tmp = (val); \ | ||
12 | memmove((ptr), &__tmp, sizeof(*(ptr))); \ | ||
13 | (void)0; }) | ||
14 | |||
15 | #endif | ||
diff --git a/include/asm-ia64/bitops.h b/include/asm-ia64/bitops.h index 953d3df9dd22..e2ca80037335 100644 --- a/include/asm-ia64/bitops.h +++ b/include/asm-ia64/bitops.h | |||
@@ -407,6 +407,22 @@ fls (int t) | |||
407 | return ia64_popcnt(x); | 407 | return ia64_popcnt(x); |
408 | } | 408 | } |
409 | 409 | ||
410 | /* | ||
411 | * Find the last (most significant) bit set. Undefined for x==0. | ||
412 | * Bits are numbered from 0..63 (e.g., __fls(9) == 3). | ||
413 | */ | ||
414 | static inline unsigned long | ||
415 | __fls (unsigned long x) | ||
416 | { | ||
417 | x |= x >> 1; | ||
418 | x |= x >> 2; | ||
419 | x |= x >> 4; | ||
420 | x |= x >> 8; | ||
421 | x |= x >> 16; | ||
422 | x |= x >> 32; | ||
423 | return ia64_popcnt(x) - 1; | ||
424 | } | ||
425 | |||
410 | #include <asm-generic/bitops/fls64.h> | 426 | #include <asm-generic/bitops/fls64.h> |
411 | 427 | ||
412 | /* | 428 | /* |
diff --git a/include/asm-ia64/dma-mapping.h b/include/asm-ia64/dma-mapping.h index f1735a22d0ea..9f0df9bd46b7 100644 --- a/include/asm-ia64/dma-mapping.h +++ b/include/asm-ia64/dma-mapping.h | |||
@@ -23,10 +23,30 @@ dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr, | |||
23 | { | 23 | { |
24 | dma_free_coherent(dev, size, cpu_addr, dma_handle); | 24 | dma_free_coherent(dev, size, cpu_addr, dma_handle); |
25 | } | 25 | } |
26 | #define dma_map_single platform_dma_map_single | 26 | #define dma_map_single_attrs platform_dma_map_single_attrs |
27 | #define dma_map_sg platform_dma_map_sg | 27 | static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, |
28 | #define dma_unmap_single platform_dma_unmap_single | 28 | size_t size, int dir) |
29 | #define dma_unmap_sg platform_dma_unmap_sg | 29 | { |
30 | return dma_map_single_attrs(dev, cpu_addr, size, dir, NULL); | ||
31 | } | ||
32 | #define dma_map_sg_attrs platform_dma_map_sg_attrs | ||
33 | static inline int dma_map_sg(struct device *dev, struct scatterlist *sgl, | ||
34 | int nents, int dir) | ||
35 | { | ||
36 | return dma_map_sg_attrs(dev, sgl, nents, dir, NULL); | ||
37 | } | ||
38 | #define dma_unmap_single_attrs platform_dma_unmap_single_attrs | ||
39 | static inline void dma_unmap_single(struct device *dev, dma_addr_t cpu_addr, | ||
40 | size_t size, int dir) | ||
41 | { | ||
42 | return dma_unmap_single_attrs(dev, cpu_addr, size, dir, NULL); | ||
43 | } | ||
44 | #define dma_unmap_sg_attrs platform_dma_unmap_sg_attrs | ||
45 | static inline void dma_unmap_sg(struct device *dev, struct scatterlist *sgl, | ||
46 | int nents, int dir) | ||
47 | { | ||
48 | return dma_unmap_sg_attrs(dev, sgl, nents, dir, NULL); | ||
49 | } | ||
30 | #define dma_sync_single_for_cpu platform_dma_sync_single_for_cpu | 50 | #define dma_sync_single_for_cpu platform_dma_sync_single_for_cpu |
31 | #define dma_sync_sg_for_cpu platform_dma_sync_sg_for_cpu | 51 | #define dma_sync_sg_for_cpu platform_dma_sync_sg_for_cpu |
32 | #define dma_sync_single_for_device platform_dma_sync_single_for_device | 52 | #define dma_sync_single_for_device platform_dma_sync_single_for_device |
diff --git a/include/asm-ia64/gcc_intrin.h b/include/asm-ia64/gcc_intrin.h index de2ed2cbdd84..2fe292c275fe 100644 --- a/include/asm-ia64/gcc_intrin.h +++ b/include/asm-ia64/gcc_intrin.h | |||
@@ -21,6 +21,10 @@ | |||
21 | 21 | ||
22 | #define ia64_invala_fr(regnum) asm volatile ("invala.e f%0" :: "i"(regnum)) | 22 | #define ia64_invala_fr(regnum) asm volatile ("invala.e f%0" :: "i"(regnum)) |
23 | 23 | ||
24 | #define ia64_flushrs() asm volatile ("flushrs;;":::"memory") | ||
25 | |||
26 | #define ia64_loadrs() asm volatile ("loadrs;;":::"memory") | ||
27 | |||
24 | extern void ia64_bad_param_for_setreg (void); | 28 | extern void ia64_bad_param_for_setreg (void); |
25 | extern void ia64_bad_param_for_getreg (void); | 29 | extern void ia64_bad_param_for_getreg (void); |
26 | 30 | ||
@@ -517,6 +521,14 @@ do { \ | |||
517 | #define ia64_ptrd(addr, size) \ | 521 | #define ia64_ptrd(addr, size) \ |
518 | asm volatile ("ptr.d %0,%1" :: "r"(addr), "r"(size) : "memory") | 522 | asm volatile ("ptr.d %0,%1" :: "r"(addr), "r"(size) : "memory") |
519 | 523 | ||
524 | #define ia64_ttag(addr) \ | ||
525 | ({ \ | ||
526 | __u64 ia64_intri_res; \ | ||
527 | asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr)); \ | ||
528 | ia64_intri_res; \ | ||
529 | }) | ||
530 | |||
531 | |||
520 | /* Values for lfhint in ia64_lfetch and ia64_lfetch_fault */ | 532 | /* Values for lfhint in ia64_lfetch and ia64_lfetch_fault */ |
521 | 533 | ||
522 | #define ia64_lfhint_none 0 | 534 | #define ia64_lfhint_none 0 |
diff --git a/include/asm-ia64/hugetlb.h b/include/asm-ia64/hugetlb.h new file mode 100644 index 000000000000..f28a9701f1cf --- /dev/null +++ b/include/asm-ia64/hugetlb.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef _ASM_IA64_HUGETLB_H | ||
2 | #define _ASM_IA64_HUGETLB_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | |||
6 | |||
7 | void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long addr, | ||
8 | unsigned long end, unsigned long floor, | ||
9 | unsigned long ceiling); | ||
10 | |||
11 | int prepare_hugepage_range(unsigned long addr, unsigned long len); | ||
12 | |||
13 | static inline int is_hugepage_only_range(struct mm_struct *mm, | ||
14 | unsigned long addr, | ||
15 | unsigned long len) | ||
16 | { | ||
17 | return (REGION_NUMBER(addr) == RGN_HPAGE || | ||
18 | REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE); | ||
19 | } | ||
20 | |||
21 | static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) | ||
22 | { | ||
23 | } | ||
24 | |||
25 | static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
26 | pte_t *ptep, pte_t pte) | ||
27 | { | ||
28 | set_pte_at(mm, addr, ptep, pte); | ||
29 | } | ||
30 | |||
31 | static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm, | ||
32 | unsigned long addr, pte_t *ptep) | ||
33 | { | ||
34 | return ptep_get_and_clear(mm, addr, ptep); | ||
35 | } | ||
36 | |||
37 | static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, | ||
38 | unsigned long addr, pte_t *ptep) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | static inline int huge_pte_none(pte_t pte) | ||
43 | { | ||
44 | return pte_none(pte); | ||
45 | } | ||
46 | |||
47 | static inline pte_t huge_pte_wrprotect(pte_t pte) | ||
48 | { | ||
49 | return pte_wrprotect(pte); | ||
50 | } | ||
51 | |||
52 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
53 | unsigned long addr, pte_t *ptep) | ||
54 | { | ||
55 | ptep_set_wrprotect(mm, addr, ptep); | ||
56 | } | ||
57 | |||
58 | static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, | ||
59 | unsigned long addr, pte_t *ptep, | ||
60 | pte_t pte, int dirty) | ||
61 | { | ||
62 | return ptep_set_access_flags(vma, addr, ptep, pte, dirty); | ||
63 | } | ||
64 | |||
65 | static inline pte_t huge_ptep_get(pte_t *ptep) | ||
66 | { | ||
67 | return *ptep; | ||
68 | } | ||
69 | |||
70 | static inline int arch_prepare_hugepage(struct page *page) | ||
71 | { | ||
72 | return 0; | ||
73 | } | ||
74 | |||
75 | static inline void arch_release_hugepage(struct page *page) | ||
76 | { | ||
77 | } | ||
78 | |||
79 | #endif /* _ASM_IA64_HUGETLB_H */ | ||
diff --git a/include/asm-ia64/kvm.h b/include/asm-ia64/kvm.h index 030d29b4b26b..eb2d3559d089 100644 --- a/include/asm-ia64/kvm.h +++ b/include/asm-ia64/kvm.h | |||
@@ -1,6 +1,205 @@ | |||
1 | #ifndef __LINUX_KVM_IA64_H | 1 | #ifndef __ASM_IA64_KVM_H |
2 | #define __LINUX_KVM_IA64_H | 2 | #define __ASM_IA64_KVM_H |
3 | 3 | ||
4 | /* ia64 does not support KVM */ | 4 | /* |
5 | * asm-ia64/kvm.h: kvm structure definitions for ia64 | ||
6 | * | ||
7 | * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms and conditions of the GNU General Public License, | ||
11 | * version 2, as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
16 | * more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along with | ||
19 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
20 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #include <asm/types.h> | ||
25 | #include <asm/fpu.h> | ||
26 | |||
27 | #include <linux/ioctl.h> | ||
28 | |||
29 | /* Architectural interrupt line count. */ | ||
30 | #define KVM_NR_INTERRUPTS 256 | ||
31 | |||
32 | #define KVM_IOAPIC_NUM_PINS 24 | ||
33 | |||
34 | struct kvm_ioapic_state { | ||
35 | __u64 base_address; | ||
36 | __u32 ioregsel; | ||
37 | __u32 id; | ||
38 | __u32 irr; | ||
39 | __u32 pad; | ||
40 | union { | ||
41 | __u64 bits; | ||
42 | struct { | ||
43 | __u8 vector; | ||
44 | __u8 delivery_mode:3; | ||
45 | __u8 dest_mode:1; | ||
46 | __u8 delivery_status:1; | ||
47 | __u8 polarity:1; | ||
48 | __u8 remote_irr:1; | ||
49 | __u8 trig_mode:1; | ||
50 | __u8 mask:1; | ||
51 | __u8 reserve:7; | ||
52 | __u8 reserved[4]; | ||
53 | __u8 dest_id; | ||
54 | } fields; | ||
55 | } redirtbl[KVM_IOAPIC_NUM_PINS]; | ||
56 | }; | ||
57 | |||
58 | #define KVM_IRQCHIP_PIC_MASTER 0 | ||
59 | #define KVM_IRQCHIP_PIC_SLAVE 1 | ||
60 | #define KVM_IRQCHIP_IOAPIC 2 | ||
61 | |||
62 | #define KVM_CONTEXT_SIZE 8*1024 | ||
63 | |||
64 | union context { | ||
65 | /* 8K size */ | ||
66 | char dummy[KVM_CONTEXT_SIZE]; | ||
67 | struct { | ||
68 | unsigned long psr; | ||
69 | unsigned long pr; | ||
70 | unsigned long caller_unat; | ||
71 | unsigned long pad; | ||
72 | unsigned long gr[32]; | ||
73 | unsigned long ar[128]; | ||
74 | unsigned long br[8]; | ||
75 | unsigned long cr[128]; | ||
76 | unsigned long rr[8]; | ||
77 | unsigned long ibr[8]; | ||
78 | unsigned long dbr[8]; | ||
79 | unsigned long pkr[8]; | ||
80 | struct ia64_fpreg fr[128]; | ||
81 | }; | ||
82 | }; | ||
83 | |||
84 | struct thash_data { | ||
85 | union { | ||
86 | struct { | ||
87 | unsigned long p : 1; /* 0 */ | ||
88 | unsigned long rv1 : 1; /* 1 */ | ||
89 | unsigned long ma : 3; /* 2-4 */ | ||
90 | unsigned long a : 1; /* 5 */ | ||
91 | unsigned long d : 1; /* 6 */ | ||
92 | unsigned long pl : 2; /* 7-8 */ | ||
93 | unsigned long ar : 3; /* 9-11 */ | ||
94 | unsigned long ppn : 38; /* 12-49 */ | ||
95 | unsigned long rv2 : 2; /* 50-51 */ | ||
96 | unsigned long ed : 1; /* 52 */ | ||
97 | unsigned long ig1 : 11; /* 53-63 */ | ||
98 | }; | ||
99 | struct { | ||
100 | unsigned long __rv1 : 53; /* 0-52 */ | ||
101 | unsigned long contiguous : 1; /*53 */ | ||
102 | unsigned long tc : 1; /* 54 TR or TC */ | ||
103 | unsigned long cl : 1; | ||
104 | /* 55 I side or D side cache line */ | ||
105 | unsigned long len : 4; /* 56-59 */ | ||
106 | unsigned long io : 1; /* 60 entry is for io or not */ | ||
107 | unsigned long nomap : 1; | ||
108 | /* 61 entry cann't be inserted into machine TLB.*/ | ||
109 | unsigned long checked : 1; | ||
110 | /* 62 for VTLB/VHPT sanity check */ | ||
111 | unsigned long invalid : 1; | ||
112 | /* 63 invalid entry */ | ||
113 | }; | ||
114 | unsigned long page_flags; | ||
115 | }; /* same for VHPT and TLB */ | ||
116 | |||
117 | union { | ||
118 | struct { | ||
119 | unsigned long rv3 : 2; | ||
120 | unsigned long ps : 6; | ||
121 | unsigned long key : 24; | ||
122 | unsigned long rv4 : 32; | ||
123 | }; | ||
124 | unsigned long itir; | ||
125 | }; | ||
126 | union { | ||
127 | struct { | ||
128 | unsigned long ig2 : 12; | ||
129 | unsigned long vpn : 49; | ||
130 | unsigned long vrn : 3; | ||
131 | }; | ||
132 | unsigned long ifa; | ||
133 | unsigned long vadr; | ||
134 | struct { | ||
135 | unsigned long tag : 63; | ||
136 | unsigned long ti : 1; | ||
137 | }; | ||
138 | unsigned long etag; | ||
139 | }; | ||
140 | union { | ||
141 | struct thash_data *next; | ||
142 | unsigned long rid; | ||
143 | unsigned long gpaddr; | ||
144 | }; | ||
145 | }; | ||
146 | |||
147 | #define NITRS 8 | ||
148 | #define NDTRS 8 | ||
149 | |||
150 | struct saved_vpd { | ||
151 | unsigned long vhpi; | ||
152 | unsigned long vgr[16]; | ||
153 | unsigned long vbgr[16]; | ||
154 | unsigned long vnat; | ||
155 | unsigned long vbnat; | ||
156 | unsigned long vcpuid[5]; | ||
157 | unsigned long vpsr; | ||
158 | unsigned long vpr; | ||
159 | unsigned long vcr[128]; | ||
160 | }; | ||
161 | |||
162 | struct kvm_regs { | ||
163 | char *saved_guest; | ||
164 | char *saved_stack; | ||
165 | struct saved_vpd vpd; | ||
166 | /*Arch-regs*/ | ||
167 | int mp_state; | ||
168 | unsigned long vmm_rr; | ||
169 | /* TR and TC. */ | ||
170 | struct thash_data itrs[NITRS]; | ||
171 | struct thash_data dtrs[NDTRS]; | ||
172 | /* Bit is set if there is a tr/tc for the region. */ | ||
173 | unsigned char itr_regions; | ||
174 | unsigned char dtr_regions; | ||
175 | unsigned char tc_regions; | ||
176 | |||
177 | char irq_check; | ||
178 | unsigned long saved_itc; | ||
179 | unsigned long itc_check; | ||
180 | unsigned long timer_check; | ||
181 | unsigned long timer_pending; | ||
182 | unsigned long last_itc; | ||
183 | |||
184 | unsigned long vrr[8]; | ||
185 | unsigned long ibr[8]; | ||
186 | unsigned long dbr[8]; | ||
187 | unsigned long insvc[4]; /* Interrupt in service. */ | ||
188 | unsigned long xtp; | ||
189 | |||
190 | unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */ | ||
191 | unsigned long metaphysical_rr4; /* from kvm_arch (so is pinned) */ | ||
192 | unsigned long metaphysical_saved_rr0; /* from kvm_arch */ | ||
193 | unsigned long metaphysical_saved_rr4; /* from kvm_arch */ | ||
194 | unsigned long fp_psr; /*used for lazy float register */ | ||
195 | unsigned long saved_gp; | ||
196 | /*for phycial emulation */ | ||
197 | }; | ||
198 | |||
199 | struct kvm_sregs { | ||
200 | }; | ||
201 | |||
202 | struct kvm_fpu { | ||
203 | }; | ||
5 | 204 | ||
6 | #endif | 205 | #endif |
diff --git a/include/asm-ia64/kvm_host.h b/include/asm-ia64/kvm_host.h new file mode 100644 index 000000000000..c082c208c1f3 --- /dev/null +++ b/include/asm-ia64/kvm_host.h | |||
@@ -0,0 +1,524 @@ | |||
1 | /* | ||
2 | * kvm_host.h: used for kvm module, and hold ia64-specific sections. | ||
3 | * | ||
4 | * Copyright (C) 2007, Intel Corporation. | ||
5 | * | ||
6 | * Xiantao Zhang <xiantao.zhang@intel.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms and conditions of the GNU General Public License, | ||
10 | * version 2, as published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
13 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
15 | * more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License along with | ||
18 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
19 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
20 | * | ||
21 | */ | ||
22 | |||
23 | #ifndef __ASM_KVM_HOST_H | ||
24 | #define __ASM_KVM_HOST_H | ||
25 | |||
26 | |||
27 | #include <linux/types.h> | ||
28 | #include <linux/mm.h> | ||
29 | #include <linux/kvm.h> | ||
30 | #include <linux/kvm_para.h> | ||
31 | #include <linux/kvm_types.h> | ||
32 | |||
33 | #include <asm/pal.h> | ||
34 | #include <asm/sal.h> | ||
35 | |||
36 | #define KVM_MAX_VCPUS 4 | ||
37 | #define KVM_MEMORY_SLOTS 32 | ||
38 | /* memory slots that does not exposed to userspace */ | ||
39 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
40 | |||
41 | |||
42 | /* define exit reasons from vmm to kvm*/ | ||
43 | #define EXIT_REASON_VM_PANIC 0 | ||
44 | #define EXIT_REASON_MMIO_INSTRUCTION 1 | ||
45 | #define EXIT_REASON_PAL_CALL 2 | ||
46 | #define EXIT_REASON_SAL_CALL 3 | ||
47 | #define EXIT_REASON_SWITCH_RR6 4 | ||
48 | #define EXIT_REASON_VM_DESTROY 5 | ||
49 | #define EXIT_REASON_EXTERNAL_INTERRUPT 6 | ||
50 | #define EXIT_REASON_IPI 7 | ||
51 | #define EXIT_REASON_PTC_G 8 | ||
52 | |||
53 | /*Define vmm address space and vm data space.*/ | ||
54 | #define KVM_VMM_SIZE (16UL<<20) | ||
55 | #define KVM_VMM_SHIFT 24 | ||
56 | #define KVM_VMM_BASE 0xD000000000000000UL | ||
57 | #define VMM_SIZE (8UL<<20) | ||
58 | |||
59 | /* | ||
60 | * Define vm_buffer, used by PAL Services, base address. | ||
61 | * Note: vmbuffer is in the VMM-BLOCK, the size must be < 8M | ||
62 | */ | ||
63 | #define KVM_VM_BUFFER_BASE (KVM_VMM_BASE + VMM_SIZE) | ||
64 | #define KVM_VM_BUFFER_SIZE (8UL<<20) | ||
65 | |||
66 | /*Define Virtual machine data layout.*/ | ||
67 | #define KVM_VM_DATA_SHIFT 24 | ||
68 | #define KVM_VM_DATA_SIZE (1UL << KVM_VM_DATA_SHIFT) | ||
69 | #define KVM_VM_DATA_BASE (KVM_VMM_BASE + KVM_VMM_SIZE) | ||
70 | |||
71 | |||
72 | #define KVM_P2M_BASE KVM_VM_DATA_BASE | ||
73 | #define KVM_P2M_OFS 0 | ||
74 | #define KVM_P2M_SIZE (8UL << 20) | ||
75 | |||
76 | #define KVM_VHPT_BASE (KVM_P2M_BASE + KVM_P2M_SIZE) | ||
77 | #define KVM_VHPT_OFS KVM_P2M_SIZE | ||
78 | #define KVM_VHPT_BLOCK_SIZE (2UL << 20) | ||
79 | #define VHPT_SHIFT 18 | ||
80 | #define VHPT_SIZE (1UL << VHPT_SHIFT) | ||
81 | #define VHPT_NUM_ENTRIES (1<<(VHPT_SHIFT-5)) | ||
82 | |||
83 | #define KVM_VTLB_BASE (KVM_VHPT_BASE+KVM_VHPT_BLOCK_SIZE) | ||
84 | #define KVM_VTLB_OFS (KVM_VHPT_OFS+KVM_VHPT_BLOCK_SIZE) | ||
85 | #define KVM_VTLB_BLOCK_SIZE (1UL<<20) | ||
86 | #define VTLB_SHIFT 17 | ||
87 | #define VTLB_SIZE (1UL<<VTLB_SHIFT) | ||
88 | #define VTLB_NUM_ENTRIES (1<<(VTLB_SHIFT-5)) | ||
89 | |||
90 | #define KVM_VPD_BASE (KVM_VTLB_BASE+KVM_VTLB_BLOCK_SIZE) | ||
91 | #define KVM_VPD_OFS (KVM_VTLB_OFS+KVM_VTLB_BLOCK_SIZE) | ||
92 | #define KVM_VPD_BLOCK_SIZE (2UL<<20) | ||
93 | #define VPD_SHIFT 16 | ||
94 | #define VPD_SIZE (1UL<<VPD_SHIFT) | ||
95 | |||
96 | #define KVM_VCPU_BASE (KVM_VPD_BASE+KVM_VPD_BLOCK_SIZE) | ||
97 | #define KVM_VCPU_OFS (KVM_VPD_OFS+KVM_VPD_BLOCK_SIZE) | ||
98 | #define KVM_VCPU_BLOCK_SIZE (2UL<<20) | ||
99 | #define VCPU_SHIFT 18 | ||
100 | #define VCPU_SIZE (1UL<<VCPU_SHIFT) | ||
101 | #define MAX_VCPU_NUM KVM_VCPU_BLOCK_SIZE/VCPU_SIZE | ||
102 | |||
103 | #define KVM_VM_BASE (KVM_VCPU_BASE+KVM_VCPU_BLOCK_SIZE) | ||
104 | #define KVM_VM_OFS (KVM_VCPU_OFS+KVM_VCPU_BLOCK_SIZE) | ||
105 | #define KVM_VM_BLOCK_SIZE (1UL<<19) | ||
106 | |||
107 | #define KVM_MEM_DIRTY_LOG_BASE (KVM_VM_BASE+KVM_VM_BLOCK_SIZE) | ||
108 | #define KVM_MEM_DIRTY_LOG_OFS (KVM_VM_OFS+KVM_VM_BLOCK_SIZE) | ||
109 | #define KVM_MEM_DIRTY_LOG_SIZE (1UL<<19) | ||
110 | |||
111 | /* Get vpd, vhpt, tlb, vcpu, base*/ | ||
112 | #define VPD_ADDR(n) (KVM_VPD_BASE+n*VPD_SIZE) | ||
113 | #define VHPT_ADDR(n) (KVM_VHPT_BASE+n*VHPT_SIZE) | ||
114 | #define VTLB_ADDR(n) (KVM_VTLB_BASE+n*VTLB_SIZE) | ||
115 | #define VCPU_ADDR(n) (KVM_VCPU_BASE+n*VCPU_SIZE) | ||
116 | |||
117 | /*IO section definitions*/ | ||
118 | #define IOREQ_READ 1 | ||
119 | #define IOREQ_WRITE 0 | ||
120 | |||
121 | #define STATE_IOREQ_NONE 0 | ||
122 | #define STATE_IOREQ_READY 1 | ||
123 | #define STATE_IOREQ_INPROCESS 2 | ||
124 | #define STATE_IORESP_READY 3 | ||
125 | |||
126 | /*Guest Physical address layout.*/ | ||
127 | #define GPFN_MEM (0UL << 60) /* Guest pfn is normal mem */ | ||
128 | #define GPFN_FRAME_BUFFER (1UL << 60) /* VGA framebuffer */ | ||
129 | #define GPFN_LOW_MMIO (2UL << 60) /* Low MMIO range */ | ||
130 | #define GPFN_PIB (3UL << 60) /* PIB base */ | ||
131 | #define GPFN_IOSAPIC (4UL << 60) /* IOSAPIC base */ | ||
132 | #define GPFN_LEGACY_IO (5UL << 60) /* Legacy I/O base */ | ||
133 | #define GPFN_GFW (6UL << 60) /* Guest Firmware */ | ||
134 | #define GPFN_HIGH_MMIO (7UL << 60) /* High MMIO range */ | ||
135 | |||
136 | #define GPFN_IO_MASK (7UL << 60) /* Guest pfn is I/O type */ | ||
137 | #define GPFN_INV_MASK (1UL << 63) /* Guest pfn is invalid */ | ||
138 | #define INVALID_MFN (~0UL) | ||
139 | #define MEM_G (1UL << 30) | ||
140 | #define MEM_M (1UL << 20) | ||
141 | #define MMIO_START (3 * MEM_G) | ||
142 | #define MMIO_SIZE (512 * MEM_M) | ||
143 | #define VGA_IO_START 0xA0000UL | ||
144 | #define VGA_IO_SIZE 0x20000 | ||
145 | #define LEGACY_IO_START (MMIO_START + MMIO_SIZE) | ||
146 | #define LEGACY_IO_SIZE (64 * MEM_M) | ||
147 | #define IO_SAPIC_START 0xfec00000UL | ||
148 | #define IO_SAPIC_SIZE 0x100000 | ||
149 | #define PIB_START 0xfee00000UL | ||
150 | #define PIB_SIZE 0x200000 | ||
151 | #define GFW_START (4 * MEM_G - 16 * MEM_M) | ||
152 | #define GFW_SIZE (16 * MEM_M) | ||
153 | |||
154 | /*Deliver mode, defined for ioapic.c*/ | ||
155 | #define dest_Fixed IOSAPIC_FIXED | ||
156 | #define dest_LowestPrio IOSAPIC_LOWEST_PRIORITY | ||
157 | |||
158 | #define NMI_VECTOR 2 | ||
159 | #define ExtINT_VECTOR 0 | ||
160 | #define NULL_VECTOR (-1) | ||
161 | #define IA64_SPURIOUS_INT_VECTOR 0x0f | ||
162 | |||
163 | #define VCPU_LID(v) (((u64)(v)->vcpu_id) << 24) | ||
164 | |||
165 | /* | ||
166 | *Delivery mode | ||
167 | */ | ||
168 | #define SAPIC_DELIV_SHIFT 8 | ||
169 | #define SAPIC_FIXED 0x0 | ||
170 | #define SAPIC_LOWEST_PRIORITY 0x1 | ||
171 | #define SAPIC_PMI 0x2 | ||
172 | #define SAPIC_NMI 0x4 | ||
173 | #define SAPIC_INIT 0x5 | ||
174 | #define SAPIC_EXTINT 0x7 | ||
175 | |||
176 | /* | ||
177 | * vcpu->requests bit members for arch | ||
178 | */ | ||
179 | #define KVM_REQ_PTC_G 32 | ||
180 | #define KVM_REQ_RESUME 33 | ||
181 | |||
182 | #define KVM_PAGES_PER_HPAGE 1 | ||
183 | |||
184 | struct kvm; | ||
185 | struct kvm_vcpu; | ||
186 | struct kvm_guest_debug{ | ||
187 | }; | ||
188 | |||
189 | struct kvm_mmio_req { | ||
190 | uint64_t addr; /* physical address */ | ||
191 | uint64_t size; /* size in bytes */ | ||
192 | uint64_t data; /* data (or paddr of data) */ | ||
193 | uint8_t state:4; | ||
194 | uint8_t dir:1; /* 1=read, 0=write */ | ||
195 | }; | ||
196 | |||
197 | /*Pal data struct */ | ||
198 | struct kvm_pal_call{ | ||
199 | /*In area*/ | ||
200 | uint64_t gr28; | ||
201 | uint64_t gr29; | ||
202 | uint64_t gr30; | ||
203 | uint64_t gr31; | ||
204 | /*Out area*/ | ||
205 | struct ia64_pal_retval ret; | ||
206 | }; | ||
207 | |||
208 | /* Sal data structure */ | ||
209 | struct kvm_sal_call{ | ||
210 | /*In area*/ | ||
211 | uint64_t in0; | ||
212 | uint64_t in1; | ||
213 | uint64_t in2; | ||
214 | uint64_t in3; | ||
215 | uint64_t in4; | ||
216 | uint64_t in5; | ||
217 | uint64_t in6; | ||
218 | uint64_t in7; | ||
219 | struct sal_ret_values ret; | ||
220 | }; | ||
221 | |||
222 | /*Guest change rr6*/ | ||
223 | struct kvm_switch_rr6 { | ||
224 | uint64_t old_rr; | ||
225 | uint64_t new_rr; | ||
226 | }; | ||
227 | |||
228 | union ia64_ipi_a{ | ||
229 | unsigned long val; | ||
230 | struct { | ||
231 | unsigned long rv : 3; | ||
232 | unsigned long ir : 1; | ||
233 | unsigned long eid : 8; | ||
234 | unsigned long id : 8; | ||
235 | unsigned long ib_base : 44; | ||
236 | }; | ||
237 | }; | ||
238 | |||
239 | union ia64_ipi_d { | ||
240 | unsigned long val; | ||
241 | struct { | ||
242 | unsigned long vector : 8; | ||
243 | unsigned long dm : 3; | ||
244 | unsigned long ig : 53; | ||
245 | }; | ||
246 | }; | ||
247 | |||
248 | /*ipi check exit data*/ | ||
249 | struct kvm_ipi_data{ | ||
250 | union ia64_ipi_a addr; | ||
251 | union ia64_ipi_d data; | ||
252 | }; | ||
253 | |||
254 | /*global purge data*/ | ||
255 | struct kvm_ptc_g { | ||
256 | unsigned long vaddr; | ||
257 | unsigned long rr; | ||
258 | unsigned long ps; | ||
259 | struct kvm_vcpu *vcpu; | ||
260 | }; | ||
261 | |||
262 | /*Exit control data */ | ||
263 | struct exit_ctl_data{ | ||
264 | uint32_t exit_reason; | ||
265 | uint32_t vm_status; | ||
266 | union { | ||
267 | struct kvm_mmio_req ioreq; | ||
268 | struct kvm_pal_call pal_data; | ||
269 | struct kvm_sal_call sal_data; | ||
270 | struct kvm_switch_rr6 rr_data; | ||
271 | struct kvm_ipi_data ipi_data; | ||
272 | struct kvm_ptc_g ptc_g_data; | ||
273 | } u; | ||
274 | }; | ||
275 | |||
276 | union pte_flags { | ||
277 | unsigned long val; | ||
278 | struct { | ||
279 | unsigned long p : 1; /*0 */ | ||
280 | unsigned long : 1; /* 1 */ | ||
281 | unsigned long ma : 3; /* 2-4 */ | ||
282 | unsigned long a : 1; /* 5 */ | ||
283 | unsigned long d : 1; /* 6 */ | ||
284 | unsigned long pl : 2; /* 7-8 */ | ||
285 | unsigned long ar : 3; /* 9-11 */ | ||
286 | unsigned long ppn : 38; /* 12-49 */ | ||
287 | unsigned long : 2; /* 50-51 */ | ||
288 | unsigned long ed : 1; /* 52 */ | ||
289 | }; | ||
290 | }; | ||
291 | |||
292 | union ia64_pta { | ||
293 | unsigned long val; | ||
294 | struct { | ||
295 | unsigned long ve : 1; | ||
296 | unsigned long reserved0 : 1; | ||
297 | unsigned long size : 6; | ||
298 | unsigned long vf : 1; | ||
299 | unsigned long reserved1 : 6; | ||
300 | unsigned long base : 49; | ||
301 | }; | ||
302 | }; | ||
303 | |||
304 | struct thash_cb { | ||
305 | /* THASH base information */ | ||
306 | struct thash_data *hash; /* hash table pointer */ | ||
307 | union ia64_pta pta; | ||
308 | int num; | ||
309 | }; | ||
310 | |||
311 | struct kvm_vcpu_stat { | ||
312 | }; | ||
313 | |||
314 | struct kvm_vcpu_arch { | ||
315 | int launched; | ||
316 | int last_exit; | ||
317 | int last_run_cpu; | ||
318 | int vmm_tr_slot; | ||
319 | int vm_tr_slot; | ||
320 | |||
321 | #define KVM_MP_STATE_RUNNABLE 0 | ||
322 | #define KVM_MP_STATE_UNINITIALIZED 1 | ||
323 | #define KVM_MP_STATE_INIT_RECEIVED 2 | ||
324 | #define KVM_MP_STATE_HALTED 3 | ||
325 | int mp_state; | ||
326 | |||
327 | #define MAX_PTC_G_NUM 3 | ||
328 | int ptc_g_count; | ||
329 | struct kvm_ptc_g ptc_g_data[MAX_PTC_G_NUM]; | ||
330 | |||
331 | /*halt timer to wake up sleepy vcpus*/ | ||
332 | struct hrtimer hlt_timer; | ||
333 | long ht_active; | ||
334 | |||
335 | struct kvm_lapic *apic; /* kernel irqchip context */ | ||
336 | struct vpd *vpd; | ||
337 | |||
338 | /* Exit data for vmm_transition*/ | ||
339 | struct exit_ctl_data exit_data; | ||
340 | |||
341 | cpumask_t cache_coherent_map; | ||
342 | |||
343 | unsigned long vmm_rr; | ||
344 | unsigned long host_rr6; | ||
345 | unsigned long psbits[8]; | ||
346 | unsigned long cr_iipa; | ||
347 | unsigned long cr_isr; | ||
348 | unsigned long vsa_base; | ||
349 | unsigned long dirty_log_lock_pa; | ||
350 | unsigned long __gp; | ||
351 | /* TR and TC. */ | ||
352 | struct thash_data itrs[NITRS]; | ||
353 | struct thash_data dtrs[NDTRS]; | ||
354 | /* Bit is set if there is a tr/tc for the region. */ | ||
355 | unsigned char itr_regions; | ||
356 | unsigned char dtr_regions; | ||
357 | unsigned char tc_regions; | ||
358 | /* purge all */ | ||
359 | unsigned long ptce_base; | ||
360 | unsigned long ptce_count[2]; | ||
361 | unsigned long ptce_stride[2]; | ||
362 | /* itc/itm */ | ||
363 | unsigned long last_itc; | ||
364 | long itc_offset; | ||
365 | unsigned long itc_check; | ||
366 | unsigned long timer_check; | ||
367 | unsigned long timer_pending; | ||
368 | |||
369 | unsigned long vrr[8]; | ||
370 | unsigned long ibr[8]; | ||
371 | unsigned long dbr[8]; | ||
372 | unsigned long insvc[4]; /* Interrupt in service. */ | ||
373 | unsigned long xtp; | ||
374 | |||
375 | unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */ | ||
376 | unsigned long metaphysical_rr4; /* from kvm_arch (so is pinned) */ | ||
377 | unsigned long metaphysical_saved_rr0; /* from kvm_arch */ | ||
378 | unsigned long metaphysical_saved_rr4; /* from kvm_arch */ | ||
379 | unsigned long fp_psr; /*used for lazy float register */ | ||
380 | unsigned long saved_gp; | ||
381 | /*for phycial emulation */ | ||
382 | int mode_flags; | ||
383 | struct thash_cb vtlb; | ||
384 | struct thash_cb vhpt; | ||
385 | char irq_check; | ||
386 | char irq_new_pending; | ||
387 | |||
388 | unsigned long opcode; | ||
389 | unsigned long cause; | ||
390 | union context host; | ||
391 | union context guest; | ||
392 | }; | ||
393 | |||
394 | struct kvm_vm_stat { | ||
395 | u64 remote_tlb_flush; | ||
396 | }; | ||
397 | |||
398 | struct kvm_sal_data { | ||
399 | unsigned long boot_ip; | ||
400 | unsigned long boot_gp; | ||
401 | }; | ||
402 | |||
403 | struct kvm_arch { | ||
404 | unsigned long vm_base; | ||
405 | unsigned long metaphysical_rr0; | ||
406 | unsigned long metaphysical_rr4; | ||
407 | unsigned long vmm_init_rr; | ||
408 | unsigned long vhpt_base; | ||
409 | unsigned long vtlb_base; | ||
410 | unsigned long vpd_base; | ||
411 | spinlock_t dirty_log_lock; | ||
412 | struct kvm_ioapic *vioapic; | ||
413 | struct kvm_vm_stat stat; | ||
414 | struct kvm_sal_data rdv_sal_data; | ||
415 | }; | ||
416 | |||
417 | union cpuid3_t { | ||
418 | u64 value; | ||
419 | struct { | ||
420 | u64 number : 8; | ||
421 | u64 revision : 8; | ||
422 | u64 model : 8; | ||
423 | u64 family : 8; | ||
424 | u64 archrev : 8; | ||
425 | u64 rv : 24; | ||
426 | }; | ||
427 | }; | ||
428 | |||
429 | struct kvm_pt_regs { | ||
430 | /* The following registers are saved by SAVE_MIN: */ | ||
431 | unsigned long b6; /* scratch */ | ||
432 | unsigned long b7; /* scratch */ | ||
433 | |||
434 | unsigned long ar_csd; /* used by cmp8xchg16 (scratch) */ | ||
435 | unsigned long ar_ssd; /* reserved for future use (scratch) */ | ||
436 | |||
437 | unsigned long r8; /* scratch (return value register 0) */ | ||
438 | unsigned long r9; /* scratch (return value register 1) */ | ||
439 | unsigned long r10; /* scratch (return value register 2) */ | ||
440 | unsigned long r11; /* scratch (return value register 3) */ | ||
441 | |||
442 | unsigned long cr_ipsr; /* interrupted task's psr */ | ||
443 | unsigned long cr_iip; /* interrupted task's instruction pointer */ | ||
444 | unsigned long cr_ifs; /* interrupted task's function state */ | ||
445 | |||
446 | unsigned long ar_unat; /* interrupted task's NaT register (preserved) */ | ||
447 | unsigned long ar_pfs; /* prev function state */ | ||
448 | unsigned long ar_rsc; /* RSE configuration */ | ||
449 | /* The following two are valid only if cr_ipsr.cpl > 0: */ | ||
450 | unsigned long ar_rnat; /* RSE NaT */ | ||
451 | unsigned long ar_bspstore; /* RSE bspstore */ | ||
452 | |||
453 | unsigned long pr; /* 64 predicate registers (1 bit each) */ | ||
454 | unsigned long b0; /* return pointer (bp) */ | ||
455 | unsigned long loadrs; /* size of dirty partition << 16 */ | ||
456 | |||
457 | unsigned long r1; /* the gp pointer */ | ||
458 | unsigned long r12; /* interrupted task's memory stack pointer */ | ||
459 | unsigned long r13; /* thread pointer */ | ||
460 | |||
461 | unsigned long ar_fpsr; /* floating point status (preserved) */ | ||
462 | unsigned long r15; /* scratch */ | ||
463 | |||
464 | /* The remaining registers are NOT saved for system calls. */ | ||
465 | unsigned long r14; /* scratch */ | ||
466 | unsigned long r2; /* scratch */ | ||
467 | unsigned long r3; /* scratch */ | ||
468 | unsigned long r16; /* scratch */ | ||
469 | unsigned long r17; /* scratch */ | ||
470 | unsigned long r18; /* scratch */ | ||
471 | unsigned long r19; /* scratch */ | ||
472 | unsigned long r20; /* scratch */ | ||
473 | unsigned long r21; /* scratch */ | ||
474 | unsigned long r22; /* scratch */ | ||
475 | unsigned long r23; /* scratch */ | ||
476 | unsigned long r24; /* scratch */ | ||
477 | unsigned long r25; /* scratch */ | ||
478 | unsigned long r26; /* scratch */ | ||
479 | unsigned long r27; /* scratch */ | ||
480 | unsigned long r28; /* scratch */ | ||
481 | unsigned long r29; /* scratch */ | ||
482 | unsigned long r30; /* scratch */ | ||
483 | unsigned long r31; /* scratch */ | ||
484 | unsigned long ar_ccv; /* compare/exchange value (scratch) */ | ||
485 | |||
486 | /* | ||
487 | * Floating point registers that the kernel considers scratch: | ||
488 | */ | ||
489 | struct ia64_fpreg f6; /* scratch */ | ||
490 | struct ia64_fpreg f7; /* scratch */ | ||
491 | struct ia64_fpreg f8; /* scratch */ | ||
492 | struct ia64_fpreg f9; /* scratch */ | ||
493 | struct ia64_fpreg f10; /* scratch */ | ||
494 | struct ia64_fpreg f11; /* scratch */ | ||
495 | |||
496 | unsigned long r4; /* preserved */ | ||
497 | unsigned long r5; /* preserved */ | ||
498 | unsigned long r6; /* preserved */ | ||
499 | unsigned long r7; /* preserved */ | ||
500 | unsigned long eml_unat; /* used for emulating instruction */ | ||
501 | unsigned long pad0; /* alignment pad */ | ||
502 | }; | ||
503 | |||
504 | static inline struct kvm_pt_regs *vcpu_regs(struct kvm_vcpu *v) | ||
505 | { | ||
506 | return (struct kvm_pt_regs *) ((unsigned long) v + IA64_STK_OFFSET) - 1; | ||
507 | } | ||
508 | |||
509 | typedef int kvm_vmm_entry(void); | ||
510 | typedef void kvm_tramp_entry(union context *host, union context *guest); | ||
511 | |||
512 | struct kvm_vmm_info{ | ||
513 | struct module *module; | ||
514 | kvm_vmm_entry *vmm_entry; | ||
515 | kvm_tramp_entry *tramp_entry; | ||
516 | unsigned long vmm_ivt; | ||
517 | }; | ||
518 | |||
519 | int kvm_highest_pending_irq(struct kvm_vcpu *vcpu); | ||
520 | int kvm_emulate_halt(struct kvm_vcpu *vcpu); | ||
521 | int kvm_pal_emul(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); | ||
522 | void kvm_sal_emul(struct kvm_vcpu *vcpu); | ||
523 | |||
524 | #endif | ||
diff --git a/include/asm-ia64/kvm_para.h b/include/asm-ia64/kvm_para.h new file mode 100644 index 000000000000..9f9796bb3441 --- /dev/null +++ b/include/asm-ia64/kvm_para.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef __IA64_KVM_PARA_H | ||
2 | #define __IA64_KVM_PARA_H | ||
3 | |||
4 | /* | ||
5 | * asm-ia64/kvm_para.h | ||
6 | * | ||
7 | * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms and conditions of the GNU General Public License, | ||
11 | * version 2, as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
16 | * more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along with | ||
19 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
20 | * Place - Suite 330, Boston, MA 02111-1307 USA. | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | static inline unsigned int kvm_arch_para_features(void) | ||
25 | { | ||
26 | return 0; | ||
27 | } | ||
28 | |||
29 | #endif | ||
diff --git a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h index c201a2020aa4..9f020eb825c5 100644 --- a/include/asm-ia64/machvec.h +++ b/include/asm-ia64/machvec.h | |||
@@ -22,6 +22,7 @@ struct pci_bus; | |||
22 | struct task_struct; | 22 | struct task_struct; |
23 | struct pci_dev; | 23 | struct pci_dev; |
24 | struct msi_desc; | 24 | struct msi_desc; |
25 | struct dma_attrs; | ||
25 | 26 | ||
26 | typedef void ia64_mv_setup_t (char **); | 27 | typedef void ia64_mv_setup_t (char **); |
27 | typedef void ia64_mv_cpu_init_t (void); | 28 | typedef void ia64_mv_cpu_init_t (void); |
@@ -56,6 +57,11 @@ typedef void ia64_mv_dma_sync_sg_for_device (struct device *, struct scatterlist | |||
56 | typedef int ia64_mv_dma_mapping_error (dma_addr_t dma_addr); | 57 | typedef int ia64_mv_dma_mapping_error (dma_addr_t dma_addr); |
57 | typedef int ia64_mv_dma_supported (struct device *, u64); | 58 | typedef int ia64_mv_dma_supported (struct device *, u64); |
58 | 59 | ||
60 | typedef dma_addr_t ia64_mv_dma_map_single_attrs (struct device *, void *, size_t, int, struct dma_attrs *); | ||
61 | typedef void ia64_mv_dma_unmap_single_attrs (struct device *, dma_addr_t, size_t, int, struct dma_attrs *); | ||
62 | typedef int ia64_mv_dma_map_sg_attrs (struct device *, struct scatterlist *, int, int, struct dma_attrs *); | ||
63 | typedef void ia64_mv_dma_unmap_sg_attrs (struct device *, struct scatterlist *, int, int, struct dma_attrs *); | ||
64 | |||
59 | /* | 65 | /* |
60 | * WARNING: The legacy I/O space is _architected_. Platforms are | 66 | * WARNING: The legacy I/O space is _architected_. Platforms are |
61 | * expected to follow this architected model (see Section 10.7 in the | 67 | * expected to follow this architected model (see Section 10.7 in the |
@@ -136,10 +142,10 @@ extern void machvec_tlb_migrate_finish (struct mm_struct *); | |||
136 | # define platform_dma_init ia64_mv.dma_init | 142 | # define platform_dma_init ia64_mv.dma_init |
137 | # define platform_dma_alloc_coherent ia64_mv.dma_alloc_coherent | 143 | # define platform_dma_alloc_coherent ia64_mv.dma_alloc_coherent |
138 | # define platform_dma_free_coherent ia64_mv.dma_free_coherent | 144 | # define platform_dma_free_coherent ia64_mv.dma_free_coherent |
139 | # define platform_dma_map_single ia64_mv.dma_map_single | 145 | # define platform_dma_map_single_attrs ia64_mv.dma_map_single_attrs |
140 | # define platform_dma_unmap_single ia64_mv.dma_unmap_single | 146 | # define platform_dma_unmap_single_attrs ia64_mv.dma_unmap_single_attrs |
141 | # define platform_dma_map_sg ia64_mv.dma_map_sg | 147 | # define platform_dma_map_sg_attrs ia64_mv.dma_map_sg_attrs |
142 | # define platform_dma_unmap_sg ia64_mv.dma_unmap_sg | 148 | # define platform_dma_unmap_sg_attrs ia64_mv.dma_unmap_sg_attrs |
143 | # define platform_dma_sync_single_for_cpu ia64_mv.dma_sync_single_for_cpu | 149 | # define platform_dma_sync_single_for_cpu ia64_mv.dma_sync_single_for_cpu |
144 | # define platform_dma_sync_sg_for_cpu ia64_mv.dma_sync_sg_for_cpu | 150 | # define platform_dma_sync_sg_for_cpu ia64_mv.dma_sync_sg_for_cpu |
145 | # define platform_dma_sync_single_for_device ia64_mv.dma_sync_single_for_device | 151 | # define platform_dma_sync_single_for_device ia64_mv.dma_sync_single_for_device |
@@ -190,10 +196,10 @@ struct ia64_machine_vector { | |||
190 | ia64_mv_dma_init *dma_init; | 196 | ia64_mv_dma_init *dma_init; |
191 | ia64_mv_dma_alloc_coherent *dma_alloc_coherent; | 197 | ia64_mv_dma_alloc_coherent *dma_alloc_coherent; |
192 | ia64_mv_dma_free_coherent *dma_free_coherent; | 198 | ia64_mv_dma_free_coherent *dma_free_coherent; |
193 | ia64_mv_dma_map_single *dma_map_single; | 199 | ia64_mv_dma_map_single_attrs *dma_map_single_attrs; |
194 | ia64_mv_dma_unmap_single *dma_unmap_single; | 200 | ia64_mv_dma_unmap_single_attrs *dma_unmap_single_attrs; |
195 | ia64_mv_dma_map_sg *dma_map_sg; | 201 | ia64_mv_dma_map_sg_attrs *dma_map_sg_attrs; |
196 | ia64_mv_dma_unmap_sg *dma_unmap_sg; | 202 | ia64_mv_dma_unmap_sg_attrs *dma_unmap_sg_attrs; |
197 | ia64_mv_dma_sync_single_for_cpu *dma_sync_single_for_cpu; | 203 | ia64_mv_dma_sync_single_for_cpu *dma_sync_single_for_cpu; |
198 | ia64_mv_dma_sync_sg_for_cpu *dma_sync_sg_for_cpu; | 204 | ia64_mv_dma_sync_sg_for_cpu *dma_sync_sg_for_cpu; |
199 | ia64_mv_dma_sync_single_for_device *dma_sync_single_for_device; | 205 | ia64_mv_dma_sync_single_for_device *dma_sync_single_for_device; |
@@ -240,10 +246,10 @@ struct ia64_machine_vector { | |||
240 | platform_dma_init, \ | 246 | platform_dma_init, \ |
241 | platform_dma_alloc_coherent, \ | 247 | platform_dma_alloc_coherent, \ |
242 | platform_dma_free_coherent, \ | 248 | platform_dma_free_coherent, \ |
243 | platform_dma_map_single, \ | 249 | platform_dma_map_single_attrs, \ |
244 | platform_dma_unmap_single, \ | 250 | platform_dma_unmap_single_attrs, \ |
245 | platform_dma_map_sg, \ | 251 | platform_dma_map_sg_attrs, \ |
246 | platform_dma_unmap_sg, \ | 252 | platform_dma_unmap_sg_attrs, \ |
247 | platform_dma_sync_single_for_cpu, \ | 253 | platform_dma_sync_single_for_cpu, \ |
248 | platform_dma_sync_sg_for_cpu, \ | 254 | platform_dma_sync_sg_for_cpu, \ |
249 | platform_dma_sync_single_for_device, \ | 255 | platform_dma_sync_single_for_device, \ |
@@ -292,9 +298,13 @@ extern ia64_mv_dma_init swiotlb_init; | |||
292 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; | 298 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; |
293 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; | 299 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; |
294 | extern ia64_mv_dma_map_single swiotlb_map_single; | 300 | extern ia64_mv_dma_map_single swiotlb_map_single; |
301 | extern ia64_mv_dma_map_single_attrs swiotlb_map_single_attrs; | ||
295 | extern ia64_mv_dma_unmap_single swiotlb_unmap_single; | 302 | extern ia64_mv_dma_unmap_single swiotlb_unmap_single; |
303 | extern ia64_mv_dma_unmap_single_attrs swiotlb_unmap_single_attrs; | ||
296 | extern ia64_mv_dma_map_sg swiotlb_map_sg; | 304 | extern ia64_mv_dma_map_sg swiotlb_map_sg; |
305 | extern ia64_mv_dma_map_sg_attrs swiotlb_map_sg_attrs; | ||
297 | extern ia64_mv_dma_unmap_sg swiotlb_unmap_sg; | 306 | extern ia64_mv_dma_unmap_sg swiotlb_unmap_sg; |
307 | extern ia64_mv_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs; | ||
298 | extern ia64_mv_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu; | 308 | extern ia64_mv_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu; |
299 | extern ia64_mv_dma_sync_sg_for_cpu swiotlb_sync_sg_for_cpu; | 309 | extern ia64_mv_dma_sync_sg_for_cpu swiotlb_sync_sg_for_cpu; |
300 | extern ia64_mv_dma_sync_single_for_device swiotlb_sync_single_for_device; | 310 | extern ia64_mv_dma_sync_single_for_device swiotlb_sync_single_for_device; |
@@ -340,17 +350,17 @@ extern ia64_mv_dma_supported swiotlb_dma_supported; | |||
340 | #ifndef platform_dma_free_coherent | 350 | #ifndef platform_dma_free_coherent |
341 | # define platform_dma_free_coherent swiotlb_free_coherent | 351 | # define platform_dma_free_coherent swiotlb_free_coherent |
342 | #endif | 352 | #endif |
343 | #ifndef platform_dma_map_single | 353 | #ifndef platform_dma_map_single_attrs |
344 | # define platform_dma_map_single swiotlb_map_single | 354 | # define platform_dma_map_single_attrs swiotlb_map_single_attrs |
345 | #endif | 355 | #endif |
346 | #ifndef platform_dma_unmap_single | 356 | #ifndef platform_dma_unmap_single_attrs |
347 | # define platform_dma_unmap_single swiotlb_unmap_single | 357 | # define platform_dma_unmap_single_attrs swiotlb_unmap_single_attrs |
348 | #endif | 358 | #endif |
349 | #ifndef platform_dma_map_sg | 359 | #ifndef platform_dma_map_sg_attrs |
350 | # define platform_dma_map_sg swiotlb_map_sg | 360 | # define platform_dma_map_sg_attrs swiotlb_map_sg_attrs |
351 | #endif | 361 | #endif |
352 | #ifndef platform_dma_unmap_sg | 362 | #ifndef platform_dma_unmap_sg_attrs |
353 | # define platform_dma_unmap_sg swiotlb_unmap_sg | 363 | # define platform_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs |
354 | #endif | 364 | #endif |
355 | #ifndef platform_dma_sync_single_for_cpu | 365 | #ifndef platform_dma_sync_single_for_cpu |
356 | # define platform_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu | 366 | # define platform_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu |
diff --git a/include/asm-ia64/machvec_hpzx1.h b/include/asm-ia64/machvec_hpzx1.h index e90daf9ce340..2f57f5144b9f 100644 --- a/include/asm-ia64/machvec_hpzx1.h +++ b/include/asm-ia64/machvec_hpzx1.h | |||
@@ -4,10 +4,10 @@ | |||
4 | extern ia64_mv_setup_t dig_setup; | 4 | extern ia64_mv_setup_t dig_setup; |
5 | extern ia64_mv_dma_alloc_coherent sba_alloc_coherent; | 5 | extern ia64_mv_dma_alloc_coherent sba_alloc_coherent; |
6 | extern ia64_mv_dma_free_coherent sba_free_coherent; | 6 | extern ia64_mv_dma_free_coherent sba_free_coherent; |
7 | extern ia64_mv_dma_map_single sba_map_single; | 7 | extern ia64_mv_dma_map_single_attrs sba_map_single_attrs; |
8 | extern ia64_mv_dma_unmap_single sba_unmap_single; | 8 | extern ia64_mv_dma_unmap_single_attrs sba_unmap_single_attrs; |
9 | extern ia64_mv_dma_map_sg sba_map_sg; | 9 | extern ia64_mv_dma_map_sg_attrs sba_map_sg_attrs; |
10 | extern ia64_mv_dma_unmap_sg sba_unmap_sg; | 10 | extern ia64_mv_dma_unmap_sg_attrs sba_unmap_sg_attrs; |
11 | extern ia64_mv_dma_supported sba_dma_supported; | 11 | extern ia64_mv_dma_supported sba_dma_supported; |
12 | extern ia64_mv_dma_mapping_error sba_dma_mapping_error; | 12 | extern ia64_mv_dma_mapping_error sba_dma_mapping_error; |
13 | 13 | ||
@@ -23,10 +23,10 @@ extern ia64_mv_dma_mapping_error sba_dma_mapping_error; | |||
23 | #define platform_dma_init machvec_noop | 23 | #define platform_dma_init machvec_noop |
24 | #define platform_dma_alloc_coherent sba_alloc_coherent | 24 | #define platform_dma_alloc_coherent sba_alloc_coherent |
25 | #define platform_dma_free_coherent sba_free_coherent | 25 | #define platform_dma_free_coherent sba_free_coherent |
26 | #define platform_dma_map_single sba_map_single | 26 | #define platform_dma_map_single_attrs sba_map_single_attrs |
27 | #define platform_dma_unmap_single sba_unmap_single | 27 | #define platform_dma_unmap_single_attrs sba_unmap_single_attrs |
28 | #define platform_dma_map_sg sba_map_sg | 28 | #define platform_dma_map_sg_attrs sba_map_sg_attrs |
29 | #define platform_dma_unmap_sg sba_unmap_sg | 29 | #define platform_dma_unmap_sg_attrs sba_unmap_sg_attrs |
30 | #define platform_dma_sync_single_for_cpu machvec_dma_sync_single | 30 | #define platform_dma_sync_single_for_cpu machvec_dma_sync_single |
31 | #define platform_dma_sync_sg_for_cpu machvec_dma_sync_sg | 31 | #define platform_dma_sync_sg_for_cpu machvec_dma_sync_sg |
32 | #define platform_dma_sync_single_for_device machvec_dma_sync_single | 32 | #define platform_dma_sync_single_for_device machvec_dma_sync_single |
diff --git a/include/asm-ia64/machvec_hpzx1_swiotlb.h b/include/asm-ia64/machvec_hpzx1_swiotlb.h index f00a34a148ff..a842cdda827b 100644 --- a/include/asm-ia64/machvec_hpzx1_swiotlb.h +++ b/include/asm-ia64/machvec_hpzx1_swiotlb.h | |||
@@ -4,10 +4,10 @@ | |||
4 | extern ia64_mv_setup_t dig_setup; | 4 | extern ia64_mv_setup_t dig_setup; |
5 | extern ia64_mv_dma_alloc_coherent hwsw_alloc_coherent; | 5 | extern ia64_mv_dma_alloc_coherent hwsw_alloc_coherent; |
6 | extern ia64_mv_dma_free_coherent hwsw_free_coherent; | 6 | extern ia64_mv_dma_free_coherent hwsw_free_coherent; |
7 | extern ia64_mv_dma_map_single hwsw_map_single; | 7 | extern ia64_mv_dma_map_single_attrs hwsw_map_single_attrs; |
8 | extern ia64_mv_dma_unmap_single hwsw_unmap_single; | 8 | extern ia64_mv_dma_unmap_single_attrs hwsw_unmap_single_attrs; |
9 | extern ia64_mv_dma_map_sg hwsw_map_sg; | 9 | extern ia64_mv_dma_map_sg_attrs hwsw_map_sg_attrs; |
10 | extern ia64_mv_dma_unmap_sg hwsw_unmap_sg; | 10 | extern ia64_mv_dma_unmap_sg_attrs hwsw_unmap_sg_attrs; |
11 | extern ia64_mv_dma_supported hwsw_dma_supported; | 11 | extern ia64_mv_dma_supported hwsw_dma_supported; |
12 | extern ia64_mv_dma_mapping_error hwsw_dma_mapping_error; | 12 | extern ia64_mv_dma_mapping_error hwsw_dma_mapping_error; |
13 | extern ia64_mv_dma_sync_single_for_cpu hwsw_sync_single_for_cpu; | 13 | extern ia64_mv_dma_sync_single_for_cpu hwsw_sync_single_for_cpu; |
@@ -28,10 +28,10 @@ extern ia64_mv_dma_sync_sg_for_device hwsw_sync_sg_for_device; | |||
28 | #define platform_dma_init machvec_noop | 28 | #define platform_dma_init machvec_noop |
29 | #define platform_dma_alloc_coherent hwsw_alloc_coherent | 29 | #define platform_dma_alloc_coherent hwsw_alloc_coherent |
30 | #define platform_dma_free_coherent hwsw_free_coherent | 30 | #define platform_dma_free_coherent hwsw_free_coherent |
31 | #define platform_dma_map_single hwsw_map_single | 31 | #define platform_dma_map_single_attrs hwsw_map_single_attrs |
32 | #define platform_dma_unmap_single hwsw_unmap_single | 32 | #define platform_dma_unmap_single_attrs hwsw_unmap_single_attrs |
33 | #define platform_dma_map_sg hwsw_map_sg | 33 | #define platform_dma_map_sg_attrs hwsw_map_sg_attrs |
34 | #define platform_dma_unmap_sg hwsw_unmap_sg | 34 | #define platform_dma_unmap_sg_attrs hwsw_unmap_sg_attrs |
35 | #define platform_dma_supported hwsw_dma_supported | 35 | #define platform_dma_supported hwsw_dma_supported |
36 | #define platform_dma_mapping_error hwsw_dma_mapping_error | 36 | #define platform_dma_mapping_error hwsw_dma_mapping_error |
37 | #define platform_dma_sync_single_for_cpu hwsw_sync_single_for_cpu | 37 | #define platform_dma_sync_single_for_cpu hwsw_sync_single_for_cpu |
diff --git a/include/asm-ia64/machvec_sn2.h b/include/asm-ia64/machvec_sn2.h index 61439a7f5b08..781308ea7b88 100644 --- a/include/asm-ia64/machvec_sn2.h +++ b/include/asm-ia64/machvec_sn2.h | |||
@@ -57,10 +57,10 @@ extern ia64_mv_readl_t __sn_readl_relaxed; | |||
57 | extern ia64_mv_readq_t __sn_readq_relaxed; | 57 | extern ia64_mv_readq_t __sn_readq_relaxed; |
58 | extern ia64_mv_dma_alloc_coherent sn_dma_alloc_coherent; | 58 | extern ia64_mv_dma_alloc_coherent sn_dma_alloc_coherent; |
59 | extern ia64_mv_dma_free_coherent sn_dma_free_coherent; | 59 | extern ia64_mv_dma_free_coherent sn_dma_free_coherent; |
60 | extern ia64_mv_dma_map_single sn_dma_map_single; | 60 | extern ia64_mv_dma_map_single_attrs sn_dma_map_single_attrs; |
61 | extern ia64_mv_dma_unmap_single sn_dma_unmap_single; | 61 | extern ia64_mv_dma_unmap_single_attrs sn_dma_unmap_single_attrs; |
62 | extern ia64_mv_dma_map_sg sn_dma_map_sg; | 62 | extern ia64_mv_dma_map_sg_attrs sn_dma_map_sg_attrs; |
63 | extern ia64_mv_dma_unmap_sg sn_dma_unmap_sg; | 63 | extern ia64_mv_dma_unmap_sg_attrs sn_dma_unmap_sg_attrs; |
64 | extern ia64_mv_dma_sync_single_for_cpu sn_dma_sync_single_for_cpu; | 64 | extern ia64_mv_dma_sync_single_for_cpu sn_dma_sync_single_for_cpu; |
65 | extern ia64_mv_dma_sync_sg_for_cpu sn_dma_sync_sg_for_cpu; | 65 | extern ia64_mv_dma_sync_sg_for_cpu sn_dma_sync_sg_for_cpu; |
66 | extern ia64_mv_dma_sync_single_for_device sn_dma_sync_single_for_device; | 66 | extern ia64_mv_dma_sync_single_for_device sn_dma_sync_single_for_device; |
@@ -113,10 +113,10 @@ extern ia64_mv_pci_fixup_bus_t sn_pci_fixup_bus; | |||
113 | #define platform_dma_init machvec_noop | 113 | #define platform_dma_init machvec_noop |
114 | #define platform_dma_alloc_coherent sn_dma_alloc_coherent | 114 | #define platform_dma_alloc_coherent sn_dma_alloc_coherent |
115 | #define platform_dma_free_coherent sn_dma_free_coherent | 115 | #define platform_dma_free_coherent sn_dma_free_coherent |
116 | #define platform_dma_map_single sn_dma_map_single | 116 | #define platform_dma_map_single_attrs sn_dma_map_single_attrs |
117 | #define platform_dma_unmap_single sn_dma_unmap_single | 117 | #define platform_dma_unmap_single_attrs sn_dma_unmap_single_attrs |
118 | #define platform_dma_map_sg sn_dma_map_sg | 118 | #define platform_dma_map_sg_attrs sn_dma_map_sg_attrs |
119 | #define platform_dma_unmap_sg sn_dma_unmap_sg | 119 | #define platform_dma_unmap_sg_attrs sn_dma_unmap_sg_attrs |
120 | #define platform_dma_sync_single_for_cpu sn_dma_sync_single_for_cpu | 120 | #define platform_dma_sync_single_for_cpu sn_dma_sync_single_for_cpu |
121 | #define platform_dma_sync_sg_for_cpu sn_dma_sync_sg_for_cpu | 121 | #define platform_dma_sync_sg_for_cpu sn_dma_sync_sg_for_cpu |
122 | #define platform_dma_sync_single_for_device sn_dma_sync_single_for_device | 122 | #define platform_dma_sync_single_for_device sn_dma_sync_single_for_device |
diff --git a/include/asm-ia64/page.h b/include/asm-ia64/page.h index 4999a6c63775..36f39321b768 100644 --- a/include/asm-ia64/page.h +++ b/include/asm-ia64/page.h | |||
@@ -54,9 +54,6 @@ | |||
54 | # define HPAGE_MASK (~(HPAGE_SIZE - 1)) | 54 | # define HPAGE_MASK (~(HPAGE_SIZE - 1)) |
55 | 55 | ||
56 | # define HAVE_ARCH_HUGETLB_UNMAPPED_AREA | 56 | # define HAVE_ARCH_HUGETLB_UNMAPPED_AREA |
57 | # define ARCH_HAS_HUGEPAGE_ONLY_RANGE | ||
58 | # define ARCH_HAS_PREPARE_HUGEPAGE_RANGE | ||
59 | # define ARCH_HAS_HUGETLB_FREE_PGD_RANGE | ||
60 | #endif /* CONFIG_HUGETLB_PAGE */ | 57 | #endif /* CONFIG_HUGETLB_PAGE */ |
61 | 58 | ||
62 | #ifdef __ASSEMBLY__ | 59 | #ifdef __ASSEMBLY__ |
@@ -153,9 +150,6 @@ typedef union ia64_va { | |||
153 | # define htlbpage_to_page(x) (((unsigned long) REGION_NUMBER(x) << 61) \ | 150 | # define htlbpage_to_page(x) (((unsigned long) REGION_NUMBER(x) << 61) \ |
154 | | (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT))) | 151 | | (REGION_OFFSET(x) >> (HPAGE_SHIFT-PAGE_SHIFT))) |
155 | # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 152 | # define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
156 | # define is_hugepage_only_range(mm, addr, len) \ | ||
157 | (REGION_NUMBER(addr) == RGN_HPAGE || \ | ||
158 | REGION_NUMBER((addr)+(len)-1) == RGN_HPAGE) | ||
159 | extern unsigned int hpage_shift; | 153 | extern unsigned int hpage_shift; |
160 | #endif | 154 | #endif |
161 | 155 | ||
diff --git a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h index ed70862ea247..7a9bff47564f 100644 --- a/include/asm-ia64/pgtable.h +++ b/include/asm-ia64/pgtable.h | |||
@@ -302,6 +302,8 @@ ia64_phys_addr_valid (unsigned long addr) | |||
302 | #define pte_dirty(pte) ((pte_val(pte) & _PAGE_D) != 0) | 302 | #define pte_dirty(pte) ((pte_val(pte) & _PAGE_D) != 0) |
303 | #define pte_young(pte) ((pte_val(pte) & _PAGE_A) != 0) | 303 | #define pte_young(pte) ((pte_val(pte) & _PAGE_A) != 0) |
304 | #define pte_file(pte) ((pte_val(pte) & _PAGE_FILE) != 0) | 304 | #define pte_file(pte) ((pte_val(pte) & _PAGE_FILE) != 0) |
305 | #define pte_special(pte) 0 | ||
306 | |||
305 | /* | 307 | /* |
306 | * Note: we convert AR_RWX to AR_RX and AR_RW to AR_R by clearing the 2nd bit in the | 308 | * Note: we convert AR_RWX to AR_RX and AR_RW to AR_R by clearing the 2nd bit in the |
307 | * access rights: | 309 | * access rights: |
@@ -313,6 +315,7 @@ ia64_phys_addr_valid (unsigned long addr) | |||
313 | #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) | 315 | #define pte_mkclean(pte) (__pte(pte_val(pte) & ~_PAGE_D)) |
314 | #define pte_mkdirty(pte) (__pte(pte_val(pte) | _PAGE_D)) | 316 | #define pte_mkdirty(pte) (__pte(pte_val(pte) | _PAGE_D)) |
315 | #define pte_mkhuge(pte) (__pte(pte_val(pte))) | 317 | #define pte_mkhuge(pte) (__pte(pte_val(pte))) |
318 | #define pte_mkspecial(pte) (pte) | ||
316 | 319 | ||
317 | /* | 320 | /* |
318 | * Because ia64's Icache and Dcache is not coherent (on a cpu), we need to | 321 | * Because ia64's Icache and Dcache is not coherent (on a cpu), we need to |
diff --git a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h index 741f7ecb986a..6aff126fc07e 100644 --- a/include/asm-ia64/processor.h +++ b/include/asm-ia64/processor.h | |||
@@ -119,6 +119,69 @@ struct ia64_psr { | |||
119 | __u64 reserved4 : 19; | 119 | __u64 reserved4 : 19; |
120 | }; | 120 | }; |
121 | 121 | ||
122 | union ia64_isr { | ||
123 | __u64 val; | ||
124 | struct { | ||
125 | __u64 code : 16; | ||
126 | __u64 vector : 8; | ||
127 | __u64 reserved1 : 8; | ||
128 | __u64 x : 1; | ||
129 | __u64 w : 1; | ||
130 | __u64 r : 1; | ||
131 | __u64 na : 1; | ||
132 | __u64 sp : 1; | ||
133 | __u64 rs : 1; | ||
134 | __u64 ir : 1; | ||
135 | __u64 ni : 1; | ||
136 | __u64 so : 1; | ||
137 | __u64 ei : 2; | ||
138 | __u64 ed : 1; | ||
139 | __u64 reserved2 : 20; | ||
140 | }; | ||
141 | }; | ||
142 | |||
143 | union ia64_lid { | ||
144 | __u64 val; | ||
145 | struct { | ||
146 | __u64 rv : 16; | ||
147 | __u64 eid : 8; | ||
148 | __u64 id : 8; | ||
149 | __u64 ig : 32; | ||
150 | }; | ||
151 | }; | ||
152 | |||
153 | union ia64_tpr { | ||
154 | __u64 val; | ||
155 | struct { | ||
156 | __u64 ig0 : 4; | ||
157 | __u64 mic : 4; | ||
158 | __u64 rsv : 8; | ||
159 | __u64 mmi : 1; | ||
160 | __u64 ig1 : 47; | ||
161 | }; | ||
162 | }; | ||
163 | |||
164 | union ia64_itir { | ||
165 | __u64 val; | ||
166 | struct { | ||
167 | __u64 rv3 : 2; /* 0-1 */ | ||
168 | __u64 ps : 6; /* 2-7 */ | ||
169 | __u64 key : 24; /* 8-31 */ | ||
170 | __u64 rv4 : 32; /* 32-63 */ | ||
171 | }; | ||
172 | }; | ||
173 | |||
174 | union ia64_rr { | ||
175 | __u64 val; | ||
176 | struct { | ||
177 | __u64 ve : 1; /* enable hw walker */ | ||
178 | __u64 reserved0: 1; /* reserved */ | ||
179 | __u64 ps : 6; /* log page size */ | ||
180 | __u64 rid : 24; /* region id */ | ||
181 | __u64 reserved1: 32; /* reserved */ | ||
182 | }; | ||
183 | }; | ||
184 | |||
122 | /* | 185 | /* |
123 | * CPU type, hardware bug flags, and per-CPU state. Frequently used | 186 | * CPU type, hardware bug flags, and per-CPU state. Frequently used |
124 | * state comes earlier: | 187 | * state comes earlier: |
diff --git a/include/asm-ia64/system.h b/include/asm-ia64/system.h index dff8128fa58e..26e250bfb912 100644 --- a/include/asm-ia64/system.h +++ b/include/asm-ia64/system.h | |||
@@ -146,23 +146,23 @@ do { \ | |||
146 | 146 | ||
147 | # define local_irq_save(x) \ | 147 | # define local_irq_save(x) \ |
148 | do { \ | 148 | do { \ |
149 | unsigned long psr; \ | 149 | unsigned long __psr; \ |
150 | \ | 150 | \ |
151 | __local_irq_save(psr); \ | 151 | __local_irq_save(__psr); \ |
152 | if (psr & IA64_PSR_I) \ | 152 | if (__psr & IA64_PSR_I) \ |
153 | __save_ip(); \ | 153 | __save_ip(); \ |
154 | (x) = psr; \ | 154 | (x) = __psr; \ |
155 | } while (0) | 155 | } while (0) |
156 | 156 | ||
157 | # define local_irq_disable() do { unsigned long x; local_irq_save(x); } while (0) | 157 | # define local_irq_disable() do { unsigned long __x; local_irq_save(__x); } while (0) |
158 | 158 | ||
159 | # define local_irq_restore(x) \ | 159 | # define local_irq_restore(x) \ |
160 | do { \ | 160 | do { \ |
161 | unsigned long old_psr, psr = (x); \ | 161 | unsigned long __old_psr, __psr = (x); \ |
162 | \ | 162 | \ |
163 | local_save_flags(old_psr); \ | 163 | local_save_flags(__old_psr); \ |
164 | __local_irq_restore(psr); \ | 164 | __local_irq_restore(__psr); \ |
165 | if ((old_psr & IA64_PSR_I) && !(psr & IA64_PSR_I)) \ | 165 | if ((__old_psr & IA64_PSR_I) && !(__psr & IA64_PSR_I)) \ |
166 | __save_ip(); \ | 166 | __save_ip(); \ |
167 | } while (0) | 167 | } while (0) |
168 | 168 | ||
diff --git a/include/asm-ia64/unaligned.h b/include/asm-ia64/unaligned.h index bb8559888103..7bddc7f58584 100644 --- a/include/asm-ia64/unaligned.h +++ b/include/asm-ia64/unaligned.h | |||
@@ -1,6 +1,11 @@ | |||
1 | #ifndef _ASM_IA64_UNALIGNED_H | 1 | #ifndef _ASM_IA64_UNALIGNED_H |
2 | #define _ASM_IA64_UNALIGNED_H | 2 | #define _ASM_IA64_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/le_struct.h> |
5 | #include <linux/unaligned/be_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
7 | |||
8 | #define get_unaligned __get_unaligned_le | ||
9 | #define put_unaligned __put_unaligned_le | ||
5 | 10 | ||
6 | #endif /* _ASM_IA64_UNALIGNED_H */ | 11 | #endif /* _ASM_IA64_UNALIGNED_H */ |
diff --git a/include/asm-m32r/pgtable.h b/include/asm-m32r/pgtable.h index 86505387be08..e6359c566b50 100644 --- a/include/asm-m32r/pgtable.h +++ b/include/asm-m32r/pgtable.h | |||
@@ -214,6 +214,11 @@ static inline int pte_file(pte_t pte) | |||
214 | return pte_val(pte) & _PAGE_FILE; | 214 | return pte_val(pte) & _PAGE_FILE; |
215 | } | 215 | } |
216 | 216 | ||
217 | static inline int pte_special(pte_t pte) | ||
218 | { | ||
219 | return 0; | ||
220 | } | ||
221 | |||
217 | static inline pte_t pte_mkclean(pte_t pte) | 222 | static inline pte_t pte_mkclean(pte_t pte) |
218 | { | 223 | { |
219 | pte_val(pte) &= ~_PAGE_DIRTY; | 224 | pte_val(pte) &= ~_PAGE_DIRTY; |
@@ -250,6 +255,11 @@ static inline pte_t pte_mkwrite(pte_t pte) | |||
250 | return pte; | 255 | return pte; |
251 | } | 256 | } |
252 | 257 | ||
258 | static inline pte_t pte_mkspecial(pte_t pte) | ||
259 | { | ||
260 | return pte; | ||
261 | } | ||
262 | |||
253 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | 263 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) |
254 | { | 264 | { |
255 | return test_and_clear_bit(_PAGE_BIT_ACCESSED, ptep); | 265 | return test_and_clear_bit(_PAGE_BIT_ACCESSED, ptep); |
diff --git a/include/asm-m32r/unaligned.h b/include/asm-m32r/unaligned.h index fccc180c3913..377eb20d1ec6 100644 --- a/include/asm-m32r/unaligned.h +++ b/include/asm-m32r/unaligned.h | |||
@@ -1,19 +1,18 @@ | |||
1 | #ifndef _ASM_M32R_UNALIGNED_H | 1 | #ifndef _ASM_M32R_UNALIGNED_H |
2 | #define _ASM_M32R_UNALIGNED_H | 2 | #define _ASM_M32R_UNALIGNED_H |
3 | 3 | ||
4 | /* | 4 | #if defined(__LITTLE_ENDIAN__) |
5 | * For the benefit of those who are trying to port Linux to another | 5 | # include <linux/unaligned/le_memmove.h> |
6 | * architecture, here are some C-language equivalents. | 6 | # include <linux/unaligned/be_byteshift.h> |
7 | */ | 7 | # include <linux/unaligned/generic.h> |
8 | 8 | # define get_unaligned __get_unaligned_le | |
9 | #include <asm/string.h> | 9 | # define put_unaligned __put_unaligned_le |
10 | 10 | #else | |
11 | #define get_unaligned(ptr) \ | 11 | # include <linux/unaligned/be_memmove.h> |
12 | ({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) | 12 | # include <linux/unaligned/le_byteshift.h> |
13 | 13 | # include <linux/unaligned/generic.h> | |
14 | #define put_unaligned(val, ptr) \ | 14 | # define get_unaligned __get_unaligned_be |
15 | ({ __typeof__(*(ptr)) __tmp = (val); \ | 15 | # define put_unaligned __put_unaligned_be |
16 | memmove((ptr), &__tmp, sizeof(*(ptr))); \ | 16 | #endif |
17 | (void)0; }) | ||
18 | 17 | ||
19 | #endif /* _ASM_M32R_UNALIGNED_H */ | 18 | #endif /* _ASM_M32R_UNALIGNED_H */ |
diff --git a/include/asm-m68k/motorola_pgtable.h b/include/asm-m68k/motorola_pgtable.h index 13135d4821d8..8e9a8a754dde 100644 --- a/include/asm-m68k/motorola_pgtable.h +++ b/include/asm-m68k/motorola_pgtable.h | |||
@@ -168,6 +168,7 @@ static inline int pte_write(pte_t pte) { return !(pte_val(pte) & _PAGE_RONLY); | |||
168 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 168 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
169 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 169 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
170 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 170 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
171 | static inline int pte_special(pte_t pte) { return 0; } | ||
171 | 172 | ||
172 | static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_RONLY; return pte; } | 173 | static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) |= _PAGE_RONLY; return pte; } |
173 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } | 174 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } |
@@ -185,6 +186,7 @@ static inline pte_t pte_mkcache(pte_t pte) | |||
185 | pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemode; | 186 | pte_val(pte) = (pte_val(pte) & _CACHEMASK040) | m68k_supervisor_cachemode; |
186 | return pte; | 187 | return pte; |
187 | } | 188 | } |
189 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
188 | 190 | ||
189 | #define PAGE_DIR_OFFSET(tsk,address) pgd_offset((tsk),(address)) | 191 | #define PAGE_DIR_OFFSET(tsk,address) pgd_offset((tsk),(address)) |
190 | 192 | ||
diff --git a/include/asm-m68k/sun3_pgtable.h b/include/asm-m68k/sun3_pgtable.h index b766fc261bde..f847ec732d62 100644 --- a/include/asm-m68k/sun3_pgtable.h +++ b/include/asm-m68k/sun3_pgtable.h | |||
@@ -169,6 +169,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & SUN3_PAGE_WRITEA | |||
169 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & SUN3_PAGE_MODIFIED; } | 169 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & SUN3_PAGE_MODIFIED; } |
170 | static inline int pte_young(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESSED; } | 170 | static inline int pte_young(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESSED; } |
171 | static inline int pte_file(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESSED; } | 171 | static inline int pte_file(pte_t pte) { return pte_val(pte) & SUN3_PAGE_ACCESSED; } |
172 | static inline int pte_special(pte_t pte) { return 0; } | ||
172 | 173 | ||
173 | static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_WRITEABLE; return pte; } | 174 | static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_WRITEABLE; return pte; } |
174 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_MODIFIED; return pte; } | 175 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~SUN3_PAGE_MODIFIED; return pte; } |
@@ -181,6 +182,7 @@ static inline pte_t pte_mknocache(pte_t pte) { pte_val(pte) |= SUN3_PAGE_NOCACHE | |||
181 | //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &= SUN3_PAGE_NOCACHE; return pte; } | 182 | //static inline pte_t pte_mkcache(pte_t pte) { pte_val(pte) &= SUN3_PAGE_NOCACHE; return pte; } |
182 | // until then, use: | 183 | // until then, use: |
183 | static inline pte_t pte_mkcache(pte_t pte) { return pte; } | 184 | static inline pte_t pte_mkcache(pte_t pte) { return pte; } |
185 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
184 | 186 | ||
185 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; | 187 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; |
186 | extern pgd_t kernel_pg_dir[PTRS_PER_PGD]; | 188 | extern pgd_t kernel_pg_dir[PTRS_PER_PGD]; |
diff --git a/include/asm-m68k/unaligned.h b/include/asm-m68k/unaligned.h index 804cb3f888fe..77698f2dc33c 100644 --- a/include/asm-m68k/unaligned.h +++ b/include/asm-m68k/unaligned.h | |||
@@ -1,16 +1,13 @@ | |||
1 | #ifndef __M68K_UNALIGNED_H | 1 | #ifndef _ASM_M68K_UNALIGNED_H |
2 | #define __M68K_UNALIGNED_H | 2 | #define _ASM_M68K_UNALIGNED_H |
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The m68k can do unaligned accesses itself. | 5 | * The m68k can do unaligned accesses itself. |
6 | * | ||
7 | * The strange macros are there to make sure these can't | ||
8 | * be misused in a way that makes them not work on other | ||
9 | * architectures where unaligned accesses aren't as simple. | ||
10 | */ | 6 | */ |
7 | #include <linux/unaligned/access_ok.h> | ||
8 | #include <linux/unaligned/generic.h> | ||
11 | 9 | ||
12 | #define get_unaligned(ptr) (*(ptr)) | 10 | #define get_unaligned __get_unaligned_be |
11 | #define put_unaligned __put_unaligned_be | ||
13 | 12 | ||
14 | #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) | 13 | #endif /* _ASM_M68K_UNALIGNED_H */ |
15 | |||
16 | #endif | ||
diff --git a/include/asm-m68knommu/unaligned.h b/include/asm-m68knommu/unaligned.h index 869e9dd24f54..eb1ea4cb9a59 100644 --- a/include/asm-m68knommu/unaligned.h +++ b/include/asm-m68knommu/unaligned.h | |||
@@ -1,23 +1,25 @@ | |||
1 | #ifndef __M68K_UNALIGNED_H | 1 | #ifndef _ASM_M68KNOMMU_UNALIGNED_H |
2 | #define __M68K_UNALIGNED_H | 2 | #define _ASM_M68KNOMMU_UNALIGNED_H |
3 | 3 | ||
4 | 4 | ||
5 | #ifdef CONFIG_COLDFIRE | 5 | #ifdef CONFIG_COLDFIRE |
6 | #include <linux/unaligned/be_struct.h> | ||
7 | #include <linux/unaligned/le_byteshift.h> | ||
8 | #include <linux/unaligned/generic.h> | ||
6 | 9 | ||
7 | #include <asm-generic/unaligned.h> | 10 | #define get_unaligned __get_unaligned_be |
11 | #define put_unaligned __put_unaligned_be | ||
8 | 12 | ||
9 | #else | 13 | #else |
10 | /* | 14 | /* |
11 | * The m68k can do unaligned accesses itself. | 15 | * The m68k can do unaligned accesses itself. |
12 | * | ||
13 | * The strange macros are there to make sure these can't | ||
14 | * be misused in a way that makes them not work on other | ||
15 | * architectures where unaligned accesses aren't as simple. | ||
16 | */ | 16 | */ |
17 | #include <linux/unaligned/access_ok.h> | ||
18 | #include <linux/unaligned/generic.h> | ||
17 | 19 | ||
18 | #define get_unaligned(ptr) (*(ptr)) | 20 | #define get_unaligned __get_unaligned_be |
19 | #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) | 21 | #define put_unaligned __put_unaligned_be |
20 | 22 | ||
21 | #endif | 23 | #endif |
22 | 24 | ||
23 | #endif | 25 | #endif /* _ASM_M68KNOMMU_UNALIGNED_H */ |
diff --git a/include/asm-mips/bitops.h b/include/asm-mips/bitops.h index ec75ce4cdb8c..c2bd126c3b4e 100644 --- a/include/asm-mips/bitops.h +++ b/include/asm-mips/bitops.h | |||
@@ -591,6 +591,11 @@ static inline int __ilog2(unsigned long x) | |||
591 | return 63 - lz; | 591 | return 63 - lz; |
592 | } | 592 | } |
593 | 593 | ||
594 | static inline unsigned long __fls(unsigned long x) | ||
595 | { | ||
596 | return __ilog2(x); | ||
597 | } | ||
598 | |||
594 | #if defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64) | 599 | #if defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64) |
595 | 600 | ||
596 | /* | 601 | /* |
diff --git a/include/asm-mips/cmp.h b/include/asm-mips/cmp.h new file mode 100644 index 000000000000..89a73fb93ae6 --- /dev/null +++ b/include/asm-mips/cmp.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef _ASM_CMP_H | ||
2 | #define _ASM_CMP_H | ||
3 | |||
4 | /* | ||
5 | * Definitions for CMP multitasking on MIPS cores | ||
6 | */ | ||
7 | struct task_struct; | ||
8 | |||
9 | extern void cmp_smp_setup(void); | ||
10 | extern void cmp_smp_finish(void); | ||
11 | extern void cmp_boot_secondary(int cpu, struct task_struct *t); | ||
12 | extern void cmp_init_secondary(void); | ||
13 | extern void cmp_cpus_done(void); | ||
14 | extern void cmp_prepare_cpus(unsigned int max_cpus); | ||
15 | |||
16 | /* This is platform specific */ | ||
17 | extern void cmp_send_ipi(int cpu, unsigned int action); | ||
18 | #endif /* _ASM_CMP_H */ | ||
diff --git a/include/asm-mips/cpu.h b/include/asm-mips/cpu.h index bf5bbc78a9f7..1c35cac6f35b 100644 --- a/include/asm-mips/cpu.h +++ b/include/asm-mips/cpu.h | |||
@@ -29,7 +29,7 @@ | |||
29 | #define PRID_COMP_ALCHEMY 0x030000 | 29 | #define PRID_COMP_ALCHEMY 0x030000 |
30 | #define PRID_COMP_SIBYTE 0x040000 | 30 | #define PRID_COMP_SIBYTE 0x040000 |
31 | #define PRID_COMP_SANDCRAFT 0x050000 | 31 | #define PRID_COMP_SANDCRAFT 0x050000 |
32 | #define PRID_COMP_PHILIPS 0x060000 | 32 | #define PRID_COMP_NXP 0x060000 |
33 | #define PRID_COMP_TOSHIBA 0x070000 | 33 | #define PRID_COMP_TOSHIBA 0x070000 |
34 | #define PRID_COMP_LSI 0x080000 | 34 | #define PRID_COMP_LSI 0x080000 |
35 | #define PRID_COMP_LEXRA 0x0b0000 | 35 | #define PRID_COMP_LEXRA 0x0b0000 |
@@ -89,6 +89,7 @@ | |||
89 | #define PRID_IMP_34K 0x9500 | 89 | #define PRID_IMP_34K 0x9500 |
90 | #define PRID_IMP_24KE 0x9600 | 90 | #define PRID_IMP_24KE 0x9600 |
91 | #define PRID_IMP_74K 0x9700 | 91 | #define PRID_IMP_74K 0x9700 |
92 | #define PRID_IMP_1004K 0x9900 | ||
92 | #define PRID_IMP_LOONGSON1 0x4200 | 93 | #define PRID_IMP_LOONGSON1 0x4200 |
93 | #define PRID_IMP_LOONGSON2 0x6300 | 94 | #define PRID_IMP_LOONGSON2 0x6300 |
94 | 95 | ||
@@ -194,9 +195,9 @@ enum cpu_type_enum { | |||
194 | /* | 195 | /* |
195 | * MIPS32 class processors | 196 | * MIPS32 class processors |
196 | */ | 197 | */ |
197 | CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_74K, CPU_AU1000, | 198 | CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K, |
198 | CPU_AU1100, CPU_AU1200, CPU_AU1210, CPU_AU1250, CPU_AU1500, CPU_AU1550, | 199 | CPU_AU1000, CPU_AU1100, CPU_AU1200, CPU_AU1210, CPU_AU1250, CPU_AU1500, |
199 | CPU_PR4450, CPU_BCM3302, CPU_BCM4710, | 200 | CPU_AU1550, CPU_PR4450, CPU_BCM3302, CPU_BCM4710, |
200 | 201 | ||
201 | /* | 202 | /* |
202 | * MIPS64 class processors | 203 | * MIPS64 class processors |
diff --git a/include/asm-mips/dec/ioasic.h b/include/asm-mips/dec/ioasic.h index 486a5b0a1302..98badd6bf22d 100644 --- a/include/asm-mips/dec/ioasic.h +++ b/include/asm-mips/dec/ioasic.h | |||
@@ -33,4 +33,6 @@ static inline u32 ioasic_read(unsigned int reg) | |||
33 | 33 | ||
34 | extern void init_ioasic_irqs(int base); | 34 | extern void init_ioasic_irqs(int base); |
35 | 35 | ||
36 | extern void dec_ioasic_clocksource_init(void); | ||
37 | |||
36 | #endif /* __ASM_DEC_IOASIC_H */ | 38 | #endif /* __ASM_DEC_IOASIC_H */ |
diff --git a/include/asm-mips/ds1287.h b/include/asm-mips/ds1287.h new file mode 100644 index 000000000000..ba1702e86931 --- /dev/null +++ b/include/asm-mips/ds1287.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * DS1287 timer functions. | ||
3 | * | ||
4 | * Copyright (C) 2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
19 | */ | ||
20 | #ifndef __ASM_DS1287_H | ||
21 | #define __ASM_DS1287_H | ||
22 | |||
23 | extern int ds1287_timer_state(void); | ||
24 | extern void ds1287_set_base_clock(unsigned int clock); | ||
25 | extern int ds1287_clockevent_init(int irq); | ||
26 | |||
27 | #endif | ||
diff --git a/include/asm-mips/gcmpregs.h b/include/asm-mips/gcmpregs.h new file mode 100644 index 000000000000..d74a8a4ca861 --- /dev/null +++ b/include/asm-mips/gcmpregs.h | |||
@@ -0,0 +1,117 @@ | |||
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 (C) 2000, 07 MIPS Technologies, Inc. | ||
7 | * | ||
8 | * Multiprocessor Subsystem Register Definitions | ||
9 | * | ||
10 | */ | ||
11 | #ifndef _ASM_GCMPREGS_H | ||
12 | #define _ASM_GCMPREGS_H | ||
13 | |||
14 | |||
15 | /* Offsets to major blocks within GCMP from GCMP base */ | ||
16 | #define GCMP_GCB_OFS 0x0000 /* Global Control Block */ | ||
17 | #define GCMP_CLCB_OFS 0x2000 /* Core Local Control Block */ | ||
18 | #define GCMP_COCB_OFS 0x4000 /* Core Other Control Block */ | ||
19 | #define GCMP_GDB_OFS 0x8000 /* Global Debug Block */ | ||
20 | |||
21 | /* Offsets to individual GCMP registers from GCMP base */ | ||
22 | #define GCMPOFS(block, tag, reg) (GCMP_##block##_OFS + GCMP_##tag##_##reg##_OFS) | ||
23 | |||
24 | #define GCMPGCBOFS(reg) GCMPOFS(GCB, GCB, reg) | ||
25 | #define GCMPCLCBOFS(reg) GCMPOFS(CLCB, CCB, reg) | ||
26 | #define GCMPCOCBOFS(reg) GCMPOFS(COCB, CCB, reg) | ||
27 | #define GCMPGDBOFS(reg) GCMPOFS(GDB, GDB, reg) | ||
28 | |||
29 | /* GCMP register access */ | ||
30 | #define GCMPGCB(reg) REGP(_gcmp_base, GCMPGCBOFS(reg)) | ||
31 | #define GCMPCLCB(reg) REGP(_gcmp_base, GCMPCLCBOFS(reg)) | ||
32 | #define GCMPCOCB(reg) REGP(_gcmp_base, GCMPCOCBOFS(reg)) | ||
33 | #define GCMPGDB(reg) REGP(_gcmp_base, GCMPGDBOFS(reg)) | ||
34 | |||
35 | /* Mask generation */ | ||
36 | #define GCMPMSK(block, reg, bits) (MSK(bits)<<GCMP_##block##_##reg##_SHF) | ||
37 | #define GCMPGCBMSK(reg, bits) GCMPMSK(GCB, reg, bits) | ||
38 | #define GCMPCCBMSK(reg, bits) GCMPMSK(CCB, reg, bits) | ||
39 | #define GCMPGDBMSK(reg, bits) GCMPMSK(GDB, reg, bits) | ||
40 | |||
41 | /* GCB registers */ | ||
42 | #define GCMP_GCB_GC_OFS 0x0000 /* Global Config Register */ | ||
43 | #define GCMP_GCB_GC_NUMIOCU_SHF 8 | ||
44 | #define GCMP_GCB_GC_NUMIOCU_MSK GCMPGCBMSK(GC_NUMIOCU, 4) | ||
45 | #define GCMP_GCB_GC_NUMCORES_SHF 0 | ||
46 | #define GCMP_GCB_GC_NUMCORES_MSK GCMPGCBMSK(GC_NUMCORES, 8) | ||
47 | #define GCMP_GCB_GCMPB_OFS 0x0008 /* Global GCMP Base */ | ||
48 | #define GCMP_GCB_GCMPB_GCMPBASE_SHF 15 | ||
49 | #define GCMP_GCB_GCMPB_GCMPBASE_MSK GCMPGCBMSK(GCMPB_GCMPBASE, 17) | ||
50 | #define GCMP_GCB_GCMPB_CMDEFTGT_SHF 0 | ||
51 | #define GCMP_GCB_GCMPB_CMDEFTGT_MSK GCMPGCBMSK(GCMPB_CMDEFTGT, 2) | ||
52 | #define GCMP_GCB_GCMPB_CMDEFTGT_MEM 0 | ||
53 | #define GCMP_GCB_GCMPB_CMDEFTGT_MEM1 1 | ||
54 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU1 2 | ||
55 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU2 3 | ||
56 | #define GCMP_GCB_CCMC_OFS 0x0010 /* Global CM Control */ | ||
57 | #define GCMP_GCB_GCSRAP_OFS 0x0020 /* Global CSR Access Privilege */ | ||
58 | #define GCMP_GCB_GCSRAP_CMACCESS_SHF 0 | ||
59 | #define GCMP_GCB_GCSRAP_CMACCESS_MSK GCMPGCBMSK(GCSRAP_CMACCESS, 8) | ||
60 | #define GCMP_GCB_GCMPREV_OFS 0x0030 /* GCMP Revision Register */ | ||
61 | #define GCMP_GCB_GCMEM_OFS 0x0040 /* Global CM Error Mask */ | ||
62 | #define GCMP_GCB_GCMEC_OFS 0x0048 /* Global CM Error Cause */ | ||
63 | #define GCMP_GCB_GMEC_ERROR_TYPE_SHF 27 | ||
64 | #define GCMP_GCB_GMEC_ERROR_TYPE_MSK GCMPGCBMSK(GMEC_ERROR_TYPE, 5) | ||
65 | #define GCMP_GCB_GMEC_ERROR_INFO_SHF 0 | ||
66 | #define GCMP_GCB_GMEC_ERROR_INFO_MSK GCMPGCBMSK(GMEC_ERROR_INFO, 27) | ||
67 | #define GCMP_GCB_GCMEA_OFS 0x0050 /* Global CM Error Address */ | ||
68 | #define GCMP_GCB_GCMEO_OFS 0x0058 /* Global CM Error Multiple */ | ||
69 | #define GCMP_GCB_GMEO_ERROR_2ND_SHF 0 | ||
70 | #define GCMP_GCB_GMEO_ERROR_2ND_MSK GCMPGCBMSK(GMEO_ERROR_2ND, 5) | ||
71 | #define GCMP_GCB_GICBA_OFS 0x0080 /* Global Interrupt Controller Base Address */ | ||
72 | #define GCMP_GCB_GICBA_BASE_SHF 17 | ||
73 | #define GCMP_GCB_GICBA_BASE_MSK GCMPGCBMSK(GICBA_BASE, 15) | ||
74 | #define GCMP_GCB_GICBA_EN_SHF 0 | ||
75 | #define GCMP_GCB_GICBA_EN_MSK GCMPGCBMSK(GICBA_EN, 1) | ||
76 | |||
77 | /* GCB Regions */ | ||
78 | #define GCMP_GCB_CMxBASE_OFS(n) (0x0090+16*(n)) /* Global Region[0-3] Base Address */ | ||
79 | #define GCMP_GCB_CMxBASE_BASE_SHF 16 | ||
80 | #define GCMP_GCB_CMxBASE_BASE_MSK GCMPGCBMSK(CMxBASE_BASE, 16) | ||
81 | #define GCMP_GCB_CMxMASK_OFS(n) (0x0098+16*(n)) /* Global Region[0-3] Address Mask */ | ||
82 | #define GCMP_GCB_CMxMASK_MASK_SHF 16 | ||
83 | #define GCMP_GCB_CMxMASK_MASK_MSK GCMPGCBMSK(CMxMASK_MASK, 16) | ||
84 | #define GCMP_GCB_CMxMASK_CMREGTGT_SHF 0 | ||
85 | #define GCMP_GCB_CMxMASK_CMREGTGT_MSK GCMPGCBMSK(CMxMASK_CMREGTGT, 2) | ||
86 | #define GCMP_GCB_CMxMASK_CMREGTGT_MEM 0 | ||
87 | #define GCMP_GCB_CMxMASK_CMREGTGT_MEM1 1 | ||
88 | #define GCMP_GCB_CMxMASK_CMREGTGT_IOCU1 2 | ||
89 | #define GCMP_GCB_CMxMASK_CMREGTGT_IOCU2 3 | ||
90 | |||
91 | |||
92 | /* Core local/Core other control block registers */ | ||
93 | #define GCMP_CCB_RESETR_OFS 0x0000 /* Reset Release */ | ||
94 | #define GCMP_CCB_RESETR_INRESET_SHF 0 | ||
95 | #define GCMP_CCB_RESETR_INRESET_MSK GCMPCCBMSK(RESETR_INRESET, 16) | ||
96 | #define GCMP_CCB_COHCTL_OFS 0x0008 /* Coherence Control */ | ||
97 | #define GCMP_CCB_COHCTL_DOMAIN_SHF 0 | ||
98 | #define GCMP_CCB_COHCTL_DOMAIN_MSK GCMPCCBMSK(COHCTL_DOMAIN, 8) | ||
99 | #define GCMP_CCB_CFG_OFS 0x0010 /* Config */ | ||
100 | #define GCMP_CCB_CFG_IOCUTYPE_SHF 10 | ||
101 | #define GCMP_CCB_CFG_IOCUTYPE_MSK GCMPCCBMSK(CFG_IOCUTYPE, 2) | ||
102 | #define GCMP_CCB_CFG_IOCUTYPE_CPU 0 | ||
103 | #define GCMP_CCB_CFG_IOCUTYPE_NCIOCU 1 | ||
104 | #define GCMP_CCB_CFG_IOCUTYPE_CIOCU 2 | ||
105 | #define GCMP_CCB_CFG_NUMVPE_SHF 0 | ||
106 | #define GCMP_CCB_CFG_NUMVPE_MSK GCMPCCBMSK(CFG_NUMVPE, 10) | ||
107 | #define GCMP_CCB_OTHER_OFS 0x0018 /* Other Address */ | ||
108 | #define GCMP_CCB_OTHER_CORENUM_SHF 16 | ||
109 | #define GCMP_CCB_OTHER_CORENUM_MSK GCMPCCBMSK(OTHER_CORENUM, 16) | ||
110 | #define GCMP_CCB_RESETBASE_OFS 0x0020 /* Reset Exception Base */ | ||
111 | #define GCMP_CCB_RESETBASE_BEV_SHF 12 | ||
112 | #define GCMP_CCB_RESETBASE_BEV_MSK GCMPCCBMSK(RESETBASE_BEV, 20) | ||
113 | #define GCMP_CCB_ID_OFS 0x0028 /* Identification */ | ||
114 | #define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */ | ||
115 | #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ | ||
116 | |||
117 | #endif /* _ASM_GCMPREGS_H */ | ||
diff --git a/include/asm-mips/gic.h b/include/asm-mips/gic.h new file mode 100644 index 000000000000..01b2f92dc33d --- /dev/null +++ b/include/asm-mips/gic.h | |||
@@ -0,0 +1,487 @@ | |||
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 (C) 2000, 07 MIPS Technologies, Inc. | ||
7 | * | ||
8 | * GIC Register Definitions | ||
9 | * | ||
10 | */ | ||
11 | #ifndef _ASM_GICREGS_H | ||
12 | #define _ASM_GICREGS_H | ||
13 | |||
14 | #undef GICISBYTELITTLEENDIAN | ||
15 | #define GICISWORDLITTLEENDIAN | ||
16 | |||
17 | /* Constants */ | ||
18 | #define GIC_POL_POS 1 | ||
19 | #define GIC_POL_NEG 0 | ||
20 | #define GIC_TRIG_EDGE 1 | ||
21 | #define GIC_TRIG_LEVEL 0 | ||
22 | |||
23 | #define GIC_NUM_INTRS 32 | ||
24 | |||
25 | #define MSK(n) ((1 << (n)) - 1) | ||
26 | #define REG32(addr) (*(volatile unsigned int *) (addr)) | ||
27 | #define REG(base, offs) REG32((unsigned int)(base) + offs##_##OFS) | ||
28 | #define REGP(base, phys) REG32((unsigned int)(base) + (phys)) | ||
29 | |||
30 | /* Accessors */ | ||
31 | #define GIC_REG(segment, offset) \ | ||
32 | REG32(_gic_base + segment##_##SECTION_OFS + offset##_##OFS) | ||
33 | #define GIC_REG_ADDR(segment, offset) \ | ||
34 | REG32(_gic_base + segment##_##SECTION_OFS + offset) | ||
35 | |||
36 | #define GIC_ABS_REG(segment, offset) \ | ||
37 | (_gic_base + segment##_##SECTION_OFS + offset##_##OFS) | ||
38 | #define GIC_REG_ABS_ADDR(segment, offset) \ | ||
39 | (_gic_base + segment##_##SECTION_OFS + offset) | ||
40 | |||
41 | #ifdef GICISBYTELITTLEENDIAN | ||
42 | #define GICREAD(reg, data) (data) = (reg), (data) = le32_to_cpu(data) | ||
43 | #define GICWRITE(reg, data) (reg) = cpu_to_le32(data) | ||
44 | #define GICBIS(reg, bits) \ | ||
45 | ({unsigned int data; \ | ||
46 | GICREAD(reg, data); \ | ||
47 | data |= bits; \ | ||
48 | GICWRITE(reg, data); \ | ||
49 | }) | ||
50 | |||
51 | #else | ||
52 | #define GICREAD(reg, data) (data) = (reg) | ||
53 | #define GICWRITE(reg, data) (reg) = (data) | ||
54 | #define GICBIS(reg, bits) (reg) |= (bits) | ||
55 | #endif | ||
56 | |||
57 | |||
58 | /* GIC Address Space */ | ||
59 | #define SHARED_SECTION_OFS 0x0000 | ||
60 | #define SHARED_SECTION_SIZE 0x8000 | ||
61 | #define VPE_LOCAL_SECTION_OFS 0x8000 | ||
62 | #define VPE_LOCAL_SECTION_SIZE 0x4000 | ||
63 | #define VPE_OTHER_SECTION_OFS 0xc000 | ||
64 | #define VPE_OTHER_SECTION_SIZE 0x4000 | ||
65 | #define USM_VISIBLE_SECTION_OFS 0x10000 | ||
66 | #define USM_VISIBLE_SECTION_SIZE 0x10000 | ||
67 | |||
68 | /* Register Map for Shared Section */ | ||
69 | #if defined(CONFIG_CPU_LITTLE_ENDIAN) || defined(GICISWORDLITTLEENDIAN) | ||
70 | |||
71 | #define GIC_SH_CONFIG_OFS 0x0000 | ||
72 | |||
73 | /* Shared Global Counter */ | ||
74 | #define GIC_SH_COUNTER_31_00_OFS 0x0010 | ||
75 | #define GIC_SH_COUNTER_63_32_OFS 0x0014 | ||
76 | |||
77 | /* Interrupt Polarity */ | ||
78 | #define GIC_SH_POL_31_0_OFS 0x0100 | ||
79 | #define GIC_SH_POL_63_32_OFS 0x0104 | ||
80 | #define GIC_SH_POL_95_64_OFS 0x0108 | ||
81 | #define GIC_SH_POL_127_96_OFS 0x010c | ||
82 | #define GIC_SH_POL_159_128_OFS 0x0110 | ||
83 | #define GIC_SH_POL_191_160_OFS 0x0114 | ||
84 | #define GIC_SH_POL_223_192_OFS 0x0118 | ||
85 | #define GIC_SH_POL_255_224_OFS 0x011c | ||
86 | |||
87 | /* Edge/Level Triggering */ | ||
88 | #define GIC_SH_TRIG_31_0_OFS 0x0180 | ||
89 | #define GIC_SH_TRIG_63_32_OFS 0x0184 | ||
90 | #define GIC_SH_TRIG_95_64_OFS 0x0188 | ||
91 | #define GIC_SH_TRIG_127_96_OFS 0x018c | ||
92 | #define GIC_SH_TRIG_159_128_OFS 0x0190 | ||
93 | #define GIC_SH_TRIG_191_160_OFS 0x0194 | ||
94 | #define GIC_SH_TRIG_223_192_OFS 0x0198 | ||
95 | #define GIC_SH_TRIG_255_224_OFS 0x019c | ||
96 | |||
97 | /* Dual Edge Triggering */ | ||
98 | #define GIC_SH_DUAL_31_0_OFS 0x0200 | ||
99 | #define GIC_SH_DUAL_63_32_OFS 0x0204 | ||
100 | #define GIC_SH_DUAL_95_64_OFS 0x0208 | ||
101 | #define GIC_SH_DUAL_127_96_OFS 0x020c | ||
102 | #define GIC_SH_DUAL_159_128_OFS 0x0210 | ||
103 | #define GIC_SH_DUAL_191_160_OFS 0x0214 | ||
104 | #define GIC_SH_DUAL_223_192_OFS 0x0218 | ||
105 | #define GIC_SH_DUAL_255_224_OFS 0x021c | ||
106 | |||
107 | /* Set/Clear corresponding bit in Edge Detect Register */ | ||
108 | #define GIC_SH_WEDGE_OFS 0x0280 | ||
109 | |||
110 | /* Reset Mask - Disables Interrupt */ | ||
111 | #define GIC_SH_RMASK_31_0_OFS 0x0300 | ||
112 | #define GIC_SH_RMASK_63_32_OFS 0x0304 | ||
113 | #define GIC_SH_RMASK_95_64_OFS 0x0308 | ||
114 | #define GIC_SH_RMASK_127_96_OFS 0x030c | ||
115 | #define GIC_SH_RMASK_159_128_OFS 0x0310 | ||
116 | #define GIC_SH_RMASK_191_160_OFS 0x0314 | ||
117 | #define GIC_SH_RMASK_223_192_OFS 0x0318 | ||
118 | #define GIC_SH_RMASK_255_224_OFS 0x031c | ||
119 | |||
120 | /* Set Mask (WO) - Enables Interrupt */ | ||
121 | #define GIC_SH_SMASK_31_0_OFS 0x0380 | ||
122 | #define GIC_SH_SMASK_63_32_OFS 0x0384 | ||
123 | #define GIC_SH_SMASK_95_64_OFS 0x0388 | ||
124 | #define GIC_SH_SMASK_127_96_OFS 0x038c | ||
125 | #define GIC_SH_SMASK_159_128_OFS 0x0390 | ||
126 | #define GIC_SH_SMASK_191_160_OFS 0x0394 | ||
127 | #define GIC_SH_SMASK_223_192_OFS 0x0398 | ||
128 | #define GIC_SH_SMASK_255_224_OFS 0x039c | ||
129 | |||
130 | /* Global Interrupt Mask Register (RO) - Bit Set == Interrupt enabled */ | ||
131 | #define GIC_SH_MASK_31_0_OFS 0x0400 | ||
132 | #define GIC_SH_MASK_63_32_OFS 0x0404 | ||
133 | #define GIC_SH_MASK_95_64_OFS 0x0408 | ||
134 | #define GIC_SH_MASK_127_96_OFS 0x040c | ||
135 | #define GIC_SH_MASK_159_128_OFS 0x0410 | ||
136 | #define GIC_SH_MASK_191_160_OFS 0x0414 | ||
137 | #define GIC_SH_MASK_223_192_OFS 0x0418 | ||
138 | #define GIC_SH_MASK_255_224_OFS 0x041c | ||
139 | |||
140 | /* Pending Global Interrupts (RO) */ | ||
141 | #define GIC_SH_PEND_31_0_OFS 0x0480 | ||
142 | #define GIC_SH_PEND_63_32_OFS 0x0484 | ||
143 | #define GIC_SH_PEND_95_64_OFS 0x0488 | ||
144 | #define GIC_SH_PEND_127_96_OFS 0x048c | ||
145 | #define GIC_SH_PEND_159_128_OFS 0x0490 | ||
146 | #define GIC_SH_PEND_191_160_OFS 0x0494 | ||
147 | #define GIC_SH_PEND_223_192_OFS 0x0498 | ||
148 | #define GIC_SH_PEND_255_224_OFS 0x049c | ||
149 | |||
150 | #define GIC_SH_INTR_MAP_TO_PIN_BASE_OFS 0x0500 | ||
151 | |||
152 | /* Maps Interrupt X to a Pin */ | ||
153 | #define GIC_SH_MAP_TO_PIN(intr) \ | ||
154 | (GIC_SH_INTR_MAP_TO_PIN_BASE_OFS + (4 * intr)) | ||
155 | |||
156 | #define GIC_SH_INTR_MAP_TO_VPE_BASE_OFS 0x2000 | ||
157 | |||
158 | /* Maps Interrupt X to a VPE */ | ||
159 | #define GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe) \ | ||
160 | (GIC_SH_INTR_MAP_TO_VPE_BASE_OFS + (32 * (intr)) + (((vpe) / 32) * 4)) | ||
161 | #define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32)) | ||
162 | |||
163 | /* Polarity : Reset Value is always 0 */ | ||
164 | #define GIC_SH_SET_POLARITY_OFS 0x0100 | ||
165 | #define GIC_SET_POLARITY(intr, pol) \ | ||
166 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + (((intr) / 32) * 4)), (pol) << ((intr) % 32)) | ||
167 | |||
168 | /* Triggering : Reset Value is always 0 */ | ||
169 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 | ||
170 | #define GIC_SET_TRIGGER(intr, trig) \ | ||
171 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + (((intr) / 32) * 4)), (trig) << ((intr) % 32)) | ||
172 | |||
173 | /* Mask manipulation */ | ||
174 | #define GIC_SH_SMASK_OFS 0x0380 | ||
175 | #define GIC_SET_INTR_MASK(intr, val) \ | ||
176 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_SMASK_OFS + (((intr) / 32) * 4)), ((val) << ((intr) % 32))) | ||
177 | |||
178 | #define GIC_SH_RMASK_OFS 0x0300 | ||
179 | #define GIC_CLR_INTR_MASK(intr, val) \ | ||
180 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_RMASK_OFS + (((intr) / 32) * 4)), ((val) << ((intr) % 32))) | ||
181 | |||
182 | /* Register Map for Local Section */ | ||
183 | #define GIC_VPE_CTL_OFS 0x0000 | ||
184 | #define GIC_VPE_PEND_OFS 0x0004 | ||
185 | #define GIC_VPE_MASK_OFS 0x0008 | ||
186 | #define GIC_VPE_RMASK_OFS 0x000c | ||
187 | #define GIC_VPE_SMASK_OFS 0x0010 | ||
188 | #define GIC_VPE_WD_MAP_OFS 0x0040 | ||
189 | #define GIC_VPE_COMPARE_MAP_OFS 0x0044 | ||
190 | #define GIC_VPE_TIMER_MAP_OFS 0x0048 | ||
191 | #define GIC_VPE_PERFCTR_MAP_OFS 0x0050 | ||
192 | #define GIC_VPE_SWINT0_MAP_OFS 0x0054 | ||
193 | #define GIC_VPE_SWINT1_MAP_OFS 0x0058 | ||
194 | #define GIC_VPE_OTHER_ADDR_OFS 0x0080 | ||
195 | #define GIC_VPE_WD_CONFIG0_OFS 0x0090 | ||
196 | #define GIC_VPE_WD_COUNT0_OFS 0x0094 | ||
197 | #define GIC_VPE_WD_INITIAL0_OFS 0x0098 | ||
198 | #define GIC_VPE_COMPARE_LO_OFS 0x00a0 | ||
199 | #define GIC_VPE_COMPARE_HI 0x00a4 | ||
200 | |||
201 | #define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100 | ||
202 | #define GIC_VPE_EIC_SS(intr) \ | ||
203 | (GIC_EIC_SHADOW_SET_BASE + (4 * intr)) | ||
204 | |||
205 | #define GIC_VPE_EIC_VEC_BASE 0x0800 | ||
206 | #define GIC_VPE_EIC_VEC(intr) \ | ||
207 | (GIC_VPE_EIC_VEC_BASE + (4 * intr)) | ||
208 | |||
209 | #define GIC_VPE_TENABLE_NMI_OFS 0x1000 | ||
210 | #define GIC_VPE_TENABLE_YQ_OFS 0x1004 | ||
211 | #define GIC_VPE_TENABLE_INT_31_0_OFS 0x1080 | ||
212 | #define GIC_VPE_TENABLE_INT_63_32_OFS 0x1084 | ||
213 | |||
214 | /* User Mode Visible Section Register Map */ | ||
215 | #define GIC_UMV_SH_COUNTER_31_00_OFS 0x0000 | ||
216 | #define GIC_UMV_SH_COUNTER_63_32_OFS 0x0004 | ||
217 | |||
218 | #else /* CONFIG_CPU_BIG_ENDIAN */ | ||
219 | |||
220 | #define GIC_SH_CONFIG_OFS 0x0000 | ||
221 | |||
222 | /* Shared Global Counter */ | ||
223 | #define GIC_SH_COUNTER_31_00_OFS 0x0014 | ||
224 | #define GIC_SH_COUNTER_63_32_OFS 0x0010 | ||
225 | |||
226 | /* Interrupt Polarity */ | ||
227 | #define GIC_SH_POL_31_0_OFS 0x0104 | ||
228 | #define GIC_SH_POL_63_32_OFS 0x0100 | ||
229 | #define GIC_SH_POL_95_64_OFS 0x010c | ||
230 | #define GIC_SH_POL_127_96_OFS 0x0108 | ||
231 | #define GIC_SH_POL_159_128_OFS 0x0114 | ||
232 | #define GIC_SH_POL_191_160_OFS 0x0110 | ||
233 | #define GIC_SH_POL_223_192_OFS 0x011c | ||
234 | #define GIC_SH_POL_255_224_OFS 0x0118 | ||
235 | |||
236 | /* Edge/Level Triggering */ | ||
237 | #define GIC_SH_TRIG_31_0_OFS 0x0184 | ||
238 | #define GIC_SH_TRIG_63_32_OFS 0x0180 | ||
239 | #define GIC_SH_TRIG_95_64_OFS 0x018c | ||
240 | #define GIC_SH_TRIG_127_96_OFS 0x0188 | ||
241 | #define GIC_SH_TRIG_159_128_OFS 0x0194 | ||
242 | #define GIC_SH_TRIG_191_160_OFS 0x0190 | ||
243 | #define GIC_SH_TRIG_223_192_OFS 0x019c | ||
244 | #define GIC_SH_TRIG_255_224_OFS 0x0198 | ||
245 | |||
246 | /* Dual Edge Triggering */ | ||
247 | #define GIC_SH_DUAL_31_0_OFS 0x0204 | ||
248 | #define GIC_SH_DUAL_63_32_OFS 0x0200 | ||
249 | #define GIC_SH_DUAL_95_64_OFS 0x020c | ||
250 | #define GIC_SH_DUAL_127_96_OFS 0x0208 | ||
251 | #define GIC_SH_DUAL_159_128_OFS 0x0214 | ||
252 | #define GIC_SH_DUAL_191_160_OFS 0x0210 | ||
253 | #define GIC_SH_DUAL_223_192_OFS 0x021c | ||
254 | #define GIC_SH_DUAL_255_224_OFS 0x0218 | ||
255 | |||
256 | /* Set/Clear corresponding bit in Edge Detect Register */ | ||
257 | #define GIC_SH_WEDGE_OFS 0x0280 | ||
258 | |||
259 | /* Reset Mask - Disables Interrupt */ | ||
260 | #define GIC_SH_RMASK_31_0_OFS 0x0304 | ||
261 | #define GIC_SH_RMASK_63_32_OFS 0x0300 | ||
262 | #define GIC_SH_RMASK_95_64_OFS 0x030c | ||
263 | #define GIC_SH_RMASK_127_96_OFS 0x0308 | ||
264 | #define GIC_SH_RMASK_159_128_OFS 0x0314 | ||
265 | #define GIC_SH_RMASK_191_160_OFS 0x0310 | ||
266 | #define GIC_SH_RMASK_223_192_OFS 0x031c | ||
267 | #define GIC_SH_RMASK_255_224_OFS 0x0318 | ||
268 | |||
269 | /* Set Mask (WO) - Enables Interrupt */ | ||
270 | #define GIC_SH_SMASK_31_0_OFS 0x0384 | ||
271 | #define GIC_SH_SMASK_63_32_OFS 0x0380 | ||
272 | #define GIC_SH_SMASK_95_64_OFS 0x038c | ||
273 | #define GIC_SH_SMASK_127_96_OFS 0x0388 | ||
274 | #define GIC_SH_SMASK_159_128_OFS 0x0394 | ||
275 | #define GIC_SH_SMASK_191_160_OFS 0x0390 | ||
276 | #define GIC_SH_SMASK_223_192_OFS 0x039c | ||
277 | #define GIC_SH_SMASK_255_224_OFS 0x0398 | ||
278 | |||
279 | /* Global Interrupt Mask Register (RO) - Bit Set == Interrupt enabled */ | ||
280 | #define GIC_SH_MASK_31_0_OFS 0x0404 | ||
281 | #define GIC_SH_MASK_63_32_OFS 0x0400 | ||
282 | #define GIC_SH_MASK_95_64_OFS 0x040c | ||
283 | #define GIC_SH_MASK_127_96_OFS 0x0408 | ||
284 | #define GIC_SH_MASK_159_128_OFS 0x0414 | ||
285 | #define GIC_SH_MASK_191_160_OFS 0x0410 | ||
286 | #define GIC_SH_MASK_223_192_OFS 0x041c | ||
287 | #define GIC_SH_MASK_255_224_OFS 0x0418 | ||
288 | |||
289 | /* Pending Global Interrupts (RO) */ | ||
290 | #define GIC_SH_PEND_31_0_OFS 0x0484 | ||
291 | #define GIC_SH_PEND_63_32_OFS 0x0480 | ||
292 | #define GIC_SH_PEND_95_64_OFS 0x048c | ||
293 | #define GIC_SH_PEND_127_96_OFS 0x0488 | ||
294 | #define GIC_SH_PEND_159_128_OFS 0x0494 | ||
295 | #define GIC_SH_PEND_191_160_OFS 0x0490 | ||
296 | #define GIC_SH_PEND_223_192_OFS 0x049c | ||
297 | #define GIC_SH_PEND_255_224_OFS 0x0498 | ||
298 | |||
299 | #define GIC_SH_INTR_MAP_TO_PIN_BASE_OFS 0x0500 | ||
300 | |||
301 | /* Maps Interrupt X to a Pin */ | ||
302 | #define GIC_SH_MAP_TO_PIN(intr) \ | ||
303 | (GIC_SH_INTR_MAP_TO_PIN_BASE_OFS + (4 * intr)) | ||
304 | |||
305 | #define GIC_SH_INTR_MAP_TO_VPE_BASE_OFS 0x2004 | ||
306 | |||
307 | /* | ||
308 | * Maps Interrupt X to a VPE. This is more complex than the LE case, as | ||
309 | * odd and even registers need to be transposed. It does work - trust me! | ||
310 | */ | ||
311 | #define GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe) \ | ||
312 | (GIC_SH_INTR_MAP_TO_VPE_BASE_OFS + (32 * (intr)) + \ | ||
313 | (((((vpe) / 32) ^ 1) - 1) * 4)) | ||
314 | #define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32)) | ||
315 | |||
316 | /* Polarity */ | ||
317 | #define GIC_SH_SET_POLARITY_OFS 0x0100 | ||
318 | #define GIC_SET_POLARITY(intr, pol) \ | ||
319 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), (pol) << ((intr) % 32)) | ||
320 | |||
321 | /* Triggering */ | ||
322 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 | ||
323 | #define GIC_SET_TRIGGER(intr, trig) \ | ||
324 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), (trig) << ((intr) % 32)) | ||
325 | |||
326 | /* Mask manipulation */ | ||
327 | #define GIC_SH_SMASK_OFS 0x0380 | ||
328 | #define GIC_SET_INTR_MASK(intr, val) \ | ||
329 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_SMASK_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), ((val) << ((intr) % 32))) | ||
330 | |||
331 | #define GIC_SH_RMASK_OFS 0x0300 | ||
332 | #define GIC_CLR_INTR_MASK(intr, val) \ | ||
333 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_RMASK_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), ((val) << ((intr) % 32)) | ||
334 | |||
335 | /* Register Map for Local Section */ | ||
336 | #define GIC_VPE_CTL_OFS 0x0000 | ||
337 | #define GIC_VPE_PEND_OFS 0x0004 | ||
338 | #define GIC_VPE_MASK_OFS 0x0008 | ||
339 | #define GIC_VPE_RMASK_OFS 0x000c | ||
340 | #define GIC_VPE_SMASK_OFS 0x0010 | ||
341 | #define GIC_VPE_WD_MAP_OFS 0x0040 | ||
342 | #define GIC_VPE_COMPARE_MAP_OFS 0x0044 | ||
343 | #define GIC_VPE_TIMER_MAP_OFS 0x0048 | ||
344 | #define GIC_VPE_PERFCTR_MAP_OFS 0x0050 | ||
345 | #define GIC_VPE_SWINT0_MAP_OFS 0x0054 | ||
346 | #define GIC_VPE_SWINT1_MAP_OFS 0x0058 | ||
347 | #define GIC_VPE_OTHER_ADDR_OFS 0x0080 | ||
348 | #define GIC_VPE_WD_CONFIG0_OFS 0x0090 | ||
349 | #define GIC_VPE_WD_COUNT0_OFS 0x0094 | ||
350 | #define GIC_VPE_WD_INITIAL0_OFS 0x0098 | ||
351 | #define GIC_VPE_COMPARE_LO_OFS 0x00a4 | ||
352 | #define GIC_VPE_COMPARE_HI_OFS 0x00a0 | ||
353 | |||
354 | #define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100 | ||
355 | #define GIC_VPE_EIC_SS(intr) \ | ||
356 | (GIC_EIC_SHADOW_SET_BASE + (4 * intr)) | ||
357 | |||
358 | #define GIC_VPE_EIC_VEC_BASE 0x0800 | ||
359 | #define GIC_VPE_EIC_VEC(intr) \ | ||
360 | (GIC_VPE_EIC_VEC_BASE + (4 * intr)) | ||
361 | |||
362 | #define GIC_VPE_TENABLE_NMI_OFS 0x1000 | ||
363 | #define GIC_VPE_TENABLE_YQ_OFS 0x1004 | ||
364 | #define GIC_VPE_TENABLE_INT_31_0_OFS 0x1080 | ||
365 | #define GIC_VPE_TENABLE_INT_63_32_OFS 0x1084 | ||
366 | |||
367 | /* User Mode Visible Section Register Map */ | ||
368 | #define GIC_UMV_SH_COUNTER_31_00_OFS 0x0004 | ||
369 | #define GIC_UMV_SH_COUNTER_63_32_OFS 0x0000 | ||
370 | |||
371 | #endif /* !LE */ | ||
372 | |||
373 | /* Masks */ | ||
374 | #define GIC_SH_CONFIG_COUNTSTOP_SHF 28 | ||
375 | #define GIC_SH_CONFIG_COUNTSTOP_MSK (MSK(1) << GIC_SH_CONFIG_COUNTSTOP_SHF) | ||
376 | |||
377 | #define GIC_SH_CONFIG_COUNTBITS_SHF 24 | ||
378 | #define GIC_SH_CONFIG_COUNTBITS_MSK (MSK(4) << GIC_SH_CONFIG_COUNTBITS_SHF) | ||
379 | |||
380 | #define GIC_SH_CONFIG_NUMINTRS_SHF 16 | ||
381 | #define GIC_SH_CONFIG_NUMINTRS_MSK (MSK(8) << GIC_SH_CONFIG_NUMINTRS_SHF) | ||
382 | |||
383 | #define GIC_SH_CONFIG_NUMVPES_SHF 0 | ||
384 | #define GIC_SH_CONFIG_NUMVPES_MSK (MSK(8) << GIC_SH_CONFIG_NUMVPES_SHF) | ||
385 | |||
386 | #define GIC_SH_WEDGE_SET(intr) (intr | (0x1 << 31)) | ||
387 | #define GIC_SH_WEDGE_CLR(intr) (intr & ~(0x1 << 31)) | ||
388 | |||
389 | #define GIC_MAP_TO_PIN_SHF 31 | ||
390 | #define GIC_MAP_TO_PIN_MSK (MSK(1) << GIC_MAP_TO_PIN_SHF) | ||
391 | #define GIC_MAP_TO_NMI_SHF 30 | ||
392 | #define GIC_MAP_TO_NMI_MSK (MSK(1) << GIC_MAP_TO_NMI_SHF) | ||
393 | #define GIC_MAP_TO_YQ_SHF 29 | ||
394 | #define GIC_MAP_TO_YQ_MSK (MSK(1) << GIC_MAP_TO_YQ_SHF) | ||
395 | #define GIC_MAP_SHF 0 | ||
396 | #define GIC_MAP_MSK (MSK(6) << GIC_MAP_SHF) | ||
397 | |||
398 | /* GIC_VPE_CTL Masks */ | ||
399 | #define GIC_VPE_CTL_PERFCNT_RTBL_SHF 2 | ||
400 | #define GIC_VPE_CTL_PERFCNT_RTBL_MSK (MSK(1) << GIC_VPE_CTL_PERFCNT_RTBL_SHF) | ||
401 | #define GIC_VPE_CTL_TIMER_RTBL_SHF 1 | ||
402 | #define GIC_VPE_CTL_TIMER_RTBL_MSK (MSK(1) << GIC_VPE_CTL_TIMER_RTBL_SHF) | ||
403 | #define GIC_VPE_CTL_EIC_MODE_SHF 0 | ||
404 | #define GIC_VPE_CTL_EIC_MODE_MSK (MSK(1) << GIC_VPE_CTL_EIC_MODE_SHF) | ||
405 | |||
406 | /* GIC_VPE_PEND Masks */ | ||
407 | #define GIC_VPE_PEND_WD_SHF 0 | ||
408 | #define GIC_VPE_PEND_WD_MSK (MSK(1) << GIC_VPE_PEND_WD_SHF) | ||
409 | #define GIC_VPE_PEND_CMP_SHF 1 | ||
410 | #define GIC_VPE_PEND_CMP_MSK (MSK(1) << GIC_VPE_PEND_CMP_SHF) | ||
411 | #define GIC_VPE_PEND_TIMER_SHF 2 | ||
412 | #define GIC_VPE_PEND_TIMER_MSK (MSK(1) << GIC_VPE_PEND_TIMER_SHF) | ||
413 | #define GIC_VPE_PEND_PERFCOUNT_SHF 3 | ||
414 | #define GIC_VPE_PEND_PERFCOUNT_MSK (MSK(1) << GIC_VPE_PEND_PERFCOUNT_SHF) | ||
415 | #define GIC_VPE_PEND_SWINT0_SHF 4 | ||
416 | #define GIC_VPE_PEND_SWINT0_MSK (MSK(1) << GIC_VPE_PEND_SWINT0_SHF) | ||
417 | #define GIC_VPE_PEND_SWINT1_SHF 5 | ||
418 | #define GIC_VPE_PEND_SWINT1_MSK (MSK(1) << GIC_VPE_PEND_SWINT1_SHF) | ||
419 | |||
420 | /* GIC_VPE_RMASK Masks */ | ||
421 | #define GIC_VPE_RMASK_WD_SHF 0 | ||
422 | #define GIC_VPE_RMASK_WD_MSK (MSK(1) << GIC_VPE_RMASK_WD_SHF) | ||
423 | #define GIC_VPE_RMASK_CMP_SHF 1 | ||
424 | #define GIC_VPE_RMASK_CMP_MSK (MSK(1) << GIC_VPE_RMASK_CMP_SHF) | ||
425 | #define GIC_VPE_RMASK_TIMER_SHF 2 | ||
426 | #define GIC_VPE_RMASK_TIMER_MSK (MSK(1) << GIC_VPE_RMASK_TIMER_SHF) | ||
427 | #define GIC_VPE_RMASK_PERFCNT_SHF 3 | ||
428 | #define GIC_VPE_RMASK_PERFCNT_MSK (MSK(1) << GIC_VPE_RMASK_PERFCNT_SHF) | ||
429 | #define GIC_VPE_RMASK_SWINT0_SHF 4 | ||
430 | #define GIC_VPE_RMASK_SWINT0_MSK (MSK(1) << GIC_VPE_RMASK_SWINT0_SHF) | ||
431 | #define GIC_VPE_RMASK_SWINT1_SHF 5 | ||
432 | #define GIC_VPE_RMASK_SWINT1_MSK (MSK(1) << GIC_VPE_RMASK_SWINT1_SHF) | ||
433 | |||
434 | /* GIC_VPE_SMASK Masks */ | ||
435 | #define GIC_VPE_SMASK_WD_SHF 0 | ||
436 | #define GIC_VPE_SMASK_WD_MSK (MSK(1) << GIC_VPE_SMASK_WD_SHF) | ||
437 | #define GIC_VPE_SMASK_CMP_SHF 1 | ||
438 | #define GIC_VPE_SMASK_CMP_MSK (MSK(1) << GIC_VPE_SMASK_CMP_SHF) | ||
439 | #define GIC_VPE_SMASK_TIMER_SHF 2 | ||
440 | #define GIC_VPE_SMASK_TIMER_MSK (MSK(1) << GIC_VPE_SMASK_TIMER_SHF) | ||
441 | #define GIC_VPE_SMASK_PERFCNT_SHF 3 | ||
442 | #define GIC_VPE_SMASK_PERFCNT_MSK (MSK(1) << GIC_VPE_SMASK_PERFCNT_SHF) | ||
443 | #define GIC_VPE_SMASK_SWINT0_SHF 4 | ||
444 | #define GIC_VPE_SMASK_SWINT0_MSK (MSK(1) << GIC_VPE_SMASK_SWINT0_SHF) | ||
445 | #define GIC_VPE_SMASK_SWINT1_SHF 5 | ||
446 | #define GIC_VPE_SMASK_SWINT1_MSK (MSK(1) << GIC_VPE_SMASK_SWINT1_SHF) | ||
447 | |||
448 | /* | ||
449 | * Set the Mapping of Interrupt X to a VPE. | ||
450 | */ | ||
451 | #define GIC_SH_MAP_TO_VPE_SMASK(intr, vpe) \ | ||
452 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe)), \ | ||
453 | GIC_SH_MAP_TO_VPE_REG_BIT(vpe)) | ||
454 | |||
455 | struct gic_pcpu_mask { | ||
456 | DECLARE_BITMAP(pcpu_mask, GIC_NUM_INTRS); | ||
457 | }; | ||
458 | |||
459 | struct gic_pending_regs { | ||
460 | DECLARE_BITMAP(pending, GIC_NUM_INTRS); | ||
461 | }; | ||
462 | |||
463 | struct gic_intrmask_regs { | ||
464 | DECLARE_BITMAP(intrmask, GIC_NUM_INTRS); | ||
465 | }; | ||
466 | |||
467 | /* | ||
468 | * Interrupt Meta-data specification. The ipiflag helps | ||
469 | * in building ipi_map. | ||
470 | */ | ||
471 | struct gic_intr_map { | ||
472 | unsigned int intrnum; /* Ext Intr Num */ | ||
473 | unsigned int cpunum; /* Directed to this CPU */ | ||
474 | unsigned int pin; /* Directed to this Pin */ | ||
475 | unsigned int polarity; /* Polarity : +/- */ | ||
476 | unsigned int trigtype; /* Trigger : Edge/Levl */ | ||
477 | unsigned int ipiflag; /* Is used for IPI ? */ | ||
478 | }; | ||
479 | |||
480 | extern void gic_init(unsigned long gic_base_addr, | ||
481 | unsigned long gic_addrspace_size, struct gic_intr_map *intrmap, | ||
482 | unsigned int intrmap_size, unsigned int irqbase); | ||
483 | |||
484 | extern unsigned int gic_get_int(void); | ||
485 | extern void gic_send_ipi(unsigned int intr); | ||
486 | |||
487 | #endif /* _ASM_GICREGS_H */ | ||
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index e62058b0d28c..f18d2816cbec 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h | |||
@@ -273,7 +273,7 @@ static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size, | |||
273 | * memory-like regions on I/O busses. | 273 | * memory-like regions on I/O busses. |
274 | */ | 274 | */ |
275 | #define ioremap_cachable(offset, size) \ | 275 | #define ioremap_cachable(offset, size) \ |
276 | __ioremap_mode((offset), (size), PAGE_CACHABLE_DEFAULT) | 276 | __ioremap_mode((offset), (size), _page_cachable_default) |
277 | 277 | ||
278 | /* | 278 | /* |
279 | * These two are MIPS specific ioremap variant. ioremap_cacheable_cow | 279 | * These two are MIPS specific ioremap variant. ioremap_cacheable_cow |
diff --git a/include/asm-mips/jmr3927/jmr3927.h b/include/asm-mips/jmr3927/jmr3927.h index 81602c8047eb..a162268f17df 100644 --- a/include/asm-mips/jmr3927/jmr3927.h +++ b/include/asm-mips/jmr3927/jmr3927.h | |||
@@ -99,8 +99,8 @@ | |||
99 | #define jmr3927_led_and_set(n/*0-16*/) jmr3927_ioc_reg_out((~(n)) & jmr3927_ioc_reg_in(JMR3927_IOC_LED_ADDR), JMR3927_IOC_LED_ADDR) | 99 | #define jmr3927_led_and_set(n/*0-16*/) jmr3927_ioc_reg_out((~(n)) & jmr3927_ioc_reg_in(JMR3927_IOC_LED_ADDR), JMR3927_IOC_LED_ADDR) |
100 | 100 | ||
101 | /* DIPSW4 macro */ | 101 | /* DIPSW4 macro */ |
102 | #define jmr3927_dipsw1() ((tx3927_pioptr->din & (1 << 11)) == 0) | 102 | #define jmr3927_dipsw1() (gpio_get_value(11) == 0) |
103 | #define jmr3927_dipsw2() ((tx3927_pioptr->din & (1 << 10)) == 0) | 103 | #define jmr3927_dipsw2() (gpio_get_value(10) == 0) |
104 | #define jmr3927_dipsw3() ((jmr3927_ioc_reg_in(JMR3927_IOC_DIPSW_ADDR) & 2) == 0) | 104 | #define jmr3927_dipsw3() ((jmr3927_ioc_reg_in(JMR3927_IOC_DIPSW_ADDR) & 2) == 0) |
105 | #define jmr3927_dipsw4() ((jmr3927_ioc_reg_in(JMR3927_IOC_DIPSW_ADDR) & 1) == 0) | 105 | #define jmr3927_dipsw4() ((jmr3927_ioc_reg_in(JMR3927_IOC_DIPSW_ADDR) & 1) == 0) |
106 | 106 | ||
diff --git a/include/asm-mips/jmr3927/tx3927.h b/include/asm-mips/jmr3927/tx3927.h index 338f99882a39..fb580333c102 100644 --- a/include/asm-mips/jmr3927/tx3927.h +++ b/include/asm-mips/jmr3927/tx3927.h | |||
@@ -314,6 +314,6 @@ struct tx3927_ccfg_reg { | |||
314 | #define tx3927_ccfgptr ((struct tx3927_ccfg_reg *)TX3927_CCFG_REG) | 314 | #define tx3927_ccfgptr ((struct tx3927_ccfg_reg *)TX3927_CCFG_REG) |
315 | #define tx3927_tmrptr(ch) ((struct txx927_tmr_reg *)TX3927_TMR_REG(ch)) | 315 | #define tx3927_tmrptr(ch) ((struct txx927_tmr_reg *)TX3927_TMR_REG(ch)) |
316 | #define tx3927_sioptr(ch) ((struct txx927_sio_reg *)TX3927_SIO_REG(ch)) | 316 | #define tx3927_sioptr(ch) ((struct txx927_sio_reg *)TX3927_SIO_REG(ch)) |
317 | #define tx3927_pioptr ((struct txx927_pio_reg *)TX3927_PIO_REG) | 317 | #define tx3927_pioptr ((struct txx9_pio_reg __iomem *)TX3927_PIO_REG) |
318 | 318 | ||
319 | #endif /* __ASM_TX3927_H */ | 319 | #endif /* __ASM_TX3927_H */ |
diff --git a/include/asm-mips/jmr3927/txx927.h b/include/asm-mips/jmr3927/txx927.h index 0474fe8dac3f..25dcf2feb095 100644 --- a/include/asm-mips/jmr3927/txx927.h +++ b/include/asm-mips/jmr3927/txx927.h | |||
@@ -22,18 +22,6 @@ struct txx927_sio_reg { | |||
22 | volatile unsigned long rfifo; | 22 | volatile unsigned long rfifo; |
23 | }; | 23 | }; |
24 | 24 | ||
25 | struct txx927_pio_reg { | ||
26 | volatile unsigned long dout; | ||
27 | volatile unsigned long din; | ||
28 | volatile unsigned long dir; | ||
29 | volatile unsigned long od; | ||
30 | volatile unsigned long flag[2]; | ||
31 | volatile unsigned long pol; | ||
32 | volatile unsigned long intc; | ||
33 | volatile unsigned long maskcpu; | ||
34 | volatile unsigned long maskext; | ||
35 | }; | ||
36 | |||
37 | /* | 25 | /* |
38 | * SIO | 26 | * SIO |
39 | */ | 27 | */ |
diff --git a/include/asm-mips/mach-au1x00/au1000.h b/include/asm-mips/mach-au1x00/au1000.h index 5bb57bf2b9d7..a05555165d05 100644 --- a/include/asm-mips/mach-au1x00/au1000.h +++ b/include/asm-mips/mach-au1x00/au1000.h | |||
@@ -3,9 +3,8 @@ | |||
3 | * BRIEF MODULE DESCRIPTION | 3 | * BRIEF MODULE DESCRIPTION |
4 | * Include file for Alchemy Semiconductor's Au1k CPU. | 4 | * Include file for Alchemy Semiconductor's Au1k CPU. |
5 | * | 5 | * |
6 | * Copyright 2000,2001 MontaVista Software Inc. | 6 | * Copyright 2000-2001, 2006-2008 MontaVista Software Inc. |
7 | * Author: MontaVista Software, Inc. | 7 | * Author: MontaVista Software, Inc. <source@mvista.com> |
8 | * ppopov@mvista.com or source@mvista.com | ||
9 | * | 8 | * |
10 | * This program is free software; you can redistribute it and/or modify it | 9 | * This program is free software; you can redistribute it and/or modify it |
11 | * under the terms of the GNU General Public License as published by the | 10 | * under the terms of the GNU General Public License as published by the |
@@ -117,13 +116,6 @@ extern struct au1xxx_irqmap au1xxx_irq_map[]; | |||
117 | 116 | ||
118 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ | 117 | #endif /* !defined (_LANGUAGE_ASSEMBLY) */ |
119 | 118 | ||
120 | #ifdef CONFIG_PM | ||
121 | /* no CP0 timer irq */ | ||
122 | #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4) | ||
123 | #else | ||
124 | #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5) | ||
125 | #endif | ||
126 | |||
127 | /* | 119 | /* |
128 | * SDRAM Register Offsets | 120 | * SDRAM Register Offsets |
129 | */ | 121 | */ |
@@ -1693,20 +1685,6 @@ enum soc_au1200_ints { | |||
1693 | #define IOMEM_RESOURCE_START 0x10000000 | 1685 | #define IOMEM_RESOURCE_START 0x10000000 |
1694 | #define IOMEM_RESOURCE_END 0xffffffff | 1686 | #define IOMEM_RESOURCE_END 0xffffffff |
1695 | 1687 | ||
1696 | /* | ||
1697 | * Borrowed from the PPC arch: | ||
1698 | * The following macro is used to lookup irqs in a standard table | ||
1699 | * format for those PPC systems that do not already have PCI | ||
1700 | * interrupts properly routed. | ||
1701 | */ | ||
1702 | /* FIXME - double check this from asm-ppc/pci-bridge.h */ | ||
1703 | #define PCI_IRQ_TABLE_LOOKUP \ | ||
1704 | ({ long _ctl_ = -1; \ | ||
1705 | if (idsel >= min_idsel && idsel <= max_idsel && pin <= irqs_per_slot) \ | ||
1706 | _ctl_ = pci_irq_table[idsel - min_idsel][pin-1]; \ | ||
1707 | _ctl_; }) | ||
1708 | |||
1709 | |||
1710 | #else /* Au1000 and Au1100 and Au1200 */ | 1688 | #else /* Au1000 and Au1100 and Au1200 */ |
1711 | 1689 | ||
1712 | /* don't allow any legacy ports probing */ | 1690 | /* don't allow any legacy ports probing */ |
diff --git a/include/asm-mips/mach-au1x00/au1xxx_ide.h b/include/asm-mips/mach-au1x00/au1xxx_ide.h index 89655c0cdcd6..b493a5e46c63 100644 --- a/include/asm-mips/mach-au1x00/au1xxx_ide.h +++ b/include/asm-mips/mach-au1x00/au1xxx_ide.h | |||
@@ -70,7 +70,6 @@ typedef struct | |||
70 | ide_hwif_t *hwif; | 70 | ide_hwif_t *hwif; |
71 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA | 71 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA |
72 | ide_drive_t *drive; | 72 | ide_drive_t *drive; |
73 | u8 white_list, black_list; | ||
74 | struct dbdma_cmd *dma_table_cpu; | 73 | struct dbdma_cmd *dma_table_cpu; |
75 | dma_addr_t dma_table_dma; | 74 | dma_addr_t dma_table_dma; |
76 | #endif | 75 | #endif |
@@ -81,47 +80,6 @@ typedef struct | |||
81 | #endif | 80 | #endif |
82 | } _auide_hwif; | 81 | } _auide_hwif; |
83 | 82 | ||
84 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA | ||
85 | /* HD white list */ | ||
86 | static const struct drive_list_entry dma_white_list [] = { | ||
87 | /* | ||
88 | * Hitachi | ||
89 | */ | ||
90 | { "HITACHI_DK14FA-20" , NULL }, | ||
91 | { "HTS726060M9AT00" , NULL }, | ||
92 | /* | ||
93 | * Maxtor | ||
94 | */ | ||
95 | { "Maxtor 6E040L0" , NULL }, | ||
96 | { "Maxtor 6Y080P0" , NULL }, | ||
97 | { "Maxtor 6Y160P0" , NULL }, | ||
98 | /* | ||
99 | * Seagate | ||
100 | */ | ||
101 | { "ST3120026A" , NULL }, | ||
102 | { "ST320014A" , NULL }, | ||
103 | { "ST94011A" , NULL }, | ||
104 | { "ST340016A" , NULL }, | ||
105 | /* | ||
106 | * Western Digital | ||
107 | */ | ||
108 | { "WDC WD400UE-00HCT0" , NULL }, | ||
109 | { "WDC WD400JB-00JJC0" , NULL }, | ||
110 | { NULL , NULL } | ||
111 | }; | ||
112 | |||
113 | /* HD black list */ | ||
114 | static const struct drive_list_entry dma_black_list [] = { | ||
115 | /* | ||
116 | * Western Digital | ||
117 | */ | ||
118 | { "WDC WD100EB-00CGH0" , NULL }, | ||
119 | { "WDC WD200BB-00AUA1" , NULL }, | ||
120 | { "WDC AC24300L" , NULL }, | ||
121 | { NULL , NULL } | ||
122 | }; | ||
123 | #endif | ||
124 | |||
125 | /******************************************************************************* | 83 | /******************************************************************************* |
126 | * PIO Mode timing calculation : * | 84 | * PIO Mode timing calculation : * |
127 | * * | 85 | * * |
diff --git a/include/asm-mips/mach-db1x00/db1200.h b/include/asm-mips/mach-db1x00/db1200.h index d2e28e64932e..eedd048a7261 100644 --- a/include/asm-mips/mach-db1x00/db1200.h +++ b/include/asm-mips/mach-db1x00/db1200.h | |||
@@ -169,15 +169,15 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; | |||
169 | #define BCSR_INT_SD0INSERT 0x1000 | 169 | #define BCSR_INT_SD0INSERT 0x1000 |
170 | #define BCSR_INT_SD0EJECT 0x2000 | 170 | #define BCSR_INT_SD0EJECT 0x2000 |
171 | 171 | ||
172 | #define AU1XXX_SMC91111_PHYS_ADDR (0x19000300) | 172 | #define SMC91C111_PHYS_ADDR 0x19000300 |
173 | #define AU1XXX_SMC91111_IRQ DB1200_ETH_INT | 173 | #define SMC91C111_INT DB1200_ETH_INT |
174 | 174 | ||
175 | #define AU1XXX_ATA_PHYS_ADDR (0x18800000) | 175 | #define IDE_PHYS_ADDR 0x18800000 |
176 | #define AU1XXX_ATA_REG_OFFSET (5) | 176 | #define IDE_REG_SHIFT 5 |
177 | #define AU1XXX_ATA_PHYS_LEN (16 << AU1XXX_ATA_REG_OFFSET) | 177 | #define IDE_PHYS_LEN (16 << IDE_REG_SHIFT) |
178 | #define AU1XXX_ATA_INT DB1200_IDE_INT | 178 | #define IDE_INT DB1200_IDE_INT |
179 | #define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1; | 179 | #define IDE_DDMA_REQ DSCR_CMD0_DMA_REQ1 |
180 | #define AU1XXX_ATA_RQSIZE 128 | 180 | #define IDE_RQSIZE 128 |
181 | 181 | ||
182 | #define NAND_PHYS_ADDR 0x20000000 | 182 | #define NAND_PHYS_ADDR 0x20000000 |
183 | 183 | ||
diff --git a/include/asm-mips/mach-generic/gpio.h b/include/asm-mips/mach-generic/gpio.h index 6eaf5efedf3a..e6b376bd9d06 100644 --- a/include/asm-mips/mach-generic/gpio.h +++ b/include/asm-mips/mach-generic/gpio.h | |||
@@ -1,12 +1,18 @@ | |||
1 | #ifndef __ASM_MACH_GENERIC_GPIO_H | 1 | #ifndef __ASM_MACH_GENERIC_GPIO_H |
2 | #define __ASM_MACH_GENERIC_GPIO_H | 2 | #define __ASM_MACH_GENERIC_GPIO_H |
3 | 3 | ||
4 | #ifdef CONFIG_HAVE_GPIO_LIB | ||
5 | #define gpio_get_value __gpio_get_value | ||
6 | #define gpio_set_value __gpio_set_value | ||
7 | #define gpio_cansleep __gpio_cansleep | ||
8 | #else | ||
4 | int gpio_request(unsigned gpio, const char *label); | 9 | int gpio_request(unsigned gpio, const char *label); |
5 | void gpio_free(unsigned gpio); | 10 | void gpio_free(unsigned gpio); |
6 | int gpio_direction_input(unsigned gpio); | 11 | int gpio_direction_input(unsigned gpio); |
7 | int gpio_direction_output(unsigned gpio, int value); | 12 | int gpio_direction_output(unsigned gpio, int value); |
8 | int gpio_get_value(unsigned gpio); | 13 | int gpio_get_value(unsigned gpio); |
9 | void gpio_set_value(unsigned gpio, int value); | 14 | void gpio_set_value(unsigned gpio, int value); |
15 | #endif | ||
10 | int gpio_to_irq(unsigned gpio); | 16 | int gpio_to_irq(unsigned gpio); |
11 | int irq_to_gpio(unsigned irq); | 17 | int irq_to_gpio(unsigned irq); |
12 | 18 | ||
diff --git a/include/asm-mips/mach-ip27/topology.h b/include/asm-mips/mach-ip27/topology.h index 372291f53fb9..7785bec732f2 100644 --- a/include/asm-mips/mach-ip27/topology.h +++ b/include/asm-mips/mach-ip27/topology.h | |||
@@ -54,4 +54,6 @@ extern unsigned char __node_distances[MAX_COMPACT_NODES][MAX_COMPACT_NODES]; | |||
54 | .nr_balance_failed = 0, \ | 54 | .nr_balance_failed = 0, \ |
55 | } | 55 | } |
56 | 56 | ||
57 | #include <asm-generic/topology.h> | ||
58 | |||
57 | #endif /* _ASM_MACH_TOPOLOGY_H */ | 59 | #endif /* _ASM_MACH_TOPOLOGY_H */ |
diff --git a/include/asm-mips/mach-pb1x00/pb1200.h b/include/asm-mips/mach-pb1x00/pb1200.h index edaa489b58f1..e2c6bcac3b42 100644 --- a/include/asm-mips/mach-pb1x00/pb1200.h +++ b/include/asm-mips/mach-pb1x00/pb1200.h | |||
@@ -182,15 +182,15 @@ static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; | |||
182 | #define SET_VCC_VPP(VCC, VPP, SLOT)\ | 182 | #define SET_VCC_VPP(VCC, VPP, SLOT)\ |
183 | ((((VCC)<<2) | ((VPP)<<0)) << ((SLOT)*8)) | 183 | ((((VCC)<<2) | ((VPP)<<0)) << ((SLOT)*8)) |
184 | 184 | ||
185 | #define AU1XXX_SMC91111_PHYS_ADDR (0x0D000300) | 185 | #define SMC91C111_PHYS_ADDR 0x0D000300 |
186 | #define AU1XXX_SMC91111_IRQ PB1200_ETH_INT | 186 | #define SMC91C111_INT PB1200_ETH_INT |
187 | 187 | ||
188 | #define AU1XXX_ATA_PHYS_ADDR (0x0C800000) | 188 | #define IDE_PHYS_ADDR 0x0C800000 |
189 | #define AU1XXX_ATA_REG_OFFSET (5) | 189 | #define IDE_REG_SHIFT 5 |
190 | #define AU1XXX_ATA_PHYS_LEN (16 << AU1XXX_ATA_REG_OFFSET) | 190 | #define IDE_PHYS_LEN (16 << IDE_REG_SHIFT) |
191 | #define AU1XXX_ATA_INT PB1200_IDE_INT | 191 | #define IDE_INT PB1200_IDE_INT |
192 | #define AU1XXX_ATA_DDMA_REQ DSCR_CMD0_DMA_REQ1; | 192 | #define IDE_DDMA_REQ DSCR_CMD0_DMA_REQ1 |
193 | #define AU1XXX_ATA_RQSIZE 128 | 193 | #define IDE_RQSIZE 128 |
194 | 194 | ||
195 | #define NAND_PHYS_ADDR 0x1C000000 | 195 | #define NAND_PHYS_ADDR 0x1C000000 |
196 | 196 | ||
diff --git a/include/asm-mips/mips-boards/generic.h b/include/asm-mips/mips-boards/generic.h index 1c39d339521e..33407bee4e73 100644 --- a/include/asm-mips/mips-boards/generic.h +++ b/include/asm-mips/mips-boards/generic.h | |||
@@ -68,6 +68,7 @@ | |||
68 | #define MIPS_REVISION_CORID_CORE_FPGA3 9 | 68 | #define MIPS_REVISION_CORID_CORE_FPGA3 9 |
69 | #define MIPS_REVISION_CORID_CORE_24K 10 | 69 | #define MIPS_REVISION_CORID_CORE_24K 10 |
70 | #define MIPS_REVISION_CORID_CORE_FPGA4 11 | 70 | #define MIPS_REVISION_CORID_CORE_FPGA4 11 |
71 | #define MIPS_REVISION_CORID_CORE_FPGA5 12 | ||
71 | 72 | ||
72 | /**** Artificial corid defines ****/ | 73 | /**** Artificial corid defines ****/ |
73 | /* | 74 | /* |
diff --git a/include/asm-mips/mips-boards/launch.h b/include/asm-mips/mips-boards/launch.h new file mode 100644 index 000000000000..d8ae7f95a522 --- /dev/null +++ b/include/asm-mips/mips-boards/launch.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * | ||
3 | */ | ||
4 | |||
5 | #ifndef _ASSEMBLER_ | ||
6 | |||
7 | struct cpulaunch { | ||
8 | unsigned long pc; | ||
9 | unsigned long gp; | ||
10 | unsigned long sp; | ||
11 | unsigned long a0; | ||
12 | unsigned long _pad[3]; /* pad to cache line size to avoid thrashing */ | ||
13 | unsigned long flags; | ||
14 | }; | ||
15 | |||
16 | #else | ||
17 | |||
18 | #define LOG2CPULAUNCH 5 | ||
19 | #define LAUNCH_PC 0 | ||
20 | #define LAUNCH_GP 4 | ||
21 | #define LAUNCH_SP 8 | ||
22 | #define LAUNCH_A0 12 | ||
23 | #define LAUNCH_FLAGS 28 | ||
24 | |||
25 | #endif | ||
26 | |||
27 | #define LAUNCH_FREADY 1 | ||
28 | #define LAUNCH_FGO 2 | ||
29 | #define LAUNCH_FGONE 4 | ||
30 | |||
31 | #define CPULAUNCH 0x00000f00 | ||
32 | #define NCPULAUNCH 8 | ||
33 | |||
34 | /* Polling period in count cycles for secondary CPU's */ | ||
35 | #define LAUNCHPERIOD 10000 | ||
diff --git a/include/asm-mips/mips-boards/malta.h b/include/asm-mips/mips-boards/malta.h index 93bf4e51b8a4..c1891578fa65 100644 --- a/include/asm-mips/mips-boards/malta.h +++ b/include/asm-mips/mips-boards/malta.h | |||
@@ -52,6 +52,29 @@ static inline unsigned long get_msc_port_base(unsigned long reg) | |||
52 | } | 52 | } |
53 | 53 | ||
54 | /* | 54 | /* |
55 | * GCMP Specific definitions | ||
56 | */ | ||
57 | #define GCMP_BASE_ADDR 0x1fbf8000 | ||
58 | #define GCMP_ADDRSPACE_SZ (256 * 1024) | ||
59 | |||
60 | /* | ||
61 | * GIC Specific definitions | ||
62 | */ | ||
63 | #define GIC_BASE_ADDR 0x1bdc0000 | ||
64 | #define GIC_ADDRSPACE_SZ (128 * 1024) | ||
65 | |||
66 | /* | ||
67 | * MSC01 BIU Specific definitions | ||
68 | * FIXME : These should be elsewhere ? | ||
69 | */ | ||
70 | #define MSC01_BIU_REG_BASE 0x1bc80000 | ||
71 | #define MSC01_BIU_ADDRSPACE_SZ (256 * 1024) | ||
72 | #define MSC01_SC_CFG_OFS 0x0110 | ||
73 | #define MSC01_SC_CFG_GICPRES_MSK 0x00000004 | ||
74 | #define MSC01_SC_CFG_GICPRES_SHF 2 | ||
75 | #define MSC01_SC_CFG_GICENA_SHF 3 | ||
76 | |||
77 | /* | ||
55 | * Malta RTC-device indirect register access. | 78 | * Malta RTC-device indirect register access. |
56 | */ | 79 | */ |
57 | #define MALTA_RTC_ADR_REG 0x70 | 80 | #define MALTA_RTC_ADR_REG 0x70 |
diff --git a/include/asm-mips/mips-boards/maltaint.h b/include/asm-mips/mips-boards/maltaint.h index 7461318f1cd1..cea872fc6f5c 100644 --- a/include/asm-mips/mips-boards/maltaint.h +++ b/include/asm-mips/mips-boards/maltaint.h | |||
@@ -39,7 +39,9 @@ | |||
39 | #define MIPSCPU_INT_I8259A MIPSCPU_INT_MB0 | 39 | #define MIPSCPU_INT_I8259A MIPSCPU_INT_MB0 |
40 | #define MIPSCPU_INT_MB1 3 | 40 | #define MIPSCPU_INT_MB1 3 |
41 | #define MIPSCPU_INT_SMI MIPSCPU_INT_MB1 | 41 | #define MIPSCPU_INT_SMI MIPSCPU_INT_MB1 |
42 | #define MIPSCPU_INT_IPI0 MIPSCPU_INT_MB1 /* GIC IPI */ | ||
42 | #define MIPSCPU_INT_MB2 4 | 43 | #define MIPSCPU_INT_MB2 4 |
44 | #define MIPSCPU_INT_IPI1 MIPSCPU_INT_MB2 /* GIC IPI */ | ||
43 | #define MIPSCPU_INT_MB3 5 | 45 | #define MIPSCPU_INT_MB3 5 |
44 | #define MIPSCPU_INT_COREHI MIPSCPU_INT_MB3 | 46 | #define MIPSCPU_INT_COREHI MIPSCPU_INT_MB3 |
45 | #define MIPSCPU_INT_MB4 6 | 47 | #define MIPSCPU_INT_MB4 6 |
@@ -76,6 +78,31 @@ | |||
76 | #define MSC01E_INT_PERFCTR 10 | 78 | #define MSC01E_INT_PERFCTR 10 |
77 | #define MSC01E_INT_CPUCTR 11 | 79 | #define MSC01E_INT_CPUCTR 11 |
78 | 80 | ||
81 | /* GIC's Nomenclature for Core Interrupt Pins on the Malta */ | ||
82 | #define GIC_CPU_INT0 0 /* Core Interrupt 2 */ | ||
83 | #define GIC_CPU_INT1 1 /* . */ | ||
84 | #define GIC_CPU_INT2 2 /* . */ | ||
85 | #define GIC_CPU_INT3 3 /* . */ | ||
86 | #define GIC_CPU_INT4 4 /* . */ | ||
87 | #define GIC_CPU_INT5 5 /* Core Interrupt 5 */ | ||
88 | |||
89 | #define GIC_EXT_INTR(x) x | ||
90 | |||
91 | /* Dummy data */ | ||
92 | #define X 0xdead | ||
93 | |||
94 | /* External Interrupts used for IPI */ | ||
95 | #define GIC_IPI_EXT_INTR_RESCHED_VPE0 16 | ||
96 | #define GIC_IPI_EXT_INTR_CALLFNC_VPE0 17 | ||
97 | #define GIC_IPI_EXT_INTR_RESCHED_VPE1 18 | ||
98 | #define GIC_IPI_EXT_INTR_CALLFNC_VPE1 19 | ||
99 | #define GIC_IPI_EXT_INTR_RESCHED_VPE2 20 | ||
100 | #define GIC_IPI_EXT_INTR_CALLFNC_VPE2 21 | ||
101 | #define GIC_IPI_EXT_INTR_RESCHED_VPE3 22 | ||
102 | #define GIC_IPI_EXT_INTR_CALLFNC_VPE3 23 | ||
103 | |||
104 | #define MIPS_GIC_IRQ_BASE (MIPS_CPU_IRQ_BASE + 8) | ||
105 | |||
79 | #ifndef __ASSEMBLY__ | 106 | #ifndef __ASSEMBLY__ |
80 | extern void maltaint_init(void); | 107 | extern void maltaint_init(void); |
81 | #endif | 108 | #endif |
diff --git a/include/asm-mips/mips-boards/maltasmp.h b/include/asm-mips/mips-boards/maltasmp.h new file mode 100644 index 000000000000..8d7e955d506e --- /dev/null +++ b/include/asm-mips/mips-boards/maltasmp.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * There are several SMP models supported | ||
3 | * SMTC is mutually exclusive to other options (atm) | ||
4 | */ | ||
5 | #if defined(CONFIG_MIPS_MT_SMTC) | ||
6 | #define malta_smtc 1 | ||
7 | #define malta_cmp 0 | ||
8 | #define malta_smvp 0 | ||
9 | #else | ||
10 | #define malta_smtc 0 | ||
11 | #if defined(CONFIG_MIPS_CMP) | ||
12 | extern int gcmp_present; | ||
13 | #define malta_cmp gcmp_present | ||
14 | #else | ||
15 | #define malta_cmp 0 | ||
16 | #endif | ||
17 | /* FIXME: should become COMFIG_MIPS_MT_SMVP */ | ||
18 | #if defined(CONFIG_MIPS_MT_SMP) | ||
19 | #define malta_smvp 1 | ||
20 | #else | ||
21 | #define malta_smvp 0 | ||
22 | #endif | ||
23 | #endif | ||
24 | |||
25 | #include <asm/mipsregs.h> | ||
26 | #include <asm/mipsmtregs.h> | ||
27 | |||
28 | /* malta_smtc */ | ||
29 | #include <asm/smtc.h> | ||
30 | #include <asm/smtc_ipi.h> | ||
31 | |||
32 | /* malta_cmp */ | ||
33 | #include <asm/cmp.h> | ||
34 | |||
35 | /* malta_smvp */ | ||
36 | #include <asm/smvp.h> | ||
diff --git a/include/asm-mips/mipsmtregs.h b/include/asm-mips/mipsmtregs.h index 5a2f8a3a6a1f..c9420aa97e32 100644 --- a/include/asm-mips/mipsmtregs.h +++ b/include/asm-mips/mipsmtregs.h | |||
@@ -197,8 +197,8 @@ static inline void __raw_evpe(void) | |||
197 | " .set pop \n"); | 197 | " .set pop \n"); |
198 | } | 198 | } |
199 | 199 | ||
200 | /* Enable multiMT if previous suggested it should be. | 200 | /* Enable virtual processor execution if previous suggested it should be. |
201 | EMT_ENABLE to force */ | 201 | EVPE_ENABLE to force */ |
202 | 202 | ||
203 | #define EVPE_ENABLE MVPCONTROL_EVP | 203 | #define EVPE_ENABLE MVPCONTROL_EVP |
204 | 204 | ||
@@ -238,8 +238,8 @@ static inline void __raw_emt(void) | |||
238 | " .set reorder"); | 238 | " .set reorder"); |
239 | } | 239 | } |
240 | 240 | ||
241 | /* enable multiVPE if previous suggested it should be. | 241 | /* enable multi-threaded execution if previous suggested it should be. |
242 | EVPE_ENABLE to force */ | 242 | EMT_ENABLE to force */ |
243 | 243 | ||
244 | #define EMT_ENABLE VPECONTROL_TE | 244 | #define EMT_ENABLE VPECONTROL_TE |
245 | 245 | ||
diff --git a/include/asm-mips/pgtable-32.h b/include/asm-mips/pgtable-32.h index ceefe027c761..4396e9ffd418 100644 --- a/include/asm-mips/pgtable-32.h +++ b/include/asm-mips/pgtable-32.h | |||
@@ -107,7 +107,7 @@ static inline void pmd_clear(pmd_t *pmdp) | |||
107 | pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); | 107 | pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); |
108 | } | 108 | } |
109 | 109 | ||
110 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) | 110 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
111 | #define pte_page(x) pfn_to_page(pte_pfn(x)) | 111 | #define pte_page(x) pfn_to_page(pte_pfn(x)) |
112 | #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6)) | 112 | #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6)) |
113 | static inline pte_t | 113 | static inline pte_t |
@@ -130,7 +130,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot) | |||
130 | #define pte_pfn(x) ((unsigned long)((x).pte >> PAGE_SHIFT)) | 130 | #define pte_pfn(x) ((unsigned long)((x).pte >> PAGE_SHIFT)) |
131 | #define pfn_pte(pfn, prot) __pte(((unsigned long long)(pfn) << PAGE_SHIFT) | pgprot_val(prot)) | 131 | #define pfn_pte(pfn, prot) __pte(((unsigned long long)(pfn) << PAGE_SHIFT) | pgprot_val(prot)) |
132 | #endif | 132 | #endif |
133 | #endif /* defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) */ | 133 | #endif /* defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) */ |
134 | 134 | ||
135 | #define __pgd_offset(address) pgd_index(address) | 135 | #define __pgd_offset(address) pgd_index(address) |
136 | #define __pud_offset(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1)) | 136 | #define __pud_offset(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1)) |
diff --git a/include/asm-mips/pgtable-bits.h b/include/asm-mips/pgtable-bits.h index 7494ba91112a..60e2f9338fcd 100644 --- a/include/asm-mips/pgtable-bits.h +++ b/include/asm-mips/pgtable-bits.h | |||
@@ -32,14 +32,14 @@ | |||
32 | * unpredictable things. The code (when it is written) to deal with | 32 | * unpredictable things. The code (when it is written) to deal with |
33 | * this problem will be in the update_mmu_cache() code for the r4k. | 33 | * this problem will be in the update_mmu_cache() code for the r4k. |
34 | */ | 34 | */ |
35 | #if defined(CONFIG_CPU_MIPS32_R1) && defined(CONFIG_64BIT_PHYS_ADDR) | 35 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
36 | 36 | ||
37 | #define _PAGE_PRESENT (1<<6) /* implemented in software */ | 37 | #define _PAGE_PRESENT (1<<6) /* implemented in software */ |
38 | #define _PAGE_READ (1<<7) /* implemented in software */ | 38 | #define _PAGE_READ (1<<7) /* implemented in software */ |
39 | #define _PAGE_WRITE (1<<8) /* implemented in software */ | 39 | #define _PAGE_WRITE (1<<8) /* implemented in software */ |
40 | #define _PAGE_ACCESSED (1<<9) /* implemented in software */ | 40 | #define _PAGE_ACCESSED (1<<9) /* implemented in software */ |
41 | #define _PAGE_MODIFIED (1<<10) /* implemented in software */ | 41 | #define _PAGE_MODIFIED (1<<10) /* implemented in software */ |
42 | #define _PAGE_FILE (1<<10) /* set:pagecache unset:swap */ | 42 | #define _PAGE_FILE (1<<10) /* set:pagecache unset:swap */ |
43 | 43 | ||
44 | #define _PAGE_R4KBUG (1<<0) /* workaround for r4k bug */ | 44 | #define _PAGE_R4KBUG (1<<0) /* workaround for r4k bug */ |
45 | #define _PAGE_GLOBAL (1<<0) | 45 | #define _PAGE_GLOBAL (1<<0) |
@@ -47,15 +47,9 @@ | |||
47 | #define _PAGE_SILENT_READ (1<<1) /* synonym */ | 47 | #define _PAGE_SILENT_READ (1<<1) /* synonym */ |
48 | #define _PAGE_DIRTY (1<<2) /* The MIPS dirty bit */ | 48 | #define _PAGE_DIRTY (1<<2) /* The MIPS dirty bit */ |
49 | #define _PAGE_SILENT_WRITE (1<<2) | 49 | #define _PAGE_SILENT_WRITE (1<<2) |
50 | #define _CACHE_SHIFT 3 | ||
50 | #define _CACHE_MASK (7<<3) | 51 | #define _CACHE_MASK (7<<3) |
51 | 52 | ||
52 | /* MIPS32 defines only values 2 and 3. The rest are implementation | ||
53 | * dependent. | ||
54 | */ | ||
55 | #define _CACHE_UNCACHED (2<<3) | ||
56 | #define _CACHE_CACHABLE_NONCOHERENT (3<<3) | ||
57 | #define _CACHE_CACHABLE_COW (3<<3) /* Au1x */ | ||
58 | |||
59 | #else | 53 | #else |
60 | 54 | ||
61 | #define _PAGE_PRESENT (1<<0) /* implemented in software */ | 55 | #define _PAGE_PRESENT (1<<0) /* implemented in software */ |
@@ -74,75 +68,72 @@ | |||
74 | #define _PAGE_SILENT_WRITE (1<<10) | 68 | #define _PAGE_SILENT_WRITE (1<<10) |
75 | #define _CACHE_UNCACHED (1<<11) | 69 | #define _CACHE_UNCACHED (1<<11) |
76 | #define _CACHE_MASK (1<<11) | 70 | #define _CACHE_MASK (1<<11) |
77 | #define _CACHE_CACHABLE_NONCOHERENT 0 | ||
78 | 71 | ||
79 | #else | 72 | #else |
73 | |||
80 | #define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */ | 74 | #define _PAGE_R4KBUG (1<<5) /* workaround for r4k bug */ |
81 | #define _PAGE_GLOBAL (1<<6) | 75 | #define _PAGE_GLOBAL (1<<6) |
82 | #define _PAGE_VALID (1<<7) | 76 | #define _PAGE_VALID (1<<7) |
83 | #define _PAGE_SILENT_READ (1<<7) /* synonym */ | 77 | #define _PAGE_SILENT_READ (1<<7) /* synonym */ |
84 | #define _PAGE_DIRTY (1<<8) /* The MIPS dirty bit */ | 78 | #define _PAGE_DIRTY (1<<8) /* The MIPS dirty bit */ |
85 | #define _PAGE_SILENT_WRITE (1<<8) | 79 | #define _PAGE_SILENT_WRITE (1<<8) |
80 | #define _CACHE_SHIFT 9 | ||
86 | #define _CACHE_MASK (7<<9) | 81 | #define _CACHE_MASK (7<<9) |
87 | 82 | ||
88 | #ifdef CONFIG_CPU_SB1 | 83 | #endif |
84 | #endif /* defined(CONFIG_64BIT_PHYS_ADDR && defined(CONFIG_CPU_MIPS32) */ | ||
85 | |||
86 | |||
87 | /* | ||
88 | * Cache attributes | ||
89 | */ | ||
90 | #if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) | ||
91 | |||
92 | #define _CACHE_CACHABLE_NONCOHERENT 0 | ||
93 | |||
94 | #elif defined(CONFIG_CPU_SB1) | ||
89 | 95 | ||
90 | /* No penalty for being coherent on the SB1, so just | 96 | /* No penalty for being coherent on the SB1, so just |
91 | use it for "noncoherent" spaces, too. Shouldn't hurt. */ | 97 | use it for "noncoherent" spaces, too. Shouldn't hurt. */ |
92 | 98 | ||
93 | #define _CACHE_UNCACHED (2<<9) | 99 | #define _CACHE_UNCACHED (2<<_CACHE_SHIFT) |
94 | #define _CACHE_CACHABLE_COW (5<<9) | 100 | #define _CACHE_CACHABLE_COW (5<<_CACHE_SHIFT) |
95 | #define _CACHE_CACHABLE_NONCOHERENT (5<<9) | 101 | #define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT) |
96 | #define _CACHE_UNCACHED_ACCELERATED (7<<9) | 102 | #define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT) |
97 | 103 | ||
98 | #elif defined(CONFIG_CPU_RM9000) | 104 | #elif defined(CONFIG_CPU_RM9000) |
99 | 105 | ||
100 | #define _CACHE_WT (0 << 9) | 106 | #define _CACHE_WT (0<<_CACHE_SHIFT) |
101 | #define _CACHE_WTWA (1 << 9) | 107 | #define _CACHE_WTWA (1<<_CACHE_SHIFT) |
102 | #define _CACHE_UC_B (2 << 9) | 108 | #define _CACHE_UC_B (2<<_CACHE_SHIFT) |
103 | #define _CACHE_WB (3 << 9) | 109 | #define _CACHE_WB (3<<_CACHE_SHIFT) |
104 | #define _CACHE_CWBEA (4 << 9) | 110 | #define _CACHE_CWBEA (4<<_CACHE_SHIFT) |
105 | #define _CACHE_CWB (5 << 9) | 111 | #define _CACHE_CWB (5<<_CACHE_SHIFT) |
106 | #define _CACHE_UCNB (6 << 9) | 112 | #define _CACHE_UCNB (6<<_CACHE_SHIFT) |
107 | #define _CACHE_FPC (7 << 9) | 113 | #define _CACHE_FPC (7<<_CACHE_SHIFT) |
108 | 114 | ||
109 | #define _CACHE_UNCACHED _CACHE_UC_B | 115 | #define _CACHE_UNCACHED _CACHE_UC_B |
110 | #define _CACHE_CACHABLE_NONCOHERENT _CACHE_WB | 116 | #define _CACHE_CACHABLE_NONCOHERENT _CACHE_WB |
111 | 117 | ||
112 | #else | 118 | #else |
113 | 119 | ||
114 | #define _CACHE_CACHABLE_NO_WA (0<<9) /* R4600 only */ | 120 | #define _CACHE_CACHABLE_NO_WA (0<<_CACHE_SHIFT) /* R4600 only */ |
115 | #define _CACHE_CACHABLE_WA (1<<9) /* R4600 only */ | 121 | #define _CACHE_CACHABLE_WA (1<<_CACHE_SHIFT) /* R4600 only */ |
116 | #define _CACHE_UNCACHED (2<<9) /* R4[0246]00 */ | 122 | #define _CACHE_UNCACHED (2<<_CACHE_SHIFT) /* R4[0246]00 */ |
117 | #define _CACHE_CACHABLE_NONCOHERENT (3<<9) /* R4[0246]00 */ | 123 | #define _CACHE_CACHABLE_NONCOHERENT (3<<_CACHE_SHIFT) /* R4[0246]00 */ |
118 | #define _CACHE_CACHABLE_CE (4<<9) /* R4[04]00MC only */ | 124 | #define _CACHE_CACHABLE_CE (4<<_CACHE_SHIFT) /* R4[04]00MC only */ |
119 | #define _CACHE_CACHABLE_COW (5<<9) /* R4[04]00MC only */ | 125 | #define _CACHE_CACHABLE_COW (5<<_CACHE_SHIFT) /* R4[04]00MC only */ |
120 | #define _CACHE_CACHABLE_CUW (6<<9) /* R4[04]00MC only */ | 126 | #define _CACHE_CACHABLE_COHERENT (5<<_CACHE_SHIFT) /* MIPS32R2 CMP */ |
121 | #define _CACHE_UNCACHED_ACCELERATED (7<<9) /* R10000 only */ | 127 | #define _CACHE_CACHABLE_CUW (6<<_CACHE_SHIFT) /* R4[04]00MC only */ |
128 | #define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT) /* R10000 only */ | ||
122 | 129 | ||
123 | #endif | 130 | #endif |
124 | #endif | ||
125 | #endif /* defined(CONFIG_CPU_MIPS32_R1) && defined(CONFIG_64BIT_PHYS_ADDR) */ | ||
126 | 131 | ||
127 | #define __READABLE (_PAGE_READ | _PAGE_SILENT_READ | _PAGE_ACCESSED) | 132 | #define __READABLE (_PAGE_READ | _PAGE_SILENT_READ | _PAGE_ACCESSED) |
128 | #define __WRITEABLE (_PAGE_WRITE | _PAGE_SILENT_WRITE | _PAGE_MODIFIED) | 133 | #define __WRITEABLE (_PAGE_WRITE | _PAGE_SILENT_WRITE | _PAGE_MODIFIED) |
129 | 134 | ||
130 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK) | 135 | #define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK) |
131 | 136 | ||
132 | #ifdef CONFIG_MIPS_UNCACHED | 137 | #define CONF_CM_DEFAULT (PAGE_CACHABLE_DEFAULT>>_CACHE_SHIFT) |
133 | #define PAGE_CACHABLE_DEFAULT _CACHE_UNCACHED | ||
134 | #elif defined(CONFIG_DMA_NONCOHERENT) | ||
135 | #define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_NONCOHERENT | ||
136 | #elif defined(CONFIG_CPU_RM9000) | ||
137 | #define PAGE_CACHABLE_DEFAULT _CACHE_CWB | ||
138 | #else | ||
139 | #define PAGE_CACHABLE_DEFAULT _CACHE_CACHABLE_COW | ||
140 | #endif | ||
141 | |||
142 | #if defined(CONFIG_CPU_MIPS32_R1) && defined(CONFIG_64BIT_PHYS_ADDR) | ||
143 | #define CONF_CM_DEFAULT (PAGE_CACHABLE_DEFAULT >> 3) | ||
144 | #else | ||
145 | #define CONF_CM_DEFAULT (PAGE_CACHABLE_DEFAULT >> 9) | ||
146 | #endif | ||
147 | 138 | ||
148 | #endif /* _ASM_PGTABLE_BITS_H */ | 139 | #endif /* _ASM_PGTABLE_BITS_H */ |
diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h index 17a7703a2969..2f597eea4448 100644 --- a/include/asm-mips/pgtable.h +++ b/include/asm-mips/pgtable.h | |||
@@ -23,15 +23,15 @@ struct vm_area_struct; | |||
23 | 23 | ||
24 | #define PAGE_NONE __pgprot(_PAGE_PRESENT | _CACHE_CACHABLE_NONCOHERENT) | 24 | #define PAGE_NONE __pgprot(_PAGE_PRESENT | _CACHE_CACHABLE_NONCOHERENT) |
25 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ | 25 | #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ |
26 | PAGE_CACHABLE_DEFAULT) | 26 | _page_cachable_default) |
27 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_READ | \ | 27 | #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_READ | \ |
28 | PAGE_CACHABLE_DEFAULT) | 28 | _page_cachable_default) |
29 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_READ | \ | 29 | #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_READ | \ |
30 | PAGE_CACHABLE_DEFAULT) | 30 | _page_cachable_default) |
31 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \ | 31 | #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \ |
32 | _PAGE_GLOBAL | PAGE_CACHABLE_DEFAULT) | 32 | _PAGE_GLOBAL | _page_cachable_default) |
33 | #define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ | 33 | #define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE | \ |
34 | PAGE_CACHABLE_DEFAULT) | 34 | _page_cachable_default) |
35 | #define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE | \ | 35 | #define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE | \ |
36 | __WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED) | 36 | __WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED) |
37 | 37 | ||
@@ -40,23 +40,30 @@ struct vm_area_struct; | |||
40 | * read. Also, write permissions imply read permissions. This is the closest | 40 | * read. Also, write permissions imply read permissions. This is the closest |
41 | * we can get by reasonable means.. | 41 | * we can get by reasonable means.. |
42 | */ | 42 | */ |
43 | #define __P000 PAGE_NONE | 43 | |
44 | #define __P001 PAGE_READONLY | 44 | /* |
45 | #define __P010 PAGE_COPY | 45 | * Dummy values to fill the table in mmap.c |
46 | #define __P011 PAGE_COPY | 46 | * The real values will be generated at runtime |
47 | #define __P100 PAGE_READONLY | 47 | */ |
48 | #define __P101 PAGE_READONLY | 48 | #define __P000 __pgprot(0) |
49 | #define __P110 PAGE_COPY | 49 | #define __P001 __pgprot(0) |
50 | #define __P111 PAGE_COPY | 50 | #define __P010 __pgprot(0) |
51 | 51 | #define __P011 __pgprot(0) | |
52 | #define __S000 PAGE_NONE | 52 | #define __P100 __pgprot(0) |
53 | #define __S001 PAGE_READONLY | 53 | #define __P101 __pgprot(0) |
54 | #define __S010 PAGE_SHARED | 54 | #define __P110 __pgprot(0) |
55 | #define __S011 PAGE_SHARED | 55 | #define __P111 __pgprot(0) |
56 | #define __S100 PAGE_READONLY | 56 | |
57 | #define __S101 PAGE_READONLY | 57 | #define __S000 __pgprot(0) |
58 | #define __S110 PAGE_SHARED | 58 | #define __S001 __pgprot(0) |
59 | #define __S111 PAGE_SHARED | 59 | #define __S010 __pgprot(0) |
60 | #define __S011 __pgprot(0) | ||
61 | #define __S100 __pgprot(0) | ||
62 | #define __S101 __pgprot(0) | ||
63 | #define __S110 __pgprot(0) | ||
64 | #define __S111 __pgprot(0) | ||
65 | |||
66 | extern unsigned long _page_cachable_default; | ||
60 | 67 | ||
61 | /* | 68 | /* |
62 | * ZERO_PAGE is a global shared page that is always zero; used | 69 | * ZERO_PAGE is a global shared page that is always zero; used |
@@ -79,7 +86,7 @@ extern void paging_init(void); | |||
79 | #define pmd_page(pmd) (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT)) | 86 | #define pmd_page(pmd) (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT)) |
80 | #define pmd_page_vaddr(pmd) pmd_val(pmd) | 87 | #define pmd_page_vaddr(pmd) pmd_val(pmd) |
81 | 88 | ||
82 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) | 89 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
83 | 90 | ||
84 | #define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) | 91 | #define pte_none(pte) (!(((pte).pte_low | (pte).pte_high) & ~_PAGE_GLOBAL)) |
85 | #define pte_present(pte) ((pte).pte_low & _PAGE_PRESENT) | 92 | #define pte_present(pte) ((pte).pte_low & _PAGE_PRESENT) |
@@ -182,7 +189,7 @@ extern pgd_t swapper_pg_dir[]; | |||
182 | * The following only work if pte_present() is true. | 189 | * The following only work if pte_present() is true. |
183 | * Undefined behaviour if not.. | 190 | * Undefined behaviour if not.. |
184 | */ | 191 | */ |
185 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) | 192 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
186 | static inline int pte_write(pte_t pte) { return pte.pte_low & _PAGE_WRITE; } | 193 | static inline int pte_write(pte_t pte) { return pte.pte_low & _PAGE_WRITE; } |
187 | static inline int pte_dirty(pte_t pte) { return pte.pte_low & _PAGE_MODIFIED; } | 194 | static inline int pte_dirty(pte_t pte) { return pte.pte_low & _PAGE_MODIFIED; } |
188 | static inline int pte_young(pte_t pte) { return pte.pte_low & _PAGE_ACCESSED; } | 195 | static inline int pte_young(pte_t pte) { return pte.pte_low & _PAGE_ACCESSED; } |
@@ -285,6 +292,8 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
285 | return pte; | 292 | return pte; |
286 | } | 293 | } |
287 | #endif | 294 | #endif |
295 | static inline int pte_special(pte_t pte) { return 0; } | ||
296 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
288 | 297 | ||
289 | /* | 298 | /* |
290 | * Macro to make mark a page protection value as "uncacheable". Note | 299 | * Macro to make mark a page protection value as "uncacheable". Note |
@@ -309,7 +318,7 @@ static inline pgprot_t pgprot_noncached(pgprot_t _prot) | |||
309 | */ | 318 | */ |
310 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) | 319 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) |
311 | 320 | ||
312 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32_R1) | 321 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
313 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 322 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
314 | { | 323 | { |
315 | pte.pte_low &= _PAGE_CHG_MASK; | 324 | pte.pte_low &= _PAGE_CHG_MASK; |
diff --git a/include/asm-mips/r4k-timer.h b/include/asm-mips/r4k-timer.h new file mode 100644 index 000000000000..a37d12b3b61c --- /dev/null +++ b/include/asm-mips/r4k-timer.h | |||
@@ -0,0 +1,30 @@ | |||
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 (C) 2008 by Ralf Baechle (ralf@linux-mips.org) | ||
7 | */ | ||
8 | #ifndef __ASM_R4K_TYPES_H | ||
9 | #define __ASM_R4K_TYPES_H | ||
10 | |||
11 | #include <linux/compiler.h> | ||
12 | |||
13 | #ifdef CONFIG_SYNC_R4K | ||
14 | |||
15 | extern void synchronise_count_master(void); | ||
16 | extern void synchronise_count_slave(void); | ||
17 | |||
18 | #else | ||
19 | |||
20 | static inline void synchronise_count_master(void) | ||
21 | { | ||
22 | } | ||
23 | |||
24 | static inline void synchronise_count_slave(void) | ||
25 | { | ||
26 | } | ||
27 | |||
28 | #endif | ||
29 | |||
30 | #endif /* __ASM_R4K_TYPES_H */ | ||
diff --git a/include/asm-mips/smp-ops.h b/include/asm-mips/smp-ops.h index b17fdfb5d818..43c207e72a63 100644 --- a/include/asm-mips/smp-ops.h +++ b/include/asm-mips/smp-ops.h | |||
@@ -51,6 +51,7 @@ static inline void register_smp_ops(struct plat_smp_ops *ops) | |||
51 | #endif /* !CONFIG_SMP */ | 51 | #endif /* !CONFIG_SMP */ |
52 | 52 | ||
53 | extern struct plat_smp_ops up_smp_ops; | 53 | extern struct plat_smp_ops up_smp_ops; |
54 | extern struct plat_smp_ops cmp_smp_ops; | ||
54 | extern struct plat_smp_ops vsmp_smp_ops; | 55 | extern struct plat_smp_ops vsmp_smp_ops; |
55 | 56 | ||
56 | #endif /* __ASM_SMP_OPS_H */ | 57 | #endif /* __ASM_SMP_OPS_H */ |
diff --git a/include/asm-mips/smtc.h b/include/asm-mips/smtc.h index ff3e8936b493..3639b28f80db 100644 --- a/include/asm-mips/smtc.h +++ b/include/asm-mips/smtc.h | |||
@@ -44,6 +44,7 @@ extern int mipsmt_build_cpu_map(int startslot); | |||
44 | extern void mipsmt_prepare_cpus(void); | 44 | extern void mipsmt_prepare_cpus(void); |
45 | extern void smtc_smp_finish(void); | 45 | extern void smtc_smp_finish(void); |
46 | extern void smtc_boot_secondary(int cpu, struct task_struct *t); | 46 | extern void smtc_boot_secondary(int cpu, struct task_struct *t); |
47 | extern void smtc_cpus_done(void); | ||
47 | 48 | ||
48 | /* | 49 | /* |
49 | * Sharing the TLB between multiple VPEs means that the | 50 | * Sharing the TLB between multiple VPEs means that the |
diff --git a/include/asm-mips/smvp.h b/include/asm-mips/smvp.h new file mode 100644 index 000000000000..0d0e80a39e8a --- /dev/null +++ b/include/asm-mips/smvp.h | |||
@@ -0,0 +1,19 @@ | |||
1 | #ifndef _ASM_SMVP_H | ||
2 | #define _ASM_SMVP_H | ||
3 | |||
4 | /* | ||
5 | * Definitions for SMVP multitasking on MIPS MT cores | ||
6 | */ | ||
7 | struct task_struct; | ||
8 | |||
9 | extern void smvp_smp_setup(void); | ||
10 | extern void smvp_smp_finish(void); | ||
11 | extern void smvp_boot_secondary(int cpu, struct task_struct *t); | ||
12 | extern void smvp_init_secondary(void); | ||
13 | extern void smvp_smp_finish(void); | ||
14 | extern void smvp_cpus_done(void); | ||
15 | extern void smvp_prepare_cpus(unsigned int max_cpus); | ||
16 | |||
17 | /* This is platform specific */ | ||
18 | extern void smvp_send_ipi(int cpu, unsigned int action); | ||
19 | #endif /* _ASM_SMVP_H */ | ||
diff --git a/include/asm-mips/traps.h b/include/asm-mips/traps.h index d02e019b0127..e5dbde625ec2 100644 --- a/include/asm-mips/traps.h +++ b/include/asm-mips/traps.h | |||
@@ -23,5 +23,7 @@ extern int (*board_be_handler)(struct pt_regs *regs, int is_fixup); | |||
23 | 23 | ||
24 | extern void (*board_nmi_handler_setup)(void); | 24 | extern void (*board_nmi_handler_setup)(void); |
25 | extern void (*board_ejtag_handler_setup)(void); | 25 | extern void (*board_ejtag_handler_setup)(void); |
26 | extern void (*board_bind_eic_interrupt)(int irq, int regset); | ||
27 | extern void (*board_watchpoint_handler)(struct pt_regs *regs); | ||
26 | 28 | ||
27 | #endif /* _ASM_TRAPS_H */ | 29 | #endif /* _ASM_TRAPS_H */ |
diff --git a/include/asm-mips/tx4938/rbtx4938.h b/include/asm-mips/tx4938/rbtx4938.h index b180488dcdc4..dfed7beb533f 100644 --- a/include/asm-mips/tx4938/rbtx4938.h +++ b/include/asm-mips/tx4938/rbtx4938.h | |||
@@ -67,44 +67,26 @@ | |||
67 | #define RBTX4938_INTF_MODEM (1 << RBTX4938_INTB_MODEM) | 67 | #define RBTX4938_INTF_MODEM (1 << RBTX4938_INTB_MODEM) |
68 | #define RBTX4938_INTF_SWINT (1 << RBTX4938_INTB_SWINT) | 68 | #define RBTX4938_INTF_SWINT (1 << RBTX4938_INTB_SWINT) |
69 | 69 | ||
70 | #define rbtx4938_fpga_rev_ptr \ | 70 | #define rbtx4938_fpga_rev_addr ((__u8 __iomem *)RBTX4938_FPGA_REV_ADDR) |
71 | ((volatile unsigned char *)RBTX4938_FPGA_REV_ADDR) | 71 | #define rbtx4938_led_addr ((__u8 __iomem *)RBTX4938_LED_ADDR) |
72 | #define rbtx4938_led_ptr \ | 72 | #define rbtx4938_dipsw_addr ((__u8 __iomem *)RBTX4938_DIPSW_ADDR) |
73 | ((volatile unsigned char *)RBTX4938_LED_ADDR) | 73 | #define rbtx4938_bdipsw_addr ((__u8 __iomem *)RBTX4938_BDIPSW_ADDR) |
74 | #define rbtx4938_dipsw_ptr \ | 74 | #define rbtx4938_imask_addr ((__u8 __iomem *)RBTX4938_IMASK_ADDR) |
75 | ((volatile unsigned char *)RBTX4938_DIPSW_ADDR) | 75 | #define rbtx4938_imask2_addr ((__u8 __iomem *)RBTX4938_IMASK2_ADDR) |
76 | #define rbtx4938_bdipsw_ptr \ | 76 | #define rbtx4938_intpol_addr ((__u8 __iomem *)RBTX4938_INTPOL_ADDR) |
77 | ((volatile unsigned char *)RBTX4938_BDIPSW_ADDR) | 77 | #define rbtx4938_istat_addr ((__u8 __iomem *)RBTX4938_ISTAT_ADDR) |
78 | #define rbtx4938_imask_ptr \ | 78 | #define rbtx4938_istat2_addr ((__u8 __iomem *)RBTX4938_ISTAT2_ADDR) |
79 | ((volatile unsigned char *)RBTX4938_IMASK_ADDR) | 79 | #define rbtx4938_imstat_addr ((__u8 __iomem *)RBTX4938_IMSTAT_ADDR) |
80 | #define rbtx4938_imask2_ptr \ | 80 | #define rbtx4938_imstat2_addr ((__u8 __iomem *)RBTX4938_IMSTAT2_ADDR) |
81 | ((volatile unsigned char *)RBTX4938_IMASK2_ADDR) | 81 | #define rbtx4938_softint_addr ((__u8 __iomem *)RBTX4938_SOFTINT_ADDR) |
82 | #define rbtx4938_intpol_ptr \ | 82 | #define rbtx4938_piosel_addr ((__u8 __iomem *)RBTX4938_PIOSEL_ADDR) |
83 | ((volatile unsigned char *)RBTX4938_INTPOL_ADDR) | 83 | #define rbtx4938_spics_addr ((__u8 __iomem *)RBTX4938_SPICS_ADDR) |
84 | #define rbtx4938_istat_ptr \ | 84 | #define rbtx4938_sfpwr_addr ((__u8 __iomem *)RBTX4938_SFPWR_ADDR) |
85 | ((volatile unsigned char *)RBTX4938_ISTAT_ADDR) | 85 | #define rbtx4938_sfvol_addr ((__u8 __iomem *)RBTX4938_SFVOL_ADDR) |
86 | #define rbtx4938_istat2_ptr \ | 86 | #define rbtx4938_softreset_addr ((__u8 __iomem *)RBTX4938_SOFTRESET_ADDR) |
87 | ((volatile unsigned char *)RBTX4938_ISTAT2_ADDR) | 87 | #define rbtx4938_softresetlock_addr \ |
88 | #define rbtx4938_imstat_ptr \ | 88 | ((__u8 __iomem *)RBTX4938_SOFTRESETLOCK_ADDR) |
89 | ((volatile unsigned char *)RBTX4938_IMSTAT_ADDR) | 89 | #define rbtx4938_pcireset_addr ((__u8 __iomem *)RBTX4938_PCIRESET_ADDR) |
90 | #define rbtx4938_imstat2_ptr \ | ||
91 | ((volatile unsigned char *)RBTX4938_IMSTAT2_ADDR) | ||
92 | #define rbtx4938_softint_ptr \ | ||
93 | ((volatile unsigned char *)RBTX4938_SOFTINT_ADDR) | ||
94 | #define rbtx4938_piosel_ptr \ | ||
95 | ((volatile unsigned char *)RBTX4938_PIOSEL_ADDR) | ||
96 | #define rbtx4938_spics_ptr \ | ||
97 | ((volatile unsigned char *)RBTX4938_SPICS_ADDR) | ||
98 | #define rbtx4938_sfpwr_ptr \ | ||
99 | ((volatile unsigned char *)RBTX4938_SFPWR_ADDR) | ||
100 | #define rbtx4938_sfvol_ptr \ | ||
101 | ((volatile unsigned char *)RBTX4938_SFVOL_ADDR) | ||
102 | #define rbtx4938_softreset_ptr \ | ||
103 | ((volatile unsigned char *)RBTX4938_SOFTRESET_ADDR) | ||
104 | #define rbtx4938_softresetlock_ptr \ | ||
105 | ((volatile unsigned char *)RBTX4938_SOFTRESETLOCK_ADDR) | ||
106 | #define rbtx4938_pcireset_ptr \ | ||
107 | ((volatile unsigned char *)RBTX4938_PCIRESET_ADDR) | ||
108 | 90 | ||
109 | /* | 91 | /* |
110 | * IRQ mappings | 92 | * IRQ mappings |
diff --git a/include/asm-mips/tx4938/tx4938.h b/include/asm-mips/tx4938/tx4938.h index f7c448b90578..e8807f5c61e9 100644 --- a/include/asm-mips/tx4938/tx4938.h +++ b/include/asm-mips/tx4938/tx4938.h | |||
@@ -13,8 +13,6 @@ | |||
13 | #ifndef __ASM_TX_BOARDS_TX4938_H | 13 | #ifndef __ASM_TX_BOARDS_TX4938_H |
14 | #define __ASM_TX_BOARDS_TX4938_H | 14 | #define __ASM_TX_BOARDS_TX4938_H |
15 | 15 | ||
16 | #include <asm/tx4938/tx4938_mips.h> | ||
17 | |||
18 | #define tx4938_read_nfmc(addr) (*(volatile unsigned int *)(addr)) | 16 | #define tx4938_read_nfmc(addr) (*(volatile unsigned int *)(addr)) |
19 | #define tx4938_write_nfmc(b, addr) (*(volatile unsigned int *)(addr)) = (b) | 17 | #define tx4938_write_nfmc(b, addr) (*(volatile unsigned int *)(addr)) = (b) |
20 | 18 | ||
@@ -54,28 +52,6 @@ | |||
54 | #define TX4938_ACLC_REG (TX4938_REG_BASE + 0xf700) | 52 | #define TX4938_ACLC_REG (TX4938_REG_BASE + 0xf700) |
55 | #define TX4938_SPI_REG (TX4938_REG_BASE + 0xf800) | 53 | #define TX4938_SPI_REG (TX4938_REG_BASE + 0xf800) |
56 | 54 | ||
57 | #ifndef _LANGUAGE_ASSEMBLY | ||
58 | #include <asm/byteorder.h> | ||
59 | |||
60 | #define TX4938_MKA(x) ((u32)( ((u32)(TX4938_REG_BASE)) | ((u32)(x)) )) | ||
61 | |||
62 | #define TX4938_RD08( reg ) (*(vu08*)(reg)) | ||
63 | #define TX4938_WR08( reg, val ) ((*(vu08*)(reg))=(val)) | ||
64 | |||
65 | #define TX4938_RD16( reg ) (*(vu16*)(reg)) | ||
66 | #define TX4938_WR16( reg, val ) ((*(vu16*)(reg))=(val)) | ||
67 | |||
68 | #define TX4938_RD32( reg ) (*(vu32*)(reg)) | ||
69 | #define TX4938_WR32( reg, val ) ((*(vu32*)(reg))=(val)) | ||
70 | |||
71 | #define TX4938_RD64( reg ) (*(vu64*)(reg)) | ||
72 | #define TX4938_WR64( reg, val ) ((*(vu64*)(reg))=(val)) | ||
73 | |||
74 | #define TX4938_RD( reg ) TX4938_RD32( reg ) | ||
75 | #define TX4938_WR( reg, val ) TX4938_WR32( reg, val ) | ||
76 | |||
77 | #endif /* !__ASSEMBLY__ */ | ||
78 | |||
79 | #ifdef __ASSEMBLY__ | 55 | #ifdef __ASSEMBLY__ |
80 | #define _CONST64(c) c | 56 | #define _CONST64(c) c |
81 | #else | 57 | #else |
@@ -261,18 +237,6 @@ struct tx4938_sio_reg { | |||
261 | volatile unsigned long rfifo; | 237 | volatile unsigned long rfifo; |
262 | }; | 238 | }; |
263 | 239 | ||
264 | struct tx4938_pio_reg { | ||
265 | volatile unsigned long dout; | ||
266 | volatile unsigned long din; | ||
267 | volatile unsigned long dir; | ||
268 | volatile unsigned long od; | ||
269 | volatile unsigned long flag[2]; | ||
270 | volatile unsigned long pol; | ||
271 | volatile unsigned long intc; | ||
272 | volatile unsigned long maskcpu; | ||
273 | volatile unsigned long maskext; | ||
274 | }; | ||
275 | |||
276 | struct tx4938_ndfmc_reg { | 240 | struct tx4938_ndfmc_reg { |
277 | endian_def_l2(unused0, dtr); | 241 | endian_def_l2(unused0, dtr); |
278 | endian_def_l2(unused1, mcr); | 242 | endian_def_l2(unused1, mcr); |
@@ -642,7 +606,7 @@ struct tx4938_ccfg_reg { | |||
642 | #define tx4938_pcic1ptr ((struct tx4938_pcic_reg *)TX4938_PCIC1_REG) | 606 | #define tx4938_pcic1ptr ((struct tx4938_pcic_reg *)TX4938_PCIC1_REG) |
643 | #define tx4938_ccfgptr ((struct tx4938_ccfg_reg *)TX4938_CCFG_REG) | 607 | #define tx4938_ccfgptr ((struct tx4938_ccfg_reg *)TX4938_CCFG_REG) |
644 | #define tx4938_sioptr(ch) ((struct tx4938_sio_reg *)TX4938_SIO_REG(ch)) | 608 | #define tx4938_sioptr(ch) ((struct tx4938_sio_reg *)TX4938_SIO_REG(ch)) |
645 | #define tx4938_pioptr ((struct tx4938_pio_reg *)TX4938_PIO_REG) | 609 | #define tx4938_pioptr ((struct txx9_pio_reg __iomem *)TX4938_PIO_REG) |
646 | #define tx4938_aclcptr ((struct tx4938_aclc_reg *)TX4938_ACLC_REG) | 610 | #define tx4938_aclcptr ((struct tx4938_aclc_reg *)TX4938_ACLC_REG) |
647 | #define tx4938_spiptr ((struct tx4938_spi_reg *)TX4938_SPI_REG) | 611 | #define tx4938_spiptr ((struct tx4938_spi_reg *)TX4938_SPI_REG) |
648 | #define tx4938_sramcptr ((struct tx4938_sramc_reg *)TX4938_SRAMC_REG) | 612 | #define tx4938_sramcptr ((struct tx4938_sramc_reg *)TX4938_SRAMC_REG) |
diff --git a/include/asm-mips/tx4938/tx4938_mips.h b/include/asm-mips/tx4938/tx4938_mips.h deleted file mode 100644 index f346ff58b947..000000000000 --- a/include/asm-mips/tx4938/tx4938_mips.h +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/asm-mips/tx4938/tx4938_mips.h | ||
3 | * Generic bitmask definitions | ||
4 | * | ||
5 | * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the | ||
6 | * terms of the GNU General Public License version 2. This program is | ||
7 | * licensed "as is" without any warranty of any kind, whether express | ||
8 | * or implied. | ||
9 | * | ||
10 | * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) | ||
11 | */ | ||
12 | |||
13 | #ifndef TX4938_TX4938_MIPS_H | ||
14 | #define TX4938_TX4938_MIPS_H | ||
15 | #ifndef __ASSEMBLY__ | ||
16 | |||
17 | #define reg_rd08(r) ((u8 )(*((vu8 *)(r)))) | ||
18 | #define reg_rd16(r) ((u16)(*((vu16*)(r)))) | ||
19 | #define reg_rd32(r) ((u32)(*((vu32*)(r)))) | ||
20 | #define reg_rd64(r) ((u64)(*((vu64*)(r)))) | ||
21 | |||
22 | #define reg_wr08(r, v) ((*((vu8 *)(r)))=((u8 )(v))) | ||
23 | #define reg_wr16(r, v) ((*((vu16*)(r)))=((u16)(v))) | ||
24 | #define reg_wr32(r, v) ((*((vu32*)(r)))=((u32)(v))) | ||
25 | #define reg_wr64(r, v) ((*((vu64*)(r)))=((u64)(v))) | ||
26 | |||
27 | typedef volatile __signed char vs8; | ||
28 | typedef volatile unsigned char vu8; | ||
29 | |||
30 | typedef volatile __signed short vs16; | ||
31 | typedef volatile unsigned short vu16; | ||
32 | |||
33 | typedef volatile __signed int vs32; | ||
34 | typedef volatile unsigned int vu32; | ||
35 | |||
36 | typedef s8 s08; | ||
37 | typedef vs8 vs08; | ||
38 | |||
39 | typedef u8 u08; | ||
40 | typedef vu8 vu08; | ||
41 | |||
42 | #if (_MIPS_SZLONG == 64) | ||
43 | |||
44 | typedef volatile __signed__ long vs64; | ||
45 | typedef volatile unsigned long vu64; | ||
46 | |||
47 | #else | ||
48 | |||
49 | typedef volatile __signed__ long long vs64; | ||
50 | typedef volatile unsigned long long vu64; | ||
51 | |||
52 | #endif | ||
53 | #endif | ||
54 | #endif | ||
diff --git a/include/asm-mips/txx9pio.h b/include/asm-mips/txx9pio.h new file mode 100644 index 000000000000..3d6fa9f8d513 --- /dev/null +++ b/include/asm-mips/txx9pio.h | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * include/asm-mips/txx9pio.h | ||
3 | * TX39/TX49 PIO controller definitions. | ||
4 | * | ||
5 | * This file is subject to the terms and conditions of the GNU General Public | ||
6 | * License. See the file "COPYING" in the main directory of this archive | ||
7 | * for more details. | ||
8 | */ | ||
9 | #ifndef __ASM_TXX9PIO_H | ||
10 | #define __ASM_TXX9PIO_H | ||
11 | |||
12 | #include <linux/types.h> | ||
13 | |||
14 | struct txx9_pio_reg { | ||
15 | __u32 dout; | ||
16 | __u32 din; | ||
17 | __u32 dir; | ||
18 | __u32 od; | ||
19 | __u32 flag[2]; | ||
20 | __u32 pol; | ||
21 | __u32 intc; | ||
22 | __u32 maskcpu; | ||
23 | __u32 maskext; | ||
24 | }; | ||
25 | |||
26 | int txx9_gpio_init(unsigned long baseaddr, | ||
27 | unsigned int base, unsigned int num); | ||
28 | |||
29 | #endif /* __ASM_TXX9PIO_H */ | ||
diff --git a/include/asm-mips/unaligned.h b/include/asm-mips/unaligned.h index 3249049e93aa..792404948571 100644 --- a/include/asm-mips/unaligned.h +++ b/include/asm-mips/unaligned.h | |||
@@ -5,25 +5,24 @@ | |||
5 | * | 5 | * |
6 | * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org) | 6 | * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org) |
7 | */ | 7 | */ |
8 | #ifndef __ASM_GENERIC_UNALIGNED_H | 8 | #ifndef _ASM_MIPS_UNALIGNED_H |
9 | #define __ASM_GENERIC_UNALIGNED_H | 9 | #define _ASM_MIPS_UNALIGNED_H |
10 | 10 | ||
11 | #include <linux/compiler.h> | 11 | #include <linux/compiler.h> |
12 | #if defined(__MIPSEB__) | ||
13 | # include <linux/unaligned/be_struct.h> | ||
14 | # include <linux/unaligned/le_byteshift.h> | ||
15 | # include <linux/unaligned/generic.h> | ||
16 | # define get_unaligned __get_unaligned_be | ||
17 | # define put_unaligned __put_unaligned_be | ||
18 | #elif defined(__MIPSEL__) | ||
19 | # include <linux/unaligned/le_struct.h> | ||
20 | # include <linux/unaligned/be_byteshift.h> | ||
21 | # include <linux/unaligned/generic.h> | ||
22 | # define get_unaligned __get_unaligned_le | ||
23 | # define put_unaligned __put_unaligned_le | ||
24 | #else | ||
25 | # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" | ||
26 | #endif | ||
12 | 27 | ||
13 | #define get_unaligned(ptr) \ | 28 | #endif /* _ASM_MIPS_UNALIGNED_H */ |
14 | ({ \ | ||
15 | struct __packed { \ | ||
16 | typeof(*(ptr)) __v; \ | ||
17 | } *__p = (void *) (ptr); \ | ||
18 | __p->__v; \ | ||
19 | }) | ||
20 | |||
21 | #define put_unaligned(val, ptr) \ | ||
22 | do { \ | ||
23 | struct __packed { \ | ||
24 | typeof(*(ptr)) __v; \ | ||
25 | } *__p = (void *) (ptr); \ | ||
26 | __p->__v = (val); \ | ||
27 | } while(0) | ||
28 | |||
29 | #endif /* __ASM_GENERIC_UNALIGNED_H */ | ||
diff --git a/include/asm-mips/vr41xx/siu.h b/include/asm-mips/vr41xx/siu.h index 98cdb4096485..da9f6e373409 100644 --- a/include/asm-mips/vr41xx/siu.h +++ b/include/asm-mips/vr41xx/siu.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Include file for NEC VR4100 series Serial Interface Unit. | 2 | * Include file for NEC VR4100 series Serial Interface Unit. |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -49,4 +49,10 @@ typedef enum { | |||
49 | 49 | ||
50 | extern void vr41xx_select_irda_module(irda_module_t module, irda_speed_t speed); | 50 | extern void vr41xx_select_irda_module(irda_module_t module, irda_speed_t speed); |
51 | 51 | ||
52 | #ifdef CONFIG_SERIAL_VR41XX_CONSOLE | ||
53 | extern void vr41xx_siu_early_setup(struct uart_port *port); | ||
54 | #else | ||
55 | static inline void vr41xx_siu_early_setup(struct uart_port *port) {} | ||
56 | #endif | ||
57 | |||
52 | #endif /* __NEC_VR41XX_SIU_H */ | 58 | #endif /* __NEC_VR41XX_SIU_H */ |
diff --git a/include/asm-mips/vr41xx/vr41xx.h b/include/asm-mips/vr41xx/vr41xx.h index 88b492f6ea9c..22be64971cc6 100644 --- a/include/asm-mips/vr41xx/vr41xx.h +++ b/include/asm-mips/vr41xx/vr41xx.h | |||
@@ -7,7 +7,7 @@ | |||
7 | * Copyright (C) 2001, 2002 Paul Mundt | 7 | * Copyright (C) 2001, 2002 Paul Mundt |
8 | * Copyright (C) 2002 MontaVista Software, Inc. | 8 | * Copyright (C) 2002 MontaVista Software, Inc. |
9 | * Copyright (C) 2002 TimeSys Corp. | 9 | * Copyright (C) 2002 TimeSys Corp. |
10 | * Copyright (C) 2003-2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 10 | * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify it | 12 | * This program is free software; you can redistribute it and/or modify it |
13 | * under the terms of the GNU General Public License as published by the | 13 | * under the terms of the GNU General Public License as published by the |
@@ -143,4 +143,10 @@ extern void vr41xx_disable_csiint(uint16_t mask); | |||
143 | extern void vr41xx_enable_bcuint(void); | 143 | extern void vr41xx_enable_bcuint(void); |
144 | extern void vr41xx_disable_bcuint(void); | 144 | extern void vr41xx_disable_bcuint(void); |
145 | 145 | ||
146 | #ifdef CONFIG_SERIAL_VR41XX_CONSOLE | ||
147 | extern void vr41xx_siu_setup(void); | ||
148 | #else | ||
149 | static inline void vr41xx_siu_setup(void) {} | ||
150 | #endif | ||
151 | |||
146 | #endif /* __NEC_VR41XX_H */ | 152 | #endif /* __NEC_VR41XX_H */ |
diff --git a/include/asm-mn10300/pgtable.h b/include/asm-mn10300/pgtable.h index 375c4941deda..6dc30fc827c4 100644 --- a/include/asm-mn10300/pgtable.h +++ b/include/asm-mn10300/pgtable.h | |||
@@ -224,6 +224,7 @@ static inline int pte_read(pte_t pte) { return pte_val(pte) & __PAGE_PROT_USER; | |||
224 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 224 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
225 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 225 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
226 | static inline int pte_write(pte_t pte) { return pte_val(pte) & __PAGE_PROT_WRITE; } | 226 | static inline int pte_write(pte_t pte) { return pte_val(pte) & __PAGE_PROT_WRITE; } |
227 | static inline int pte_special(pte_t pte){ return 0; } | ||
227 | 228 | ||
228 | /* | 229 | /* |
229 | * The following only works if pte_present() is not true. | 230 | * The following only works if pte_present() is not true. |
@@ -265,6 +266,8 @@ static inline pte_t pte_mkwrite(pte_t pte) | |||
265 | return pte; | 266 | return pte; |
266 | } | 267 | } |
267 | 268 | ||
269 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
270 | |||
268 | #define pte_ERROR(e) \ | 271 | #define pte_ERROR(e) \ |
269 | printk(KERN_ERR "%s:%d: bad pte %08lx.\n", \ | 272 | printk(KERN_ERR "%s:%d: bad pte %08lx.\n", \ |
270 | __FILE__, __LINE__, pte_val(e)) | 273 | __FILE__, __LINE__, pte_val(e)) |
diff --git a/include/asm-mn10300/unaligned.h b/include/asm-mn10300/unaligned.h index cad3afbd035f..0df671318ae4 100644 --- a/include/asm-mn10300/unaligned.h +++ b/include/asm-mn10300/unaligned.h | |||
@@ -8,129 +8,13 @@ | |||
8 | * as published by the Free Software Foundation; either version | 8 | * as published by the Free Software Foundation; either version |
9 | * 2 of the Licence, or (at your option) any later version. | 9 | * 2 of the Licence, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | #ifndef _ASM_UNALIGNED_H | 11 | #ifndef _ASM_MN10300_UNALIGNED_H |
12 | #define _ASM_UNALIGNED_H | 12 | #define _ASM_MN10300_UNALIGNED_H |
13 | 13 | ||
14 | #include <asm/types.h> | 14 | #include <linux/unaligned/access_ok.h> |
15 | #include <linux/unaligned/generic.h> | ||
15 | 16 | ||
16 | #if 0 | 17 | #define get_unaligned __get_unaligned_le |
17 | extern int __bug_unaligned_x(void *ptr); | 18 | #define put_unaligned __put_unaligned_le |
18 | 19 | ||
19 | /* | 20 | #endif /* _ASM_MN10300_UNALIGNED_H */ |
20 | * What is the most efficient way of loading/storing an unaligned value? | ||
21 | * | ||
22 | * That is the subject of this file. Efficiency here is defined as | ||
23 | * minimum code size with minimum register usage for the common cases. | ||
24 | * It is currently not believed that long longs are common, so we | ||
25 | * trade efficiency for the chars, shorts and longs against the long | ||
26 | * longs. | ||
27 | * | ||
28 | * Current stats with gcc 2.7.2.2 for these functions: | ||
29 | * | ||
30 | * ptrsize get: code regs put: code regs | ||
31 | * 1 1 1 1 2 | ||
32 | * 2 3 2 3 2 | ||
33 | * 4 7 3 7 3 | ||
34 | * 8 20 6 16 6 | ||
35 | * | ||
36 | * gcc 2.95.1 seems to code differently: | ||
37 | * | ||
38 | * ptrsize get: code regs put: code regs | ||
39 | * 1 1 1 1 2 | ||
40 | * 2 3 2 3 2 | ||
41 | * 4 7 4 7 4 | ||
42 | * 8 19 8 15 6 | ||
43 | * | ||
44 | * which may or may not be more efficient (depending upon whether | ||
45 | * you can afford the extra registers). Hopefully the gcc 2.95 | ||
46 | * is inteligent enough to decide if it is better to use the | ||
47 | * extra register, but evidence so far seems to suggest otherwise. | ||
48 | * | ||
49 | * Unfortunately, gcc is not able to optimise the high word | ||
50 | * out of long long >> 32, or the low word from long long << 32 | ||
51 | */ | ||
52 | |||
53 | #define __get_unaligned_2(__p) \ | ||
54 | (__p[0] | __p[1] << 8) | ||
55 | |||
56 | #define __get_unaligned_4(__p) \ | ||
57 | (__p[0] | __p[1] << 8 | __p[2] << 16 | __p[3] << 24) | ||
58 | |||
59 | #define get_unaligned(ptr) \ | ||
60 | ({ \ | ||
61 | unsigned int __v1, __v2; \ | ||
62 | __typeof__(*(ptr)) __v; \ | ||
63 | __u8 *__p = (__u8 *)(ptr); \ | ||
64 | \ | ||
65 | switch (sizeof(*(ptr))) { \ | ||
66 | case 1: __v = *(ptr); break; \ | ||
67 | case 2: __v = __get_unaligned_2(__p); break; \ | ||
68 | case 4: __v = __get_unaligned_4(__p); break; \ | ||
69 | case 8: \ | ||
70 | __v2 = __get_unaligned_4((__p+4)); \ | ||
71 | __v1 = __get_unaligned_4(__p); \ | ||
72 | __v = ((unsigned long long)__v2 << 32 | __v1); \ | ||
73 | break; \ | ||
74 | default: __v = __bug_unaligned_x(__p); break; \ | ||
75 | } \ | ||
76 | __v; \ | ||
77 | }) | ||
78 | |||
79 | |||
80 | static inline void __put_unaligned_2(__u32 __v, register __u8 *__p) | ||
81 | { | ||
82 | *__p++ = __v; | ||
83 | *__p++ = __v >> 8; | ||
84 | } | ||
85 | |||
86 | static inline void __put_unaligned_4(__u32 __v, register __u8 *__p) | ||
87 | { | ||
88 | __put_unaligned_2(__v >> 16, __p + 2); | ||
89 | __put_unaligned_2(__v, __p); | ||
90 | } | ||
91 | |||
92 | static inline void __put_unaligned_8(const unsigned long long __v, __u8 *__p) | ||
93 | { | ||
94 | /* | ||
95 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
96 | * instructions), or an extra register in the long long | ||
97 | * case - go for the extra register. | ||
98 | */ | ||
99 | __put_unaligned_4(__v >> 32, __p + 4); | ||
100 | __put_unaligned_4(__v, __p); | ||
101 | } | ||
102 | |||
103 | /* | ||
104 | * Try to store an unaligned value as efficiently as possible. | ||
105 | */ | ||
106 | #define put_unaligned(val, ptr) \ | ||
107 | ({ \ | ||
108 | switch (sizeof(*(ptr))) { \ | ||
109 | case 1: \ | ||
110 | *(ptr) = (val); \ | ||
111 | break; \ | ||
112 | case 2: \ | ||
113 | __put_unaligned_2((val), (__u8 *)(ptr)); \ | ||
114 | break; \ | ||
115 | case 4: \ | ||
116 | __put_unaligned_4((val), (__u8 *)(ptr)); \ | ||
117 | break; \ | ||
118 | case 8: \ | ||
119 | __put_unaligned_8((val), (__u8 *)(ptr)); \ | ||
120 | break; \ | ||
121 | default: \ | ||
122 | __bug_unaligned_x(ptr); \ | ||
123 | break; \ | ||
124 | } \ | ||
125 | (void) 0; \ | ||
126 | }) | ||
127 | |||
128 | |||
129 | #else | ||
130 | |||
131 | #define get_unaligned(ptr) (*(ptr)) | ||
132 | #define put_unaligned(val, ptr) ({ *(ptr) = (val); (void) 0; }) | ||
133 | |||
134 | #endif | ||
135 | |||
136 | #endif | ||
diff --git a/include/asm-parisc/bitops.h b/include/asm-parisc/bitops.h index f8eebcbad01f..7a6ea10bd231 100644 --- a/include/asm-parisc/bitops.h +++ b/include/asm-parisc/bitops.h | |||
@@ -210,6 +210,7 @@ static __inline__ int fls(int x) | |||
210 | return ret; | 210 | return ret; |
211 | } | 211 | } |
212 | 212 | ||
213 | #include <asm-generic/bitops/__fls.h> | ||
213 | #include <asm-generic/bitops/fls64.h> | 214 | #include <asm-generic/bitops/fls64.h> |
214 | #include <asm-generic/bitops/hweight.h> | 215 | #include <asm-generic/bitops/hweight.h> |
215 | #include <asm-generic/bitops/lock.h> | 216 | #include <asm-generic/bitops/lock.h> |
diff --git a/include/asm-parisc/pgtable.h b/include/asm-parisc/pgtable.h index dc86adbec916..470a4b88124d 100644 --- a/include/asm-parisc/pgtable.h +++ b/include/asm-parisc/pgtable.h | |||
@@ -323,6 +323,7 @@ static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | |||
323 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 323 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
324 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } | 324 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } |
325 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 325 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
326 | static inline int pte_special(pte_t pte) { return 0; } | ||
326 | 327 | ||
327 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } | 328 | static inline pte_t pte_mkclean(pte_t pte) { pte_val(pte) &= ~_PAGE_DIRTY; return pte; } |
328 | static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } | 329 | static inline pte_t pte_mkold(pte_t pte) { pte_val(pte) &= ~_PAGE_ACCESSED; return pte; } |
@@ -330,6 +331,7 @@ static inline pte_t pte_wrprotect(pte_t pte) { pte_val(pte) &= ~_PAGE_WRITE; ret | |||
330 | static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } | 331 | static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) |= _PAGE_DIRTY; return pte; } |
331 | static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 332 | static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
332 | static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return pte; } | 333 | static inline pte_t pte_mkwrite(pte_t pte) { pte_val(pte) |= _PAGE_WRITE; return pte; } |
334 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
333 | 335 | ||
334 | /* | 336 | /* |
335 | * Conversion functions: convert a page and protection to a page entry, | 337 | * Conversion functions: convert a page and protection to a page entry, |
diff --git a/include/asm-parisc/unaligned.h b/include/asm-parisc/unaligned.h index 53c905838d93..dfc5d3321a54 100644 --- a/include/asm-parisc/unaligned.h +++ b/include/asm-parisc/unaligned.h | |||
@@ -1,7 +1,11 @@ | |||
1 | #ifndef _ASM_PARISC_UNALIGNED_H_ | 1 | #ifndef _ASM_PARISC_UNALIGNED_H |
2 | #define _ASM_PARISC_UNALIGNED_H_ | 2 | #define _ASM_PARISC_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/be_struct.h> |
5 | #include <linux/unaligned/le_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
7 | #define get_unaligned __get_unaligned_be | ||
8 | #define put_unaligned __put_unaligned_be | ||
5 | 9 | ||
6 | #ifdef __KERNEL__ | 10 | #ifdef __KERNEL__ |
7 | struct pt_regs; | 11 | struct pt_regs; |
@@ -9,4 +13,4 @@ void handle_unaligned(struct pt_regs *regs); | |||
9 | int check_unaligned(struct pt_regs *regs); | 13 | int check_unaligned(struct pt_regs *regs); |
10 | #endif | 14 | #endif |
11 | 15 | ||
12 | #endif /* _ASM_PARISC_UNALIGNED_H_ */ | 16 | #endif /* _ASM_PARISC_UNALIGNED_H */ |
diff --git a/include/asm-powerpc/bitops.h b/include/asm-powerpc/bitops.h index a99a74929475..897eade3afbe 100644 --- a/include/asm-powerpc/bitops.h +++ b/include/asm-powerpc/bitops.h | |||
@@ -313,6 +313,11 @@ static __inline__ int fls(unsigned int x) | |||
313 | return 32 - lz; | 313 | return 32 - lz; |
314 | } | 314 | } |
315 | 315 | ||
316 | static __inline__ unsigned long __fls(unsigned long x) | ||
317 | { | ||
318 | return __ilog2(x); | ||
319 | } | ||
320 | |||
316 | /* | 321 | /* |
317 | * 64-bit can do this using one cntlzd (count leading zeroes doubleword) | 322 | * 64-bit can do this using one cntlzd (count leading zeroes doubleword) |
318 | * instruction; for 32-bit we use the generic version, which does two | 323 | * instruction; for 32-bit we use the generic version, which does two |
diff --git a/include/asm-powerpc/fixmap.h b/include/asm-powerpc/fixmap.h new file mode 100644 index 000000000000..8428b38a3d30 --- /dev/null +++ b/include/asm-powerpc/fixmap.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * fixmap.h: compile-time virtual memory allocation | ||
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 | * Copyright (C) 1998 Ingo Molnar | ||
9 | * | ||
10 | * Copyright 2008 Freescale Semiconductor Inc. | ||
11 | * Port to powerpc added by Kumar Gala | ||
12 | */ | ||
13 | |||
14 | #ifndef _ASM_FIXMAP_H | ||
15 | #define _ASM_FIXMAP_H | ||
16 | |||
17 | extern unsigned long FIXADDR_TOP; | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | ||
20 | #include <linux/kernel.h> | ||
21 | #include <asm/page.h> | ||
22 | #ifdef CONFIG_HIGHMEM | ||
23 | #include <linux/threads.h> | ||
24 | #include <asm/kmap_types.h> | ||
25 | #endif | ||
26 | |||
27 | /* | ||
28 | * Here we define all the compile-time 'special' virtual | ||
29 | * addresses. The point is to have a constant address at | ||
30 | * compile time, but to set the physical address only | ||
31 | * in the boot process. We allocate these special addresses | ||
32 | * from the end of virtual memory (0xfffff000) backwards. | ||
33 | * Also this lets us do fail-safe vmalloc(), we | ||
34 | * can guarantee that these special addresses and | ||
35 | * vmalloc()-ed addresses never overlap. | ||
36 | * | ||
37 | * these 'compile-time allocated' memory buffers are | ||
38 | * fixed-size 4k pages. (or larger if used with an increment | ||
39 | * highger than 1) use fixmap_set(idx,phys) to associate | ||
40 | * physical memory with fixmap indices. | ||
41 | * | ||
42 | * TLB entries of such buffers will not be flushed across | ||
43 | * task switches. | ||
44 | */ | ||
45 | enum fixed_addresses { | ||
46 | FIX_HOLE, | ||
47 | #ifdef CONFIG_HIGHMEM | ||
48 | FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | ||
49 | FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, | ||
50 | #endif | ||
51 | /* FIX_PCIE_MCFG, */ | ||
52 | __end_of_fixed_addresses | ||
53 | }; | ||
54 | |||
55 | extern void __set_fixmap (enum fixed_addresses idx, | ||
56 | phys_addr_t phys, pgprot_t flags); | ||
57 | |||
58 | #define set_fixmap(idx, phys) \ | ||
59 | __set_fixmap(idx, phys, PAGE_KERNEL) | ||
60 | /* | ||
61 | * Some hardware wants to get fixmapped without caching. | ||
62 | */ | ||
63 | #define set_fixmap_nocache(idx, phys) \ | ||
64 | __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) | ||
65 | |||
66 | #define clear_fixmap(idx) \ | ||
67 | __set_fixmap(idx, 0, __pgprot(0)) | ||
68 | |||
69 | #define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) | ||
70 | #define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) | ||
71 | |||
72 | #define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT)) | ||
73 | #define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) | ||
74 | |||
75 | extern void __this_fixmap_does_not_exist(void); | ||
76 | |||
77 | /* | ||
78 | * 'index to address' translation. If anyone tries to use the idx | ||
79 | * directly without tranlation, we catch the bug with a NULL-deference | ||
80 | * kernel oops. Illegal ranges of incoming indices are caught too. | ||
81 | */ | ||
82 | static __always_inline unsigned long fix_to_virt(const unsigned int idx) | ||
83 | { | ||
84 | /* | ||
85 | * this branch gets completely eliminated after inlining, | ||
86 | * except when someone tries to use fixaddr indices in an | ||
87 | * illegal way. (such as mixing up address types or using | ||
88 | * out-of-range indices). | ||
89 | * | ||
90 | * If it doesn't get removed, the linker will complain | ||
91 | * loudly with a reasonably clear error message.. | ||
92 | */ | ||
93 | if (idx >= __end_of_fixed_addresses) | ||
94 | __this_fixmap_does_not_exist(); | ||
95 | |||
96 | return __fix_to_virt(idx); | ||
97 | } | ||
98 | |||
99 | static inline unsigned long virt_to_fix(const unsigned long vaddr) | ||
100 | { | ||
101 | BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | ||
102 | return __virt_to_fix(vaddr); | ||
103 | } | ||
104 | |||
105 | #endif /* !__ASSEMBLY__ */ | ||
106 | #endif | ||
diff --git a/include/asm-powerpc/highmem.h b/include/asm-powerpc/highmem.h index f7b21ee302b4..5d99b6489d56 100644 --- a/include/asm-powerpc/highmem.h +++ b/include/asm-powerpc/highmem.h | |||
@@ -27,9 +27,7 @@ | |||
27 | #include <asm/kmap_types.h> | 27 | #include <asm/kmap_types.h> |
28 | #include <asm/tlbflush.h> | 28 | #include <asm/tlbflush.h> |
29 | #include <asm/page.h> | 29 | #include <asm/page.h> |
30 | 30 | #include <asm/fixmap.h> | |
31 | /* undef for production */ | ||
32 | #define HIGHMEM_DEBUG 1 | ||
33 | 31 | ||
34 | extern pte_t *kmap_pte; | 32 | extern pte_t *kmap_pte; |
35 | extern pgprot_t kmap_prot; | 33 | extern pgprot_t kmap_prot; |
@@ -40,14 +38,12 @@ extern pte_t *pkmap_page_table; | |||
40 | * easily, subsequent pte tables have to be allocated in one physical | 38 | * easily, subsequent pte tables have to be allocated in one physical |
41 | * chunk of RAM. | 39 | * chunk of RAM. |
42 | */ | 40 | */ |
43 | #define PKMAP_BASE CONFIG_HIGHMEM_START | ||
44 | #define LAST_PKMAP (1 << PTE_SHIFT) | 41 | #define LAST_PKMAP (1 << PTE_SHIFT) |
45 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) | 42 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) |
43 | #define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE*(LAST_PKMAP + 1)) & PMD_MASK) | ||
46 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) | 44 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) |
47 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) | 45 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) |
48 | 46 | ||
49 | #define KMAP_FIX_BEGIN (PKMAP_BASE + 0x00400000UL) | ||
50 | |||
51 | extern void *kmap_high(struct page *page); | 47 | extern void *kmap_high(struct page *page); |
52 | extern void kunmap_high(struct page *page); | 48 | extern void kunmap_high(struct page *page); |
53 | 49 | ||
@@ -73,7 +69,7 @@ static inline void kunmap(struct page *page) | |||
73 | * be used in IRQ contexts, so in some (very limited) cases we need | 69 | * be used in IRQ contexts, so in some (very limited) cases we need |
74 | * it. | 70 | * it. |
75 | */ | 71 | */ |
76 | static inline void *kmap_atomic(struct page *page, enum km_type type) | 72 | static inline void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) |
77 | { | 73 | { |
78 | unsigned int idx; | 74 | unsigned int idx; |
79 | unsigned long vaddr; | 75 | unsigned long vaddr; |
@@ -84,34 +80,39 @@ static inline void *kmap_atomic(struct page *page, enum km_type type) | |||
84 | return page_address(page); | 80 | return page_address(page); |
85 | 81 | ||
86 | idx = type + KM_TYPE_NR*smp_processor_id(); | 82 | idx = type + KM_TYPE_NR*smp_processor_id(); |
87 | vaddr = KMAP_FIX_BEGIN + idx * PAGE_SIZE; | 83 | vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); |
88 | #ifdef HIGHMEM_DEBUG | 84 | #ifdef CONFIG_DEBUG_HIGHMEM |
89 | BUG_ON(!pte_none(*(kmap_pte+idx))); | 85 | BUG_ON(!pte_none(*(kmap_pte-idx))); |
90 | #endif | 86 | #endif |
91 | set_pte_at(&init_mm, vaddr, kmap_pte+idx, mk_pte(page, kmap_prot)); | 87 | set_pte_at(&init_mm, vaddr, kmap_pte-idx, mk_pte(page, prot)); |
92 | flush_tlb_page(NULL, vaddr); | 88 | flush_tlb_page(NULL, vaddr); |
93 | 89 | ||
94 | return (void*) vaddr; | 90 | return (void*) vaddr; |
95 | } | 91 | } |
96 | 92 | ||
93 | static inline void *kmap_atomic(struct page *page, enum km_type type) | ||
94 | { | ||
95 | return kmap_atomic_prot(page, type, kmap_prot); | ||
96 | } | ||
97 | |||
97 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) | 98 | static inline void kunmap_atomic(void *kvaddr, enum km_type type) |
98 | { | 99 | { |
99 | #ifdef HIGHMEM_DEBUG | 100 | #ifdef CONFIG_DEBUG_HIGHMEM |
100 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; | 101 | unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; |
101 | unsigned int idx = type + KM_TYPE_NR*smp_processor_id(); | 102 | enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); |
102 | 103 | ||
103 | if (vaddr < KMAP_FIX_BEGIN) { // FIXME | 104 | if (vaddr < __fix_to_virt(FIX_KMAP_END)) { |
104 | pagefault_enable(); | 105 | pagefault_enable(); |
105 | return; | 106 | return; |
106 | } | 107 | } |
107 | 108 | ||
108 | BUG_ON(vaddr != KMAP_FIX_BEGIN + idx * PAGE_SIZE); | 109 | BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); |
109 | 110 | ||
110 | /* | 111 | /* |
111 | * force other mappings to Oops if they'll try to access | 112 | * force other mappings to Oops if they'll try to access |
112 | * this pte without first remap it | 113 | * this pte without first remap it |
113 | */ | 114 | */ |
114 | pte_clear(&init_mm, vaddr, kmap_pte+idx); | 115 | pte_clear(&init_mm, vaddr, kmap_pte-idx); |
115 | flush_tlb_page(NULL, vaddr); | 116 | flush_tlb_page(NULL, vaddr); |
116 | #endif | 117 | #endif |
117 | pagefault_enable(); | 118 | pagefault_enable(); |
@@ -120,12 +121,14 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type) | |||
120 | static inline struct page *kmap_atomic_to_page(void *ptr) | 121 | static inline struct page *kmap_atomic_to_page(void *ptr) |
121 | { | 122 | { |
122 | unsigned long idx, vaddr = (unsigned long) ptr; | 123 | unsigned long idx, vaddr = (unsigned long) ptr; |
124 | pte_t *pte; | ||
123 | 125 | ||
124 | if (vaddr < KMAP_FIX_BEGIN) | 126 | if (vaddr < FIXADDR_START) |
125 | return virt_to_page(ptr); | 127 | return virt_to_page(ptr); |
126 | 128 | ||
127 | idx = (vaddr - KMAP_FIX_BEGIN) >> PAGE_SHIFT; | 129 | idx = virt_to_fix(vaddr); |
128 | return pte_page(kmap_pte[idx]); | 130 | pte = kmap_pte - (idx - FIX_KMAP_BEGIN); |
131 | return pte_page(*pte); | ||
129 | } | 132 | } |
130 | 133 | ||
131 | #define flush_cache_kmaps() flush_cache_all() | 134 | #define flush_cache_kmaps() flush_cache_all() |
diff --git a/include/asm-powerpc/hugetlb.h b/include/asm-powerpc/hugetlb.h new file mode 100644 index 000000000000..649c6c3b87b3 --- /dev/null +++ b/include/asm-powerpc/hugetlb.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef _ASM_POWERPC_HUGETLB_H | ||
2 | #define _ASM_POWERPC_HUGETLB_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | |||
6 | |||
7 | int is_hugepage_only_range(struct mm_struct *mm, unsigned long addr, | ||
8 | unsigned long len); | ||
9 | |||
10 | void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long addr, | ||
11 | unsigned long end, unsigned long floor, | ||
12 | unsigned long ceiling); | ||
13 | |||
14 | void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
15 | pte_t *ptep, pte_t pte); | ||
16 | |||
17 | pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | ||
18 | pte_t *ptep); | ||
19 | |||
20 | /* | ||
21 | * If the arch doesn't supply something else, assume that hugepage | ||
22 | * size aligned regions are ok without further preparation. | ||
23 | */ | ||
24 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | ||
25 | { | ||
26 | if (len & ~HPAGE_MASK) | ||
27 | return -EINVAL; | ||
28 | if (addr & ~HPAGE_MASK) | ||
29 | return -EINVAL; | ||
30 | return 0; | ||
31 | } | ||
32 | |||
33 | static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) | ||
34 | { | ||
35 | } | ||
36 | |||
37 | static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, | ||
38 | unsigned long addr, pte_t *ptep) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | static inline int huge_pte_none(pte_t pte) | ||
43 | { | ||
44 | return pte_none(pte); | ||
45 | } | ||
46 | |||
47 | static inline pte_t huge_pte_wrprotect(pte_t pte) | ||
48 | { | ||
49 | return pte_wrprotect(pte); | ||
50 | } | ||
51 | |||
52 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
53 | unsigned long addr, pte_t *ptep) | ||
54 | { | ||
55 | ptep_set_wrprotect(mm, addr, ptep); | ||
56 | } | ||
57 | |||
58 | static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, | ||
59 | unsigned long addr, pte_t *ptep, | ||
60 | pte_t pte, int dirty) | ||
61 | { | ||
62 | return ptep_set_access_flags(vma, addr, ptep, pte, dirty); | ||
63 | } | ||
64 | |||
65 | static inline pte_t huge_ptep_get(pte_t *ptep) | ||
66 | { | ||
67 | return *ptep; | ||
68 | } | ||
69 | |||
70 | static inline int arch_prepare_hugepage(struct page *page) | ||
71 | { | ||
72 | return 0; | ||
73 | } | ||
74 | |||
75 | static inline void arch_release_hugepage(struct page *page) | ||
76 | { | ||
77 | } | ||
78 | |||
79 | #endif /* _ASM_POWERPC_HUGETLB_H */ | ||
diff --git a/include/asm-powerpc/io-defs.h b/include/asm-powerpc/io-defs.h index 03691ab69217..44d7927aec69 100644 --- a/include/asm-powerpc/io-defs.h +++ b/include/asm-powerpc/io-defs.h | |||
@@ -1,59 +1,60 @@ | |||
1 | /* This file is meant to be include multiple times by other headers */ | 1 | /* This file is meant to be include multiple times by other headers */ |
2 | /* last 2 argments are used by platforms/cell/io-workarounds.[ch] */ | ||
2 | 3 | ||
3 | DEF_PCI_AC_RET(readb, u8, (const PCI_IO_ADDR addr), (addr)) | 4 | DEF_PCI_AC_RET(readb, u8, (const PCI_IO_ADDR addr), (addr), mem, addr) |
4 | DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr)) | 5 | DEF_PCI_AC_RET(readw, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) |
5 | DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr)) | 6 | DEF_PCI_AC_RET(readl, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) |
6 | DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr)) | 7 | DEF_PCI_AC_RET(readw_be, u16, (const PCI_IO_ADDR addr), (addr), mem, addr) |
7 | DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr)) | 8 | DEF_PCI_AC_RET(readl_be, u32, (const PCI_IO_ADDR addr), (addr), mem, addr) |
8 | DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr)) | 9 | DEF_PCI_AC_NORET(writeb, (u8 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
9 | DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr)) | 10 | DEF_PCI_AC_NORET(writew, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
10 | DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr)) | 11 | DEF_PCI_AC_NORET(writel, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
11 | DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr)) | 12 | DEF_PCI_AC_NORET(writew_be, (u16 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
12 | DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr)) | 13 | DEF_PCI_AC_NORET(writel_be, (u32 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
13 | 14 | ||
14 | #ifdef __powerpc64__ | 15 | #ifdef __powerpc64__ |
15 | DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr)) | 16 | DEF_PCI_AC_RET(readq, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) |
16 | DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr)) | 17 | DEF_PCI_AC_RET(readq_be, u64, (const PCI_IO_ADDR addr), (addr), mem, addr) |
17 | DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr)) | 18 | DEF_PCI_AC_NORET(writeq, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
18 | DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr)) | 19 | DEF_PCI_AC_NORET(writeq_be, (u64 val, PCI_IO_ADDR addr), (val, addr), mem, addr) |
19 | #endif /* __powerpc64__ */ | 20 | #endif /* __powerpc64__ */ |
20 | 21 | ||
21 | DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port)) | 22 | DEF_PCI_AC_RET(inb, u8, (unsigned long port), (port), pio, port) |
22 | DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port)) | 23 | DEF_PCI_AC_RET(inw, u16, (unsigned long port), (port), pio, port) |
23 | DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port)) | 24 | DEF_PCI_AC_RET(inl, u32, (unsigned long port), (port), pio, port) |
24 | DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port)) | 25 | DEF_PCI_AC_NORET(outb, (u8 val, unsigned long port), (val, port), pio, port) |
25 | DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port)) | 26 | DEF_PCI_AC_NORET(outw, (u16 val, unsigned long port), (val, port), pio, port) |
26 | DEF_PCI_AC_NORET(outl, (u32 val, unsigned long port), (val, port)) | 27 | DEF_PCI_AC_NORET(outl, (u32 val, unsigned long port), (val, port), pio, port) |
27 | 28 | ||
28 | DEF_PCI_AC_NORET(readsb, (const PCI_IO_ADDR a, void *b, unsigned long c), \ | 29 | DEF_PCI_AC_NORET(readsb, (const PCI_IO_ADDR a, void *b, unsigned long c), |
29 | (a, b, c)) | 30 | (a, b, c), mem, a) |
30 | DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), \ | 31 | DEF_PCI_AC_NORET(readsw, (const PCI_IO_ADDR a, void *b, unsigned long c), |
31 | (a, b, c)) | 32 | (a, b, c), mem, a) |
32 | DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), \ | 33 | DEF_PCI_AC_NORET(readsl, (const PCI_IO_ADDR a, void *b, unsigned long c), |
33 | (a, b, c)) | 34 | (a, b, c), mem, a) |
34 | DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 35 | DEF_PCI_AC_NORET(writesb, (PCI_IO_ADDR a, const void *b, unsigned long c), |
35 | (a, b, c)) | 36 | (a, b, c), mem, a) |
36 | DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 37 | DEF_PCI_AC_NORET(writesw, (PCI_IO_ADDR a, const void *b, unsigned long c), |
37 | (a, b, c)) | 38 | (a, b, c), mem, a) |
38 | DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), \ | 39 | DEF_PCI_AC_NORET(writesl, (PCI_IO_ADDR a, const void *b, unsigned long c), |
39 | (a, b, c)) | 40 | (a, b, c), mem, a) |
40 | 41 | ||
41 | DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), \ | 42 | DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), |
42 | (p, b, c)) | 43 | (p, b, c), pio, p) |
43 | DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), \ | 44 | DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), |
44 | (p, b, c)) | 45 | (p, b, c), pio, p) |
45 | DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), \ | 46 | DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), |
46 | (p, b, c)) | 47 | (p, b, c), pio, p) |
47 | DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), \ | 48 | DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), |
48 | (p, b, c)) | 49 | (p, b, c), pio, p) |
49 | DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), \ | 50 | DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), |
50 | (p, b, c)) | 51 | (p, b, c), pio, p) |
51 | DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), \ | 52 | DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), |
52 | (p, b, c)) | 53 | (p, b, c), pio, p) |
53 | 54 | ||
54 | DEF_PCI_AC_NORET(memset_io, (PCI_IO_ADDR a, int c, unsigned long n), \ | 55 | DEF_PCI_AC_NORET(memset_io, (PCI_IO_ADDR a, int c, unsigned long n), |
55 | (a, c, n)) | 56 | (a, c, n), mem, a) |
56 | DEF_PCI_AC_NORET(memcpy_fromio,(void *d,const PCI_IO_ADDR s,unsigned long n), \ | 57 | DEF_PCI_AC_NORET(memcpy_fromio, (void *d, const PCI_IO_ADDR s, unsigned long n), |
57 | (d, s, n)) | 58 | (d, s, n), mem, s) |
58 | DEF_PCI_AC_NORET(memcpy_toio,(PCI_IO_ADDR d,const void *s,unsigned long n), \ | 59 | DEF_PCI_AC_NORET(memcpy_toio, (PCI_IO_ADDR d, const void *s, unsigned long n), |
59 | (d, s, n)) | 60 | (d, s, n), mem, d) |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index 7be26f615755..afae0697e8ce 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -458,8 +458,8 @@ __do_out_asm(_rec_outl, "stwbrx") | |||
458 | /* Structure containing all the hooks */ | 458 | /* Structure containing all the hooks */ |
459 | extern struct ppc_pci_io { | 459 | extern struct ppc_pci_io { |
460 | 460 | ||
461 | #define DEF_PCI_AC_RET(name, ret, at, al) ret (*name) at; | 461 | #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) ret (*name) at; |
462 | #define DEF_PCI_AC_NORET(name, at, al) void (*name) at; | 462 | #define DEF_PCI_AC_NORET(name, at, al, space, aa) void (*name) at; |
463 | 463 | ||
464 | #include <asm/io-defs.h> | 464 | #include <asm/io-defs.h> |
465 | 465 | ||
@@ -469,7 +469,7 @@ extern struct ppc_pci_io { | |||
469 | } ppc_pci_io; | 469 | } ppc_pci_io; |
470 | 470 | ||
471 | /* The inline wrappers */ | 471 | /* The inline wrappers */ |
472 | #define DEF_PCI_AC_RET(name, ret, at, al) \ | 472 | #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ |
473 | static inline ret name at \ | 473 | static inline ret name at \ |
474 | { \ | 474 | { \ |
475 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ | 475 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ |
@@ -477,7 +477,7 @@ static inline ret name at \ | |||
477 | return __do_##name al; \ | 477 | return __do_##name al; \ |
478 | } | 478 | } |
479 | 479 | ||
480 | #define DEF_PCI_AC_NORET(name, at, al) \ | 480 | #define DEF_PCI_AC_NORET(name, at, al, space, aa) \ |
481 | static inline void name at \ | 481 | static inline void name at \ |
482 | { \ | 482 | { \ |
483 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ | 483 | if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ |
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h index b5c03127a9b9..5089deb8fec3 100644 --- a/include/asm-powerpc/irq.h +++ b/include/asm-powerpc/irq.h | |||
@@ -619,8 +619,6 @@ struct pt_regs; | |||
619 | 619 | ||
620 | #define __ARCH_HAS_DO_SOFTIRQ | 620 | #define __ARCH_HAS_DO_SOFTIRQ |
621 | 621 | ||
622 | extern void __do_softirq(void); | ||
623 | |||
624 | #ifdef CONFIG_IRQSTACKS | 622 | #ifdef CONFIG_IRQSTACKS |
625 | /* | 623 | /* |
626 | * Per-cpu stacks for handling hard and soft interrupts. | 624 | * Per-cpu stacks for handling hard and soft interrupts. |
diff --git a/include/asm-powerpc/kdump.h b/include/asm-powerpc/kdump.h index 10e8eb1e6f4f..f6c93c716898 100644 --- a/include/asm-powerpc/kdump.h +++ b/include/asm-powerpc/kdump.h | |||
@@ -11,16 +11,11 @@ | |||
11 | 11 | ||
12 | #ifdef CONFIG_CRASH_DUMP | 12 | #ifdef CONFIG_CRASH_DUMP |
13 | 13 | ||
14 | #define PHYSICAL_START KDUMP_KERNELBASE | ||
15 | #define KDUMP_TRAMPOLINE_START 0x0100 | 14 | #define KDUMP_TRAMPOLINE_START 0x0100 |
16 | #define KDUMP_TRAMPOLINE_END 0x3000 | 15 | #define KDUMP_TRAMPOLINE_END 0x3000 |
17 | 16 | ||
18 | #define KDUMP_MIN_TCE_ENTRIES 2048 | 17 | #define KDUMP_MIN_TCE_ENTRIES 2048 |
19 | 18 | ||
20 | #else /* !CONFIG_CRASH_DUMP */ | ||
21 | |||
22 | #define PHYSICAL_START 0x0 | ||
23 | |||
24 | #endif /* CONFIG_CRASH_DUMP */ | 19 | #endif /* CONFIG_CRASH_DUMP */ |
25 | 20 | ||
26 | #ifndef __ASSEMBLY__ | 21 | #ifndef __ASSEMBLY__ |
diff --git a/include/asm-powerpc/kvm.h b/include/asm-powerpc/kvm.h index d1b530fbf8dd..f993e4198d5c 100644 --- a/include/asm-powerpc/kvm.h +++ b/include/asm-powerpc/kvm.h | |||
@@ -1,6 +1,55 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * You should have received a copy of the GNU General Public License | ||
12 | * along with this program; if not, write to the Free Software | ||
13 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
14 | * | ||
15 | * Copyright IBM Corp. 2007 | ||
16 | * | ||
17 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
18 | */ | ||
19 | |||
1 | #ifndef __LINUX_KVM_POWERPC_H | 20 | #ifndef __LINUX_KVM_POWERPC_H |
2 | #define __LINUX_KVM_POWERPC_H | 21 | #define __LINUX_KVM_POWERPC_H |
3 | 22 | ||
4 | /* powerpc does not support KVM */ | 23 | #include <asm/types.h> |
24 | |||
25 | struct kvm_regs { | ||
26 | __u64 pc; | ||
27 | __u64 cr; | ||
28 | __u64 ctr; | ||
29 | __u64 lr; | ||
30 | __u64 xer; | ||
31 | __u64 msr; | ||
32 | __u64 srr0; | ||
33 | __u64 srr1; | ||
34 | __u64 pid; | ||
35 | |||
36 | __u64 sprg0; | ||
37 | __u64 sprg1; | ||
38 | __u64 sprg2; | ||
39 | __u64 sprg3; | ||
40 | __u64 sprg4; | ||
41 | __u64 sprg5; | ||
42 | __u64 sprg6; | ||
43 | __u64 sprg7; | ||
44 | |||
45 | __u64 gpr[32]; | ||
46 | }; | ||
47 | |||
48 | struct kvm_sregs { | ||
49 | }; | ||
50 | |||
51 | struct kvm_fpu { | ||
52 | __u64 fpr[32]; | ||
53 | }; | ||
5 | 54 | ||
6 | #endif | 55 | #endif /* __LINUX_KVM_POWERPC_H */ |
diff --git a/include/asm-powerpc/kvm_asm.h b/include/asm-powerpc/kvm_asm.h new file mode 100644 index 000000000000..2197764796d9 --- /dev/null +++ b/include/asm-powerpc/kvm_asm.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * You should have received a copy of the GNU General Public License | ||
12 | * along with this program; if not, write to the Free Software | ||
13 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
14 | * | ||
15 | * Copyright IBM Corp. 2008 | ||
16 | * | ||
17 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
18 | */ | ||
19 | |||
20 | #ifndef __POWERPC_KVM_ASM_H__ | ||
21 | #define __POWERPC_KVM_ASM_H__ | ||
22 | |||
23 | /* IVPR must be 64KiB-aligned. */ | ||
24 | #define VCPU_SIZE_ORDER 4 | ||
25 | #define VCPU_SIZE_LOG (VCPU_SIZE_ORDER + 12) | ||
26 | #define VCPU_TLB_PGSZ PPC44x_TLB_64K | ||
27 | #define VCPU_SIZE_BYTES (1<<VCPU_SIZE_LOG) | ||
28 | |||
29 | #define BOOKE_INTERRUPT_CRITICAL 0 | ||
30 | #define BOOKE_INTERRUPT_MACHINE_CHECK 1 | ||
31 | #define BOOKE_INTERRUPT_DATA_STORAGE 2 | ||
32 | #define BOOKE_INTERRUPT_INST_STORAGE 3 | ||
33 | #define BOOKE_INTERRUPT_EXTERNAL 4 | ||
34 | #define BOOKE_INTERRUPT_ALIGNMENT 5 | ||
35 | #define BOOKE_INTERRUPT_PROGRAM 6 | ||
36 | #define BOOKE_INTERRUPT_FP_UNAVAIL 7 | ||
37 | #define BOOKE_INTERRUPT_SYSCALL 8 | ||
38 | #define BOOKE_INTERRUPT_AP_UNAVAIL 9 | ||
39 | #define BOOKE_INTERRUPT_DECREMENTER 10 | ||
40 | #define BOOKE_INTERRUPT_FIT 11 | ||
41 | #define BOOKE_INTERRUPT_WATCHDOG 12 | ||
42 | #define BOOKE_INTERRUPT_DTLB_MISS 13 | ||
43 | #define BOOKE_INTERRUPT_ITLB_MISS 14 | ||
44 | #define BOOKE_INTERRUPT_DEBUG 15 | ||
45 | #define BOOKE_MAX_INTERRUPT 15 | ||
46 | |||
47 | #define RESUME_FLAG_NV (1<<0) /* Reload guest nonvolatile state? */ | ||
48 | #define RESUME_FLAG_HOST (1<<1) /* Resume host? */ | ||
49 | |||
50 | #define RESUME_GUEST 0 | ||
51 | #define RESUME_GUEST_NV RESUME_FLAG_NV | ||
52 | #define RESUME_HOST RESUME_FLAG_HOST | ||
53 | #define RESUME_HOST_NV (RESUME_FLAG_HOST|RESUME_FLAG_NV) | ||
54 | |||
55 | #endif /* __POWERPC_KVM_ASM_H__ */ | ||
diff --git a/include/asm-powerpc/kvm_host.h b/include/asm-powerpc/kvm_host.h new file mode 100644 index 000000000000..04ffbb8e0a35 --- /dev/null +++ b/include/asm-powerpc/kvm_host.h | |||
@@ -0,0 +1,152 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * You should have received a copy of the GNU General Public License | ||
12 | * along with this program; if not, write to the Free Software | ||
13 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
14 | * | ||
15 | * Copyright IBM Corp. 2007 | ||
16 | * | ||
17 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
18 | */ | ||
19 | |||
20 | #ifndef __POWERPC_KVM_HOST_H__ | ||
21 | #define __POWERPC_KVM_HOST_H__ | ||
22 | |||
23 | #include <linux/mutex.h> | ||
24 | #include <linux/timer.h> | ||
25 | #include <linux/types.h> | ||
26 | #include <linux/kvm_types.h> | ||
27 | #include <asm/kvm_asm.h> | ||
28 | |||
29 | #define KVM_MAX_VCPUS 1 | ||
30 | #define KVM_MEMORY_SLOTS 32 | ||
31 | /* memory slots that does not exposed to userspace */ | ||
32 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
33 | |||
34 | /* We don't currently support large pages. */ | ||
35 | #define KVM_PAGES_PER_HPAGE (1<<31) | ||
36 | |||
37 | struct kvm; | ||
38 | struct kvm_run; | ||
39 | struct kvm_vcpu; | ||
40 | |||
41 | struct kvm_vm_stat { | ||
42 | u32 remote_tlb_flush; | ||
43 | }; | ||
44 | |||
45 | struct kvm_vcpu_stat { | ||
46 | u32 sum_exits; | ||
47 | u32 mmio_exits; | ||
48 | u32 dcr_exits; | ||
49 | u32 signal_exits; | ||
50 | u32 light_exits; | ||
51 | /* Account for special types of light exits: */ | ||
52 | u32 itlb_real_miss_exits; | ||
53 | u32 itlb_virt_miss_exits; | ||
54 | u32 dtlb_real_miss_exits; | ||
55 | u32 dtlb_virt_miss_exits; | ||
56 | u32 syscall_exits; | ||
57 | u32 isi_exits; | ||
58 | u32 dsi_exits; | ||
59 | u32 emulated_inst_exits; | ||
60 | u32 dec_exits; | ||
61 | u32 ext_intr_exits; | ||
62 | }; | ||
63 | |||
64 | struct tlbe { | ||
65 | u32 tid; /* Only the low 8 bits are used. */ | ||
66 | u32 word0; | ||
67 | u32 word1; | ||
68 | u32 word2; | ||
69 | }; | ||
70 | |||
71 | struct kvm_arch { | ||
72 | }; | ||
73 | |||
74 | struct kvm_vcpu_arch { | ||
75 | /* Unmodified copy of the guest's TLB. */ | ||
76 | struct tlbe guest_tlb[PPC44x_TLB_SIZE]; | ||
77 | /* TLB that's actually used when the guest is running. */ | ||
78 | struct tlbe shadow_tlb[PPC44x_TLB_SIZE]; | ||
79 | /* Pages which are referenced in the shadow TLB. */ | ||
80 | struct page *shadow_pages[PPC44x_TLB_SIZE]; | ||
81 | /* Copy of the host's TLB. */ | ||
82 | struct tlbe host_tlb[PPC44x_TLB_SIZE]; | ||
83 | |||
84 | u32 host_stack; | ||
85 | u32 host_pid; | ||
86 | |||
87 | u64 fpr[32]; | ||
88 | u32 gpr[32]; | ||
89 | |||
90 | u32 pc; | ||
91 | u32 cr; | ||
92 | u32 ctr; | ||
93 | u32 lr; | ||
94 | u32 xer; | ||
95 | |||
96 | u32 msr; | ||
97 | u32 mmucr; | ||
98 | u32 sprg0; | ||
99 | u32 sprg1; | ||
100 | u32 sprg2; | ||
101 | u32 sprg3; | ||
102 | u32 sprg4; | ||
103 | u32 sprg5; | ||
104 | u32 sprg6; | ||
105 | u32 sprg7; | ||
106 | u32 srr0; | ||
107 | u32 srr1; | ||
108 | u32 csrr0; | ||
109 | u32 csrr1; | ||
110 | u32 dsrr0; | ||
111 | u32 dsrr1; | ||
112 | u32 dear; | ||
113 | u32 esr; | ||
114 | u32 dec; | ||
115 | u32 decar; | ||
116 | u32 tbl; | ||
117 | u32 tbu; | ||
118 | u32 tcr; | ||
119 | u32 tsr; | ||
120 | u32 ivor[16]; | ||
121 | u32 ivpr; | ||
122 | u32 pir; | ||
123 | u32 pid; | ||
124 | u32 pvr; | ||
125 | u32 ccr0; | ||
126 | u32 ccr1; | ||
127 | u32 dbcr0; | ||
128 | u32 dbcr1; | ||
129 | |||
130 | u32 last_inst; | ||
131 | u32 fault_dear; | ||
132 | u32 fault_esr; | ||
133 | gpa_t paddr_accessed; | ||
134 | |||
135 | u8 io_gpr; /* GPR used as IO source/target */ | ||
136 | u8 mmio_is_bigendian; | ||
137 | u8 dcr_needed; | ||
138 | u8 dcr_is_write; | ||
139 | |||
140 | u32 cpr0_cfgaddr; /* holds the last set cpr0_cfgaddr */ | ||
141 | |||
142 | struct timer_list dec_timer; | ||
143 | unsigned long pending_exceptions; | ||
144 | }; | ||
145 | |||
146 | struct kvm_guest_debug { | ||
147 | int enabled; | ||
148 | unsigned long bp[4]; | ||
149 | int singlestep; | ||
150 | }; | ||
151 | |||
152 | #endif /* __POWERPC_KVM_HOST_H__ */ | ||
diff --git a/include/asm-powerpc/kvm_para.h b/include/asm-powerpc/kvm_para.h new file mode 100644 index 000000000000..2d48f6a63d0b --- /dev/null +++ b/include/asm-powerpc/kvm_para.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * You should have received a copy of the GNU General Public License | ||
12 | * along with this program; if not, write to the Free Software | ||
13 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
14 | * | ||
15 | * Copyright IBM Corp. 2008 | ||
16 | * | ||
17 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
18 | */ | ||
19 | |||
20 | #ifndef __POWERPC_KVM_PARA_H__ | ||
21 | #define __POWERPC_KVM_PARA_H__ | ||
22 | |||
23 | #ifdef __KERNEL__ | ||
24 | |||
25 | static inline int kvm_para_available(void) | ||
26 | { | ||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | static inline unsigned int kvm_arch_para_features(void) | ||
31 | { | ||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | #endif /* __KERNEL__ */ | ||
36 | |||
37 | #endif /* __POWERPC_KVM_PARA_H__ */ | ||
diff --git a/include/asm-powerpc/kvm_ppc.h b/include/asm-powerpc/kvm_ppc.h new file mode 100644 index 000000000000..7ac820308a7e --- /dev/null +++ b/include/asm-powerpc/kvm_ppc.h | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License, version 2, as | ||
4 | * published by the Free Software Foundation. | ||
5 | * | ||
6 | * This program is distributed in the hope that it will be useful, | ||
7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
9 | * GNU General Public License for more details. | ||
10 | * | ||
11 | * You should have received a copy of the GNU General Public License | ||
12 | * along with this program; if not, write to the Free Software | ||
13 | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||
14 | * | ||
15 | * Copyright IBM Corp. 2008 | ||
16 | * | ||
17 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
18 | */ | ||
19 | |||
20 | #ifndef __POWERPC_KVM_PPC_H__ | ||
21 | #define __POWERPC_KVM_PPC_H__ | ||
22 | |||
23 | /* This file exists just so we can dereference kvm_vcpu, avoiding nested header | ||
24 | * dependencies. */ | ||
25 | |||
26 | #include <linux/mutex.h> | ||
27 | #include <linux/timer.h> | ||
28 | #include <linux/types.h> | ||
29 | #include <linux/kvm_types.h> | ||
30 | #include <linux/kvm_host.h> | ||
31 | |||
32 | struct kvm_tlb { | ||
33 | struct tlbe guest_tlb[PPC44x_TLB_SIZE]; | ||
34 | struct tlbe shadow_tlb[PPC44x_TLB_SIZE]; | ||
35 | }; | ||
36 | |||
37 | enum emulation_result { | ||
38 | EMULATE_DONE, /* no further processing */ | ||
39 | EMULATE_DO_MMIO, /* kvm_run filled with MMIO request */ | ||
40 | EMULATE_DO_DCR, /* kvm_run filled with DCR request */ | ||
41 | EMULATE_FAIL, /* can't emulate this instruction */ | ||
42 | }; | ||
43 | |||
44 | extern const unsigned char exception_priority[]; | ||
45 | extern const unsigned char priority_exception[]; | ||
46 | |||
47 | extern int __kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu); | ||
48 | extern char kvmppc_handlers_start[]; | ||
49 | extern unsigned long kvmppc_handler_len; | ||
50 | |||
51 | extern void kvmppc_dump_vcpu(struct kvm_vcpu *vcpu); | ||
52 | extern int kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu, | ||
53 | unsigned int rt, unsigned int bytes, | ||
54 | int is_bigendian); | ||
55 | extern int kvmppc_handle_store(struct kvm_run *run, struct kvm_vcpu *vcpu, | ||
56 | u32 val, unsigned int bytes, int is_bigendian); | ||
57 | |||
58 | extern int kvmppc_emulate_instruction(struct kvm_run *run, | ||
59 | struct kvm_vcpu *vcpu); | ||
60 | |||
61 | extern void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, | ||
62 | u64 asid, u32 flags); | ||
63 | extern void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, u64 eaddr, u64 asid); | ||
64 | extern void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode); | ||
65 | |||
66 | extern void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu); | ||
67 | |||
68 | static inline void kvmppc_queue_exception(struct kvm_vcpu *vcpu, int exception) | ||
69 | { | ||
70 | unsigned int priority = exception_priority[exception]; | ||
71 | set_bit(priority, &vcpu->arch.pending_exceptions); | ||
72 | } | ||
73 | |||
74 | static inline void kvmppc_clear_exception(struct kvm_vcpu *vcpu, int exception) | ||
75 | { | ||
76 | unsigned int priority = exception_priority[exception]; | ||
77 | clear_bit(priority, &vcpu->arch.pending_exceptions); | ||
78 | } | ||
79 | |||
80 | static inline void kvmppc_set_msr(struct kvm_vcpu *vcpu, u32 new_msr) | ||
81 | { | ||
82 | if ((new_msr & MSR_PR) != (vcpu->arch.msr & MSR_PR)) | ||
83 | kvmppc_mmu_priv_switch(vcpu, new_msr & MSR_PR); | ||
84 | |||
85 | vcpu->arch.msr = new_msr; | ||
86 | } | ||
87 | |||
88 | #endif /* __POWERPC_KVM_PPC_H__ */ | ||
diff --git a/include/asm-powerpc/mmu-44x.h b/include/asm-powerpc/mmu-44x.h index c8b02d97f753..a825524c981a 100644 --- a/include/asm-powerpc/mmu-44x.h +++ b/include/asm-powerpc/mmu-44x.h | |||
@@ -53,6 +53,8 @@ | |||
53 | 53 | ||
54 | #ifndef __ASSEMBLY__ | 54 | #ifndef __ASSEMBLY__ |
55 | 55 | ||
56 | extern unsigned int tlb_44x_hwater; | ||
57 | |||
56 | typedef struct { | 58 | typedef struct { |
57 | unsigned long id; | 59 | unsigned long id; |
58 | unsigned long vdso_base; | 60 | unsigned long vdso_base; |
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index eb61b9c1edfd..7b564444ff61 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h | |||
@@ -108,6 +108,7 @@ struct paca_struct { | |||
108 | }; | 108 | }; |
109 | 109 | ||
110 | extern struct paca_struct paca[]; | 110 | extern struct paca_struct paca[]; |
111 | extern void initialise_pacas(void); | ||
111 | 112 | ||
112 | #endif /* __KERNEL__ */ | 113 | #endif /* __KERNEL__ */ |
113 | #endif /* _ASM_POWERPC_PACA_H */ | 114 | #endif /* _ASM_POWERPC_PACA_H */ |
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index 6c850609b847..cffdf0eb0df6 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <asm/asm-compat.h> | 13 | #include <asm/asm-compat.h> |
14 | #include <asm/kdump.h> | 14 | #include <asm/kdump.h> |
15 | #include <asm/types.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software | 18 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software |
@@ -42,8 +43,23 @@ | |||
42 | * | 43 | * |
43 | * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. | 44 | * The kdump dump kernel is one example where KERNELBASE != PAGE_OFFSET. |
44 | * | 45 | * |
45 | * To get a physical address from a virtual one you subtract PAGE_OFFSET, | 46 | * PAGE_OFFSET is the virtual address of the start of lowmem. |
46 | * _not_ KERNELBASE. | 47 | * |
48 | * PHYSICAL_START is the physical address of the start of the kernel. | ||
49 | * | ||
50 | * MEMORY_START is the physical address of the start of lowmem. | ||
51 | * | ||
52 | * KERNELBASE, PAGE_OFFSET, and PHYSICAL_START are all configurable on | ||
53 | * ppc32 and based on how they are set we determine MEMORY_START. | ||
54 | * | ||
55 | * For the linear mapping the following equation should be true: | ||
56 | * KERNELBASE - PAGE_OFFSET = PHYSICAL_START - MEMORY_START | ||
57 | * | ||
58 | * Also, KERNELBASE >= PAGE_OFFSET and PHYSICAL_START >= MEMORY_START | ||
59 | * | ||
60 | * There are two was to determine a physical address from a virtual one: | ||
61 | * va = pa + PAGE_OFFSET - MEMORY_START | ||
62 | * va = pa + KERNELBASE - PHYSICAL_START | ||
47 | * | 63 | * |
48 | * If you want to know something's offset from the start of the kernel you | 64 | * If you want to know something's offset from the start of the kernel you |
49 | * should subtract KERNELBASE. | 65 | * should subtract KERNELBASE. |
@@ -51,20 +67,33 @@ | |||
51 | * If you want to test if something's a kernel address, use is_kernel_addr(). | 67 | * If you want to test if something's a kernel address, use is_kernel_addr(). |
52 | */ | 68 | */ |
53 | 69 | ||
54 | #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) | 70 | #define KERNELBASE ASM_CONST(CONFIG_KERNEL_START) |
55 | #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) | 71 | #define PAGE_OFFSET ASM_CONST(CONFIG_PAGE_OFFSET) |
56 | #define LOAD_OFFSET PAGE_OFFSET | 72 | #define LOAD_OFFSET ASM_CONST((CONFIG_KERNEL_START-CONFIG_PHYSICAL_START)) |
73 | |||
74 | #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_FLATMEM) | ||
75 | #ifndef __ASSEMBLY__ | ||
76 | extern phys_addr_t memstart_addr; | ||
77 | extern phys_addr_t kernstart_addr; | ||
78 | #endif | ||
79 | #define PHYSICAL_START kernstart_addr | ||
80 | #define MEMORY_START memstart_addr | ||
81 | #else | ||
82 | #define PHYSICAL_START ASM_CONST(CONFIG_PHYSICAL_START) | ||
83 | #define MEMORY_START (PHYSICAL_START + PAGE_OFFSET - KERNELBASE) | ||
84 | #endif | ||
57 | 85 | ||
58 | #ifdef CONFIG_FLATMEM | 86 | #ifdef CONFIG_FLATMEM |
59 | #define pfn_valid(pfn) ((pfn) < max_mapnr) | 87 | #define ARCH_PFN_OFFSET (MEMORY_START >> PAGE_SHIFT) |
88 | #define pfn_valid(pfn) ((pfn) >= ARCH_PFN_OFFSET && (pfn) < (ARCH_PFN_OFFSET + max_mapnr)) | ||
60 | #endif | 89 | #endif |
61 | 90 | ||
62 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) | 91 | #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) |
63 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) | 92 | #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) |
64 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) | 93 | #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) |
65 | 94 | ||
66 | #define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET)) | 95 | #define __va(x) ((void *)((unsigned long)(x) - PHYSICAL_START + KERNELBASE)) |
67 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET) | 96 | #define __pa(x) ((unsigned long)(x) + PHYSICAL_START - KERNELBASE) |
68 | 97 | ||
69 | /* | 98 | /* |
70 | * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, | 99 | * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, |
diff --git a/include/asm-powerpc/page_32.h b/include/asm-powerpc/page_32.h index 51f8134b5939..ebfae530a379 100644 --- a/include/asm-powerpc/page_32.h +++ b/include/asm-powerpc/page_32.h | |||
@@ -1,6 +1,12 @@ | |||
1 | #ifndef _ASM_POWERPC_PAGE_32_H | 1 | #ifndef _ASM_POWERPC_PAGE_32_H |
2 | #define _ASM_POWERPC_PAGE_32_H | 2 | #define _ASM_POWERPC_PAGE_32_H |
3 | 3 | ||
4 | #if defined(CONFIG_PHYSICAL_ALIGN) && (CONFIG_PHYSICAL_START != 0) | ||
5 | #if (CONFIG_PHYSICAL_START % CONFIG_PHYSICAL_ALIGN) != 0 | ||
6 | #error "CONFIG_PHYSICAL_START must be a multiple of CONFIG_PHYSICAL_ALIGN" | ||
7 | #endif | ||
8 | #endif | ||
9 | |||
4 | #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 | 10 | #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32 |
5 | 11 | ||
6 | #ifdef CONFIG_NOT_COHERENT_CACHE | 12 | #ifdef CONFIG_NOT_COHERENT_CACHE |
diff --git a/include/asm-powerpc/page_64.h b/include/asm-powerpc/page_64.h index 67834eae5702..25af4fc8daf4 100644 --- a/include/asm-powerpc/page_64.h +++ b/include/asm-powerpc/page_64.h | |||
@@ -128,11 +128,6 @@ extern void slice_init_context(struct mm_struct *mm, unsigned int psize); | |||
128 | extern void slice_set_user_psize(struct mm_struct *mm, unsigned int psize); | 128 | extern void slice_set_user_psize(struct mm_struct *mm, unsigned int psize); |
129 | #define slice_mm_new_context(mm) ((mm)->context.id == 0) | 129 | #define slice_mm_new_context(mm) ((mm)->context.id == 0) |
130 | 130 | ||
131 | #define ARCH_HAS_HUGEPAGE_ONLY_RANGE | ||
132 | extern int is_hugepage_only_range(struct mm_struct *m, | ||
133 | unsigned long addr, | ||
134 | unsigned long len); | ||
135 | |||
136 | #endif /* __ASSEMBLY__ */ | 131 | #endif /* __ASSEMBLY__ */ |
137 | #else | 132 | #else |
138 | #define slice_init() | 133 | #define slice_init() |
@@ -146,8 +141,6 @@ do { \ | |||
146 | 141 | ||
147 | #ifdef CONFIG_HUGETLB_PAGE | 142 | #ifdef CONFIG_HUGETLB_PAGE |
148 | 143 | ||
149 | #define ARCH_HAS_HUGETLB_FREE_PGD_RANGE | ||
150 | #define ARCH_HAS_SETCLEAR_HUGE_PTE | ||
151 | #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA | 144 | #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA |
152 | 145 | ||
153 | #endif /* !CONFIG_HUGETLB_PAGE */ | 146 | #endif /* !CONFIG_HUGETLB_PAGE */ |
diff --git a/include/asm-powerpc/pgtable-ppc32.h b/include/asm-powerpc/pgtable-ppc32.h index daea7692d070..7c97b5a08d08 100644 --- a/include/asm-powerpc/pgtable-ppc32.h +++ b/include/asm-powerpc/pgtable-ppc32.h | |||
@@ -504,6 +504,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | |||
504 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 504 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
505 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 505 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
506 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 506 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
507 | static inline int pte_special(pte_t pte) { return 0; } | ||
507 | 508 | ||
508 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } | 509 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } |
509 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } | 510 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } |
@@ -521,6 +522,8 @@ static inline pte_t pte_mkdirty(pte_t pte) { | |||
521 | pte_val(pte) |= _PAGE_DIRTY; return pte; } | 522 | pte_val(pte) |= _PAGE_DIRTY; return pte; } |
522 | static inline pte_t pte_mkyoung(pte_t pte) { | 523 | static inline pte_t pte_mkyoung(pte_t pte) { |
523 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 524 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
525 | static inline pte_t pte_mkspecial(pte_t pte) { | ||
526 | return pte; } | ||
524 | 527 | ||
525 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 528 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
526 | { | 529 | { |
diff --git a/include/asm-powerpc/pgtable-ppc64.h b/include/asm-powerpc/pgtable-ppc64.h index dd4c26dc57d2..27f18695f7d6 100644 --- a/include/asm-powerpc/pgtable-ppc64.h +++ b/include/asm-powerpc/pgtable-ppc64.h | |||
@@ -239,6 +239,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW;} | |||
239 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;} | 239 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;} |
240 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;} | 240 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;} |
241 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE;} | 241 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE;} |
242 | static inline int pte_special(pte_t pte) { return 0; } | ||
242 | 243 | ||
243 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } | 244 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } |
244 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } | 245 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } |
@@ -257,6 +258,8 @@ static inline pte_t pte_mkyoung(pte_t pte) { | |||
257 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 258 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
258 | static inline pte_t pte_mkhuge(pte_t pte) { | 259 | static inline pte_t pte_mkhuge(pte_t pte) { |
259 | return pte; } | 260 | return pte; } |
261 | static inline pte_t pte_mkspecial(pte_t pte) { | ||
262 | return pte; } | ||
260 | 263 | ||
261 | /* Atomic PTE updates */ | 264 | /* Atomic PTE updates */ |
262 | static inline unsigned long pte_update(struct mm_struct *mm, | 265 | static inline unsigned long pte_update(struct mm_struct *mm, |
diff --git a/include/asm-powerpc/processor.h b/include/asm-powerpc/processor.h index fd98ca998b4f..cf83f2d7e2a5 100644 --- a/include/asm-powerpc/processor.h +++ b/include/asm-powerpc/processor.h | |||
@@ -138,6 +138,8 @@ typedef struct { | |||
138 | 138 | ||
139 | struct thread_struct { | 139 | struct thread_struct { |
140 | unsigned long ksp; /* Kernel stack pointer */ | 140 | unsigned long ksp; /* Kernel stack pointer */ |
141 | unsigned long ksp_limit; /* if ksp <= ksp_limit stack overflow */ | ||
142 | |||
141 | #ifdef CONFIG_PPC64 | 143 | #ifdef CONFIG_PPC64 |
142 | unsigned long ksp_vsid; | 144 | unsigned long ksp_vsid; |
143 | #endif | 145 | #endif |
@@ -182,11 +184,14 @@ struct thread_struct { | |||
182 | #define ARCH_MIN_TASKALIGN 16 | 184 | #define ARCH_MIN_TASKALIGN 16 |
183 | 185 | ||
184 | #define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack) | 186 | #define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack) |
187 | #define INIT_SP_LIMIT \ | ||
188 | (_ALIGN_UP(sizeof(init_thread_info), 16) + (unsigned long) &init_stack) | ||
185 | 189 | ||
186 | 190 | ||
187 | #ifdef CONFIG_PPC32 | 191 | #ifdef CONFIG_PPC32 |
188 | #define INIT_THREAD { \ | 192 | #define INIT_THREAD { \ |
189 | .ksp = INIT_SP, \ | 193 | .ksp = INIT_SP, \ |
194 | .ksp_limit = INIT_SP_LIMIT, \ | ||
190 | .fs = KERNEL_DS, \ | 195 | .fs = KERNEL_DS, \ |
191 | .pgdir = swapper_pg_dir, \ | 196 | .pgdir = swapper_pg_dir, \ |
192 | .fpexc_mode = MSR_FE0 | MSR_FE1, \ | 197 | .fpexc_mode = MSR_FE0 | MSR_FE1, \ |
@@ -194,6 +199,7 @@ struct thread_struct { | |||
194 | #else | 199 | #else |
195 | #define INIT_THREAD { \ | 200 | #define INIT_THREAD { \ |
196 | .ksp = INIT_SP, \ | 201 | .ksp = INIT_SP, \ |
202 | .ksp_limit = INIT_SP_LIMIT, \ | ||
197 | .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \ | 203 | .regs = (struct pt_regs *)INIT_SP - 1, /* XXX bogus, I think */ \ |
198 | .fs = KERNEL_DS, \ | 204 | .fs = KERNEL_DS, \ |
199 | .fpr = {0}, \ | 205 | .fpr = {0}, \ |
diff --git a/include/asm-ppc/rio.h b/include/asm-powerpc/rio.h index 0018bf80cb25..0018bf80cb25 100644 --- a/include/asm-ppc/rio.h +++ b/include/asm-powerpc/rio.h | |||
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h index fab1674b31b6..2b6559a6d113 100644 --- a/include/asm-powerpc/system.h +++ b/include/asm-powerpc/system.h | |||
@@ -204,7 +204,7 @@ extern int powersave_nap; /* set if nap mode can be used in idle loop */ | |||
204 | * Changes the memory location '*ptr' to be val and returns | 204 | * Changes the memory location '*ptr' to be val and returns |
205 | * the previous value stored there. | 205 | * the previous value stored there. |
206 | */ | 206 | */ |
207 | static __inline__ unsigned long | 207 | static __always_inline unsigned long |
208 | __xchg_u32(volatile void *p, unsigned long val) | 208 | __xchg_u32(volatile void *p, unsigned long val) |
209 | { | 209 | { |
210 | unsigned long prev; | 210 | unsigned long prev; |
@@ -229,7 +229,7 @@ __xchg_u32(volatile void *p, unsigned long val) | |||
229 | * Changes the memory location '*ptr' to be val and returns | 229 | * Changes the memory location '*ptr' to be val and returns |
230 | * the previous value stored there. | 230 | * the previous value stored there. |
231 | */ | 231 | */ |
232 | static __inline__ unsigned long | 232 | static __always_inline unsigned long |
233 | __xchg_u32_local(volatile void *p, unsigned long val) | 233 | __xchg_u32_local(volatile void *p, unsigned long val) |
234 | { | 234 | { |
235 | unsigned long prev; | 235 | unsigned long prev; |
@@ -247,7 +247,7 @@ __xchg_u32_local(volatile void *p, unsigned long val) | |||
247 | } | 247 | } |
248 | 248 | ||
249 | #ifdef CONFIG_PPC64 | 249 | #ifdef CONFIG_PPC64 |
250 | static __inline__ unsigned long | 250 | static __always_inline unsigned long |
251 | __xchg_u64(volatile void *p, unsigned long val) | 251 | __xchg_u64(volatile void *p, unsigned long val) |
252 | { | 252 | { |
253 | unsigned long prev; | 253 | unsigned long prev; |
@@ -266,7 +266,7 @@ __xchg_u64(volatile void *p, unsigned long val) | |||
266 | return prev; | 266 | return prev; |
267 | } | 267 | } |
268 | 268 | ||
269 | static __inline__ unsigned long | 269 | static __always_inline unsigned long |
270 | __xchg_u64_local(volatile void *p, unsigned long val) | 270 | __xchg_u64_local(volatile void *p, unsigned long val) |
271 | { | 271 | { |
272 | unsigned long prev; | 272 | unsigned long prev; |
@@ -290,7 +290,7 @@ __xchg_u64_local(volatile void *p, unsigned long val) | |||
290 | */ | 290 | */ |
291 | extern void __xchg_called_with_bad_pointer(void); | 291 | extern void __xchg_called_with_bad_pointer(void); |
292 | 292 | ||
293 | static __inline__ unsigned long | 293 | static __always_inline unsigned long |
294 | __xchg(volatile void *ptr, unsigned long x, unsigned int size) | 294 | __xchg(volatile void *ptr, unsigned long x, unsigned int size) |
295 | { | 295 | { |
296 | switch (size) { | 296 | switch (size) { |
@@ -305,7 +305,7 @@ __xchg(volatile void *ptr, unsigned long x, unsigned int size) | |||
305 | return x; | 305 | return x; |
306 | } | 306 | } |
307 | 307 | ||
308 | static __inline__ unsigned long | 308 | static __always_inline unsigned long |
309 | __xchg_local(volatile void *ptr, unsigned long x, unsigned int size) | 309 | __xchg_local(volatile void *ptr, unsigned long x, unsigned int size) |
310 | { | 310 | { |
311 | switch (size) { | 311 | switch (size) { |
@@ -338,7 +338,7 @@ __xchg_local(volatile void *ptr, unsigned long x, unsigned int size) | |||
338 | */ | 338 | */ |
339 | #define __HAVE_ARCH_CMPXCHG 1 | 339 | #define __HAVE_ARCH_CMPXCHG 1 |
340 | 340 | ||
341 | static __inline__ unsigned long | 341 | static __always_inline unsigned long |
342 | __cmpxchg_u32(volatile unsigned int *p, unsigned long old, unsigned long new) | 342 | __cmpxchg_u32(volatile unsigned int *p, unsigned long old, unsigned long new) |
343 | { | 343 | { |
344 | unsigned int prev; | 344 | unsigned int prev; |
@@ -361,7 +361,7 @@ __cmpxchg_u32(volatile unsigned int *p, unsigned long old, unsigned long new) | |||
361 | return prev; | 361 | return prev; |
362 | } | 362 | } |
363 | 363 | ||
364 | static __inline__ unsigned long | 364 | static __always_inline unsigned long |
365 | __cmpxchg_u32_local(volatile unsigned int *p, unsigned long old, | 365 | __cmpxchg_u32_local(volatile unsigned int *p, unsigned long old, |
366 | unsigned long new) | 366 | unsigned long new) |
367 | { | 367 | { |
@@ -384,7 +384,7 @@ __cmpxchg_u32_local(volatile unsigned int *p, unsigned long old, | |||
384 | } | 384 | } |
385 | 385 | ||
386 | #ifdef CONFIG_PPC64 | 386 | #ifdef CONFIG_PPC64 |
387 | static __inline__ unsigned long | 387 | static __always_inline unsigned long |
388 | __cmpxchg_u64(volatile unsigned long *p, unsigned long old, unsigned long new) | 388 | __cmpxchg_u64(volatile unsigned long *p, unsigned long old, unsigned long new) |
389 | { | 389 | { |
390 | unsigned long prev; | 390 | unsigned long prev; |
@@ -406,7 +406,7 @@ __cmpxchg_u64(volatile unsigned long *p, unsigned long old, unsigned long new) | |||
406 | return prev; | 406 | return prev; |
407 | } | 407 | } |
408 | 408 | ||
409 | static __inline__ unsigned long | 409 | static __always_inline unsigned long |
410 | __cmpxchg_u64_local(volatile unsigned long *p, unsigned long old, | 410 | __cmpxchg_u64_local(volatile unsigned long *p, unsigned long old, |
411 | unsigned long new) | 411 | unsigned long new) |
412 | { | 412 | { |
@@ -432,7 +432,7 @@ __cmpxchg_u64_local(volatile unsigned long *p, unsigned long old, | |||
432 | if something tries to do an invalid cmpxchg(). */ | 432 | if something tries to do an invalid cmpxchg(). */ |
433 | extern void __cmpxchg_called_with_bad_pointer(void); | 433 | extern void __cmpxchg_called_with_bad_pointer(void); |
434 | 434 | ||
435 | static __inline__ unsigned long | 435 | static __always_inline unsigned long |
436 | __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, | 436 | __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, |
437 | unsigned int size) | 437 | unsigned int size) |
438 | { | 438 | { |
@@ -448,7 +448,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, | |||
448 | return old; | 448 | return old; |
449 | } | 449 | } |
450 | 450 | ||
451 | static __inline__ unsigned long | 451 | static __always_inline unsigned long |
452 | __cmpxchg_local(volatile void *ptr, unsigned long old, unsigned long new, | 452 | __cmpxchg_local(volatile void *ptr, unsigned long old, unsigned long new, |
453 | unsigned int size) | 453 | unsigned int size) |
454 | { | 454 | { |
diff --git a/include/asm-powerpc/thread_info.h b/include/asm-powerpc/thread_info.h index 40d5f98c44fc..d030f5ce39ad 100644 --- a/include/asm-powerpc/thread_info.h +++ b/include/asm-powerpc/thread_info.h | |||
@@ -80,12 +80,8 @@ struct thread_info { | |||
80 | 80 | ||
81 | #else /* THREAD_SHIFT < PAGE_SHIFT */ | 81 | #else /* THREAD_SHIFT < PAGE_SHIFT */ |
82 | 82 | ||
83 | #ifdef CONFIG_DEBUG_STACK_USAGE | 83 | extern struct thread_info *alloc_thread_info(struct task_struct *tsk); |
84 | #define alloc_thread_info(tsk) kzalloc(THREAD_SIZE, GFP_KERNEL) | 84 | extern void free_thread_info(struct thread_info *ti); |
85 | #else | ||
86 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) | ||
87 | #endif | ||
88 | #define free_thread_info(ti) kfree(ti) | ||
89 | 85 | ||
90 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ | 86 | #endif /* THREAD_SHIFT < PAGE_SHIFT */ |
91 | 87 | ||
diff --git a/include/asm-powerpc/unaligned.h b/include/asm-powerpc/unaligned.h index 6c95dfa2652f..5f1b1e3c2137 100644 --- a/include/asm-powerpc/unaligned.h +++ b/include/asm-powerpc/unaligned.h | |||
@@ -5,15 +5,12 @@ | |||
5 | 5 | ||
6 | /* | 6 | /* |
7 | * The PowerPC can do unaligned accesses itself in big endian mode. | 7 | * The PowerPC can do unaligned accesses itself in big endian mode. |
8 | * | ||
9 | * The strange macros are there to make sure these can't | ||
10 | * be misused in a way that makes them not work on other | ||
11 | * architectures where unaligned accesses aren't as simple. | ||
12 | */ | 8 | */ |
9 | #include <linux/unaligned/access_ok.h> | ||
10 | #include <linux/unaligned/generic.h> | ||
13 | 11 | ||
14 | #define get_unaligned(ptr) (*(ptr)) | 12 | #define get_unaligned __get_unaligned_be |
15 | 13 | #define put_unaligned __put_unaligned_be | |
16 | #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) | ||
17 | 14 | ||
18 | #endif /* __KERNEL__ */ | 15 | #endif /* __KERNEL__ */ |
19 | #endif /* _ASM_POWERPC_UNALIGNED_H */ | 16 | #endif /* _ASM_POWERPC_UNALIGNED_H */ |
diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h index d46b57b589ae..d76ef098ed37 100644 --- a/include/asm-ppc/mmu.h +++ b/include/asm-ppc/mmu.h | |||
@@ -15,10 +15,8 @@ | |||
15 | * physical need a larger than native word size type. -Matt | 15 | * physical need a larger than native word size type. -Matt |
16 | */ | 16 | */ |
17 | #ifndef CONFIG_PHYS_64BIT | 17 | #ifndef CONFIG_PHYS_64BIT |
18 | typedef unsigned long phys_addr_t; | ||
19 | #define PHYS_FMT "%.8lx" | 18 | #define PHYS_FMT "%.8lx" |
20 | #else | 19 | #else |
21 | typedef unsigned long long phys_addr_t; | ||
22 | extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); | 20 | extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t); |
23 | #define PHYS_FMT "%16Lx" | 21 | #define PHYS_FMT "%16Lx" |
24 | #endif | 22 | #endif |
diff --git a/include/asm-ppc/mpc8260.h b/include/asm-ppc/mpc8260.h index 23579d4afae7..402ba15c2e80 100644 --- a/include/asm-ppc/mpc8260.h +++ b/include/asm-ppc/mpc8260.h | |||
@@ -35,10 +35,6 @@ | |||
35 | #include <platforms/tqm8260.h> | 35 | #include <platforms/tqm8260.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #if defined(CONFIG_PQ2ADS) || defined (CONFIG_PQ2FADS) | ||
39 | #include <platforms/pq2ads.h> | ||
40 | #endif | ||
41 | |||
42 | #ifdef CONFIG_PCI_8260 | 38 | #ifdef CONFIG_PCI_8260 |
43 | #include <syslib/m82xx_pci.h> | 39 | #include <syslib/m82xx_pci.h> |
44 | #endif | 40 | #endif |
diff --git a/include/asm-ppc/mpc8xx.h b/include/asm-ppc/mpc8xx.h index d3a2f2fe230c..b9e3060b0278 100644 --- a/include/asm-ppc/mpc8xx.h +++ b/include/asm-ppc/mpc8xx.h | |||
@@ -63,10 +63,6 @@ | |||
63 | #include <platforms/lantec.h> | 63 | #include <platforms/lantec.h> |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | #if defined(CONFIG_MPC885ADS) | ||
67 | #include <platforms/mpc885ads.h> | ||
68 | #endif | ||
69 | |||
70 | /* Currently, all 8xx boards that support a processor to PCI/ISA bridge | 66 | /* Currently, all 8xx boards that support a processor to PCI/ISA bridge |
71 | * use the same memory map. | 67 | * use the same memory map. |
72 | */ | 68 | */ |
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h index 70435d32129a..55f9d38e3bf8 100644 --- a/include/asm-ppc/pgtable.h +++ b/include/asm-ppc/pgtable.h | |||
@@ -483,6 +483,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | |||
483 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 483 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
484 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 484 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
485 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 485 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
486 | static inline int pte_special(pte_t pte) { return 0; } | ||
486 | 487 | ||
487 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } | 488 | static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } |
488 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } | 489 | static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } |
@@ -500,6 +501,8 @@ static inline pte_t pte_mkdirty(pte_t pte) { | |||
500 | pte_val(pte) |= _PAGE_DIRTY; return pte; } | 501 | pte_val(pte) |= _PAGE_DIRTY; return pte; } |
501 | static inline pte_t pte_mkyoung(pte_t pte) { | 502 | static inline pte_t pte_mkyoung(pte_t pte) { |
502 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 503 | pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
504 | static inline pte_t pte_mkspecial(pte_t pte) { | ||
505 | return pte; } | ||
503 | 506 | ||
504 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 507 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
505 | { | 508 | { |
diff --git a/include/asm-s390/Kbuild b/include/asm-s390/Kbuild index e92b429d2be1..13c9805349f1 100644 --- a/include/asm-s390/Kbuild +++ b/include/asm-s390/Kbuild | |||
@@ -7,6 +7,7 @@ header-y += tape390.h | |||
7 | header-y += ucontext.h | 7 | header-y += ucontext.h |
8 | header-y += vtoc.h | 8 | header-y += vtoc.h |
9 | header-y += zcrypt.h | 9 | header-y += zcrypt.h |
10 | header-y += kvm.h | ||
10 | 11 | ||
11 | unifdef-y += cmb.h | 12 | unifdef-y += cmb.h |
12 | unifdef-y += debug.h | 13 | unifdef-y += debug.h |
diff --git a/include/asm-s390/bitops.h b/include/asm-s390/bitops.h index 965394e69452..b4eb24ab5af9 100644 --- a/include/asm-s390/bitops.h +++ b/include/asm-s390/bitops.h | |||
@@ -769,6 +769,7 @@ static inline int sched_find_first_bit(unsigned long *b) | |||
769 | } | 769 | } |
770 | 770 | ||
771 | #include <asm-generic/bitops/fls.h> | 771 | #include <asm-generic/bitops/fls.h> |
772 | #include <asm-generic/bitops/__fls.h> | ||
772 | #include <asm-generic/bitops/fls64.h> | 773 | #include <asm-generic/bitops/fls64.h> |
773 | 774 | ||
774 | #include <asm-generic/bitops/hweight.h> | 775 | #include <asm-generic/bitops/hweight.h> |
diff --git a/include/asm-s390/kvm.h b/include/asm-s390/kvm.h index 573f2a351386..d74002f95794 100644 --- a/include/asm-s390/kvm.h +++ b/include/asm-s390/kvm.h | |||
@@ -1,6 +1,45 @@ | |||
1 | #ifndef __LINUX_KVM_S390_H | 1 | #ifndef __LINUX_KVM_S390_H |
2 | #define __LINUX_KVM_S390_H | 2 | #define __LINUX_KVM_S390_H |
3 | 3 | ||
4 | /* s390 does not support KVM */ | 4 | /* |
5 | * asm-s390/kvm.h - KVM s390 specific structures and definitions | ||
6 | * | ||
7 | * Copyright IBM Corp. 2008 | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License (version 2 only) | ||
11 | * as published by the Free Software Foundation. | ||
12 | * | ||
13 | * Author(s): Carsten Otte <cotte@de.ibm.com> | ||
14 | * Christian Borntraeger <borntraeger@de.ibm.com> | ||
15 | */ | ||
16 | #include <asm/types.h> | ||
17 | |||
18 | /* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */ | ||
19 | struct kvm_pic_state { | ||
20 | /* no PIC for s390 */ | ||
21 | }; | ||
22 | |||
23 | struct kvm_ioapic_state { | ||
24 | /* no IOAPIC for s390 */ | ||
25 | }; | ||
26 | |||
27 | /* for KVM_GET_REGS and KVM_SET_REGS */ | ||
28 | struct kvm_regs { | ||
29 | /* general purpose regs for s390 */ | ||
30 | __u64 gprs[16]; | ||
31 | }; | ||
32 | |||
33 | /* for KVM_GET_SREGS and KVM_SET_SREGS */ | ||
34 | struct kvm_sregs { | ||
35 | __u32 acrs[16]; | ||
36 | __u64 crs[16]; | ||
37 | }; | ||
38 | |||
39 | /* for KVM_GET_FPU and KVM_SET_FPU */ | ||
40 | struct kvm_fpu { | ||
41 | __u32 fpc; | ||
42 | __u64 fprs[16]; | ||
43 | }; | ||
5 | 44 | ||
6 | #endif | 45 | #endif |
diff --git a/include/asm-s390/kvm_host.h b/include/asm-s390/kvm_host.h new file mode 100644 index 000000000000..f8204a4f2e02 --- /dev/null +++ b/include/asm-s390/kvm_host.h | |||
@@ -0,0 +1,234 @@ | |||
1 | /* | ||
2 | * asm-s390/kvm_host.h - definition for kernel virtual machines on s390 | ||
3 | * | ||
4 | * Copyright IBM Corp. 2008 | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License (version 2 only) | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * Author(s): Carsten Otte <cotte@de.ibm.com> | ||
11 | */ | ||
12 | |||
13 | |||
14 | #ifndef ASM_KVM_HOST_H | ||
15 | #define ASM_KVM_HOST_H | ||
16 | #include <linux/kvm_host.h> | ||
17 | #include <asm/debug.h> | ||
18 | |||
19 | #define KVM_MAX_VCPUS 64 | ||
20 | #define KVM_MEMORY_SLOTS 32 | ||
21 | /* memory slots that does not exposed to userspace */ | ||
22 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
23 | |||
24 | struct kvm_guest_debug { | ||
25 | }; | ||
26 | |||
27 | struct sca_entry { | ||
28 | atomic_t scn; | ||
29 | __u64 reserved; | ||
30 | __u64 sda; | ||
31 | __u64 reserved2[2]; | ||
32 | } __attribute__((packed)); | ||
33 | |||
34 | |||
35 | struct sca_block { | ||
36 | __u64 ipte_control; | ||
37 | __u64 reserved[5]; | ||
38 | __u64 mcn; | ||
39 | __u64 reserved2; | ||
40 | struct sca_entry cpu[64]; | ||
41 | } __attribute__((packed)); | ||
42 | |||
43 | #define KVM_PAGES_PER_HPAGE 256 | ||
44 | |||
45 | #define CPUSTAT_HOST 0x80000000 | ||
46 | #define CPUSTAT_WAIT 0x10000000 | ||
47 | #define CPUSTAT_ECALL_PEND 0x08000000 | ||
48 | #define CPUSTAT_STOP_INT 0x04000000 | ||
49 | #define CPUSTAT_IO_INT 0x02000000 | ||
50 | #define CPUSTAT_EXT_INT 0x01000000 | ||
51 | #define CPUSTAT_RUNNING 0x00800000 | ||
52 | #define CPUSTAT_RETAINED 0x00400000 | ||
53 | #define CPUSTAT_TIMING_SUB 0x00020000 | ||
54 | #define CPUSTAT_SIE_SUB 0x00010000 | ||
55 | #define CPUSTAT_RRF 0x00008000 | ||
56 | #define CPUSTAT_SLSV 0x00004000 | ||
57 | #define CPUSTAT_SLSR 0x00002000 | ||
58 | #define CPUSTAT_ZARCH 0x00000800 | ||
59 | #define CPUSTAT_MCDS 0x00000100 | ||
60 | #define CPUSTAT_SM 0x00000080 | ||
61 | #define CPUSTAT_G 0x00000008 | ||
62 | #define CPUSTAT_J 0x00000002 | ||
63 | #define CPUSTAT_P 0x00000001 | ||
64 | |||
65 | struct sie_block { | ||
66 | atomic_t cpuflags; /* 0x0000 */ | ||
67 | __u32 prefix; /* 0x0004 */ | ||
68 | __u8 reserved8[32]; /* 0x0008 */ | ||
69 | __u64 cputm; /* 0x0028 */ | ||
70 | __u64 ckc; /* 0x0030 */ | ||
71 | __u64 epoch; /* 0x0038 */ | ||
72 | __u8 reserved40[4]; /* 0x0040 */ | ||
73 | #define LCTL_CR0 0x8000 | ||
74 | __u16 lctl; /* 0x0044 */ | ||
75 | __s16 icpua; /* 0x0046 */ | ||
76 | __u32 ictl; /* 0x0048 */ | ||
77 | __u32 eca; /* 0x004c */ | ||
78 | __u8 icptcode; /* 0x0050 */ | ||
79 | __u8 reserved51; /* 0x0051 */ | ||
80 | __u16 ihcpu; /* 0x0052 */ | ||
81 | __u8 reserved54[2]; /* 0x0054 */ | ||
82 | __u16 ipa; /* 0x0056 */ | ||
83 | __u32 ipb; /* 0x0058 */ | ||
84 | __u32 scaoh; /* 0x005c */ | ||
85 | __u8 reserved60; /* 0x0060 */ | ||
86 | __u8 ecb; /* 0x0061 */ | ||
87 | __u8 reserved62[2]; /* 0x0062 */ | ||
88 | __u32 scaol; /* 0x0064 */ | ||
89 | __u8 reserved68[4]; /* 0x0068 */ | ||
90 | __u32 todpr; /* 0x006c */ | ||
91 | __u8 reserved70[16]; /* 0x0070 */ | ||
92 | __u64 gmsor; /* 0x0080 */ | ||
93 | __u64 gmslm; /* 0x0088 */ | ||
94 | psw_t gpsw; /* 0x0090 */ | ||
95 | __u64 gg14; /* 0x00a0 */ | ||
96 | __u64 gg15; /* 0x00a8 */ | ||
97 | __u8 reservedb0[30]; /* 0x00b0 */ | ||
98 | __u16 iprcc; /* 0x00ce */ | ||
99 | __u8 reservedd0[48]; /* 0x00d0 */ | ||
100 | __u64 gcr[16]; /* 0x0100 */ | ||
101 | __u64 gbea; /* 0x0180 */ | ||
102 | __u8 reserved188[120]; /* 0x0188 */ | ||
103 | } __attribute__((packed)); | ||
104 | |||
105 | struct kvm_vcpu_stat { | ||
106 | u32 exit_userspace; | ||
107 | u32 exit_external_request; | ||
108 | u32 exit_external_interrupt; | ||
109 | u32 exit_stop_request; | ||
110 | u32 exit_validity; | ||
111 | u32 exit_instruction; | ||
112 | u32 instruction_lctl; | ||
113 | u32 instruction_lctg; | ||
114 | u32 exit_program_interruption; | ||
115 | u32 exit_instr_and_program; | ||
116 | u32 deliver_emergency_signal; | ||
117 | u32 deliver_service_signal; | ||
118 | u32 deliver_virtio_interrupt; | ||
119 | u32 deliver_stop_signal; | ||
120 | u32 deliver_prefix_signal; | ||
121 | u32 deliver_restart_signal; | ||
122 | u32 deliver_program_int; | ||
123 | u32 exit_wait_state; | ||
124 | u32 instruction_stidp; | ||
125 | u32 instruction_spx; | ||
126 | u32 instruction_stpx; | ||
127 | u32 instruction_stap; | ||
128 | u32 instruction_storage_key; | ||
129 | u32 instruction_stsch; | ||
130 | u32 instruction_chsc; | ||
131 | u32 instruction_stsi; | ||
132 | u32 instruction_stfl; | ||
133 | u32 instruction_sigp_sense; | ||
134 | u32 instruction_sigp_emergency; | ||
135 | u32 instruction_sigp_stop; | ||
136 | u32 instruction_sigp_arch; | ||
137 | u32 instruction_sigp_prefix; | ||
138 | u32 instruction_sigp_restart; | ||
139 | u32 diagnose_44; | ||
140 | }; | ||
141 | |||
142 | struct io_info { | ||
143 | __u16 subchannel_id; /* 0x0b8 */ | ||
144 | __u16 subchannel_nr; /* 0x0ba */ | ||
145 | __u32 io_int_parm; /* 0x0bc */ | ||
146 | __u32 io_int_word; /* 0x0c0 */ | ||
147 | }; | ||
148 | |||
149 | struct ext_info { | ||
150 | __u32 ext_params; | ||
151 | __u64 ext_params2; | ||
152 | }; | ||
153 | |||
154 | #define PGM_OPERATION 0x01 | ||
155 | #define PGM_PRIVILEGED_OPERATION 0x02 | ||
156 | #define PGM_EXECUTE 0x03 | ||
157 | #define PGM_PROTECTION 0x04 | ||
158 | #define PGM_ADDRESSING 0x05 | ||
159 | #define PGM_SPECIFICATION 0x06 | ||
160 | #define PGM_DATA 0x07 | ||
161 | |||
162 | struct pgm_info { | ||
163 | __u16 code; | ||
164 | }; | ||
165 | |||
166 | struct prefix_info { | ||
167 | __u32 address; | ||
168 | }; | ||
169 | |||
170 | struct interrupt_info { | ||
171 | struct list_head list; | ||
172 | u64 type; | ||
173 | union { | ||
174 | struct io_info io; | ||
175 | struct ext_info ext; | ||
176 | struct pgm_info pgm; | ||
177 | struct prefix_info prefix; | ||
178 | }; | ||
179 | }; | ||
180 | |||
181 | /* for local_interrupt.action_flags */ | ||
182 | #define ACTION_STORE_ON_STOP 1 | ||
183 | #define ACTION_STOP_ON_STOP 2 | ||
184 | |||
185 | struct local_interrupt { | ||
186 | spinlock_t lock; | ||
187 | struct list_head list; | ||
188 | atomic_t active; | ||
189 | struct float_interrupt *float_int; | ||
190 | int timer_due; /* event indicator for waitqueue below */ | ||
191 | wait_queue_head_t wq; | ||
192 | atomic_t *cpuflags; | ||
193 | unsigned int action_bits; | ||
194 | }; | ||
195 | |||
196 | struct float_interrupt { | ||
197 | spinlock_t lock; | ||
198 | struct list_head list; | ||
199 | atomic_t active; | ||
200 | int next_rr_cpu; | ||
201 | unsigned long idle_mask [(64 + sizeof(long) - 1) / sizeof(long)]; | ||
202 | struct local_interrupt *local_int[64]; | ||
203 | }; | ||
204 | |||
205 | |||
206 | struct kvm_vcpu_arch { | ||
207 | struct sie_block *sie_block; | ||
208 | unsigned long guest_gprs[16]; | ||
209 | s390_fp_regs host_fpregs; | ||
210 | unsigned int host_acrs[NUM_ACRS]; | ||
211 | s390_fp_regs guest_fpregs; | ||
212 | unsigned int guest_acrs[NUM_ACRS]; | ||
213 | struct local_interrupt local_int; | ||
214 | struct timer_list ckc_timer; | ||
215 | union { | ||
216 | cpuid_t cpu_id; | ||
217 | u64 stidp_data; | ||
218 | }; | ||
219 | }; | ||
220 | |||
221 | struct kvm_vm_stat { | ||
222 | u32 remote_tlb_flush; | ||
223 | }; | ||
224 | |||
225 | struct kvm_arch{ | ||
226 | unsigned long guest_origin; | ||
227 | unsigned long guest_memsize; | ||
228 | struct sca_block *sca; | ||
229 | debug_info_t *dbf; | ||
230 | struct float_interrupt float_int; | ||
231 | }; | ||
232 | |||
233 | extern int sie64a(struct sie_block *, __u64 *); | ||
234 | #endif | ||
diff --git a/include/asm-s390/kvm_para.h b/include/asm-s390/kvm_para.h new file mode 100644 index 000000000000..2c503796b619 --- /dev/null +++ b/include/asm-s390/kvm_para.h | |||
@@ -0,0 +1,150 @@ | |||
1 | /* | ||
2 | * asm-s390/kvm_para.h - definition for paravirtual devices on s390 | ||
3 | * | ||
4 | * Copyright IBM Corp. 2008 | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License (version 2 only) | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | ||
11 | */ | ||
12 | |||
13 | #ifndef __S390_KVM_PARA_H | ||
14 | #define __S390_KVM_PARA_H | ||
15 | |||
16 | /* | ||
17 | * Hypercalls for KVM on s390. The calling convention is similar to the | ||
18 | * s390 ABI, so we use R2-R6 for parameters 1-5. In addition we use R1 | ||
19 | * as hypercall number and R7 as parameter 6. The return value is | ||
20 | * written to R2. We use the diagnose instruction as hypercall. To avoid | ||
21 | * conflicts with existing diagnoses for LPAR and z/VM, we do not use | ||
22 | * the instruction encoded number, but specify the number in R1 and | ||
23 | * use 0x500 as KVM hypercall | ||
24 | * | ||
25 | * Copyright IBM Corp. 2007,2008 | ||
26 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | ||
27 | * | ||
28 | * This work is licensed under the terms of the GNU GPL, version 2. | ||
29 | */ | ||
30 | |||
31 | static inline long kvm_hypercall0(unsigned long nr) | ||
32 | { | ||
33 | register unsigned long __nr asm("1") = nr; | ||
34 | register long __rc asm("2"); | ||
35 | |||
36 | asm volatile ("diag 2,4,0x500\n" | ||
37 | : "=d" (__rc) : "d" (__nr): "memory", "cc"); | ||
38 | return __rc; | ||
39 | } | ||
40 | |||
41 | static inline long kvm_hypercall1(unsigned long nr, unsigned long p1) | ||
42 | { | ||
43 | register unsigned long __nr asm("1") = nr; | ||
44 | register unsigned long __p1 asm("2") = p1; | ||
45 | register long __rc asm("2"); | ||
46 | |||
47 | asm volatile ("diag 2,4,0x500\n" | ||
48 | : "=d" (__rc) : "d" (__nr), "0" (__p1) : "memory", "cc"); | ||
49 | return __rc; | ||
50 | } | ||
51 | |||
52 | static inline long kvm_hypercall2(unsigned long nr, unsigned long p1, | ||
53 | unsigned long p2) | ||
54 | { | ||
55 | register unsigned long __nr asm("1") = nr; | ||
56 | register unsigned long __p1 asm("2") = p1; | ||
57 | register unsigned long __p2 asm("3") = p2; | ||
58 | register long __rc asm("2"); | ||
59 | |||
60 | asm volatile ("diag 2,4,0x500\n" | ||
61 | : "=d" (__rc) : "d" (__nr), "0" (__p1), "d" (__p2) | ||
62 | : "memory", "cc"); | ||
63 | return __rc; | ||
64 | } | ||
65 | |||
66 | static inline long kvm_hypercall3(unsigned long nr, unsigned long p1, | ||
67 | unsigned long p2, unsigned long p3) | ||
68 | { | ||
69 | register unsigned long __nr asm("1") = nr; | ||
70 | register unsigned long __p1 asm("2") = p1; | ||
71 | register unsigned long __p2 asm("3") = p2; | ||
72 | register unsigned long __p3 asm("4") = p3; | ||
73 | register long __rc asm("2"); | ||
74 | |||
75 | asm volatile ("diag 2,4,0x500\n" | ||
76 | : "=d" (__rc) : "d" (__nr), "0" (__p1), "d" (__p2), | ||
77 | "d" (__p3) : "memory", "cc"); | ||
78 | return __rc; | ||
79 | } | ||
80 | |||
81 | |||
82 | static inline long kvm_hypercall4(unsigned long nr, unsigned long p1, | ||
83 | unsigned long p2, unsigned long p3, | ||
84 | unsigned long p4) | ||
85 | { | ||
86 | register unsigned long __nr asm("1") = nr; | ||
87 | register unsigned long __p1 asm("2") = p1; | ||
88 | register unsigned long __p2 asm("3") = p2; | ||
89 | register unsigned long __p3 asm("4") = p3; | ||
90 | register unsigned long __p4 asm("5") = p4; | ||
91 | register long __rc asm("2"); | ||
92 | |||
93 | asm volatile ("diag 2,4,0x500\n" | ||
94 | : "=d" (__rc) : "d" (__nr), "0" (__p1), "d" (__p2), | ||
95 | "d" (__p3), "d" (__p4) : "memory", "cc"); | ||
96 | return __rc; | ||
97 | } | ||
98 | |||
99 | static inline long kvm_hypercall5(unsigned long nr, unsigned long p1, | ||
100 | unsigned long p2, unsigned long p3, | ||
101 | unsigned long p4, unsigned long p5) | ||
102 | { | ||
103 | register unsigned long __nr asm("1") = nr; | ||
104 | register unsigned long __p1 asm("2") = p1; | ||
105 | register unsigned long __p2 asm("3") = p2; | ||
106 | register unsigned long __p3 asm("4") = p3; | ||
107 | register unsigned long __p4 asm("5") = p4; | ||
108 | register unsigned long __p5 asm("6") = p5; | ||
109 | register long __rc asm("2"); | ||
110 | |||
111 | asm volatile ("diag 2,4,0x500\n" | ||
112 | : "=d" (__rc) : "d" (__nr), "0" (__p1), "d" (__p2), | ||
113 | "d" (__p3), "d" (__p4), "d" (__p5) : "memory", "cc"); | ||
114 | return __rc; | ||
115 | } | ||
116 | |||
117 | static inline long kvm_hypercall6(unsigned long nr, unsigned long p1, | ||
118 | unsigned long p2, unsigned long p3, | ||
119 | unsigned long p4, unsigned long p5, | ||
120 | unsigned long p6) | ||
121 | { | ||
122 | register unsigned long __nr asm("1") = nr; | ||
123 | register unsigned long __p1 asm("2") = p1; | ||
124 | register unsigned long __p2 asm("3") = p2; | ||
125 | register unsigned long __p3 asm("4") = p3; | ||
126 | register unsigned long __p4 asm("5") = p4; | ||
127 | register unsigned long __p5 asm("6") = p5; | ||
128 | register unsigned long __p6 asm("7") = p6; | ||
129 | register long __rc asm("2"); | ||
130 | |||
131 | asm volatile ("diag 2,4,0x500\n" | ||
132 | : "=d" (__rc) : "d" (__nr), "0" (__p1), "d" (__p2), | ||
133 | "d" (__p3), "d" (__p4), "d" (__p5), "d" (__p6) | ||
134 | : "memory", "cc"); | ||
135 | return __rc; | ||
136 | } | ||
137 | |||
138 | /* kvm on s390 is always paravirtualization enabled */ | ||
139 | static inline int kvm_para_available(void) | ||
140 | { | ||
141 | return 1; | ||
142 | } | ||
143 | |||
144 | /* No feature bits are currently assigned for kvm on s390 */ | ||
145 | static inline unsigned int kvm_arch_para_features(void) | ||
146 | { | ||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | #endif /* __S390_KVM_PARA_H */ | ||
diff --git a/include/asm-s390/kvm_virtio.h b/include/asm-s390/kvm_virtio.h new file mode 100644 index 000000000000..5c871a990c29 --- /dev/null +++ b/include/asm-s390/kvm_virtio.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * kvm_virtio.h - definition for virtio for kvm on s390 | ||
3 | * | ||
4 | * Copyright IBM Corp. 2008 | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License (version 2 only) | ||
8 | * as published by the Free Software Foundation. | ||
9 | * | ||
10 | * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> | ||
11 | */ | ||
12 | |||
13 | #ifndef __KVM_S390_VIRTIO_H | ||
14 | #define __KVM_S390_VIRTIO_H | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | |||
18 | struct kvm_device_desc { | ||
19 | /* The device type: console, network, disk etc. Type 0 terminates. */ | ||
20 | __u8 type; | ||
21 | /* The number of virtqueues (first in config array) */ | ||
22 | __u8 num_vq; | ||
23 | /* | ||
24 | * The number of bytes of feature bits. Multiply by 2: one for host | ||
25 | * features and one for guest acknowledgements. | ||
26 | */ | ||
27 | __u8 feature_len; | ||
28 | /* The number of bytes of the config array after virtqueues. */ | ||
29 | __u8 config_len; | ||
30 | /* A status byte, written by the Guest. */ | ||
31 | __u8 status; | ||
32 | __u8 config[0]; | ||
33 | }; | ||
34 | |||
35 | /* | ||
36 | * This is how we expect the device configuration field for a virtqueue | ||
37 | * to be laid out in config space. | ||
38 | */ | ||
39 | struct kvm_vqconfig { | ||
40 | /* The token returned with an interrupt. Set by the guest */ | ||
41 | __u64 token; | ||
42 | /* The address of the virtio ring */ | ||
43 | __u64 address; | ||
44 | /* The number of entries in the virtio_ring */ | ||
45 | __u16 num; | ||
46 | |||
47 | }; | ||
48 | |||
49 | #define KVM_S390_VIRTIO_NOTIFY 0 | ||
50 | #define KVM_S390_VIRTIO_RESET 1 | ||
51 | #define KVM_S390_VIRTIO_SET_STATUS 2 | ||
52 | |||
53 | #endif | ||
diff --git a/include/asm-s390/lowcore.h b/include/asm-s390/lowcore.h index 5de3efb31445..0bc51d52a899 100644 --- a/include/asm-s390/lowcore.h +++ b/include/asm-s390/lowcore.h | |||
@@ -381,27 +381,32 @@ struct _lowcore | |||
381 | /* whether the kernel died with panic() or not */ | 381 | /* whether the kernel died with panic() or not */ |
382 | __u32 panic_magic; /* 0xe00 */ | 382 | __u32 panic_magic; /* 0xe00 */ |
383 | 383 | ||
384 | __u8 pad13[0x1200-0xe04]; /* 0xe04 */ | 384 | __u8 pad13[0x11b8-0xe04]; /* 0xe04 */ |
385 | |||
386 | /* 64 bit extparam used for pfault, diag 250 etc */ | ||
387 | __u64 ext_params2; /* 0x11B8 */ | ||
388 | |||
389 | __u8 pad14[0x1200-0x11C0]; /* 0x11C0 */ | ||
385 | 390 | ||
386 | /* System info area */ | 391 | /* System info area */ |
387 | 392 | ||
388 | __u64 floating_pt_save_area[16]; /* 0x1200 */ | 393 | __u64 floating_pt_save_area[16]; /* 0x1200 */ |
389 | __u64 gpregs_save_area[16]; /* 0x1280 */ | 394 | __u64 gpregs_save_area[16]; /* 0x1280 */ |
390 | __u32 st_status_fixed_logout[4]; /* 0x1300 */ | 395 | __u32 st_status_fixed_logout[4]; /* 0x1300 */ |
391 | __u8 pad14[0x1318-0x1310]; /* 0x1310 */ | 396 | __u8 pad15[0x1318-0x1310]; /* 0x1310 */ |
392 | __u32 prefixreg_save_area; /* 0x1318 */ | 397 | __u32 prefixreg_save_area; /* 0x1318 */ |
393 | __u32 fpt_creg_save_area; /* 0x131c */ | 398 | __u32 fpt_creg_save_area; /* 0x131c */ |
394 | __u8 pad15[0x1324-0x1320]; /* 0x1320 */ | 399 | __u8 pad16[0x1324-0x1320]; /* 0x1320 */ |
395 | __u32 tod_progreg_save_area; /* 0x1324 */ | 400 | __u32 tod_progreg_save_area; /* 0x1324 */ |
396 | __u32 cpu_timer_save_area[2]; /* 0x1328 */ | 401 | __u32 cpu_timer_save_area[2]; /* 0x1328 */ |
397 | __u32 clock_comp_save_area[2]; /* 0x1330 */ | 402 | __u32 clock_comp_save_area[2]; /* 0x1330 */ |
398 | __u8 pad16[0x1340-0x1338]; /* 0x1338 */ | 403 | __u8 pad17[0x1340-0x1338]; /* 0x1338 */ |
399 | __u32 access_regs_save_area[16]; /* 0x1340 */ | 404 | __u32 access_regs_save_area[16]; /* 0x1340 */ |
400 | __u64 cregs_save_area[16]; /* 0x1380 */ | 405 | __u64 cregs_save_area[16]; /* 0x1380 */ |
401 | 406 | ||
402 | /* align to the top of the prefix area */ | 407 | /* align to the top of the prefix area */ |
403 | 408 | ||
404 | __u8 pad17[0x2000-0x1400]; /* 0x1400 */ | 409 | __u8 pad18[0x2000-0x1400]; /* 0x1400 */ |
405 | #endif /* !__s390x__ */ | 410 | #endif /* !__s390x__ */ |
406 | } __attribute__((packed)); /* End structure*/ | 411 | } __attribute__((packed)); /* End structure*/ |
407 | 412 | ||
diff --git a/include/asm-s390/mmu.h b/include/asm-s390/mmu.h index 1698e29c5b20..5dd5e7b3476f 100644 --- a/include/asm-s390/mmu.h +++ b/include/asm-s390/mmu.h | |||
@@ -7,6 +7,7 @@ typedef struct { | |||
7 | unsigned long asce_bits; | 7 | unsigned long asce_bits; |
8 | unsigned long asce_limit; | 8 | unsigned long asce_limit; |
9 | int noexec; | 9 | int noexec; |
10 | int pgstes; | ||
10 | } mm_context_t; | 11 | } mm_context_t; |
11 | 12 | ||
12 | #endif | 13 | #endif |
diff --git a/include/asm-s390/mmu_context.h b/include/asm-s390/mmu_context.h index b5a34c6f91a9..4c2fbf48c9c4 100644 --- a/include/asm-s390/mmu_context.h +++ b/include/asm-s390/mmu_context.h | |||
@@ -20,7 +20,13 @@ static inline int init_new_context(struct task_struct *tsk, | |||
20 | #ifdef CONFIG_64BIT | 20 | #ifdef CONFIG_64BIT |
21 | mm->context.asce_bits |= _ASCE_TYPE_REGION3; | 21 | mm->context.asce_bits |= _ASCE_TYPE_REGION3; |
22 | #endif | 22 | #endif |
23 | mm->context.noexec = s390_noexec; | 23 | if (current->mm->context.pgstes) { |
24 | mm->context.noexec = 0; | ||
25 | mm->context.pgstes = 1; | ||
26 | } else { | ||
27 | mm->context.noexec = s390_noexec; | ||
28 | mm->context.pgstes = 0; | ||
29 | } | ||
24 | mm->context.asce_limit = STACK_TOP_MAX; | 30 | mm->context.asce_limit = STACK_TOP_MAX; |
25 | crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm)); | 31 | crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm)); |
26 | return 0; | 32 | return 0; |
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index 65154dc9a9e5..f8347ce9c5a1 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
@@ -30,6 +30,7 @@ | |||
30 | */ | 30 | */ |
31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
32 | #include <linux/mm_types.h> | 32 | #include <linux/mm_types.h> |
33 | #include <asm/bitops.h> | ||
33 | #include <asm/bug.h> | 34 | #include <asm/bug.h> |
34 | #include <asm/processor.h> | 35 | #include <asm/processor.h> |
35 | 36 | ||
@@ -219,6 +220,8 @@ extern char empty_zero_page[PAGE_SIZE]; | |||
219 | /* Software bits in the page table entry */ | 220 | /* Software bits in the page table entry */ |
220 | #define _PAGE_SWT 0x001 /* SW pte type bit t */ | 221 | #define _PAGE_SWT 0x001 /* SW pte type bit t */ |
221 | #define _PAGE_SWX 0x002 /* SW pte type bit x */ | 222 | #define _PAGE_SWX 0x002 /* SW pte type bit x */ |
223 | #define _PAGE_SPECIAL 0x004 /* SW associated with special page */ | ||
224 | #define __HAVE_ARCH_PTE_SPECIAL | ||
222 | 225 | ||
223 | /* Six different types of pages. */ | 226 | /* Six different types of pages. */ |
224 | #define _PAGE_TYPE_EMPTY 0x400 | 227 | #define _PAGE_TYPE_EMPTY 0x400 |
@@ -258,6 +261,13 @@ extern char empty_zero_page[PAGE_SIZE]; | |||
258 | * swap pte is 1011 and 0001, 0011, 0101, 0111 are invalid. | 261 | * swap pte is 1011 and 0001, 0011, 0101, 0111 are invalid. |
259 | */ | 262 | */ |
260 | 263 | ||
264 | /* Page status table bits for virtualization */ | ||
265 | #define RCP_PCL_BIT 55 | ||
266 | #define RCP_HR_BIT 54 | ||
267 | #define RCP_HC_BIT 53 | ||
268 | #define RCP_GR_BIT 50 | ||
269 | #define RCP_GC_BIT 49 | ||
270 | |||
261 | #ifndef __s390x__ | 271 | #ifndef __s390x__ |
262 | 272 | ||
263 | /* Bits in the segment table address-space-control-element */ | 273 | /* Bits in the segment table address-space-control-element */ |
@@ -510,9 +520,56 @@ static inline int pte_file(pte_t pte) | |||
510 | return (pte_val(pte) & mask) == _PAGE_TYPE_FILE; | 520 | return (pte_val(pte) & mask) == _PAGE_TYPE_FILE; |
511 | } | 521 | } |
512 | 522 | ||
523 | static inline int pte_special(pte_t pte) | ||
524 | { | ||
525 | return (pte_val(pte) & _PAGE_SPECIAL); | ||
526 | } | ||
527 | |||
513 | #define __HAVE_ARCH_PTE_SAME | 528 | #define __HAVE_ARCH_PTE_SAME |
514 | #define pte_same(a,b) (pte_val(a) == pte_val(b)) | 529 | #define pte_same(a,b) (pte_val(a) == pte_val(b)) |
515 | 530 | ||
531 | static inline void rcp_lock(pte_t *ptep) | ||
532 | { | ||
533 | #ifdef CONFIG_PGSTE | ||
534 | unsigned long *pgste = (unsigned long *) (ptep + PTRS_PER_PTE); | ||
535 | preempt_disable(); | ||
536 | while (test_and_set_bit(RCP_PCL_BIT, pgste)) | ||
537 | ; | ||
538 | #endif | ||
539 | } | ||
540 | |||
541 | static inline void rcp_unlock(pte_t *ptep) | ||
542 | { | ||
543 | #ifdef CONFIG_PGSTE | ||
544 | unsigned long *pgste = (unsigned long *) (ptep + PTRS_PER_PTE); | ||
545 | clear_bit(RCP_PCL_BIT, pgste); | ||
546 | preempt_enable(); | ||
547 | #endif | ||
548 | } | ||
549 | |||
550 | /* forward declaration for SetPageUptodate in page-flags.h*/ | ||
551 | static inline void page_clear_dirty(struct page *page); | ||
552 | #include <linux/page-flags.h> | ||
553 | |||
554 | static inline void ptep_rcp_copy(pte_t *ptep) | ||
555 | { | ||
556 | #ifdef CONFIG_PGSTE | ||
557 | struct page *page = virt_to_page(pte_val(*ptep)); | ||
558 | unsigned int skey; | ||
559 | unsigned long *pgste = (unsigned long *) (ptep + PTRS_PER_PTE); | ||
560 | |||
561 | skey = page_get_storage_key(page_to_phys(page)); | ||
562 | if (skey & _PAGE_CHANGED) | ||
563 | set_bit_simple(RCP_GC_BIT, pgste); | ||
564 | if (skey & _PAGE_REFERENCED) | ||
565 | set_bit_simple(RCP_GR_BIT, pgste); | ||
566 | if (test_and_clear_bit_simple(RCP_HC_BIT, pgste)) | ||
567 | SetPageDirty(page); | ||
568 | if (test_and_clear_bit_simple(RCP_HR_BIT, pgste)) | ||
569 | SetPageReferenced(page); | ||
570 | #endif | ||
571 | } | ||
572 | |||
516 | /* | 573 | /* |
517 | * query functions pte_write/pte_dirty/pte_young only work if | 574 | * query functions pte_write/pte_dirty/pte_young only work if |
518 | * pte_present() is true. Undefined behaviour if not.. | 575 | * pte_present() is true. Undefined behaviour if not.. |
@@ -599,6 +656,8 @@ static inline void pmd_clear(pmd_t *pmd) | |||
599 | 656 | ||
600 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) | 657 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) |
601 | { | 658 | { |
659 | if (mm->context.pgstes) | ||
660 | ptep_rcp_copy(ptep); | ||
602 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; | 661 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; |
603 | if (mm->context.noexec) | 662 | if (mm->context.noexec) |
604 | pte_val(ptep[PTRS_PER_PTE]) = _PAGE_TYPE_EMPTY; | 663 | pte_val(ptep[PTRS_PER_PTE]) = _PAGE_TYPE_EMPTY; |
@@ -663,10 +722,34 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
663 | return pte; | 722 | return pte; |
664 | } | 723 | } |
665 | 724 | ||
725 | static inline pte_t pte_mkspecial(pte_t pte) | ||
726 | { | ||
727 | pte_val(pte) |= _PAGE_SPECIAL; | ||
728 | return pte; | ||
729 | } | ||
730 | |||
666 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG | 731 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG |
667 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, | 732 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, |
668 | unsigned long addr, pte_t *ptep) | 733 | unsigned long addr, pte_t *ptep) |
669 | { | 734 | { |
735 | #ifdef CONFIG_PGSTE | ||
736 | unsigned long physpage; | ||
737 | int young; | ||
738 | unsigned long *pgste; | ||
739 | |||
740 | if (!vma->vm_mm->context.pgstes) | ||
741 | return 0; | ||
742 | physpage = pte_val(*ptep) & PAGE_MASK; | ||
743 | pgste = (unsigned long *) (ptep + PTRS_PER_PTE); | ||
744 | |||
745 | young = ((page_get_storage_key(physpage) & _PAGE_REFERENCED) != 0); | ||
746 | rcp_lock(ptep); | ||
747 | if (young) | ||
748 | set_bit_simple(RCP_GR_BIT, pgste); | ||
749 | young |= test_and_clear_bit_simple(RCP_HR_BIT, pgste); | ||
750 | rcp_unlock(ptep); | ||
751 | return young; | ||
752 | #endif | ||
670 | return 0; | 753 | return 0; |
671 | } | 754 | } |
672 | 755 | ||
@@ -674,7 +757,13 @@ static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, | |||
674 | static inline int ptep_clear_flush_young(struct vm_area_struct *vma, | 757 | static inline int ptep_clear_flush_young(struct vm_area_struct *vma, |
675 | unsigned long address, pte_t *ptep) | 758 | unsigned long address, pte_t *ptep) |
676 | { | 759 | { |
677 | /* No need to flush TLB; bits are in storage key */ | 760 | /* No need to flush TLB |
761 | * On s390 reference bits are in storage key and never in TLB | ||
762 | * With virtualization we handle the reference bit, without we | ||
763 | * we can simply return */ | ||
764 | #ifdef CONFIG_PGSTE | ||
765 | return ptep_test_and_clear_young(vma, address, ptep); | ||
766 | #endif | ||
678 | return 0; | 767 | return 0; |
679 | } | 768 | } |
680 | 769 | ||
@@ -693,15 +782,25 @@ static inline void __ptep_ipte(unsigned long address, pte_t *ptep) | |||
693 | : "=m" (*ptep) : "m" (*ptep), | 782 | : "=m" (*ptep) : "m" (*ptep), |
694 | "a" (pto), "a" (address)); | 783 | "a" (pto), "a" (address)); |
695 | } | 784 | } |
696 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; | ||
697 | } | 785 | } |
698 | 786 | ||
699 | static inline void ptep_invalidate(struct mm_struct *mm, | 787 | static inline void ptep_invalidate(struct mm_struct *mm, |
700 | unsigned long address, pte_t *ptep) | 788 | unsigned long address, pte_t *ptep) |
701 | { | 789 | { |
790 | if (mm->context.pgstes) { | ||
791 | rcp_lock(ptep); | ||
792 | __ptep_ipte(address, ptep); | ||
793 | ptep_rcp_copy(ptep); | ||
794 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; | ||
795 | rcp_unlock(ptep); | ||
796 | return; | ||
797 | } | ||
702 | __ptep_ipte(address, ptep); | 798 | __ptep_ipte(address, ptep); |
703 | if (mm->context.noexec) | 799 | pte_val(*ptep) = _PAGE_TYPE_EMPTY; |
800 | if (mm->context.noexec) { | ||
704 | __ptep_ipte(address, ptep + PTRS_PER_PTE); | 801 | __ptep_ipte(address, ptep + PTRS_PER_PTE); |
802 | pte_val(*(ptep + PTRS_PER_PTE)) = _PAGE_TYPE_EMPTY; | ||
803 | } | ||
705 | } | 804 | } |
706 | 805 | ||
707 | /* | 806 | /* |
@@ -966,6 +1065,7 @@ static inline pte_t mk_swap_pte(unsigned long type, unsigned long offset) | |||
966 | 1065 | ||
967 | extern int add_shared_memory(unsigned long start, unsigned long size); | 1066 | extern int add_shared_memory(unsigned long start, unsigned long size); |
968 | extern int remove_shared_memory(unsigned long start, unsigned long size); | 1067 | extern int remove_shared_memory(unsigned long start, unsigned long size); |
1068 | extern int s390_enable_sie(void); | ||
969 | 1069 | ||
970 | /* | 1070 | /* |
971 | * No page table caches to initialise | 1071 | * No page table caches to initialise |
diff --git a/include/asm-s390/setup.h b/include/asm-s390/setup.h index a76a6b8fd887..aaf4b518b940 100644 --- a/include/asm-s390/setup.h +++ b/include/asm-s390/setup.h | |||
@@ -62,6 +62,7 @@ extern unsigned long machine_flags; | |||
62 | #define MACHINE_IS_VM (machine_flags & 1) | 62 | #define MACHINE_IS_VM (machine_flags & 1) |
63 | #define MACHINE_IS_P390 (machine_flags & 4) | 63 | #define MACHINE_IS_P390 (machine_flags & 4) |
64 | #define MACHINE_HAS_MVPG (machine_flags & 16) | 64 | #define MACHINE_HAS_MVPG (machine_flags & 16) |
65 | #define MACHINE_IS_KVM (machine_flags & 64) | ||
65 | #define MACHINE_HAS_IDTE (machine_flags & 128) | 66 | #define MACHINE_HAS_IDTE (machine_flags & 128) |
66 | #define MACHINE_HAS_DIAG9C (machine_flags & 256) | 67 | #define MACHINE_HAS_DIAG9C (machine_flags & 256) |
67 | 68 | ||
diff --git a/include/asm-s390/unaligned.h b/include/asm-s390/unaligned.h index 8ee86dbedd1f..da9627afe5d8 100644 --- a/include/asm-s390/unaligned.h +++ b/include/asm-s390/unaligned.h | |||
@@ -1,24 +1,13 @@ | |||
1 | /* | 1 | #ifndef _ASM_S390_UNALIGNED_H |
2 | * include/asm-s390/unaligned.h | 2 | #define _ASM_S390_UNALIGNED_H |
3 | * | ||
4 | * S390 version | ||
5 | * | ||
6 | * Derived from "include/asm-i386/unaligned.h" | ||
7 | */ | ||
8 | |||
9 | #ifndef __S390_UNALIGNED_H | ||
10 | #define __S390_UNALIGNED_H | ||
11 | 3 | ||
12 | /* | 4 | /* |
13 | * The S390 can do unaligned accesses itself. | 5 | * The S390 can do unaligned accesses itself. |
14 | * | ||
15 | * The strange macros are there to make sure these can't | ||
16 | * be misused in a way that makes them not work on other | ||
17 | * architectures where unaligned accesses aren't as simple. | ||
18 | */ | 6 | */ |
7 | #include <linux/unaligned/access_ok.h> | ||
8 | #include <linux/unaligned/generic.h> | ||
19 | 9 | ||
20 | #define get_unaligned(ptr) (*(ptr)) | 10 | #define get_unaligned __get_unaligned_be |
21 | 11 | #define put_unaligned __put_unaligned_be | |
22 | #define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) | ||
23 | 12 | ||
24 | #endif | 13 | #endif /* _ASM_S390_UNALIGNED_H */ |
diff --git a/include/asm-sh/bitops.h b/include/asm-sh/bitops.h index b6ba5a60dec2..d7d382f63ee5 100644 --- a/include/asm-sh/bitops.h +++ b/include/asm-sh/bitops.h | |||
@@ -95,6 +95,7 @@ static inline unsigned long ffz(unsigned long word) | |||
95 | #include <asm-generic/bitops/ext2-atomic.h> | 95 | #include <asm-generic/bitops/ext2-atomic.h> |
96 | #include <asm-generic/bitops/minix.h> | 96 | #include <asm-generic/bitops/minix.h> |
97 | #include <asm-generic/bitops/fls.h> | 97 | #include <asm-generic/bitops/fls.h> |
98 | #include <asm-generic/bitops/__fls.h> | ||
98 | #include <asm-generic/bitops/fls64.h> | 99 | #include <asm-generic/bitops/fls64.h> |
99 | 100 | ||
100 | #endif /* __KERNEL__ */ | 101 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-sh/hugetlb.h b/include/asm-sh/hugetlb.h new file mode 100644 index 000000000000..02402303d89b --- /dev/null +++ b/include/asm-sh/hugetlb.h | |||
@@ -0,0 +1,91 @@ | |||
1 | #ifndef _ASM_SH_HUGETLB_H | ||
2 | #define _ASM_SH_HUGETLB_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | |||
6 | |||
7 | static inline int is_hugepage_only_range(struct mm_struct *mm, | ||
8 | unsigned long addr, | ||
9 | unsigned long len) { | ||
10 | return 0; | ||
11 | } | ||
12 | |||
13 | /* | ||
14 | * If the arch doesn't supply something else, assume that hugepage | ||
15 | * size aligned regions are ok without further preparation. | ||
16 | */ | ||
17 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | ||
18 | { | ||
19 | if (len & ~HPAGE_MASK) | ||
20 | return -EINVAL; | ||
21 | if (addr & ~HPAGE_MASK) | ||
22 | return -EINVAL; | ||
23 | return 0; | ||
24 | } | ||
25 | |||
26 | static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) { | ||
27 | } | ||
28 | |||
29 | static inline void hugetlb_free_pgd_range(struct mmu_gather **tlb, | ||
30 | unsigned long addr, unsigned long end, | ||
31 | unsigned long floor, | ||
32 | unsigned long ceiling) | ||
33 | { | ||
34 | free_pgd_range(tlb, addr, end, floor, ceiling); | ||
35 | } | ||
36 | |||
37 | static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
38 | pte_t *ptep, pte_t pte) | ||
39 | { | ||
40 | set_pte_at(mm, addr, ptep, pte); | ||
41 | } | ||
42 | |||
43 | static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm, | ||
44 | unsigned long addr, pte_t *ptep) | ||
45 | { | ||
46 | return ptep_get_and_clear(mm, addr, ptep); | ||
47 | } | ||
48 | |||
49 | static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, | ||
50 | unsigned long addr, pte_t *ptep) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | static inline int huge_pte_none(pte_t pte) | ||
55 | { | ||
56 | return pte_none(pte); | ||
57 | } | ||
58 | |||
59 | static inline pte_t huge_pte_wrprotect(pte_t pte) | ||
60 | { | ||
61 | return pte_wrprotect(pte); | ||
62 | } | ||
63 | |||
64 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
65 | unsigned long addr, pte_t *ptep) | ||
66 | { | ||
67 | ptep_set_wrprotect(mm, addr, ptep); | ||
68 | } | ||
69 | |||
70 | static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, | ||
71 | unsigned long addr, pte_t *ptep, | ||
72 | pte_t pte, int dirty) | ||
73 | { | ||
74 | return ptep_set_access_flags(vma, addr, ptep, pte, dirty); | ||
75 | } | ||
76 | |||
77 | static inline pte_t huge_ptep_get(pte_t *ptep) | ||
78 | { | ||
79 | return *ptep; | ||
80 | } | ||
81 | |||
82 | static inline int arch_prepare_hugepage(struct page *page) | ||
83 | { | ||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | static inline void arch_release_hugepage(struct page *page) | ||
88 | { | ||
89 | } | ||
90 | |||
91 | #endif /* _ASM_SH_HUGETLB_H */ | ||
diff --git a/include/asm-sh/pgtable_32.h b/include/asm-sh/pgtable_32.h index 3e3557c53c55..cbc731d35c25 100644 --- a/include/asm-sh/pgtable_32.h +++ b/include/asm-sh/pgtable_32.h | |||
@@ -326,6 +326,7 @@ static inline void set_pte(pte_t *ptep, pte_t pte) | |||
326 | #define pte_dirty(pte) ((pte).pte_low & _PAGE_DIRTY) | 326 | #define pte_dirty(pte) ((pte).pte_low & _PAGE_DIRTY) |
327 | #define pte_young(pte) ((pte).pte_low & _PAGE_ACCESSED) | 327 | #define pte_young(pte) ((pte).pte_low & _PAGE_ACCESSED) |
328 | #define pte_file(pte) ((pte).pte_low & _PAGE_FILE) | 328 | #define pte_file(pte) ((pte).pte_low & _PAGE_FILE) |
329 | #define pte_special(pte) (0) | ||
329 | 330 | ||
330 | #ifdef CONFIG_X2TLB | 331 | #ifdef CONFIG_X2TLB |
331 | #define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE) | 332 | #define pte_write(pte) ((pte).pte_high & _PAGE_EXT_USER_WRITE) |
@@ -356,6 +357,8 @@ PTE_BIT_FUNC(low, mkdirty, |= _PAGE_DIRTY); | |||
356 | PTE_BIT_FUNC(low, mkold, &= ~_PAGE_ACCESSED); | 357 | PTE_BIT_FUNC(low, mkold, &= ~_PAGE_ACCESSED); |
357 | PTE_BIT_FUNC(low, mkyoung, |= _PAGE_ACCESSED); | 358 | PTE_BIT_FUNC(low, mkyoung, |= _PAGE_ACCESSED); |
358 | 359 | ||
360 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
361 | |||
359 | /* | 362 | /* |
360 | * Macro and implementation to make a page protection as uncachable. | 363 | * Macro and implementation to make a page protection as uncachable. |
361 | */ | 364 | */ |
diff --git a/include/asm-sh/pgtable_64.h b/include/asm-sh/pgtable_64.h index f9dd9d311441..c78990cda557 100644 --- a/include/asm-sh/pgtable_64.h +++ b/include/asm-sh/pgtable_64.h | |||
@@ -254,10 +254,11 @@ extern void __handle_bad_pmd_kernel(pmd_t * pmd); | |||
254 | /* | 254 | /* |
255 | * The following have defined behavior only work if pte_present() is true. | 255 | * The following have defined behavior only work if pte_present() is true. |
256 | */ | 256 | */ |
257 | static inline int pte_dirty(pte_t pte){ return pte_val(pte) & _PAGE_DIRTY; } | 257 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
258 | static inline int pte_young(pte_t pte){ return pte_val(pte) & _PAGE_ACCESSED; } | 258 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
259 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 259 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
260 | static inline int pte_write(pte_t pte){ return pte_val(pte) & _PAGE_WRITE; } | 260 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITE; } |
261 | static inline int pte_special(pte_t pte){ return 0; } | ||
261 | 262 | ||
262 | static inline pte_t pte_wrprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_WRITE)); return pte; } | 263 | static inline pte_t pte_wrprotect(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_WRITE)); return pte; } |
263 | static inline pte_t pte_mkclean(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); return pte; } | 264 | static inline pte_t pte_mkclean(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); return pte; } |
@@ -266,6 +267,7 @@ static inline pte_t pte_mkwrite(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | | |||
266 | static inline pte_t pte_mkdirty(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; } | 267 | static inline pte_t pte_mkdirty(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; } |
267 | static inline pte_t pte_mkyoung(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; } | 268 | static inline pte_t pte_mkyoung(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; } |
268 | static inline pte_t pte_mkhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_SZHUGE)); return pte; } | 269 | static inline pte_t pte_mkhuge(pte_t pte) { set_pte(&pte, __pte(pte_val(pte) | _PAGE_SZHUGE)); return pte; } |
270 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | ||
269 | 271 | ||
270 | 272 | ||
271 | /* | 273 | /* |
diff --git a/include/asm-sh/unaligned.h b/include/asm-sh/unaligned.h index 5250e3063b42..c1641a01d50f 100644 --- a/include/asm-sh/unaligned.h +++ b/include/asm-sh/unaligned.h | |||
@@ -1,7 +1,19 @@ | |||
1 | #ifndef __ASM_SH_UNALIGNED_H | 1 | #ifndef _ASM_SH_UNALIGNED_H |
2 | #define __ASM_SH_UNALIGNED_H | 2 | #define _ASM_SH_UNALIGNED_H |
3 | 3 | ||
4 | /* SH can't handle unaligned accesses. */ | 4 | /* SH can't handle unaligned accesses. */ |
5 | #include <asm-generic/unaligned.h> | 5 | #ifdef __LITTLE_ENDIAN__ |
6 | # include <linux/unaligned/le_struct.h> | ||
7 | # include <linux/unaligned/be_byteshift.h> | ||
8 | # include <linux/unaligned/generic.h> | ||
9 | # define get_unaligned __get_unaligned_le | ||
10 | # define put_unaligned __put_unaligned_le | ||
11 | #else | ||
12 | # include <linux/unaligned/be_struct.h> | ||
13 | # include <linux/unaligned/le_byteshift.h> | ||
14 | # include <linux/unaligned/generic.h> | ||
15 | # define get_unaligned __get_unaligned_be | ||
16 | # define put_unaligned __put_unaligned_be | ||
17 | #endif | ||
6 | 18 | ||
7 | #endif /* __ASM_SH_UNALIGNED_H */ | 19 | #endif /* _ASM_SH_UNALIGNED_H */ |
diff --git a/include/asm-sparc/device.h b/include/asm-sparc/device.h index 680e51d87374..19790eb99cc6 100644 --- a/include/asm-sparc/device.h +++ b/include/asm-sparc/device.h | |||
@@ -16,6 +16,8 @@ struct dev_archdata { | |||
16 | 16 | ||
17 | struct device_node *prom_node; | 17 | struct device_node *prom_node; |
18 | struct of_device *op; | 18 | struct of_device *op; |
19 | |||
20 | int numa_node; | ||
19 | }; | 21 | }; |
20 | 22 | ||
21 | #endif /* _ASM_SPARC_DEVICE_H */ | 23 | #endif /* _ASM_SPARC_DEVICE_H */ |
diff --git a/include/asm-sparc/pgtable.h b/include/asm-sparc/pgtable.h index 2cc235b74d94..d84af6d95f5c 100644 --- a/include/asm-sparc/pgtable.h +++ b/include/asm-sparc/pgtable.h | |||
@@ -219,6 +219,11 @@ static inline int pte_file(pte_t pte) | |||
219 | return pte_val(pte) & BTFIXUP_HALF(pte_filei); | 219 | return pte_val(pte) & BTFIXUP_HALF(pte_filei); |
220 | } | 220 | } |
221 | 221 | ||
222 | static inline int pte_special(pte_t pte) | ||
223 | { | ||
224 | return 0; | ||
225 | } | ||
226 | |||
222 | /* | 227 | /* |
223 | */ | 228 | */ |
224 | BTFIXUPDEF_HALF(pte_wrprotecti) | 229 | BTFIXUPDEF_HALF(pte_wrprotecti) |
@@ -251,6 +256,8 @@ BTFIXUPDEF_CALL_CONST(pte_t, pte_mkyoung, pte_t) | |||
251 | #define pte_mkdirty(pte) BTFIXUP_CALL(pte_mkdirty)(pte) | 256 | #define pte_mkdirty(pte) BTFIXUP_CALL(pte_mkdirty)(pte) |
252 | #define pte_mkyoung(pte) BTFIXUP_CALL(pte_mkyoung)(pte) | 257 | #define pte_mkyoung(pte) BTFIXUP_CALL(pte_mkyoung)(pte) |
253 | 258 | ||
259 | #define pte_mkspecial(pte) (pte) | ||
260 | |||
254 | #define pfn_pte(pfn, prot) mk_pte(pfn_to_page(pfn), prot) | 261 | #define pfn_pte(pfn, prot) mk_pte(pfn_to_page(pfn), prot) |
255 | 262 | ||
256 | BTFIXUPDEF_CALL(unsigned long, pte_pfn, pte_t) | 263 | BTFIXUPDEF_CALL(unsigned long, pte_pfn, pte_t) |
diff --git a/include/asm-sparc/processor.h b/include/asm-sparc/processor.h index e3006979709b..8898efbbbe07 100644 --- a/include/asm-sparc/processor.h +++ b/include/asm-sparc/processor.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: processor.h,v 1.83 2001/10/08 09:32:13 davem Exp $ | 1 | /* include/asm-sparc/processor.h |
2 | * include/asm-sparc/processor.h | ||
3 | * | 2 | * |
4 | * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) | 3 | * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) |
5 | */ | 4 | */ |
@@ -65,7 +64,6 @@ struct thread_struct { | |||
65 | struct fpq fpqueue[16]; | 64 | struct fpq fpqueue[16]; |
66 | unsigned long flags; | 65 | unsigned long flags; |
67 | mm_segment_t current_ds; | 66 | mm_segment_t current_ds; |
68 | int new_signal; | ||
69 | }; | 67 | }; |
70 | 68 | ||
71 | #define SPARC_FLAG_KTHREAD 0x1 /* task is a kernel thread */ | 69 | #define SPARC_FLAG_KTHREAD 0x1 /* task is a kernel thread */ |
diff --git a/include/asm-sparc/prom.h b/include/asm-sparc/prom.h index df5dc4422483..fd55522481cd 100644 --- a/include/asm-sparc/prom.h +++ b/include/asm-sparc/prom.h | |||
@@ -77,6 +77,11 @@ extern int of_getintprop_default(struct device_node *np, | |||
77 | const char *name, | 77 | const char *name, |
78 | int def); | 78 | int def); |
79 | extern int of_find_in_proplist(const char *list, const char *match, int len); | 79 | extern int of_find_in_proplist(const char *list, const char *match, int len); |
80 | #ifdef CONFIG_NUMA | ||
81 | extern int of_node_to_nid(struct device_node *dp); | ||
82 | #else | ||
83 | #define of_node_to_nid(dp) (-1) | ||
84 | #endif | ||
80 | 85 | ||
81 | extern void prom_build_devicetree(void); | 86 | extern void prom_build_devicetree(void); |
82 | 87 | ||
diff --git a/include/asm-sparc/unaligned.h b/include/asm-sparc/unaligned.h index b6f8eddd30af..11d2d5fb5902 100644 --- a/include/asm-sparc/unaligned.h +++ b/include/asm-sparc/unaligned.h | |||
@@ -1,6 +1,10 @@ | |||
1 | #ifndef _ASM_SPARC_UNALIGNED_H_ | 1 | #ifndef _ASM_SPARC_UNALIGNED_H |
2 | #define _ASM_SPARC_UNALIGNED_H_ | 2 | #define _ASM_SPARC_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/be_struct.h> |
5 | #include <linux/unaligned/le_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
7 | #define get_unaligned __get_unaligned_be | ||
8 | #define put_unaligned __put_unaligned_be | ||
5 | 9 | ||
6 | #endif /* _ASM_SPARC_UNALIGNED_H */ | 10 | #endif /* _ASM_SPARC_UNALIGNED_H */ |
diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h index 982ce8992b91..11f9d8146cdf 100644 --- a/include/asm-sparc64/bitops.h +++ b/include/asm-sparc64/bitops.h | |||
@@ -34,6 +34,7 @@ extern void change_bit(unsigned long nr, volatile unsigned long *addr); | |||
34 | #include <asm-generic/bitops/ffz.h> | 34 | #include <asm-generic/bitops/ffz.h> |
35 | #include <asm-generic/bitops/__ffs.h> | 35 | #include <asm-generic/bitops/__ffs.h> |
36 | #include <asm-generic/bitops/fls.h> | 36 | #include <asm-generic/bitops/fls.h> |
37 | #include <asm-generic/bitops/__fls.h> | ||
37 | #include <asm-generic/bitops/fls64.h> | 38 | #include <asm-generic/bitops/fls64.h> |
38 | 39 | ||
39 | #ifdef __KERNEL__ | 40 | #ifdef __KERNEL__ |
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h index c47f58d6c15c..ca19f80a9b7d 100644 --- a/include/asm-sparc64/floppy.h +++ b/include/asm-sparc64/floppy.h | |||
@@ -293,7 +293,6 @@ static int sun_fd_eject(int drive) | |||
293 | 293 | ||
294 | #ifdef CONFIG_PCI | 294 | #ifdef CONFIG_PCI |
295 | #include <asm/ebus.h> | 295 | #include <asm/ebus.h> |
296 | #include <asm/isa.h> | ||
297 | #include <asm/ns87303.h> | 296 | #include <asm/ns87303.h> |
298 | 297 | ||
299 | static struct ebus_dma_info sun_pci_fd_ebus_dma; | 298 | static struct ebus_dma_info sun_pci_fd_ebus_dma; |
@@ -558,82 +557,6 @@ static int __init ebus_fdthree_p(struct linux_ebus_device *edev) | |||
558 | } | 557 | } |
559 | #endif | 558 | #endif |
560 | 559 | ||
561 | #ifdef CONFIG_PCI | ||
562 | #undef ISA_FLOPPY_WORKS | ||
563 | |||
564 | #ifdef ISA_FLOPPY_WORKS | ||
565 | static unsigned long __init isa_floppy_init(void) | ||
566 | { | ||
567 | struct sparc_isa_bridge *isa_br; | ||
568 | struct sparc_isa_device *isa_dev = NULL; | ||
569 | |||
570 | for_each_isa(isa_br) { | ||
571 | for_each_isadev(isa_dev, isa_br) { | ||
572 | if (!strcmp(isa_dev->prom_node->name, "dma")) { | ||
573 | struct sparc_isa_device *child = | ||
574 | isa_dev->child; | ||
575 | |||
576 | while (child) { | ||
577 | if (!strcmp(child->prom_node->name, | ||
578 | "floppy")) { | ||
579 | isa_dev = child; | ||
580 | goto isa_done; | ||
581 | } | ||
582 | child = child->next; | ||
583 | } | ||
584 | } | ||
585 | } | ||
586 | } | ||
587 | isa_done: | ||
588 | if (!isa_dev) | ||
589 | return 0; | ||
590 | |||
591 | /* We could use DMA on devices behind the ISA bridge, but... | ||
592 | * | ||
593 | * There is a slight problem. Normally on x86 kit the x86 processor | ||
594 | * delays I/O port instructions when the ISA bus "dma in progress" | ||
595 | * signal is active. Well, sparc64 systems do not monitor this | ||
596 | * signal thus we would need to block all I/O port accesses in software | ||
597 | * when a dma transfer is active for some device. | ||
598 | */ | ||
599 | |||
600 | sun_fdc = (struct sun_flpy_controller *)isa_dev->resource.start; | ||
601 | FLOPPY_IRQ = isa_dev->irq; | ||
602 | |||
603 | sun_fdops.fd_inb = sun_pci_fd_inb; | ||
604 | sun_fdops.fd_outb = sun_pci_fd_outb; | ||
605 | |||
606 | can_use_virtual_dma = use_virtual_dma = 1; | ||
607 | sun_fdops.fd_enable_dma = sun_fd_enable_dma; | ||
608 | sun_fdops.fd_disable_dma = sun_fd_disable_dma; | ||
609 | sun_fdops.fd_set_dma_mode = sun_fd_set_dma_mode; | ||
610 | sun_fdops.fd_set_dma_addr = sun_fd_set_dma_addr; | ||
611 | sun_fdops.fd_set_dma_count = sun_fd_set_dma_count; | ||
612 | sun_fdops.get_dma_residue = sun_get_dma_residue; | ||
613 | |||
614 | sun_fdops.fd_request_irq = sun_fd_request_irq; | ||
615 | sun_fdops.fd_free_irq = sun_fd_free_irq; | ||
616 | |||
617 | /* Floppy eject is manual. Actually, could determine this | ||
618 | * via presence of 'manual' property in OBP node. | ||
619 | */ | ||
620 | sun_fdops.fd_eject = sun_pci_fd_eject; | ||
621 | |||
622 | fdc_status = (unsigned long) &sun_fdc->status_82077; | ||
623 | |||
624 | allowed_drive_mask = 0; | ||
625 | sun_floppy_types[0] = 0; | ||
626 | sun_floppy_types[1] = 4; | ||
627 | |||
628 | sun_pci_broken_drive = 1; | ||
629 | sun_fdops.fd_outb = sun_pci_fd_broken_outb; | ||
630 | |||
631 | return sun_floppy_types[0]; | ||
632 | } | ||
633 | #endif /* ISA_FLOPPY_WORKS */ | ||
634 | |||
635 | #endif | ||
636 | |||
637 | static unsigned long __init sun_floppy_init(void) | 560 | static unsigned long __init sun_floppy_init(void) |
638 | { | 561 | { |
639 | char state[128]; | 562 | char state[128]; |
@@ -667,13 +590,8 @@ static unsigned long __init sun_floppy_init(void) | |||
667 | } | 590 | } |
668 | } | 591 | } |
669 | ebus_done: | 592 | ebus_done: |
670 | if (!edev) { | 593 | if (!edev) |
671 | #ifdef ISA_FLOPPY_WORKS | ||
672 | return isa_floppy_init(); | ||
673 | #else | ||
674 | return 0; | 594 | return 0; |
675 | #endif | ||
676 | } | ||
677 | 595 | ||
678 | state_prop = of_get_property(edev->prom_node, "status", NULL); | 596 | state_prop = of_get_property(edev->prom_node, "status", NULL); |
679 | if (state_prop && !strncmp(state_prop, "disabled", 8)) | 597 | if (state_prop && !strncmp(state_prop, "disabled", 8)) |
diff --git a/include/asm-sparc64/hugetlb.h b/include/asm-sparc64/hugetlb.h new file mode 100644 index 000000000000..412af58926a0 --- /dev/null +++ b/include/asm-sparc64/hugetlb.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #ifndef _ASM_SPARC64_HUGETLB_H | ||
2 | #define _ASM_SPARC64_HUGETLB_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | |||
6 | |||
7 | void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
8 | pte_t *ptep, pte_t pte); | ||
9 | |||
10 | pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | ||
11 | pte_t *ptep); | ||
12 | |||
13 | void hugetlb_prefault_arch_hook(struct mm_struct *mm); | ||
14 | |||
15 | static inline int is_hugepage_only_range(struct mm_struct *mm, | ||
16 | unsigned long addr, | ||
17 | unsigned long len) { | ||
18 | return 0; | ||
19 | } | ||
20 | |||
21 | /* | ||
22 | * If the arch doesn't supply something else, assume that hugepage | ||
23 | * size aligned regions are ok without further preparation. | ||
24 | */ | ||
25 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | ||
26 | { | ||
27 | if (len & ~HPAGE_MASK) | ||
28 | return -EINVAL; | ||
29 | if (addr & ~HPAGE_MASK) | ||
30 | return -EINVAL; | ||
31 | return 0; | ||
32 | } | ||
33 | |||
34 | static inline void hugetlb_free_pgd_range(struct mmu_gather **tlb, | ||
35 | unsigned long addr, unsigned long end, | ||
36 | unsigned long floor, | ||
37 | unsigned long ceiling) | ||
38 | { | ||
39 | free_pgd_range(tlb, addr, end, floor, ceiling); | ||
40 | } | ||
41 | |||
42 | static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, | ||
43 | unsigned long addr, pte_t *ptep) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | static inline int huge_pte_none(pte_t pte) | ||
48 | { | ||
49 | return pte_none(pte); | ||
50 | } | ||
51 | |||
52 | static inline pte_t huge_pte_wrprotect(pte_t pte) | ||
53 | { | ||
54 | return pte_wrprotect(pte); | ||
55 | } | ||
56 | |||
57 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
58 | unsigned long addr, pte_t *ptep) | ||
59 | { | ||
60 | ptep_set_wrprotect(mm, addr, ptep); | ||
61 | } | ||
62 | |||
63 | static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, | ||
64 | unsigned long addr, pte_t *ptep, | ||
65 | pte_t pte, int dirty) | ||
66 | { | ||
67 | return ptep_set_access_flags(vma, addr, ptep, pte, dirty); | ||
68 | } | ||
69 | |||
70 | static inline pte_t huge_ptep_get(pte_t *ptep) | ||
71 | { | ||
72 | return *ptep; | ||
73 | } | ||
74 | |||
75 | static inline int arch_prepare_hugepage(struct page *page) | ||
76 | { | ||
77 | return 0; | ||
78 | } | ||
79 | |||
80 | static inline void arch_release_hugepage(struct page *page) | ||
81 | { | ||
82 | } | ||
83 | |||
84 | #endif /* _ASM_SPARC64_HUGETLB_H */ | ||
diff --git a/include/asm-sparc64/iommu.h b/include/asm-sparc64/iommu.h index 46325ddee23b..d7b9afcba08b 100644 --- a/include/asm-sparc64/iommu.h +++ b/include/asm-sparc64/iommu.h | |||
@@ -56,6 +56,7 @@ struct strbuf { | |||
56 | }; | 56 | }; |
57 | 57 | ||
58 | extern int iommu_table_init(struct iommu *iommu, int tsbsize, | 58 | extern int iommu_table_init(struct iommu *iommu, int tsbsize, |
59 | u32 dma_offset, u32 dma_addr_mask); | 59 | u32 dma_offset, u32 dma_addr_mask, |
60 | int numa_node); | ||
60 | 61 | ||
61 | #endif /* !(_SPARC64_IOMMU_H) */ | 62 | #endif /* !(_SPARC64_IOMMU_H) */ |
diff --git a/include/asm-sparc64/isa.h b/include/asm-sparc64/isa.h deleted file mode 100644 index ecd9290f78d4..000000000000 --- a/include/asm-sparc64/isa.h +++ /dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | /* $Id: isa.h,v 1.1 2001/05/11 04:31:55 davem Exp $ | ||
2 | * isa.h: Sparc64 layer for PCI to ISA bridge devices. | ||
3 | * | ||
4 | * Copyright (C) 2001 David S. Miller (davem@redhat.com) | ||
5 | */ | ||
6 | |||
7 | #ifndef __SPARC64_ISA_H | ||
8 | #define __SPARC64_ISA_H | ||
9 | |||
10 | #include <asm/oplib.h> | ||
11 | #include <asm/prom.h> | ||
12 | #include <asm/of_device.h> | ||
13 | |||
14 | struct sparc_isa_bridge; | ||
15 | |||
16 | struct sparc_isa_device { | ||
17 | struct of_device ofdev; | ||
18 | struct sparc_isa_device *next; | ||
19 | struct sparc_isa_device *child; | ||
20 | struct sparc_isa_bridge *bus; | ||
21 | struct device_node *prom_node; | ||
22 | struct resource resource; | ||
23 | unsigned int irq; | ||
24 | }; | ||
25 | #define to_isa_device(d) container_of(d, struct sparc_isa_device, ofdev.dev) | ||
26 | |||
27 | struct sparc_isa_bridge { | ||
28 | struct of_device ofdev; | ||
29 | struct sparc_isa_bridge *next; | ||
30 | struct sparc_isa_device *devices; | ||
31 | struct pci_dev *self; | ||
32 | int index; | ||
33 | struct device_node *prom_node; | ||
34 | }; | ||
35 | #define to_isa_bridge(d) container_of(d, struct sparc_isa_bridge, ofdev.dev) | ||
36 | |||
37 | extern struct sparc_isa_bridge *isa_chain; | ||
38 | |||
39 | extern void isa_init(void); | ||
40 | |||
41 | #define for_each_isa(bus) \ | ||
42 | for((bus) = isa_chain; (bus); (bus) = (bus)->next) | ||
43 | |||
44 | #define for_each_isadev(dev, bus) \ | ||
45 | for((dev) = (bus)->devices; (dev); (dev) = (dev)->next) | ||
46 | |||
47 | #endif /* !(__SPARC64_ISA_H) */ | ||
diff --git a/include/asm-sparc64/mmzone.h b/include/asm-sparc64/mmzone.h new file mode 100644 index 000000000000..ebf5986c12ed --- /dev/null +++ b/include/asm-sparc64/mmzone.h | |||
@@ -0,0 +1,17 @@ | |||
1 | #ifndef _SPARC64_MMZONE_H | ||
2 | #define _SPARC64_MMZONE_H | ||
3 | |||
4 | #ifdef CONFIG_NEED_MULTIPLE_NODES | ||
5 | |||
6 | extern struct pglist_data *node_data[]; | ||
7 | |||
8 | #define NODE_DATA(nid) (node_data[nid]) | ||
9 | #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) | ||
10 | #define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn) | ||
11 | |||
12 | extern int numa_cpu_lookup_table[]; | ||
13 | extern cpumask_t numa_cpumask_lookup_table[]; | ||
14 | |||
15 | #endif /* CONFIG_NEED_MULTIPLE_NODES */ | ||
16 | |||
17 | #endif /* _SPARC64_MMZONE_H */ | ||
diff --git a/include/asm-sparc64/numnodes.h b/include/asm-sparc64/numnodes.h deleted file mode 100644 index 017e7e74f5e7..000000000000 --- a/include/asm-sparc64/numnodes.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _SPARC64_NUMNODES_H | ||
2 | #define _SPARC64_NUMNODES_H | ||
3 | |||
4 | #define NODES_SHIFT 0 | ||
5 | |||
6 | #endif /* !(_SPARC64_NUMNODES_H) */ | ||
diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h index e93a482aa24a..618117def0dc 100644 --- a/include/asm-sparc64/page.h +++ b/include/asm-sparc64/page.h | |||
@@ -39,8 +39,6 @@ | |||
39 | #define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT) | 39 | #define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT) |
40 | #define HPAGE_MASK (~(HPAGE_SIZE - 1UL)) | 40 | #define HPAGE_MASK (~(HPAGE_SIZE - 1UL)) |
41 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 41 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
42 | #define ARCH_HAS_SETCLEAR_HUGE_PTE | ||
43 | #define ARCH_HAS_HUGETLB_PREFAULT_HOOK | ||
44 | #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA | 42 | #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA |
45 | #endif | 43 | #endif |
46 | 44 | ||
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 549e45266b68..0e200e7acec7 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h | |||
@@ -506,6 +506,11 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
506 | return __pte(pte_val(pte) | mask); | 506 | return __pte(pte_val(pte) | mask); |
507 | } | 507 | } |
508 | 508 | ||
509 | static inline pte_t pte_mkspecial(pte_t pte) | ||
510 | { | ||
511 | return pte; | ||
512 | } | ||
513 | |||
509 | static inline unsigned long pte_young(pte_t pte) | 514 | static inline unsigned long pte_young(pte_t pte) |
510 | { | 515 | { |
511 | unsigned long mask; | 516 | unsigned long mask; |
@@ -608,6 +613,11 @@ static inline unsigned long pte_present(pte_t pte) | |||
608 | return val; | 613 | return val; |
609 | } | 614 | } |
610 | 615 | ||
616 | static inline int pte_special(pte_t pte) | ||
617 | { | ||
618 | return 0; | ||
619 | } | ||
620 | |||
611 | #define pmd_set(pmdp, ptep) \ | 621 | #define pmd_set(pmdp, ptep) \ |
612 | (pmd_val(*(pmdp)) = (__pa((unsigned long) (ptep)) >> 11UL)) | 622 | (pmd_val(*(pmdp)) = (__pa((unsigned long) (ptep)) >> 11UL)) |
613 | #define pud_set(pudp, pmdp) \ | 623 | #define pud_set(pudp, pmdp) \ |
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h index 6da197803efc..714b81956f32 100644 --- a/include/asm-sparc64/ptrace.h +++ b/include/asm-sparc64/ptrace.h | |||
@@ -1,4 +1,3 @@ | |||
1 | /* $Id: ptrace.h,v 1.14 2002/02/09 19:49:32 davem Exp $ */ | ||
2 | #ifndef _SPARC64_PTRACE_H | 1 | #ifndef _SPARC64_PTRACE_H |
3 | #define _SPARC64_PTRACE_H | 2 | #define _SPARC64_PTRACE_H |
4 | 3 | ||
@@ -8,17 +7,53 @@ | |||
8 | * stack during a system call and basically all traps. | 7 | * stack during a system call and basically all traps. |
9 | */ | 8 | */ |
10 | 9 | ||
10 | /* This magic value must have the low 9 bits clear, | ||
11 | * as that is where we encode the %tt value, see below. | ||
12 | */ | ||
13 | #define PT_REGS_MAGIC 0x57ac6c00 | ||
14 | |||
11 | #ifndef __ASSEMBLY__ | 15 | #ifndef __ASSEMBLY__ |
12 | 16 | ||
17 | #include <linux/types.h> | ||
18 | |||
13 | struct pt_regs { | 19 | struct pt_regs { |
14 | unsigned long u_regs[16]; /* globals and ins */ | 20 | unsigned long u_regs[16]; /* globals and ins */ |
15 | unsigned long tstate; | 21 | unsigned long tstate; |
16 | unsigned long tpc; | 22 | unsigned long tpc; |
17 | unsigned long tnpc; | 23 | unsigned long tnpc; |
18 | unsigned int y; | 24 | unsigned int y; |
19 | unsigned int fprs; | 25 | |
26 | /* We encode a magic number, PT_REGS_MAGIC, along | ||
27 | * with the %tt (trap type) register value at trap | ||
28 | * entry time. The magic number allows us to identify | ||
29 | * accurately a trap stack frame in the stack | ||
30 | * unwinder, and the %tt value allows us to test | ||
31 | * things like "in a system call" etc. for an arbitray | ||
32 | * process. | ||
33 | * | ||
34 | * The PT_REGS_MAGIC is choosen such that it can be | ||
35 | * loaded completely using just a sethi instruction. | ||
36 | */ | ||
37 | unsigned int magic; | ||
20 | }; | 38 | }; |
21 | 39 | ||
40 | static inline int pt_regs_trap_type(struct pt_regs *regs) | ||
41 | { | ||
42 | return regs->magic & 0x1ff; | ||
43 | } | ||
44 | |||
45 | static inline int pt_regs_clear_trap_type(struct pt_regs *regs) | ||
46 | { | ||
47 | return regs->magic &= ~0x1ff; | ||
48 | } | ||
49 | |||
50 | static inline bool pt_regs_is_syscall(struct pt_regs *regs) | ||
51 | { | ||
52 | int tt = pt_regs_trap_type(regs); | ||
53 | |||
54 | return (tt == 0x110 || tt == 0x111 || tt == 0x16d); | ||
55 | } | ||
56 | |||
22 | struct pt_regs32 { | 57 | struct pt_regs32 { |
23 | unsigned int psr; | 58 | unsigned int psr; |
24 | unsigned int pc; | 59 | unsigned int pc; |
@@ -147,7 +182,7 @@ extern void __show_regs(struct pt_regs *); | |||
147 | #define PT_V9_TPC 0x88 | 182 | #define PT_V9_TPC 0x88 |
148 | #define PT_V9_TNPC 0x90 | 183 | #define PT_V9_TNPC 0x90 |
149 | #define PT_V9_Y 0x98 | 184 | #define PT_V9_Y 0x98 |
150 | #define PT_V9_FPRS 0x9c | 185 | #define PT_V9_MAGIC 0x9c |
151 | #define PT_TSTATE PT_V9_TSTATE | 186 | #define PT_TSTATE PT_V9_TSTATE |
152 | #define PT_TPC PT_V9_TPC | 187 | #define PT_TPC PT_V9_TPC |
153 | #define PT_TNPC PT_V9_TNPC | 188 | #define PT_TNPC PT_V9_TNPC |
diff --git a/include/asm-sparc64/sparsemem.h b/include/asm-sparc64/sparsemem.h index 77bcd2bfa53c..b99d4e4b6d28 100644 --- a/include/asm-sparc64/sparsemem.h +++ b/include/asm-sparc64/sparsemem.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | 5 | ||
6 | #define SECTION_SIZE_BITS 31 | 6 | #define SECTION_SIZE_BITS 30 |
7 | #define MAX_PHYSADDR_BITS 42 | 7 | #define MAX_PHYSADDR_BITS 42 |
8 | #define MAX_PHYSMEM_BITS 42 | 8 | #define MAX_PHYSMEM_BITS 42 |
9 | 9 | ||
diff --git a/include/asm-sparc64/thread_info.h b/include/asm-sparc64/thread_info.h index 98252cd44dd6..71e42d1a80d9 100644 --- a/include/asm-sparc64/thread_info.h +++ b/include/asm-sparc64/thread_info.h | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: thread_info.h,v 1.1 2002/02/10 00:00:58 davem Exp $ | 1 | /* thread_info.h: sparc64 low-level thread information |
2 | * thread_info.h: sparc64 low-level thread information | ||
3 | * | 2 | * |
4 | * Copyright (C) 2002 David S. Miller (davem@redhat.com) | 3 | * Copyright (C) 2002 David S. Miller (davem@redhat.com) |
5 | */ | 4 | */ |
@@ -223,7 +222,7 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
223 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 222 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
224 | #define TIF_PERFCTR 4 /* performance counters active */ | 223 | #define TIF_PERFCTR 4 /* performance counters active */ |
225 | #define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */ | 224 | #define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */ |
226 | #define TIF_NEWSIGNALS 6 /* wants new-style signals */ | 225 | /* flag bit 6 is available */ |
227 | #define TIF_32BIT 7 /* 32-bit binary */ | 226 | #define TIF_32BIT 7 /* 32-bit binary */ |
228 | /* flag bit 8 is available */ | 227 | /* flag bit 8 is available */ |
229 | #define TIF_SECCOMP 9 /* secure computing */ | 228 | #define TIF_SECCOMP 9 /* secure computing */ |
@@ -242,7 +241,6 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
242 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 241 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
243 | #define _TIF_PERFCTR (1<<TIF_PERFCTR) | 242 | #define _TIF_PERFCTR (1<<TIF_PERFCTR) |
244 | #define _TIF_UNALIGNED (1<<TIF_UNALIGNED) | 243 | #define _TIF_UNALIGNED (1<<TIF_UNALIGNED) |
245 | #define _TIF_NEWSIGNALS (1<<TIF_NEWSIGNALS) | ||
246 | #define _TIF_32BIT (1<<TIF_32BIT) | 244 | #define _TIF_32BIT (1<<TIF_32BIT) |
247 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) | 245 | #define _TIF_SECCOMP (1<<TIF_SECCOMP) |
248 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) | 246 | #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) |
diff --git a/include/asm-sparc64/topology.h b/include/asm-sparc64/topology.h index c6b557034f68..001c04027c82 100644 --- a/include/asm-sparc64/topology.h +++ b/include/asm-sparc64/topology.h | |||
@@ -1,6 +1,77 @@ | |||
1 | #ifndef _ASM_SPARC64_TOPOLOGY_H | 1 | #ifndef _ASM_SPARC64_TOPOLOGY_H |
2 | #define _ASM_SPARC64_TOPOLOGY_H | 2 | #define _ASM_SPARC64_TOPOLOGY_H |
3 | 3 | ||
4 | #ifdef CONFIG_NUMA | ||
5 | |||
6 | #include <asm/mmzone.h> | ||
7 | |||
8 | static inline int cpu_to_node(int cpu) | ||
9 | { | ||
10 | return numa_cpu_lookup_table[cpu]; | ||
11 | } | ||
12 | |||
13 | #define parent_node(node) (node) | ||
14 | |||
15 | static inline cpumask_t node_to_cpumask(int node) | ||
16 | { | ||
17 | return numa_cpumask_lookup_table[node]; | ||
18 | } | ||
19 | |||
20 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ | ||
21 | #define node_to_cpumask_ptr(v, node) \ | ||
22 | cpumask_t *v = &(numa_cpumask_lookup_table[node]) | ||
23 | |||
24 | #define node_to_cpumask_ptr_next(v, node) \ | ||
25 | v = &(numa_cpumask_lookup_table[node]) | ||
26 | |||
27 | static inline int node_to_first_cpu(int node) | ||
28 | { | ||
29 | cpumask_t tmp; | ||
30 | tmp = node_to_cpumask(node); | ||
31 | return first_cpu(tmp); | ||
32 | } | ||
33 | |||
34 | struct pci_bus; | ||
35 | #ifdef CONFIG_PCI | ||
36 | extern int pcibus_to_node(struct pci_bus *pbus); | ||
37 | #else | ||
38 | static inline int pcibus_to_node(struct pci_bus *pbus) | ||
39 | { | ||
40 | return -1; | ||
41 | } | ||
42 | #endif | ||
43 | |||
44 | #define pcibus_to_cpumask(bus) \ | ||
45 | (pcibus_to_node(bus) == -1 ? \ | ||
46 | CPU_MASK_ALL : \ | ||
47 | node_to_cpumask(pcibus_to_node(bus))) | ||
48 | |||
49 | #define SD_NODE_INIT (struct sched_domain) { \ | ||
50 | .min_interval = 8, \ | ||
51 | .max_interval = 32, \ | ||
52 | .busy_factor = 32, \ | ||
53 | .imbalance_pct = 125, \ | ||
54 | .cache_nice_tries = 2, \ | ||
55 | .busy_idx = 3, \ | ||
56 | .idle_idx = 2, \ | ||
57 | .newidle_idx = 0, \ | ||
58 | .wake_idx = 1, \ | ||
59 | .forkexec_idx = 1, \ | ||
60 | .flags = SD_LOAD_BALANCE \ | ||
61 | | SD_BALANCE_FORK \ | ||
62 | | SD_BALANCE_EXEC \ | ||
63 | | SD_SERIALIZE \ | ||
64 | | SD_WAKE_BALANCE, \ | ||
65 | .last_balance = jiffies, \ | ||
66 | .balance_interval = 1, \ | ||
67 | } | ||
68 | |||
69 | #else /* CONFIG_NUMA */ | ||
70 | |||
71 | #include <asm-generic/topology.h> | ||
72 | |||
73 | #endif /* !(CONFIG_NUMA) */ | ||
74 | |||
4 | #ifdef CONFIG_SMP | 75 | #ifdef CONFIG_SMP |
5 | #define topology_physical_package_id(cpu) (cpu_data(cpu).proc_id) | 76 | #define topology_physical_package_id(cpu) (cpu_data(cpu).proc_id) |
6 | #define topology_core_id(cpu) (cpu_data(cpu).core_id) | 77 | #define topology_core_id(cpu) (cpu_data(cpu).core_id) |
@@ -10,8 +81,6 @@ | |||
10 | #define smt_capable() (sparc64_multi_core) | 81 | #define smt_capable() (sparc64_multi_core) |
11 | #endif /* CONFIG_SMP */ | 82 | #endif /* CONFIG_SMP */ |
12 | 83 | ||
13 | #include <asm-generic/topology.h> | ||
14 | |||
15 | #define cpu_coregroup_map(cpu) (cpu_core_map[cpu]) | 84 | #define cpu_coregroup_map(cpu) (cpu_core_map[cpu]) |
16 | 85 | ||
17 | #endif /* _ASM_SPARC64_TOPOLOGY_H */ | 86 | #endif /* _ASM_SPARC64_TOPOLOGY_H */ |
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h index 7208a777750e..d3cc4eff39a6 100644 --- a/include/asm-sparc64/ttable.h +++ b/include/asm-sparc64/ttable.h | |||
@@ -28,7 +28,7 @@ | |||
28 | call routine; \ | 28 | call routine; \ |
29 | add %sp, PTREGS_OFF, %o0; \ | 29 | add %sp, PTREGS_OFF, %o0; \ |
30 | ba,pt %xcc, rtrap; \ | 30 | ba,pt %xcc, rtrap; \ |
31 | clr %l6; \ | 31 | nop; \ |
32 | nop; | 32 | nop; |
33 | 33 | ||
34 | #define TRAP_7INSNS(routine) \ | 34 | #define TRAP_7INSNS(routine) \ |
@@ -38,7 +38,7 @@ | |||
38 | call routine; \ | 38 | call routine; \ |
39 | add %sp, PTREGS_OFF, %o0; \ | 39 | add %sp, PTREGS_OFF, %o0; \ |
40 | ba,pt %xcc, rtrap; \ | 40 | ba,pt %xcc, rtrap; \ |
41 | clr %l6; | 41 | nop; |
42 | 42 | ||
43 | #define TRAP_SAVEFPU(routine) \ | 43 | #define TRAP_SAVEFPU(routine) \ |
44 | sethi %hi(109f), %g7; \ | 44 | sethi %hi(109f), %g7; \ |
@@ -47,7 +47,7 @@ | |||
47 | call routine; \ | 47 | call routine; \ |
48 | add %sp, PTREGS_OFF, %o0; \ | 48 | add %sp, PTREGS_OFF, %o0; \ |
49 | ba,pt %xcc, rtrap; \ | 49 | ba,pt %xcc, rtrap; \ |
50 | clr %l6; \ | 50 | nop; \ |
51 | nop; | 51 | nop; |
52 | 52 | ||
53 | #define TRAP_NOSAVE(routine) \ | 53 | #define TRAP_NOSAVE(routine) \ |
@@ -67,7 +67,7 @@ | |||
67 | call routine; \ | 67 | call routine; \ |
68 | add %sp, PTREGS_OFF, %o0; \ | 68 | add %sp, PTREGS_OFF, %o0; \ |
69 | ba,pt %xcc, rtrap; \ | 69 | ba,pt %xcc, rtrap; \ |
70 | clr %l6; \ | 70 | nop; \ |
71 | nop; | 71 | nop; |
72 | 72 | ||
73 | #define TRAP_ARG(routine, arg) \ | 73 | #define TRAP_ARG(routine, arg) \ |
@@ -78,7 +78,7 @@ | |||
78 | call routine; \ | 78 | call routine; \ |
79 | mov arg, %o1; \ | 79 | mov arg, %o1; \ |
80 | ba,pt %xcc, rtrap; \ | 80 | ba,pt %xcc, rtrap; \ |
81 | clr %l6; | 81 | nop; |
82 | 82 | ||
83 | #define TRAPTL1_ARG(routine, arg) \ | 83 | #define TRAPTL1_ARG(routine, arg) \ |
84 | sethi %hi(109f), %g7; \ | 84 | sethi %hi(109f), %g7; \ |
@@ -88,7 +88,7 @@ | |||
88 | call routine; \ | 88 | call routine; \ |
89 | mov arg, %o1; \ | 89 | mov arg, %o1; \ |
90 | ba,pt %xcc, rtrap; \ | 90 | ba,pt %xcc, rtrap; \ |
91 | clr %l6; | 91 | nop; |
92 | 92 | ||
93 | #define SYSCALL_TRAP(routine, systbl) \ | 93 | #define SYSCALL_TRAP(routine, systbl) \ |
94 | sethi %hi(109f), %g7; \ | 94 | sethi %hi(109f), %g7; \ |
@@ -166,7 +166,7 @@ | |||
166 | ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1; \ | 166 | ldx [%sp + PTREGS_OFF + PT_V9_TNPC], %l1; \ |
167 | add %l1, 4, %l2; \ | 167 | add %l1, 4, %l2; \ |
168 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]; \ | 168 | stx %l1, [%sp + PTREGS_OFF + PT_V9_TPC]; \ |
169 | ba,pt %xcc, rtrap_clr_l6; \ | 169 | ba,pt %xcc, rtrap; \ |
170 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]; | 170 | stx %l2, [%sp + PTREGS_OFF + PT_V9_TNPC]; |
171 | 171 | ||
172 | #ifdef CONFIG_KPROBES | 172 | #ifdef CONFIG_KPROBES |
diff --git a/include/asm-sparc64/unaligned.h b/include/asm-sparc64/unaligned.h index 1ed3ba537772..edcebb09441e 100644 --- a/include/asm-sparc64/unaligned.h +++ b/include/asm-sparc64/unaligned.h | |||
@@ -1,6 +1,10 @@ | |||
1 | #ifndef _ASM_SPARC64_UNALIGNED_H_ | 1 | #ifndef _ASM_SPARC64_UNALIGNED_H |
2 | #define _ASM_SPARC64_UNALIGNED_H_ | 2 | #define _ASM_SPARC64_UNALIGNED_H |
3 | 3 | ||
4 | #include <asm-generic/unaligned.h> | 4 | #include <linux/unaligned/be_struct.h> |
5 | #include <linux/unaligned/le_byteshift.h> | ||
6 | #include <linux/unaligned/generic.h> | ||
7 | #define get_unaligned __get_unaligned_be | ||
8 | #define put_unaligned __put_unaligned_be | ||
5 | 9 | ||
6 | #endif /* _ASM_SPARC64_UNALIGNED_H */ | 10 | #endif /* _ASM_SPARC64_UNALIGNED_H */ |
diff --git a/include/asm-um/pgtable.h b/include/asm-um/pgtable.h index 4102b443e925..02db81b7b86e 100644 --- a/include/asm-um/pgtable.h +++ b/include/asm-um/pgtable.h | |||
@@ -173,6 +173,11 @@ static inline int pte_newprot(pte_t pte) | |||
173 | return(pte_present(pte) && (pte_get_bits(pte, _PAGE_NEWPROT))); | 173 | return(pte_present(pte) && (pte_get_bits(pte, _PAGE_NEWPROT))); |
174 | } | 174 | } |
175 | 175 | ||
176 | static inline int pte_special(pte_t pte) | ||
177 | { | ||
178 | return 0; | ||
179 | } | ||
180 | |||
176 | /* | 181 | /* |
177 | * ================================= | 182 | * ================================= |
178 | * Flags setting section. | 183 | * Flags setting section. |
@@ -241,6 +246,11 @@ static inline pte_t pte_mknewpage(pte_t pte) | |||
241 | return(pte); | 246 | return(pte); |
242 | } | 247 | } |
243 | 248 | ||
249 | static inline pte_t pte_mkspecial(pte_t pte) | ||
250 | { | ||
251 | return(pte); | ||
252 | } | ||
253 | |||
244 | static inline void set_pte(pte_t *pteptr, pte_t pteval) | 254 | static inline void set_pte(pte_t *pteptr, pte_t pteval) |
245 | { | 255 | { |
246 | pte_copy(*pteptr, pteval); | 256 | pte_copy(*pteptr, pteval); |
diff --git a/include/asm-um/unaligned.h b/include/asm-um/unaligned.h index 1d2497c57274..a47196974e39 100644 --- a/include/asm-um/unaligned.h +++ b/include/asm-um/unaligned.h | |||
@@ -1,6 +1,6 @@ | |||
1 | #ifndef __UM_UNALIGNED_H | 1 | #ifndef _ASM_UM_UNALIGNED_H |
2 | #define __UM_UNALIGNED_H | 2 | #define _ASM_UM_UNALIGNED_H |
3 | 3 | ||
4 | #include "asm/arch/unaligned.h" | 4 | #include "asm/arch/unaligned.h" |
5 | 5 | ||
6 | #endif | 6 | #endif /* _ASM_UM_UNALIGNED_H */ |
diff --git a/include/asm-v850/unaligned.h b/include/asm-v850/unaligned.h index e30b18653a94..53122b28491e 100644 --- a/include/asm-v850/unaligned.h +++ b/include/asm-v850/unaligned.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-v850/unaligned.h -- Unaligned memory access | ||
3 | * | ||
4 | * Copyright (C) 2001 NEC Corporation | 2 | * Copyright (C) 2001 NEC Corporation |
5 | * Copyright (C) 2001 Miles Bader <miles@gnu.org> | 3 | * Copyright (C) 2001 Miles Bader <miles@gnu.org> |
6 | * | 4 | * |
@@ -8,123 +6,17 @@ | |||
8 | * Public License. See the file COPYING in the main directory of this | 6 | * Public License. See the file COPYING in the main directory of this |
9 | * archive for more details. | 7 | * archive for more details. |
10 | * | 8 | * |
11 | * This file is a copy of the arm version, include/asm-arm/unaligned.h | ||
12 | * | ||
13 | * Note that some v850 chips support unaligned access, but it seems too | 9 | * Note that some v850 chips support unaligned access, but it seems too |
14 | * annoying to use. | 10 | * annoying to use. |
15 | */ | 11 | */ |
12 | #ifndef _ASM_V850_UNALIGNED_H | ||
13 | #define _ASM_V850_UNALIGNED_H | ||
16 | 14 | ||
17 | #ifndef __V850_UNALIGNED_H__ | 15 | #include <linux/unaligned/be_byteshift.h> |
18 | #define __V850_UNALIGNED_H__ | 16 | #include <linux/unaligned/le_byteshift.h> |
19 | 17 | #include <linux/unaligned/generic.h> | |
20 | #include <asm/types.h> | ||
21 | |||
22 | extern int __bug_unaligned_x(void *ptr); | ||
23 | |||
24 | /* | ||
25 | * What is the most efficient way of loading/storing an unaligned value? | ||
26 | * | ||
27 | * That is the subject of this file. Efficiency here is defined as | ||
28 | * minimum code size with minimum register usage for the common cases. | ||
29 | * It is currently not believed that long longs are common, so we | ||
30 | * trade efficiency for the chars, shorts and longs against the long | ||
31 | * longs. | ||
32 | * | ||
33 | * Current stats with gcc 2.7.2.2 for these functions: | ||
34 | * | ||
35 | * ptrsize get: code regs put: code regs | ||
36 | * 1 1 1 1 2 | ||
37 | * 2 3 2 3 2 | ||
38 | * 4 7 3 7 3 | ||
39 | * 8 20 6 16 6 | ||
40 | * | ||
41 | * gcc 2.95.1 seems to code differently: | ||
42 | * | ||
43 | * ptrsize get: code regs put: code regs | ||
44 | * 1 1 1 1 2 | ||
45 | * 2 3 2 3 2 | ||
46 | * 4 7 4 7 4 | ||
47 | * 8 19 8 15 6 | ||
48 | * | ||
49 | * which may or may not be more efficient (depending upon whether | ||
50 | * you can afford the extra registers). Hopefully the gcc 2.95 | ||
51 | * is inteligent enough to decide if it is better to use the | ||
52 | * extra register, but evidence so far seems to suggest otherwise. | ||
53 | * | ||
54 | * Unfortunately, gcc is not able to optimise the high word | ||
55 | * out of long long >> 32, or the low word from long long << 32 | ||
56 | */ | ||
57 | |||
58 | #define __get_unaligned_2(__p) \ | ||
59 | (__p[0] | __p[1] << 8) | ||
60 | |||
61 | #define __get_unaligned_4(__p) \ | ||
62 | (__p[0] | __p[1] << 8 | __p[2] << 16 | __p[3] << 24) | ||
63 | |||
64 | #define get_unaligned(ptr) \ | ||
65 | ({ \ | ||
66 | __typeof__(*(ptr)) __v; \ | ||
67 | __u8 *__p = (__u8 *)(ptr); \ | ||
68 | switch (sizeof(*(ptr))) { \ | ||
69 | case 1: __v = *(ptr); break; \ | ||
70 | case 2: __v = __get_unaligned_2(__p); break; \ | ||
71 | case 4: __v = __get_unaligned_4(__p); break; \ | ||
72 | case 8: { \ | ||
73 | unsigned int __v1, __v2; \ | ||
74 | __v2 = __get_unaligned_4((__p+4)); \ | ||
75 | __v1 = __get_unaligned_4(__p); \ | ||
76 | __v = ((unsigned long long)__v2 << 32 | __v1); \ | ||
77 | } \ | ||
78 | break; \ | ||
79 | default: __v = __bug_unaligned_x(__p); break; \ | ||
80 | } \ | ||
81 | __v; \ | ||
82 | }) | ||
83 | |||
84 | |||
85 | static inline void __put_unaligned_2(__u32 __v, register __u8 *__p) | ||
86 | { | ||
87 | *__p++ = __v; | ||
88 | *__p++ = __v >> 8; | ||
89 | } | ||
90 | |||
91 | static inline void __put_unaligned_4(__u32 __v, register __u8 *__p) | ||
92 | { | ||
93 | __put_unaligned_2(__v >> 16, __p + 2); | ||
94 | __put_unaligned_2(__v, __p); | ||
95 | } | ||
96 | |||
97 | static inline void __put_unaligned_8(const unsigned long long __v, register __u8 *__p) | ||
98 | { | ||
99 | /* | ||
100 | * tradeoff: 8 bytes of stack for all unaligned puts (2 | ||
101 | * instructions), or an extra register in the long long | ||
102 | * case - go for the extra register. | ||
103 | */ | ||
104 | __put_unaligned_4(__v >> 32, __p+4); | ||
105 | __put_unaligned_4(__v, __p); | ||
106 | } | ||
107 | |||
108 | /* | ||
109 | * Try to store an unaligned value as efficiently as possible. | ||
110 | */ | ||
111 | #define put_unaligned(val,ptr) \ | ||
112 | ({ \ | ||
113 | switch (sizeof(*(ptr))) { \ | ||
114 | case 1: \ | ||
115 | *(ptr) = (val); \ | ||
116 | break; \ | ||
117 | case 2: __put_unaligned_2((val),(__u8 *)(ptr)); \ | ||
118 | break; \ | ||
119 | case 4: __put_unaligned_4((val),(__u8 *)(ptr)); \ | ||
120 | break; \ | ||
121 | case 8: __put_unaligned_8((val),(__u8 *)(ptr)); \ | ||
122 | break; \ | ||
123 | default: __bug_unaligned_x(ptr); \ | ||
124 | break; \ | ||
125 | } \ | ||
126 | (void) 0; \ | ||
127 | }) | ||
128 | 18 | ||
19 | #define get_unaligned __get_unaligned_le | ||
20 | #define put_unaligned __put_unaligned_le | ||
129 | 21 | ||
130 | #endif /* __V850_UNALIGNED_H__ */ | 22 | #endif /* _ASM_V850_UNALIGNED_H */ |
diff --git a/include/asm-x86/bios_ebda.h b/include/asm-x86/bios_ebda.h index 9cbd9a668af8..b4a46b7be794 100644 --- a/include/asm-x86/bios_ebda.h +++ b/include/asm-x86/bios_ebda.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _MACH_BIOS_EBDA_H | 1 | #ifndef _MACH_BIOS_EBDA_H |
2 | #define _MACH_BIOS_EBDA_H | 2 | #define _MACH_BIOS_EBDA_H |
3 | 3 | ||
4 | #include <asm/io.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * there is a real-mode segmented pointer pointing to the | 7 | * there is a real-mode segmented pointer pointing to the |
6 | * 4K EBDA area at 0x40E. | 8 | * 4K EBDA area at 0x40E. |
diff --git a/include/asm-x86/bitops.h b/include/asm-x86/bitops.h index 1ae7b270a1ef..b81a4d4d3337 100644 --- a/include/asm-x86/bitops.h +++ b/include/asm-x86/bitops.h | |||
@@ -62,12 +62,9 @@ static inline void set_bit(int nr, volatile void *addr) | |||
62 | */ | 62 | */ |
63 | static inline void __set_bit(int nr, volatile void *addr) | 63 | static inline void __set_bit(int nr, volatile void *addr) |
64 | { | 64 | { |
65 | asm volatile("bts %1,%0" | 65 | asm volatile("bts %1,%0" : ADDR : "Ir" (nr) : "memory"); |
66 | : ADDR | ||
67 | : "Ir" (nr) : "memory"); | ||
68 | } | 66 | } |
69 | 67 | ||
70 | |||
71 | /** | 68 | /** |
72 | * clear_bit - Clears a bit in memory | 69 | * clear_bit - Clears a bit in memory |
73 | * @nr: Bit to clear | 70 | * @nr: Bit to clear |
@@ -297,19 +294,145 @@ static inline int variable_test_bit(int nr, volatile const void *addr) | |||
297 | static int test_bit(int nr, const volatile unsigned long *addr); | 294 | static int test_bit(int nr, const volatile unsigned long *addr); |
298 | #endif | 295 | #endif |
299 | 296 | ||
300 | #define test_bit(nr,addr) \ | 297 | #define test_bit(nr, addr) \ |
301 | (__builtin_constant_p(nr) ? \ | 298 | (__builtin_constant_p((nr)) \ |
302 | constant_test_bit((nr),(addr)) : \ | 299 | ? constant_test_bit((nr), (addr)) \ |
303 | variable_test_bit((nr),(addr))) | 300 | : variable_test_bit((nr), (addr))) |
301 | |||
302 | /** | ||
303 | * __ffs - find first set bit in word | ||
304 | * @word: The word to search | ||
305 | * | ||
306 | * Undefined if no bit exists, so code should check against 0 first. | ||
307 | */ | ||
308 | static inline unsigned long __ffs(unsigned long word) | ||
309 | { | ||
310 | asm("bsf %1,%0" | ||
311 | : "=r" (word) | ||
312 | : "rm" (word)); | ||
313 | return word; | ||
314 | } | ||
315 | |||
316 | /** | ||
317 | * ffz - find first zero bit in word | ||
318 | * @word: The word to search | ||
319 | * | ||
320 | * Undefined if no zero exists, so code should check against ~0UL first. | ||
321 | */ | ||
322 | static inline unsigned long ffz(unsigned long word) | ||
323 | { | ||
324 | asm("bsf %1,%0" | ||
325 | : "=r" (word) | ||
326 | : "r" (~word)); | ||
327 | return word; | ||
328 | } | ||
329 | |||
330 | /* | ||
331 | * __fls: find last set bit in word | ||
332 | * @word: The word to search | ||
333 | * | ||
334 | * Undefined if no zero exists, so code should check against ~0UL first. | ||
335 | */ | ||
336 | static inline unsigned long __fls(unsigned long word) | ||
337 | { | ||
338 | asm("bsr %1,%0" | ||
339 | : "=r" (word) | ||
340 | : "rm" (word)); | ||
341 | return word; | ||
342 | } | ||
343 | |||
344 | #ifdef __KERNEL__ | ||
345 | /** | ||
346 | * ffs - find first set bit in word | ||
347 | * @x: the word to search | ||
348 | * | ||
349 | * This is defined the same way as the libc and compiler builtin ffs | ||
350 | * routines, therefore differs in spirit from the other bitops. | ||
351 | * | ||
352 | * ffs(value) returns 0 if value is 0 or the position of the first | ||
353 | * set bit if value is nonzero. The first (least significant) bit | ||
354 | * is at position 1. | ||
355 | */ | ||
356 | static inline int ffs(int x) | ||
357 | { | ||
358 | int r; | ||
359 | #ifdef CONFIG_X86_CMOV | ||
360 | asm("bsfl %1,%0\n\t" | ||
361 | "cmovzl %2,%0" | ||
362 | : "=r" (r) : "rm" (x), "r" (-1)); | ||
363 | #else | ||
364 | asm("bsfl %1,%0\n\t" | ||
365 | "jnz 1f\n\t" | ||
366 | "movl $-1,%0\n" | ||
367 | "1:" : "=r" (r) : "rm" (x)); | ||
368 | #endif | ||
369 | return r + 1; | ||
370 | } | ||
371 | |||
372 | /** | ||
373 | * fls - find last set bit in word | ||
374 | * @x: the word to search | ||
375 | * | ||
376 | * This is defined in a similar way as the libc and compiler builtin | ||
377 | * ffs, but returns the position of the most significant set bit. | ||
378 | * | ||
379 | * fls(value) returns 0 if value is 0 or the position of the last | ||
380 | * set bit if value is nonzero. The last (most significant) bit is | ||
381 | * at position 32. | ||
382 | */ | ||
383 | static inline int fls(int x) | ||
384 | { | ||
385 | int r; | ||
386 | #ifdef CONFIG_X86_CMOV | ||
387 | asm("bsrl %1,%0\n\t" | ||
388 | "cmovzl %2,%0" | ||
389 | : "=&r" (r) : "rm" (x), "rm" (-1)); | ||
390 | #else | ||
391 | asm("bsrl %1,%0\n\t" | ||
392 | "jnz 1f\n\t" | ||
393 | "movl $-1,%0\n" | ||
394 | "1:" : "=r" (r) : "rm" (x)); | ||
395 | #endif | ||
396 | return r + 1; | ||
397 | } | ||
398 | #endif /* __KERNEL__ */ | ||
304 | 399 | ||
305 | #undef BASE_ADDR | 400 | #undef BASE_ADDR |
306 | #undef BIT_ADDR | 401 | #undef BIT_ADDR |
307 | #undef ADDR | 402 | #undef ADDR |
308 | 403 | ||
309 | #ifdef CONFIG_X86_32 | 404 | static inline void set_bit_string(unsigned long *bitmap, |
310 | # include "bitops_32.h" | 405 | unsigned long i, int len) |
311 | #else | 406 | { |
312 | # include "bitops_64.h" | 407 | unsigned long end = i + len; |
313 | #endif | 408 | while (i < end) { |
409 | __set_bit(i, bitmap); | ||
410 | i++; | ||
411 | } | ||
412 | } | ||
413 | |||
414 | #ifdef __KERNEL__ | ||
415 | |||
416 | #include <asm-generic/bitops/sched.h> | ||
417 | |||
418 | #define ARCH_HAS_FAST_MULTIPLIER 1 | ||
419 | |||
420 | #include <asm-generic/bitops/hweight.h> | ||
421 | |||
422 | #endif /* __KERNEL__ */ | ||
423 | |||
424 | #include <asm-generic/bitops/fls64.h> | ||
425 | |||
426 | #ifdef __KERNEL__ | ||
427 | |||
428 | #include <asm-generic/bitops/ext2-non-atomic.h> | ||
429 | |||
430 | #define ext2_set_bit_atomic(lock, nr, addr) \ | ||
431 | test_and_set_bit((nr), (unsigned long *)(addr)) | ||
432 | #define ext2_clear_bit_atomic(lock, nr, addr) \ | ||
433 | test_and_clear_bit((nr), (unsigned long *)(addr)) | ||
434 | |||
435 | #include <asm-generic/bitops/minix.h> | ||
314 | 436 | ||
437 | #endif /* __KERNEL__ */ | ||
315 | #endif /* _ASM_X86_BITOPS_H */ | 438 | #endif /* _ASM_X86_BITOPS_H */ |
diff --git a/include/asm-x86/bitops_32.h b/include/asm-x86/bitops_32.h deleted file mode 100644 index 2513a81f82aa..000000000000 --- a/include/asm-x86/bitops_32.h +++ /dev/null | |||
@@ -1,166 +0,0 @@ | |||
1 | #ifndef _I386_BITOPS_H | ||
2 | #define _I386_BITOPS_H | ||
3 | |||
4 | /* | ||
5 | * Copyright 1992, Linus Torvalds. | ||
6 | */ | ||
7 | |||
8 | /** | ||
9 | * find_first_zero_bit - find the first zero bit in a memory region | ||
10 | * @addr: The address to start the search at | ||
11 | * @size: The maximum size to search | ||
12 | * | ||
13 | * Returns the bit number of the first zero bit, not the number of the byte | ||
14 | * containing a bit. | ||
15 | */ | ||
16 | static inline int find_first_zero_bit(const unsigned long *addr, unsigned size) | ||
17 | { | ||
18 | int d0, d1, d2; | ||
19 | int res; | ||
20 | |||
21 | if (!size) | ||
22 | return 0; | ||
23 | /* This looks at memory. | ||
24 | * Mark it volatile to tell gcc not to move it around | ||
25 | */ | ||
26 | asm volatile("movl $-1,%%eax\n\t" | ||
27 | "xorl %%edx,%%edx\n\t" | ||
28 | "repe; scasl\n\t" | ||
29 | "je 1f\n\t" | ||
30 | "xorl -4(%%edi),%%eax\n\t" | ||
31 | "subl $4,%%edi\n\t" | ||
32 | "bsfl %%eax,%%edx\n" | ||
33 | "1:\tsubl %%ebx,%%edi\n\t" | ||
34 | "shll $3,%%edi\n\t" | ||
35 | "addl %%edi,%%edx" | ||
36 | : "=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2) | ||
37 | : "1" ((size + 31) >> 5), "2" (addr), | ||
38 | "b" (addr) : "memory"); | ||
39 | return res; | ||
40 | } | ||
41 | |||
42 | /** | ||
43 | * find_next_zero_bit - find the first zero bit in a memory region | ||
44 | * @addr: The address to base the search on | ||
45 | * @offset: The bit number to start searching at | ||
46 | * @size: The maximum size to search | ||
47 | */ | ||
48 | int find_next_zero_bit(const unsigned long *addr, int size, int offset); | ||
49 | |||
50 | /** | ||
51 | * __ffs - find first bit in word. | ||
52 | * @word: The word to search | ||
53 | * | ||
54 | * Undefined if no bit exists, so code should check against 0 first. | ||
55 | */ | ||
56 | static inline unsigned long __ffs(unsigned long word) | ||
57 | { | ||
58 | __asm__("bsfl %1,%0" | ||
59 | :"=r" (word) | ||
60 | :"rm" (word)); | ||
61 | return word; | ||
62 | } | ||
63 | |||
64 | /** | ||
65 | * find_first_bit - find the first set bit in a memory region | ||
66 | * @addr: The address to start the search at | ||
67 | * @size: The maximum size to search | ||
68 | * | ||
69 | * Returns the bit number of the first set bit, not the number of the byte | ||
70 | * containing a bit. | ||
71 | */ | ||
72 | static inline unsigned find_first_bit(const unsigned long *addr, unsigned size) | ||
73 | { | ||
74 | unsigned x = 0; | ||
75 | |||
76 | while (x < size) { | ||
77 | unsigned long val = *addr++; | ||
78 | if (val) | ||
79 | return __ffs(val) + x; | ||
80 | x += sizeof(*addr) << 3; | ||
81 | } | ||
82 | return x; | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * find_next_bit - find the first set bit in a memory region | ||
87 | * @addr: The address to base the search on | ||
88 | * @offset: The bit number to start searching at | ||
89 | * @size: The maximum size to search | ||
90 | */ | ||
91 | int find_next_bit(const unsigned long *addr, int size, int offset); | ||
92 | |||
93 | /** | ||
94 | * ffz - find first zero in word. | ||
95 | * @word: The word to search | ||
96 | * | ||
97 | * Undefined if no zero exists, so code should check against ~0UL first. | ||
98 | */ | ||
99 | static inline unsigned long ffz(unsigned long word) | ||
100 | { | ||
101 | __asm__("bsfl %1,%0" | ||
102 | :"=r" (word) | ||
103 | :"r" (~word)); | ||
104 | return word; | ||
105 | } | ||
106 | |||
107 | #ifdef __KERNEL__ | ||
108 | |||
109 | #include <asm-generic/bitops/sched.h> | ||
110 | |||
111 | /** | ||
112 | * ffs - find first bit set | ||
113 | * @x: the word to search | ||
114 | * | ||
115 | * This is defined the same way as | ||
116 | * the libc and compiler builtin ffs routines, therefore | ||
117 | * differs in spirit from the above ffz() (man ffs). | ||
118 | */ | ||
119 | static inline int ffs(int x) | ||
120 | { | ||
121 | int r; | ||
122 | |||
123 | __asm__("bsfl %1,%0\n\t" | ||
124 | "jnz 1f\n\t" | ||
125 | "movl $-1,%0\n" | ||
126 | "1:" : "=r" (r) : "rm" (x)); | ||
127 | return r+1; | ||
128 | } | ||
129 | |||
130 | /** | ||
131 | * fls - find last bit set | ||
132 | * @x: the word to search | ||
133 | * | ||
134 | * This is defined the same way as ffs(). | ||
135 | */ | ||
136 | static inline int fls(int x) | ||
137 | { | ||
138 | int r; | ||
139 | |||
140 | __asm__("bsrl %1,%0\n\t" | ||
141 | "jnz 1f\n\t" | ||
142 | "movl $-1,%0\n" | ||
143 | "1:" : "=r" (r) : "rm" (x)); | ||
144 | return r+1; | ||
145 | } | ||
146 | |||
147 | #include <asm-generic/bitops/hweight.h> | ||
148 | |||
149 | #endif /* __KERNEL__ */ | ||
150 | |||
151 | #include <asm-generic/bitops/fls64.h> | ||
152 | |||
153 | #ifdef __KERNEL__ | ||
154 | |||
155 | #include <asm-generic/bitops/ext2-non-atomic.h> | ||
156 | |||
157 | #define ext2_set_bit_atomic(lock, nr, addr) \ | ||
158 | test_and_set_bit((nr), (unsigned long *)(addr)) | ||
159 | #define ext2_clear_bit_atomic(lock, nr, addr) \ | ||
160 | test_and_clear_bit((nr), (unsigned long *)(addr)) | ||
161 | |||
162 | #include <asm-generic/bitops/minix.h> | ||
163 | |||
164 | #endif /* __KERNEL__ */ | ||
165 | |||
166 | #endif /* _I386_BITOPS_H */ | ||
diff --git a/include/asm-x86/bitops_64.h b/include/asm-x86/bitops_64.h deleted file mode 100644 index 365f8207ea59..000000000000 --- a/include/asm-x86/bitops_64.h +++ /dev/null | |||
@@ -1,162 +0,0 @@ | |||
1 | #ifndef _X86_64_BITOPS_H | ||
2 | #define _X86_64_BITOPS_H | ||
3 | |||
4 | /* | ||
5 | * Copyright 1992, Linus Torvalds. | ||
6 | */ | ||
7 | |||
8 | extern long find_first_zero_bit(const unsigned long *addr, unsigned long size); | ||
9 | extern long find_next_zero_bit(const unsigned long *addr, long size, long offset); | ||
10 | extern long find_first_bit(const unsigned long *addr, unsigned long size); | ||
11 | extern long find_next_bit(const unsigned long *addr, long size, long offset); | ||
12 | |||
13 | /* return index of first bet set in val or max when no bit is set */ | ||
14 | static inline long __scanbit(unsigned long val, unsigned long max) | ||
15 | { | ||
16 | asm("bsfq %1,%0 ; cmovz %2,%0" : "=&r" (val) : "r" (val), "r" (max)); | ||
17 | return val; | ||
18 | } | ||
19 | |||
20 | #define find_next_bit(addr,size,off) \ | ||
21 | ((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \ | ||
22 | ((off) + (__scanbit((*(unsigned long *)addr) >> (off),(size)-(off)))) : \ | ||
23 | find_next_bit(addr,size,off))) | ||
24 | |||
25 | #define find_next_zero_bit(addr,size,off) \ | ||
26 | ((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \ | ||
27 | ((off)+(__scanbit(~(((*(unsigned long *)addr)) >> (off)),(size)-(off)))) : \ | ||
28 | find_next_zero_bit(addr,size,off))) | ||
29 | |||
30 | #define find_first_bit(addr, size) \ | ||
31 | ((__builtin_constant_p((size)) && (size) <= BITS_PER_LONG \ | ||
32 | ? (__scanbit(*(unsigned long *)(addr), (size))) \ | ||
33 | : find_first_bit((addr), (size)))) | ||
34 | |||
35 | #define find_first_zero_bit(addr, size) \ | ||
36 | ((__builtin_constant_p((size)) && (size) <= BITS_PER_LONG \ | ||
37 | ? (__scanbit(~*(unsigned long *)(addr), (size))) \ | ||
38 | : find_first_zero_bit((addr), (size)))) | ||
39 | |||
40 | static inline void set_bit_string(unsigned long *bitmap, unsigned long i, | ||
41 | int len) | ||
42 | { | ||
43 | unsigned long end = i + len; | ||
44 | while (i < end) { | ||
45 | __set_bit(i, bitmap); | ||
46 | i++; | ||
47 | } | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * ffz - find first zero in word. | ||
52 | * @word: The word to search | ||
53 | * | ||
54 | * Undefined if no zero exists, so code should check against ~0UL first. | ||
55 | */ | ||
56 | static inline unsigned long ffz(unsigned long word) | ||
57 | { | ||
58 | __asm__("bsfq %1,%0" | ||
59 | :"=r" (word) | ||
60 | :"r" (~word)); | ||
61 | return word; | ||
62 | } | ||
63 | |||
64 | /** | ||
65 | * __ffs - find first bit in word. | ||
66 | * @word: The word to search | ||
67 | * | ||
68 | * Undefined if no bit exists, so code should check against 0 first. | ||
69 | */ | ||
70 | static inline unsigned long __ffs(unsigned long word) | ||
71 | { | ||
72 | __asm__("bsfq %1,%0" | ||
73 | :"=r" (word) | ||
74 | :"rm" (word)); | ||
75 | return word; | ||
76 | } | ||
77 | |||
78 | /* | ||
79 | * __fls: find last bit set. | ||
80 | * @word: The word to search | ||
81 | * | ||
82 | * Undefined if no zero exists, so code should check against ~0UL first. | ||
83 | */ | ||
84 | static inline unsigned long __fls(unsigned long word) | ||
85 | { | ||
86 | __asm__("bsrq %1,%0" | ||
87 | :"=r" (word) | ||
88 | :"rm" (word)); | ||
89 | return word; | ||
90 | } | ||
91 | |||
92 | #ifdef __KERNEL__ | ||
93 | |||
94 | #include <asm-generic/bitops/sched.h> | ||
95 | |||
96 | /** | ||
97 | * ffs - find first bit set | ||
98 | * @x: the word to search | ||
99 | * | ||
100 | * This is defined the same way as | ||
101 | * the libc and compiler builtin ffs routines, therefore | ||
102 | * differs in spirit from the above ffz (man ffs). | ||
103 | */ | ||
104 | static inline int ffs(int x) | ||
105 | { | ||
106 | int r; | ||
107 | |||
108 | __asm__("bsfl %1,%0\n\t" | ||
109 | "cmovzl %2,%0" | ||
110 | : "=r" (r) : "rm" (x), "r" (-1)); | ||
111 | return r+1; | ||
112 | } | ||
113 | |||
114 | /** | ||
115 | * fls64 - find last bit set in 64 bit word | ||
116 | * @x: the word to search | ||
117 | * | ||
118 | * This is defined the same way as fls. | ||
119 | */ | ||
120 | static inline int fls64(__u64 x) | ||
121 | { | ||
122 | if (x == 0) | ||
123 | return 0; | ||
124 | return __fls(x) + 1; | ||
125 | } | ||
126 | |||
127 | /** | ||
128 | * fls - find last bit set | ||
129 | * @x: the word to search | ||
130 | * | ||
131 | * This is defined the same way as ffs. | ||
132 | */ | ||
133 | static inline int fls(int x) | ||
134 | { | ||
135 | int r; | ||
136 | |||
137 | __asm__("bsrl %1,%0\n\t" | ||
138 | "cmovzl %2,%0" | ||
139 | : "=&r" (r) : "rm" (x), "rm" (-1)); | ||
140 | return r+1; | ||
141 | } | ||
142 | |||
143 | #define ARCH_HAS_FAST_MULTIPLIER 1 | ||
144 | |||
145 | #include <asm-generic/bitops/hweight.h> | ||
146 | |||
147 | #endif /* __KERNEL__ */ | ||
148 | |||
149 | #ifdef __KERNEL__ | ||
150 | |||
151 | #include <asm-generic/bitops/ext2-non-atomic.h> | ||
152 | |||
153 | #define ext2_set_bit_atomic(lock, nr, addr) \ | ||
154 | test_and_set_bit((nr), (unsigned long *)(addr)) | ||
155 | #define ext2_clear_bit_atomic(lock, nr, addr) \ | ||
156 | test_and_clear_bit((nr), (unsigned long *)(addr)) | ||
157 | |||
158 | #include <asm-generic/bitops/minix.h> | ||
159 | |||
160 | #endif /* __KERNEL__ */ | ||
161 | |||
162 | #endif /* _X86_64_BITOPS_H */ | ||
diff --git a/include/asm-x86/bootparam.h b/include/asm-x86/bootparam.h index 51151356840f..e8659909e5f6 100644 --- a/include/asm-x86/bootparam.h +++ b/include/asm-x86/bootparam.h | |||
@@ -9,6 +9,17 @@ | |||
9 | #include <asm/ist.h> | 9 | #include <asm/ist.h> |
10 | #include <video/edid.h> | 10 | #include <video/edid.h> |
11 | 11 | ||
12 | /* setup data types */ | ||
13 | #define SETUP_NONE 0 | ||
14 | |||
15 | /* extensible setup data list node */ | ||
16 | struct setup_data { | ||
17 | u64 next; | ||
18 | u32 type; | ||
19 | u32 len; | ||
20 | u8 data[0]; | ||
21 | }; | ||
22 | |||
12 | struct setup_header { | 23 | struct setup_header { |
13 | __u8 setup_sects; | 24 | __u8 setup_sects; |
14 | __u16 root_flags; | 25 | __u16 root_flags; |
@@ -46,6 +57,9 @@ struct setup_header { | |||
46 | __u32 cmdline_size; | 57 | __u32 cmdline_size; |
47 | __u32 hardware_subarch; | 58 | __u32 hardware_subarch; |
48 | __u64 hardware_subarch_data; | 59 | __u64 hardware_subarch_data; |
60 | __u32 payload_offset; | ||
61 | __u32 payload_length; | ||
62 | __u64 setup_data; | ||
49 | } __attribute__((packed)); | 63 | } __attribute__((packed)); |
50 | 64 | ||
51 | struct sys_desc_table { | 65 | struct sys_desc_table { |
diff --git a/include/asm-x86/e820_64.h b/include/asm-x86/e820_64.h index f478c57eb060..71c4d685d30d 100644 --- a/include/asm-x86/e820_64.h +++ b/include/asm-x86/e820_64.h | |||
@@ -48,7 +48,8 @@ extern struct e820map e820; | |||
48 | extern void update_e820(void); | 48 | extern void update_e820(void); |
49 | 49 | ||
50 | extern void reserve_early(unsigned long start, unsigned long end, char *name); | 50 | extern void reserve_early(unsigned long start, unsigned long end, char *name); |
51 | extern void early_res_to_bootmem(void); | 51 | extern void free_early(unsigned long start, unsigned long end); |
52 | extern void early_res_to_bootmem(unsigned long start, unsigned long end); | ||
52 | 53 | ||
53 | #endif/*!__ASSEMBLY__*/ | 54 | #endif/*!__ASSEMBLY__*/ |
54 | 55 | ||
diff --git a/include/asm-x86/fixmap.h b/include/asm-x86/fixmap.h index 382eb271a892..5bd206973dca 100644 --- a/include/asm-x86/fixmap.h +++ b/include/asm-x86/fixmap.h | |||
@@ -1,5 +1,13 @@ | |||
1 | #ifndef _ASM_FIXMAP_H | ||
2 | #define _ASM_FIXMAP_H | ||
3 | |||
1 | #ifdef CONFIG_X86_32 | 4 | #ifdef CONFIG_X86_32 |
2 | # include "fixmap_32.h" | 5 | # include "fixmap_32.h" |
3 | #else | 6 | #else |
4 | # include "fixmap_64.h" | 7 | # include "fixmap_64.h" |
5 | #endif | 8 | #endif |
9 | |||
10 | #define clear_fixmap(idx) \ | ||
11 | __set_fixmap(idx, 0, __pgprot(0)) | ||
12 | |||
13 | #endif | ||
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h index eb1665125c44..4b96148e90c1 100644 --- a/include/asm-x86/fixmap_32.h +++ b/include/asm-x86/fixmap_32.h | |||
@@ -10,8 +10,8 @@ | |||
10 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 | 10 | * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #ifndef _ASM_FIXMAP_H | 13 | #ifndef _ASM_FIXMAP_32_H |
14 | #define _ASM_FIXMAP_H | 14 | #define _ASM_FIXMAP_32_H |
15 | 15 | ||
16 | 16 | ||
17 | /* used by vmalloc.c, vsyscall.lds.S. | 17 | /* used by vmalloc.c, vsyscall.lds.S. |
@@ -121,9 +121,6 @@ extern void reserve_top_address(unsigned long reserve); | |||
121 | #define set_fixmap_nocache(idx, phys) \ | 121 | #define set_fixmap_nocache(idx, phys) \ |
122 | __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) | 122 | __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) |
123 | 123 | ||
124 | #define clear_fixmap(idx) \ | ||
125 | __set_fixmap(idx, 0, __pgprot(0)) | ||
126 | |||
127 | #define FIXADDR_TOP ((unsigned long)__FIXADDR_TOP) | 124 | #define FIXADDR_TOP ((unsigned long)__FIXADDR_TOP) |
128 | 125 | ||
129 | #define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) | 126 | #define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
diff --git a/include/asm-x86/fixmap_64.h b/include/asm-x86/fixmap_64.h index f3d76858c0e6..355d26a75a82 100644 --- a/include/asm-x86/fixmap_64.h +++ b/include/asm-x86/fixmap_64.h | |||
@@ -8,8 +8,8 @@ | |||
8 | * Copyright (C) 1998 Ingo Molnar | 8 | * Copyright (C) 1998 Ingo Molnar |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef _ASM_FIXMAP_H | 11 | #ifndef _ASM_FIXMAP_64_H |
12 | #define _ASM_FIXMAP_H | 12 | #define _ASM_FIXMAP_64_H |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <asm/apicdef.h> | 15 | #include <asm/apicdef.h> |
diff --git a/include/asm-x86/geode.h b/include/asm-x86/geode.h index 9870cc1f2f8f..7154dc4de951 100644 --- a/include/asm-x86/geode.h +++ b/include/asm-x86/geode.h | |||
@@ -30,7 +30,13 @@ extern int geode_get_dev_base(unsigned int dev); | |||
30 | 30 | ||
31 | /* MSRS */ | 31 | /* MSRS */ |
32 | 32 | ||
33 | #define GX_GLCP_SYS_RSTPLL 0x4C000014 | 33 | #define MSR_GLIU_P2D_RO0 0x10000029 |
34 | |||
35 | #define MSR_LX_GLD_MSR_CONFIG 0x48002001 | ||
36 | #define MSR_LX_MSR_PADSEL 0x48002011 /* NOT 0x48000011; the data | ||
37 | * sheet has the wrong value */ | ||
38 | #define MSR_GLCP_SYS_RSTPLL 0x4C000014 | ||
39 | #define MSR_GLCP_DOTPLL 0x4C000015 | ||
34 | 40 | ||
35 | #define MSR_LBAR_SMB 0x5140000B | 41 | #define MSR_LBAR_SMB 0x5140000B |
36 | #define MSR_LBAR_GPIO 0x5140000C | 42 | #define MSR_LBAR_GPIO 0x5140000C |
@@ -45,8 +51,14 @@ extern int geode_get_dev_base(unsigned int dev); | |||
45 | #define MSR_PIC_ZSEL_LOW 0x51400022 | 51 | #define MSR_PIC_ZSEL_LOW 0x51400022 |
46 | #define MSR_PIC_ZSEL_HIGH 0x51400023 | 52 | #define MSR_PIC_ZSEL_HIGH 0x51400023 |
47 | 53 | ||
48 | #define MFGPT_IRQ_MSR 0x51400028 | 54 | #define MSR_MFGPT_IRQ 0x51400028 |
49 | #define MFGPT_NR_MSR 0x51400029 | 55 | #define MSR_MFGPT_NR 0x51400029 |
56 | #define MSR_MFGPT_SETUP 0x5140002B | ||
57 | |||
58 | #define MSR_LX_SPARE_MSR 0x80000011 /* DC-specific */ | ||
59 | |||
60 | #define MSR_GX_GLD_MSR_CONFIG 0xC0002001 | ||
61 | #define MSR_GX_MSR_PADSEL 0xC0002011 | ||
50 | 62 | ||
51 | /* Resource Sizes */ | 63 | /* Resource Sizes */ |
52 | 64 | ||
@@ -93,6 +105,15 @@ extern int geode_get_dev_base(unsigned int dev); | |||
93 | #define PM_AWKD 0x50 | 105 | #define PM_AWKD 0x50 |
94 | #define PM_SSC 0x54 | 106 | #define PM_SSC 0x54 |
95 | 107 | ||
108 | /* VSA2 magic values */ | ||
109 | |||
110 | #define VSA_VRC_INDEX 0xAC1C | ||
111 | #define VSA_VRC_DATA 0xAC1E | ||
112 | #define VSA_VR_UNLOCK 0xFC53 /* unlock virtual register */ | ||
113 | #define VSA_VR_SIGNATURE 0x0003 | ||
114 | #define VSA_VR_MEM_SIZE 0x0200 | ||
115 | #define VSA_SIG 0x4132 /* signature is ascii 'VSA2' */ | ||
116 | |||
96 | /* GPIO */ | 117 | /* GPIO */ |
97 | 118 | ||
98 | #define GPIO_OUTPUT_VAL 0x00 | 119 | #define GPIO_OUTPUT_VAL 0x00 |
@@ -164,6 +185,17 @@ static inline int is_geode(void) | |||
164 | return (is_geode_gx() || is_geode_lx()); | 185 | return (is_geode_gx() || is_geode_lx()); |
165 | } | 186 | } |
166 | 187 | ||
188 | /* | ||
189 | * The VSA has virtual registers that we can query for a signature. | ||
190 | */ | ||
191 | static inline int geode_has_vsa2(void) | ||
192 | { | ||
193 | outw(VSA_VR_UNLOCK, VSA_VRC_INDEX); | ||
194 | outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX); | ||
195 | |||
196 | return (inw(VSA_VRC_DATA) == VSA_SIG); | ||
197 | } | ||
198 | |||
167 | /* MFGPTs */ | 199 | /* MFGPTs */ |
168 | 200 | ||
169 | #define MFGPT_MAX_TIMERS 8 | 201 | #define MFGPT_MAX_TIMERS 8 |
diff --git a/include/asm-x86/hugetlb.h b/include/asm-x86/hugetlb.h new file mode 100644 index 000000000000..14171a4924f6 --- /dev/null +++ b/include/asm-x86/hugetlb.h | |||
@@ -0,0 +1,91 @@ | |||
1 | #ifndef _ASM_X86_HUGETLB_H | ||
2 | #define _ASM_X86_HUGETLB_H | ||
3 | |||
4 | #include <asm/page.h> | ||
5 | |||
6 | |||
7 | static inline int is_hugepage_only_range(struct mm_struct *mm, | ||
8 | unsigned long addr, | ||
9 | unsigned long len) { | ||
10 | return 0; | ||
11 | } | ||
12 | |||
13 | /* | ||
14 | * If the arch doesn't supply something else, assume that hugepage | ||
15 | * size aligned regions are ok without further preparation. | ||
16 | */ | ||
17 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | ||
18 | { | ||
19 | if (len & ~HPAGE_MASK) | ||
20 | return -EINVAL; | ||
21 | if (addr & ~HPAGE_MASK) | ||
22 | return -EINVAL; | ||
23 | return 0; | ||
24 | } | ||
25 | |||
26 | static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) { | ||
27 | } | ||
28 | |||
29 | static inline void hugetlb_free_pgd_range(struct mmu_gather **tlb, | ||
30 | unsigned long addr, unsigned long end, | ||
31 | unsigned long floor, | ||
32 | unsigned long ceiling) | ||
33 | { | ||
34 | free_pgd_range(tlb, addr, end, floor, ceiling); | ||
35 | } | ||
36 | |||
37 | static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
38 | pte_t *ptep, pte_t pte) | ||
39 | { | ||
40 | set_pte_at(mm, addr, ptep, pte); | ||
41 | } | ||
42 | |||
43 | static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm, | ||
44 | unsigned long addr, pte_t *ptep) | ||
45 | { | ||
46 | return ptep_get_and_clear(mm, addr, ptep); | ||
47 | } | ||
48 | |||
49 | static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, | ||
50 | unsigned long addr, pte_t *ptep) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | static inline int huge_pte_none(pte_t pte) | ||
55 | { | ||
56 | return pte_none(pte); | ||
57 | } | ||
58 | |||
59 | static inline pte_t huge_pte_wrprotect(pte_t pte) | ||
60 | { | ||
61 | return pte_wrprotect(pte); | ||
62 | } | ||
63 | |||
64 | static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, | ||
65 | unsigned long addr, pte_t *ptep) | ||
66 | { | ||
67 | ptep_set_wrprotect(mm, addr, ptep); | ||
68 | } | ||
69 | |||
70 | static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, | ||
71 | unsigned long addr, pte_t *ptep, | ||
72 | pte_t pte, int dirty) | ||
73 | { | ||
74 | return ptep_set_access_flags(vma, addr, ptep, pte, dirty); | ||
75 | } | ||
76 | |||
77 | static inline pte_t huge_ptep_get(pte_t *ptep) | ||
78 | { | ||
79 | return *ptep; | ||
80 | } | ||
81 | |||
82 | static inline int arch_prepare_hugepage(struct page *page) | ||
83 | { | ||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | static inline void arch_release_hugepage(struct page *page) | ||
88 | { | ||
89 | } | ||
90 | |||
91 | #endif /* _ASM_X86_HUGETLB_H */ | ||
diff --git a/include/asm-x86/io.h b/include/asm-x86/io.h index 7b292d386713..d5b11f60dbd0 100644 --- a/include/asm-x86/io.h +++ b/include/asm-x86/io.h | |||
@@ -1,3 +1,6 @@ | |||
1 | #ifndef _ASM_X86_IO_H | ||
2 | #define _ASM_X86_IO_H | ||
3 | |||
1 | #define ARCH_HAS_IOREMAP_WC | 4 | #define ARCH_HAS_IOREMAP_WC |
2 | 5 | ||
3 | #ifdef CONFIG_X86_32 | 6 | #ifdef CONFIG_X86_32 |
@@ -5,7 +8,12 @@ | |||
5 | #else | 8 | #else |
6 | # include "io_64.h" | 9 | # include "io_64.h" |
7 | #endif | 10 | #endif |
11 | |||
12 | extern void *xlate_dev_mem_ptr(unsigned long phys); | ||
13 | extern void unxlate_dev_mem_ptr(unsigned long phys, void *addr); | ||
14 | |||
8 | extern int ioremap_change_attr(unsigned long vaddr, unsigned long size, | 15 | extern int ioremap_change_attr(unsigned long vaddr, unsigned long size, |
9 | unsigned long prot_val); | 16 | unsigned long prot_val); |
10 | extern void __iomem *ioremap_wc(unsigned long offset, unsigned long size); | 17 | extern void __iomem *ioremap_wc(unsigned long offset, unsigned long size); |
11 | 18 | ||
19 | #endif /* _ASM_X86_IO_H */ | ||
diff --git a/include/asm-x86/io_32.h b/include/asm-x86/io_32.h index 509045f5fda2..6e73467a4fb1 100644 --- a/include/asm-x86/io_32.h +++ b/include/asm-x86/io_32.h | |||
@@ -49,12 +49,6 @@ | |||
49 | #include <linux/vmalloc.h> | 49 | #include <linux/vmalloc.h> |
50 | 50 | ||
51 | /* | 51 | /* |
52 | * Convert a physical pointer to a virtual kernel pointer for /dev/mem | ||
53 | * access | ||
54 | */ | ||
55 | #define xlate_dev_mem_ptr(p) __va(p) | ||
56 | |||
57 | /* | ||
58 | * Convert a virtual cached pointer to an uncached pointer | 52 | * Convert a virtual cached pointer to an uncached pointer |
59 | */ | 53 | */ |
60 | #define xlate_dev_kmem_ptr(p) p | 54 | #define xlate_dev_kmem_ptr(p) p |
diff --git a/include/asm-x86/io_64.h b/include/asm-x86/io_64.h index c2f5eef47b88..0930bedf9e4d 100644 --- a/include/asm-x86/io_64.h +++ b/include/asm-x86/io_64.h | |||
@@ -308,12 +308,6 @@ extern int iommu_bio_merge; | |||
308 | #define BIO_VMERGE_BOUNDARY iommu_bio_merge | 308 | #define BIO_VMERGE_BOUNDARY iommu_bio_merge |
309 | 309 | ||
310 | /* | 310 | /* |
311 | * Convert a physical pointer to a virtual kernel pointer for /dev/mem | ||
312 | * access | ||
313 | */ | ||
314 | #define xlate_dev_mem_ptr(p) __va(p) | ||
315 | |||
316 | /* | ||
317 | * Convert a virtual cached pointer to an uncached pointer | 311 | * Convert a virtual cached pointer to an uncached pointer |
318 | */ | 312 | */ |
319 | #define xlate_dev_kmem_ptr(p) p | 313 | #define xlate_dev_kmem_ptr(p) p |
diff --git a/include/asm-x86/io_apic.h b/include/asm-x86/io_apic.h index 0c9e17c73e05..d593e14f0341 100644 --- a/include/asm-x86/io_apic.h +++ b/include/asm-x86/io_apic.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef __ASM_IO_APIC_H | 1 | #ifndef __ASM_IO_APIC_H |
2 | #define __ASM_IO_APIC_H | 2 | #define __ASM_IO_APIC_H |
3 | 3 | ||
4 | #include <asm/types.h> | 4 | #include <linux/types.h> |
5 | #include <asm/mpspec.h> | 5 | #include <asm/mpspec.h> |
6 | #include <asm/apicdef.h> | 6 | #include <asm/apicdef.h> |
7 | 7 | ||
@@ -110,11 +110,13 @@ extern int nr_ioapic_registers[MAX_IO_APICS]; | |||
110 | * MP-BIOS irq configuration table structures: | 110 | * MP-BIOS irq configuration table structures: |
111 | */ | 111 | */ |
112 | 112 | ||
113 | #define MP_MAX_IOAPIC_PIN 127 | ||
114 | |||
113 | struct mp_ioapic_routing { | 115 | struct mp_ioapic_routing { |
114 | int apic_id; | 116 | int apic_id; |
115 | int gsi_base; | 117 | int gsi_base; |
116 | int gsi_end; | 118 | int gsi_end; |
117 | u32 pin_programmed[4]; | 119 | DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1); |
118 | }; | 120 | }; |
119 | 121 | ||
120 | /* I/O APIC entries */ | 122 | /* I/O APIC entries */ |
diff --git a/include/asm-x86/kvm.h b/include/asm-x86/kvm.h index 7a71120426a3..80eefef2cc76 100644 --- a/include/asm-x86/kvm.h +++ b/include/asm-x86/kvm.h | |||
@@ -188,4 +188,45 @@ struct kvm_cpuid2 { | |||
188 | struct kvm_cpuid_entry2 entries[0]; | 188 | struct kvm_cpuid_entry2 entries[0]; |
189 | }; | 189 | }; |
190 | 190 | ||
191 | /* for KVM_GET_PIT and KVM_SET_PIT */ | ||
192 | struct kvm_pit_channel_state { | ||
193 | __u32 count; /* can be 65536 */ | ||
194 | __u16 latched_count; | ||
195 | __u8 count_latched; | ||
196 | __u8 status_latched; | ||
197 | __u8 status; | ||
198 | __u8 read_state; | ||
199 | __u8 write_state; | ||
200 | __u8 write_latch; | ||
201 | __u8 rw_mode; | ||
202 | __u8 mode; | ||
203 | __u8 bcd; | ||
204 | __u8 gate; | ||
205 | __s64 count_load_time; | ||
206 | }; | ||
207 | |||
208 | struct kvm_pit_state { | ||
209 | struct kvm_pit_channel_state channels[3]; | ||
210 | }; | ||
211 | |||
212 | #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) | ||
213 | #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) | ||
214 | #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) | ||
215 | #define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) | ||
216 | #define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) | ||
217 | #define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) | ||
218 | #define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) | ||
219 | #define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) | ||
220 | #define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) | ||
221 | #define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) | ||
222 | #define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) | ||
223 | #define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) | ||
224 | #define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) | ||
225 | #define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) | ||
226 | #define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) | ||
227 | #define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) | ||
228 | #define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) | ||
229 | #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) | ||
230 | #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) | ||
231 | |||
191 | #endif | 232 | #endif |
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h index 68ee390b2844..9d963cd6533c 100644 --- a/include/asm-x86/kvm_host.h +++ b/include/asm-x86/kvm_host.h | |||
@@ -20,6 +20,13 @@ | |||
20 | 20 | ||
21 | #include <asm/desc.h> | 21 | #include <asm/desc.h> |
22 | 22 | ||
23 | #define KVM_MAX_VCPUS 16 | ||
24 | #define KVM_MEMORY_SLOTS 32 | ||
25 | /* memory slots that does not exposed to userspace */ | ||
26 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
27 | |||
28 | #define KVM_PIO_PAGE_OFFSET 1 | ||
29 | |||
23 | #define CR3_PAE_RESERVED_BITS ((X86_CR3_PWT | X86_CR3_PCD) - 1) | 30 | #define CR3_PAE_RESERVED_BITS ((X86_CR3_PWT | X86_CR3_PCD) - 1) |
24 | #define CR3_NONPAE_RESERVED_BITS ((PAGE_SIZE-1) & ~(X86_CR3_PWT | X86_CR3_PCD)) | 31 | #define CR3_NONPAE_RESERVED_BITS ((PAGE_SIZE-1) & ~(X86_CR3_PWT | X86_CR3_PCD)) |
25 | #define CR3_L_MODE_RESERVED_BITS (CR3_NONPAE_RESERVED_BITS | \ | 32 | #define CR3_L_MODE_RESERVED_BITS (CR3_NONPAE_RESERVED_BITS | \ |
@@ -39,6 +46,13 @@ | |||
39 | #define INVALID_PAGE (~(hpa_t)0) | 46 | #define INVALID_PAGE (~(hpa_t)0) |
40 | #define UNMAPPED_GVA (~(gpa_t)0) | 47 | #define UNMAPPED_GVA (~(gpa_t)0) |
41 | 48 | ||
49 | /* shadow tables are PAE even on non-PAE hosts */ | ||
50 | #define KVM_HPAGE_SHIFT 21 | ||
51 | #define KVM_HPAGE_SIZE (1UL << KVM_HPAGE_SHIFT) | ||
52 | #define KVM_HPAGE_MASK (~(KVM_HPAGE_SIZE - 1)) | ||
53 | |||
54 | #define KVM_PAGES_PER_HPAGE (KVM_HPAGE_SIZE / PAGE_SIZE) | ||
55 | |||
42 | #define DE_VECTOR 0 | 56 | #define DE_VECTOR 0 |
43 | #define UD_VECTOR 6 | 57 | #define UD_VECTOR 6 |
44 | #define NM_VECTOR 7 | 58 | #define NM_VECTOR 7 |
@@ -48,6 +62,7 @@ | |||
48 | #define SS_VECTOR 12 | 62 | #define SS_VECTOR 12 |
49 | #define GP_VECTOR 13 | 63 | #define GP_VECTOR 13 |
50 | #define PF_VECTOR 14 | 64 | #define PF_VECTOR 14 |
65 | #define MC_VECTOR 18 | ||
51 | 66 | ||
52 | #define SELECTOR_TI_MASK (1 << 2) | 67 | #define SELECTOR_TI_MASK (1 << 2) |
53 | #define SELECTOR_RPL_MASK 0x03 | 68 | #define SELECTOR_RPL_MASK 0x03 |
@@ -58,7 +73,8 @@ | |||
58 | 73 | ||
59 | #define KVM_PERMILLE_MMU_PAGES 20 | 74 | #define KVM_PERMILLE_MMU_PAGES 20 |
60 | #define KVM_MIN_ALLOC_MMU_PAGES 64 | 75 | #define KVM_MIN_ALLOC_MMU_PAGES 64 |
61 | #define KVM_NUM_MMU_PAGES 1024 | 76 | #define KVM_MMU_HASH_SHIFT 10 |
77 | #define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT) | ||
62 | #define KVM_MIN_FREE_MMU_PAGES 5 | 78 | #define KVM_MIN_FREE_MMU_PAGES 5 |
63 | #define KVM_REFILL_PAGES 25 | 79 | #define KVM_REFILL_PAGES 25 |
64 | #define KVM_MAX_CPUID_ENTRIES 40 | 80 | #define KVM_MAX_CPUID_ENTRIES 40 |
@@ -106,6 +122,12 @@ enum { | |||
106 | 122 | ||
107 | #define KVM_NR_MEM_OBJS 40 | 123 | #define KVM_NR_MEM_OBJS 40 |
108 | 124 | ||
125 | struct kvm_guest_debug { | ||
126 | int enabled; | ||
127 | unsigned long bp[4]; | ||
128 | int singlestep; | ||
129 | }; | ||
130 | |||
109 | /* | 131 | /* |
110 | * We don't want allocation failures within the mmu code, so we preallocate | 132 | * We don't want allocation failures within the mmu code, so we preallocate |
111 | * enough memory for a single page fault in a cache. | 133 | * enough memory for a single page fault in a cache. |
@@ -140,6 +162,7 @@ union kvm_mmu_page_role { | |||
140 | unsigned pad_for_nice_hex_output:6; | 162 | unsigned pad_for_nice_hex_output:6; |
141 | unsigned metaphysical:1; | 163 | unsigned metaphysical:1; |
142 | unsigned access:3; | 164 | unsigned access:3; |
165 | unsigned invalid:1; | ||
143 | }; | 166 | }; |
144 | }; | 167 | }; |
145 | 168 | ||
@@ -204,11 +227,6 @@ struct kvm_vcpu_arch { | |||
204 | u64 shadow_efer; | 227 | u64 shadow_efer; |
205 | u64 apic_base; | 228 | u64 apic_base; |
206 | struct kvm_lapic *apic; /* kernel irqchip context */ | 229 | struct kvm_lapic *apic; /* kernel irqchip context */ |
207 | #define VCPU_MP_STATE_RUNNABLE 0 | ||
208 | #define VCPU_MP_STATE_UNINITIALIZED 1 | ||
209 | #define VCPU_MP_STATE_INIT_RECEIVED 2 | ||
210 | #define VCPU_MP_STATE_SIPI_RECEIVED 3 | ||
211 | #define VCPU_MP_STATE_HALTED 4 | ||
212 | int mp_state; | 230 | int mp_state; |
213 | int sipi_vector; | 231 | int sipi_vector; |
214 | u64 ia32_misc_enable_msr; | 232 | u64 ia32_misc_enable_msr; |
@@ -226,8 +244,9 @@ struct kvm_vcpu_arch { | |||
226 | u64 *last_pte_updated; | 244 | u64 *last_pte_updated; |
227 | 245 | ||
228 | struct { | 246 | struct { |
229 | gfn_t gfn; /* presumed gfn during guest pte update */ | 247 | gfn_t gfn; /* presumed gfn during guest pte update */ |
230 | struct page *page; /* page corresponding to that gfn */ | 248 | pfn_t pfn; /* pfn corresponding to that gfn */ |
249 | int largepage; | ||
231 | } update_pte; | 250 | } update_pte; |
232 | 251 | ||
233 | struct i387_fxsave_struct host_fx_image; | 252 | struct i387_fxsave_struct host_fx_image; |
@@ -261,6 +280,11 @@ struct kvm_vcpu_arch { | |||
261 | /* emulate context */ | 280 | /* emulate context */ |
262 | 281 | ||
263 | struct x86_emulate_ctxt emulate_ctxt; | 282 | struct x86_emulate_ctxt emulate_ctxt; |
283 | |||
284 | gpa_t time; | ||
285 | struct kvm_vcpu_time_info hv_clock; | ||
286 | unsigned int time_offset; | ||
287 | struct page *time_page; | ||
264 | }; | 288 | }; |
265 | 289 | ||
266 | struct kvm_mem_alias { | 290 | struct kvm_mem_alias { |
@@ -283,10 +307,13 @@ struct kvm_arch{ | |||
283 | struct list_head active_mmu_pages; | 307 | struct list_head active_mmu_pages; |
284 | struct kvm_pic *vpic; | 308 | struct kvm_pic *vpic; |
285 | struct kvm_ioapic *vioapic; | 309 | struct kvm_ioapic *vioapic; |
310 | struct kvm_pit *vpit; | ||
286 | 311 | ||
287 | int round_robin_prev_vcpu; | 312 | int round_robin_prev_vcpu; |
288 | unsigned int tss_addr; | 313 | unsigned int tss_addr; |
289 | struct page *apic_access_page; | 314 | struct page *apic_access_page; |
315 | |||
316 | gpa_t wall_clock; | ||
290 | }; | 317 | }; |
291 | 318 | ||
292 | struct kvm_vm_stat { | 319 | struct kvm_vm_stat { |
@@ -298,6 +325,7 @@ struct kvm_vm_stat { | |||
298 | u32 mmu_recycled; | 325 | u32 mmu_recycled; |
299 | u32 mmu_cache_miss; | 326 | u32 mmu_cache_miss; |
300 | u32 remote_tlb_flush; | 327 | u32 remote_tlb_flush; |
328 | u32 lpages; | ||
301 | }; | 329 | }; |
302 | 330 | ||
303 | struct kvm_vcpu_stat { | 331 | struct kvm_vcpu_stat { |
@@ -320,6 +348,7 @@ struct kvm_vcpu_stat { | |||
320 | u32 fpu_reload; | 348 | u32 fpu_reload; |
321 | u32 insn_emulation; | 349 | u32 insn_emulation; |
322 | u32 insn_emulation_fail; | 350 | u32 insn_emulation_fail; |
351 | u32 hypercalls; | ||
323 | }; | 352 | }; |
324 | 353 | ||
325 | struct descriptor_table { | 354 | struct descriptor_table { |
@@ -355,6 +384,7 @@ struct kvm_x86_ops { | |||
355 | u64 (*get_segment_base)(struct kvm_vcpu *vcpu, int seg); | 384 | u64 (*get_segment_base)(struct kvm_vcpu *vcpu, int seg); |
356 | void (*get_segment)(struct kvm_vcpu *vcpu, | 385 | void (*get_segment)(struct kvm_vcpu *vcpu, |
357 | struct kvm_segment *var, int seg); | 386 | struct kvm_segment *var, int seg); |
387 | int (*get_cpl)(struct kvm_vcpu *vcpu); | ||
358 | void (*set_segment)(struct kvm_vcpu *vcpu, | 388 | void (*set_segment)(struct kvm_vcpu *vcpu, |
359 | struct kvm_segment *var, int seg); | 389 | struct kvm_segment *var, int seg); |
360 | void (*get_cs_db_l_bits)(struct kvm_vcpu *vcpu, int *db, int *l); | 390 | void (*get_cs_db_l_bits)(struct kvm_vcpu *vcpu, int *db, int *l); |
@@ -410,6 +440,15 @@ void kvm_mmu_zap_all(struct kvm *kvm); | |||
410 | unsigned int kvm_mmu_calculate_mmu_pages(struct kvm *kvm); | 440 | unsigned int kvm_mmu_calculate_mmu_pages(struct kvm *kvm); |
411 | void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages); | 441 | void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages); |
412 | 442 | ||
443 | int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); | ||
444 | |||
445 | int emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa, | ||
446 | const void *val, int bytes); | ||
447 | int kvm_pv_mmu_op(struct kvm_vcpu *vcpu, unsigned long bytes, | ||
448 | gpa_t addr, unsigned long *ret); | ||
449 | |||
450 | extern bool tdp_enabled; | ||
451 | |||
413 | enum emulation_result { | 452 | enum emulation_result { |
414 | EMULATE_DONE, /* no further processing */ | 453 | EMULATE_DONE, /* no further processing */ |
415 | EMULATE_DO_MMIO, /* kvm_run filled with mmio request */ | 454 | EMULATE_DO_MMIO, /* kvm_run filled with mmio request */ |
@@ -429,6 +468,7 @@ void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, | |||
429 | unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr); | 468 | unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr); |
430 | void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long value, | 469 | void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long value, |
431 | unsigned long *rflags); | 470 | unsigned long *rflags); |
471 | void kvm_enable_efer_bits(u64); | ||
432 | int kvm_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *data); | 472 | int kvm_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *data); |
433 | int kvm_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data); | 473 | int kvm_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data); |
434 | 474 | ||
@@ -448,12 +488,14 @@ int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr, | |||
448 | int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, | 488 | int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, |
449 | unsigned long value); | 489 | unsigned long value); |
450 | 490 | ||
451 | void set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); | 491 | int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason); |
452 | void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr0); | 492 | |
453 | void set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0); | 493 | void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); |
454 | void set_cr8(struct kvm_vcpu *vcpu, unsigned long cr0); | 494 | void kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3); |
455 | unsigned long get_cr8(struct kvm_vcpu *vcpu); | 495 | void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4); |
456 | void lmsw(struct kvm_vcpu *vcpu, unsigned long msw); | 496 | void kvm_set_cr8(struct kvm_vcpu *vcpu, unsigned long cr8); |
497 | unsigned long kvm_get_cr8(struct kvm_vcpu *vcpu); | ||
498 | void kvm_lmsw(struct kvm_vcpu *vcpu, unsigned long msw); | ||
457 | void kvm_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l); | 499 | void kvm_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l); |
458 | 500 | ||
459 | int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata); | 501 | int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata); |
@@ -491,6 +533,8 @@ int kvm_fix_hypercall(struct kvm_vcpu *vcpu); | |||
491 | 533 | ||
492 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); | 534 | int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code); |
493 | 535 | ||
536 | void kvm_enable_tdp(void); | ||
537 | |||
494 | int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); | 538 | int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3); |
495 | int complete_pio(struct kvm_vcpu *vcpu); | 539 | int complete_pio(struct kvm_vcpu *vcpu); |
496 | 540 | ||
@@ -600,6 +644,7 @@ static inline void kvm_inject_gp(struct kvm_vcpu *vcpu, u32 error_code) | |||
600 | #define ASM_VMX_VMWRITE_RSP_RDX ".byte 0x0f, 0x79, 0xd4" | 644 | #define ASM_VMX_VMWRITE_RSP_RDX ".byte 0x0f, 0x79, 0xd4" |
601 | #define ASM_VMX_VMXOFF ".byte 0x0f, 0x01, 0xc4" | 645 | #define ASM_VMX_VMXOFF ".byte 0x0f, 0x01, 0xc4" |
602 | #define ASM_VMX_VMXON_RAX ".byte 0xf3, 0x0f, 0xc7, 0x30" | 646 | #define ASM_VMX_VMXON_RAX ".byte 0xf3, 0x0f, 0xc7, 0x30" |
647 | #define ASM_VMX_INVVPID ".byte 0x66, 0x0f, 0x38, 0x81, 0x08" | ||
603 | 648 | ||
604 | #define MSR_IA32_TIME_STAMP_COUNTER 0x010 | 649 | #define MSR_IA32_TIME_STAMP_COUNTER 0x010 |
605 | 650 | ||
@@ -610,4 +655,30 @@ static inline void kvm_inject_gp(struct kvm_vcpu *vcpu, u32 error_code) | |||
610 | #define RMODE_TSS_SIZE \ | 655 | #define RMODE_TSS_SIZE \ |
611 | (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1) | 656 | (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1) |
612 | 657 | ||
658 | enum { | ||
659 | TASK_SWITCH_CALL = 0, | ||
660 | TASK_SWITCH_IRET = 1, | ||
661 | TASK_SWITCH_JMP = 2, | ||
662 | TASK_SWITCH_GATE = 3, | ||
663 | }; | ||
664 | |||
665 | #define KVMTRACE_5D(evt, vcpu, d1, d2, d3, d4, d5, name) \ | ||
666 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
667 | vcpu, 5, d1, d2, d3, d4, d5) | ||
668 | #define KVMTRACE_4D(evt, vcpu, d1, d2, d3, d4, name) \ | ||
669 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
670 | vcpu, 4, d1, d2, d3, d4, 0) | ||
671 | #define KVMTRACE_3D(evt, vcpu, d1, d2, d3, name) \ | ||
672 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
673 | vcpu, 3, d1, d2, d3, 0, 0) | ||
674 | #define KVMTRACE_2D(evt, vcpu, d1, d2, name) \ | ||
675 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
676 | vcpu, 2, d1, d2, 0, 0, 0) | ||
677 | #define KVMTRACE_1D(evt, vcpu, d1, name) \ | ||
678 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
679 | vcpu, 1, d1, 0, 0, 0, 0) | ||
680 | #define KVMTRACE_0D(evt, vcpu, name) \ | ||
681 | trace_mark(kvm_trace_##name, "%u %p %u %u %u %u %u %u", KVM_TRC_##evt, \ | ||
682 | vcpu, 0, 0, 0, 0, 0, 0) | ||
683 | |||
613 | #endif | 684 | #endif |
diff --git a/include/asm-x86/kvm_para.h b/include/asm-x86/kvm_para.h index c6f3fd8d8c53..509845942070 100644 --- a/include/asm-x86/kvm_para.h +++ b/include/asm-x86/kvm_para.h | |||
@@ -10,10 +10,65 @@ | |||
10 | * paravirtualization, the appropriate feature bit should be checked. | 10 | * paravirtualization, the appropriate feature bit should be checked. |
11 | */ | 11 | */ |
12 | #define KVM_CPUID_FEATURES 0x40000001 | 12 | #define KVM_CPUID_FEATURES 0x40000001 |
13 | #define KVM_FEATURE_CLOCKSOURCE 0 | ||
14 | #define KVM_FEATURE_NOP_IO_DELAY 1 | ||
15 | #define KVM_FEATURE_MMU_OP 2 | ||
16 | |||
17 | #define MSR_KVM_WALL_CLOCK 0x11 | ||
18 | #define MSR_KVM_SYSTEM_TIME 0x12 | ||
19 | |||
20 | #define KVM_MAX_MMU_OP_BATCH 32 | ||
21 | |||
22 | /* Operations for KVM_HC_MMU_OP */ | ||
23 | #define KVM_MMU_OP_WRITE_PTE 1 | ||
24 | #define KVM_MMU_OP_FLUSH_TLB 2 | ||
25 | #define KVM_MMU_OP_RELEASE_PT 3 | ||
26 | |||
27 | /* Payload for KVM_HC_MMU_OP */ | ||
28 | struct kvm_mmu_op_header { | ||
29 | __u32 op; | ||
30 | __u32 pad; | ||
31 | }; | ||
32 | |||
33 | struct kvm_mmu_op_write_pte { | ||
34 | struct kvm_mmu_op_header header; | ||
35 | __u64 pte_phys; | ||
36 | __u64 pte_val; | ||
37 | }; | ||
38 | |||
39 | struct kvm_mmu_op_flush_tlb { | ||
40 | struct kvm_mmu_op_header header; | ||
41 | }; | ||
42 | |||
43 | struct kvm_mmu_op_release_pt { | ||
44 | struct kvm_mmu_op_header header; | ||
45 | __u64 pt_phys; | ||
46 | }; | ||
13 | 47 | ||
14 | #ifdef __KERNEL__ | 48 | #ifdef __KERNEL__ |
15 | #include <asm/processor.h> | 49 | #include <asm/processor.h> |
16 | 50 | ||
51 | /* xen binary-compatible interface. See xen headers for details */ | ||
52 | struct kvm_vcpu_time_info { | ||
53 | uint32_t version; | ||
54 | uint32_t pad0; | ||
55 | uint64_t tsc_timestamp; | ||
56 | uint64_t system_time; | ||
57 | uint32_t tsc_to_system_mul; | ||
58 | int8_t tsc_shift; | ||
59 | int8_t pad[3]; | ||
60 | } __attribute__((__packed__)); /* 32 bytes */ | ||
61 | |||
62 | struct kvm_wall_clock { | ||
63 | uint32_t wc_version; | ||
64 | uint32_t wc_sec; | ||
65 | uint32_t wc_nsec; | ||
66 | } __attribute__((__packed__)); | ||
67 | |||
68 | |||
69 | extern void kvmclock_init(void); | ||
70 | |||
71 | |||
17 | /* This instruction is vmcall. On non-VT architectures, it will generate a | 72 | /* This instruction is vmcall. On non-VT architectures, it will generate a |
18 | * trap that we will then rewrite to the appropriate instruction. | 73 | * trap that we will then rewrite to the appropriate instruction. |
19 | */ | 74 | */ |
diff --git a/include/asm-x86/mach-default/smpboot_hooks.h b/include/asm-x86/mach-default/smpboot_hooks.h index 3ff2c5bff93a..56d0e1fa0258 100644 --- a/include/asm-x86/mach-default/smpboot_hooks.h +++ b/include/asm-x86/mach-default/smpboot_hooks.h | |||
@@ -33,7 +33,7 @@ static inline void smpboot_restore_warm_reset_vector(void) | |||
33 | *((volatile long *) phys_to_virt(0x467)) = 0; | 33 | *((volatile long *) phys_to_virt(0x467)) = 0; |
34 | } | 34 | } |
35 | 35 | ||
36 | static inline void smpboot_setup_io_apic(void) | 36 | static inline void __init smpboot_setup_io_apic(void) |
37 | { | 37 | { |
38 | /* | 38 | /* |
39 | * Here we can be sure that there is an IO-APIC in the system. Let's | 39 | * Here we can be sure that there is an IO-APIC in the system. Let's |
diff --git a/include/asm-x86/olpc.h b/include/asm-x86/olpc.h new file mode 100644 index 000000000000..97d47133486f --- /dev/null +++ b/include/asm-x86/olpc.h | |||
@@ -0,0 +1,132 @@ | |||
1 | /* OLPC machine specific definitions */ | ||
2 | |||
3 | #ifndef ASM_OLPC_H_ | ||
4 | #define ASM_OLPC_H_ | ||
5 | |||
6 | #include <asm/geode.h> | ||
7 | |||
8 | struct olpc_platform_t { | ||
9 | int flags; | ||
10 | uint32_t boardrev; | ||
11 | int ecver; | ||
12 | }; | ||
13 | |||
14 | #define OLPC_F_PRESENT 0x01 | ||
15 | #define OLPC_F_DCON 0x02 | ||
16 | #define OLPC_F_VSA 0x04 | ||
17 | |||
18 | #ifdef CONFIG_OLPC | ||
19 | |||
20 | extern struct olpc_platform_t olpc_platform_info; | ||
21 | |||
22 | /* | ||
23 | * OLPC board IDs contain the major build number within the mask 0x0ff0, | ||
24 | * and the minor build number withing 0x000f. Pre-builds have a minor | ||
25 | * number less than 8, and normal builds start at 8. For example, 0x0B10 | ||
26 | * is a PreB1, and 0x0C18 is a C1. | ||
27 | */ | ||
28 | |||
29 | static inline uint32_t olpc_board(uint8_t id) | ||
30 | { | ||
31 | return (id << 4) | 0x8; | ||
32 | } | ||
33 | |||
34 | static inline uint32_t olpc_board_pre(uint8_t id) | ||
35 | { | ||
36 | return id << 4; | ||
37 | } | ||
38 | |||
39 | static inline int machine_is_olpc(void) | ||
40 | { | ||
41 | return (olpc_platform_info.flags & OLPC_F_PRESENT) ? 1 : 0; | ||
42 | } | ||
43 | |||
44 | /* | ||
45 | * The DCON is OLPC's Display Controller. It has a number of unique | ||
46 | * features that we might want to take advantage of.. | ||
47 | */ | ||
48 | static inline int olpc_has_dcon(void) | ||
49 | { | ||
50 | return (olpc_platform_info.flags & OLPC_F_DCON) ? 1 : 0; | ||
51 | } | ||
52 | |||
53 | /* | ||
54 | * The VSA is software from AMD that typical Geode bioses will include. | ||
55 | * It is used to emulate the PCI bus, VGA, etc. OLPC's Open Firmware does | ||
56 | * not include the VSA; instead, PCI is emulated by the kernel. | ||
57 | * | ||
58 | * The VSA is described further in arch/x86/pci/olpc.c. | ||
59 | */ | ||
60 | static inline int olpc_has_vsa(void) | ||
61 | { | ||
62 | return (olpc_platform_info.flags & OLPC_F_VSA) ? 1 : 0; | ||
63 | } | ||
64 | |||
65 | /* | ||
66 | * The "Mass Production" version of OLPC's XO is identified as being model | ||
67 | * C2. During the prototype phase, the following models (in chronological | ||
68 | * order) were created: A1, B1, B2, B3, B4, C1. The A1 through B2 models | ||
69 | * were based on Geode GX CPUs, and models after that were based upon | ||
70 | * Geode LX CPUs. There were also some hand-assembled models floating | ||
71 | * around, referred to as PreB1, PreB2, etc. | ||
72 | */ | ||
73 | static inline int olpc_board_at_least(uint32_t rev) | ||
74 | { | ||
75 | return olpc_platform_info.boardrev >= rev; | ||
76 | } | ||
77 | |||
78 | #else | ||
79 | |||
80 | static inline int machine_is_olpc(void) | ||
81 | { | ||
82 | return 0; | ||
83 | } | ||
84 | |||
85 | static inline int olpc_has_dcon(void) | ||
86 | { | ||
87 | return 0; | ||
88 | } | ||
89 | |||
90 | static inline int olpc_has_vsa(void) | ||
91 | { | ||
92 | return 0; | ||
93 | } | ||
94 | |||
95 | #endif | ||
96 | |||
97 | /* EC related functions */ | ||
98 | |||
99 | extern int olpc_ec_cmd(unsigned char cmd, unsigned char *inbuf, size_t inlen, | ||
100 | unsigned char *outbuf, size_t outlen); | ||
101 | |||
102 | extern int olpc_ec_mask_set(uint8_t bits); | ||
103 | extern int olpc_ec_mask_unset(uint8_t bits); | ||
104 | |||
105 | /* EC commands */ | ||
106 | |||
107 | #define EC_FIRMWARE_REV 0x08 | ||
108 | |||
109 | /* SCI source values */ | ||
110 | |||
111 | #define EC_SCI_SRC_EMPTY 0x00 | ||
112 | #define EC_SCI_SRC_GAME 0x01 | ||
113 | #define EC_SCI_SRC_BATTERY 0x02 | ||
114 | #define EC_SCI_SRC_BATSOC 0x04 | ||
115 | #define EC_SCI_SRC_BATERR 0x08 | ||
116 | #define EC_SCI_SRC_EBOOK 0x10 | ||
117 | #define EC_SCI_SRC_WLAN 0x20 | ||
118 | #define EC_SCI_SRC_ACPWR 0x40 | ||
119 | #define EC_SCI_SRC_ALL 0x7F | ||
120 | |||
121 | /* GPIO assignments */ | ||
122 | |||
123 | #define OLPC_GPIO_MIC_AC geode_gpio(1) | ||
124 | #define OLPC_GPIO_DCON_IRQ geode_gpio(7) | ||
125 | #define OLPC_GPIO_THRM_ALRM geode_gpio(10) | ||
126 | #define OLPC_GPIO_SMB_CLK geode_gpio(14) | ||
127 | #define OLPC_GPIO_SMB_DATA geode_gpio(15) | ||
128 | #define OLPC_GPIO_WORKAUX geode_gpio(24) | ||
129 | #define OLPC_GPIO_LID geode_gpio(26) | ||
130 | #define OLPC_GPIO_ECSCI geode_gpio(27) | ||
131 | |||
132 | #endif | ||
diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h index 6724a4bc6b7a..b381f4a5a0bd 100644 --- a/include/asm-x86/page.h +++ b/include/asm-x86/page.h | |||
@@ -47,6 +47,7 @@ | |||
47 | #ifndef __ASSEMBLY__ | 47 | #ifndef __ASSEMBLY__ |
48 | 48 | ||
49 | extern int page_is_ram(unsigned long pagenr); | 49 | extern int page_is_ram(unsigned long pagenr); |
50 | extern int devmem_is_allowed(unsigned long pagenr); | ||
50 | 51 | ||
51 | extern unsigned long max_pfn_mapped; | 52 | extern unsigned long max_pfn_mapped; |
52 | 53 | ||
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index 3d419398499b..0f13b945e240 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -220,11 +220,13 @@ struct pv_mmu_ops { | |||
220 | unsigned long va); | 220 | unsigned long va); |
221 | 221 | ||
222 | /* Hooks for allocating/releasing pagetable pages */ | 222 | /* Hooks for allocating/releasing pagetable pages */ |
223 | void (*alloc_pt)(struct mm_struct *mm, u32 pfn); | 223 | void (*alloc_pte)(struct mm_struct *mm, u32 pfn); |
224 | void (*alloc_pd)(struct mm_struct *mm, u32 pfn); | 224 | void (*alloc_pmd)(struct mm_struct *mm, u32 pfn); |
225 | void (*alloc_pd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count); | 225 | void (*alloc_pmd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count); |
226 | void (*release_pt)(u32 pfn); | 226 | void (*alloc_pud)(struct mm_struct *mm, u32 pfn); |
227 | void (*release_pd)(u32 pfn); | 227 | void (*release_pte)(u32 pfn); |
228 | void (*release_pmd)(u32 pfn); | ||
229 | void (*release_pud)(u32 pfn); | ||
228 | 230 | ||
229 | /* Pagetable manipulation functions */ | 231 | /* Pagetable manipulation functions */ |
230 | void (*set_pte)(pte_t *ptep, pte_t pteval); | 232 | void (*set_pte)(pte_t *ptep, pte_t pteval); |
@@ -910,28 +912,37 @@ static inline void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm, | |||
910 | PVOP_VCALL3(pv_mmu_ops.flush_tlb_others, &cpumask, mm, va); | 912 | PVOP_VCALL3(pv_mmu_ops.flush_tlb_others, &cpumask, mm, va); |
911 | } | 913 | } |
912 | 914 | ||
913 | static inline void paravirt_alloc_pt(struct mm_struct *mm, unsigned pfn) | 915 | static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned pfn) |
914 | { | 916 | { |
915 | PVOP_VCALL2(pv_mmu_ops.alloc_pt, mm, pfn); | 917 | PVOP_VCALL2(pv_mmu_ops.alloc_pte, mm, pfn); |
916 | } | 918 | } |
917 | static inline void paravirt_release_pt(unsigned pfn) | 919 | static inline void paravirt_release_pte(unsigned pfn) |
918 | { | 920 | { |
919 | PVOP_VCALL1(pv_mmu_ops.release_pt, pfn); | 921 | PVOP_VCALL1(pv_mmu_ops.release_pte, pfn); |
920 | } | 922 | } |
921 | 923 | ||
922 | static inline void paravirt_alloc_pd(struct mm_struct *mm, unsigned pfn) | 924 | static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned pfn) |
923 | { | 925 | { |
924 | PVOP_VCALL2(pv_mmu_ops.alloc_pd, mm, pfn); | 926 | PVOP_VCALL2(pv_mmu_ops.alloc_pmd, mm, pfn); |
925 | } | 927 | } |
926 | 928 | ||
927 | static inline void paravirt_alloc_pd_clone(unsigned pfn, unsigned clonepfn, | 929 | static inline void paravirt_alloc_pmd_clone(unsigned pfn, unsigned clonepfn, |
928 | unsigned start, unsigned count) | 930 | unsigned start, unsigned count) |
929 | { | 931 | { |
930 | PVOP_VCALL4(pv_mmu_ops.alloc_pd_clone, pfn, clonepfn, start, count); | 932 | PVOP_VCALL4(pv_mmu_ops.alloc_pmd_clone, pfn, clonepfn, start, count); |
931 | } | 933 | } |
932 | static inline void paravirt_release_pd(unsigned pfn) | 934 | static inline void paravirt_release_pmd(unsigned pfn) |
933 | { | 935 | { |
934 | PVOP_VCALL1(pv_mmu_ops.release_pd, pfn); | 936 | PVOP_VCALL1(pv_mmu_ops.release_pmd, pfn); |
937 | } | ||
938 | |||
939 | static inline void paravirt_alloc_pud(struct mm_struct *mm, unsigned pfn) | ||
940 | { | ||
941 | PVOP_VCALL2(pv_mmu_ops.alloc_pud, mm, pfn); | ||
942 | } | ||
943 | static inline void paravirt_release_pud(unsigned pfn) | ||
944 | { | ||
945 | PVOP_VCALL1(pv_mmu_ops.release_pud, pfn); | ||
935 | } | 946 | } |
936 | 947 | ||
937 | #ifdef CONFIG_HIGHPTE | 948 | #ifdef CONFIG_HIGHPTE |
diff --git a/include/asm-x86/pci.h b/include/asm-x86/pci.h index ddd8e248fc0a..30bbde0cb34b 100644 --- a/include/asm-x86/pci.h +++ b/include/asm-x86/pci.h | |||
@@ -19,6 +19,8 @@ struct pci_sysdata { | |||
19 | }; | 19 | }; |
20 | 20 | ||
21 | /* scan a bus after allocating a pci_sysdata for it */ | 21 | /* scan a bus after allocating a pci_sysdata for it */ |
22 | extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops, | ||
23 | int node); | ||
22 | extern struct pci_bus *pci_scan_bus_with_sysdata(int busno); | 24 | extern struct pci_bus *pci_scan_bus_with_sysdata(int busno); |
23 | 25 | ||
24 | static inline int pci_domain_nr(struct pci_bus *bus) | 26 | static inline int pci_domain_nr(struct pci_bus *bus) |
diff --git a/include/asm-x86/pgalloc.h b/include/asm-x86/pgalloc.h index 5886eed05886..91e4641f3f31 100644 --- a/include/asm-x86/pgalloc.h +++ b/include/asm-x86/pgalloc.h | |||
@@ -1,5 +1,110 @@ | |||
1 | #ifdef CONFIG_X86_32 | 1 | #ifndef _ASM_X86_PGALLOC_H |
2 | # include "pgalloc_32.h" | 2 | #define _ASM_X86_PGALLOC_H |
3 | |||
4 | #include <linux/threads.h> | ||
5 | #include <linux/mm.h> /* for struct page */ | ||
6 | #include <linux/pagemap.h> | ||
7 | |||
8 | #ifdef CONFIG_PARAVIRT | ||
9 | #include <asm/paravirt.h> | ||
3 | #else | 10 | #else |
4 | # include "pgalloc_64.h" | 11 | static inline void paravirt_alloc_pte(struct mm_struct *mm, unsigned long pfn) {} |
12 | static inline void paravirt_alloc_pmd(struct mm_struct *mm, unsigned long pfn) {} | ||
13 | static inline void paravirt_alloc_pmd_clone(unsigned long pfn, unsigned long clonepfn, | ||
14 | unsigned long start, unsigned long count) {} | ||
15 | static inline void paravirt_alloc_pud(struct mm_struct *mm, unsigned long pfn) {} | ||
16 | static inline void paravirt_release_pte(unsigned long pfn) {} | ||
17 | static inline void paravirt_release_pmd(unsigned long pfn) {} | ||
18 | static inline void paravirt_release_pud(unsigned long pfn) {} | ||
5 | #endif | 19 | #endif |
20 | |||
21 | /* | ||
22 | * Allocate and free page tables. | ||
23 | */ | ||
24 | extern pgd_t *pgd_alloc(struct mm_struct *); | ||
25 | extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); | ||
26 | |||
27 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); | ||
28 | extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); | ||
29 | |||
30 | /* Should really implement gc for free page table pages. This could be | ||
31 | done with a reference count in struct page. */ | ||
32 | |||
33 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
34 | { | ||
35 | BUG_ON((unsigned long)pte & (PAGE_SIZE-1)); | ||
36 | free_page((unsigned long)pte); | ||
37 | } | ||
38 | |||
39 | static inline void pte_free(struct mm_struct *mm, struct page *pte) | ||
40 | { | ||
41 | __free_page(pte); | ||
42 | } | ||
43 | |||
44 | extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte); | ||
45 | |||
46 | static inline void pmd_populate_kernel(struct mm_struct *mm, | ||
47 | pmd_t *pmd, pte_t *pte) | ||
48 | { | ||
49 | paravirt_alloc_pte(mm, __pa(pte) >> PAGE_SHIFT); | ||
50 | set_pmd(pmd, __pmd(__pa(pte) | _PAGE_TABLE)); | ||
51 | } | ||
52 | |||
53 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, | ||
54 | struct page *pte) | ||
55 | { | ||
56 | unsigned long pfn = page_to_pfn(pte); | ||
57 | |||
58 | paravirt_alloc_pte(mm, pfn); | ||
59 | set_pmd(pmd, __pmd(((pteval_t)pfn << PAGE_SHIFT) | _PAGE_TABLE)); | ||
60 | } | ||
61 | |||
62 | #define pmd_pgtable(pmd) pmd_page(pmd) | ||
63 | |||
64 | #if PAGETABLE_LEVELS > 2 | ||
65 | static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) | ||
66 | { | ||
67 | return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
68 | } | ||
69 | |||
70 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) | ||
71 | { | ||
72 | BUG_ON((unsigned long)pmd & (PAGE_SIZE-1)); | ||
73 | free_page((unsigned long)pmd); | ||
74 | } | ||
75 | |||
76 | extern void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd); | ||
77 | |||
78 | #ifdef CONFIG_X86_PAE | ||
79 | extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd); | ||
80 | #else /* !CONFIG_X86_PAE */ | ||
81 | static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) | ||
82 | { | ||
83 | paravirt_alloc_pmd(mm, __pa(pmd) >> PAGE_SHIFT); | ||
84 | set_pud(pud, __pud(_PAGE_TABLE | __pa(pmd))); | ||
85 | } | ||
86 | #endif /* CONFIG_X86_PAE */ | ||
87 | |||
88 | #if PAGETABLE_LEVELS > 3 | ||
89 | static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud) | ||
90 | { | ||
91 | paravirt_alloc_pud(mm, __pa(pud) >> PAGE_SHIFT); | ||
92 | set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud))); | ||
93 | } | ||
94 | |||
95 | static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) | ||
96 | { | ||
97 | return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
98 | } | ||
99 | |||
100 | static inline void pud_free(struct mm_struct *mm, pud_t *pud) | ||
101 | { | ||
102 | BUG_ON((unsigned long)pud & (PAGE_SIZE-1)); | ||
103 | free_page((unsigned long)pud); | ||
104 | } | ||
105 | |||
106 | extern void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud); | ||
107 | #endif /* PAGETABLE_LEVELS > 3 */ | ||
108 | #endif /* PAGETABLE_LEVELS > 2 */ | ||
109 | |||
110 | #endif /* _ASM_X86_PGALLOC_H */ | ||
diff --git a/include/asm-x86/pgalloc_32.h b/include/asm-x86/pgalloc_32.h deleted file mode 100644 index 6bea6e5b5ee5..000000000000 --- a/include/asm-x86/pgalloc_32.h +++ /dev/null | |||
@@ -1,95 +0,0 @@ | |||
1 | #ifndef _I386_PGALLOC_H | ||
2 | #define _I386_PGALLOC_H | ||
3 | |||
4 | #include <linux/threads.h> | ||
5 | #include <linux/mm.h> /* for struct page */ | ||
6 | #include <linux/pagemap.h> | ||
7 | #include <asm/tlb.h> | ||
8 | #include <asm-generic/tlb.h> | ||
9 | |||
10 | #ifdef CONFIG_PARAVIRT | ||
11 | #include <asm/paravirt.h> | ||
12 | #else | ||
13 | #define paravirt_alloc_pt(mm, pfn) do { } while (0) | ||
14 | #define paravirt_alloc_pd(mm, pfn) do { } while (0) | ||
15 | #define paravirt_alloc_pd_clone(pfn, clonepfn, start, count) do { } while (0) | ||
16 | #define paravirt_release_pt(pfn) do { } while (0) | ||
17 | #define paravirt_release_pd(pfn) do { } while (0) | ||
18 | #endif | ||
19 | |||
20 | static inline void pmd_populate_kernel(struct mm_struct *mm, | ||
21 | pmd_t *pmd, pte_t *pte) | ||
22 | { | ||
23 | paravirt_alloc_pt(mm, __pa(pte) >> PAGE_SHIFT); | ||
24 | set_pmd(pmd, __pmd(__pa(pte) | _PAGE_TABLE)); | ||
25 | } | ||
26 | |||
27 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte) | ||
28 | { | ||
29 | unsigned long pfn = page_to_pfn(pte); | ||
30 | |||
31 | paravirt_alloc_pt(mm, pfn); | ||
32 | set_pmd(pmd, __pmd(((pteval_t)pfn << PAGE_SHIFT) | _PAGE_TABLE)); | ||
33 | } | ||
34 | #define pmd_pgtable(pmd) pmd_page(pmd) | ||
35 | |||
36 | /* | ||
37 | * Allocate and free page tables. | ||
38 | */ | ||
39 | extern pgd_t *pgd_alloc(struct mm_struct *); | ||
40 | extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); | ||
41 | |||
42 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long); | ||
43 | extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long); | ||
44 | |||
45 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
46 | { | ||
47 | free_page((unsigned long)pte); | ||
48 | } | ||
49 | |||
50 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) | ||
51 | { | ||
52 | pgtable_page_dtor(pte); | ||
53 | __free_page(pte); | ||
54 | } | ||
55 | |||
56 | |||
57 | extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte); | ||
58 | |||
59 | #ifdef CONFIG_X86_PAE | ||
60 | /* | ||
61 | * In the PAE case we free the pmds as part of the pgd. | ||
62 | */ | ||
63 | static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) | ||
64 | { | ||
65 | return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
66 | } | ||
67 | |||
68 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) | ||
69 | { | ||
70 | BUG_ON((unsigned long)pmd & (PAGE_SIZE-1)); | ||
71 | free_page((unsigned long)pmd); | ||
72 | } | ||
73 | |||
74 | extern void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd); | ||
75 | |||
76 | static inline void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd) | ||
77 | { | ||
78 | paravirt_alloc_pd(mm, __pa(pmd) >> PAGE_SHIFT); | ||
79 | |||
80 | /* Note: almost everything apart from _PAGE_PRESENT is | ||
81 | reserved at the pmd (PDPT) level. */ | ||
82 | set_pud(pudp, __pud(__pa(pmd) | _PAGE_PRESENT)); | ||
83 | |||
84 | /* | ||
85 | * According to Intel App note "TLBs, Paging-Structure Caches, | ||
86 | * and Their Invalidation", April 2007, document 317080-001, | ||
87 | * section 8.1: in PAE mode we explicitly have to flush the | ||
88 | * TLB via cr3 if the top-level pgd is changed... | ||
89 | */ | ||
90 | if (mm == current->active_mm) | ||
91 | write_cr3(read_cr3()); | ||
92 | } | ||
93 | #endif /* CONFIG_X86_PAE */ | ||
94 | |||
95 | #endif /* _I386_PGALLOC_H */ | ||
diff --git a/include/asm-x86/pgalloc_64.h b/include/asm-x86/pgalloc_64.h deleted file mode 100644 index 8d6722320dcc..000000000000 --- a/include/asm-x86/pgalloc_64.h +++ /dev/null | |||
@@ -1,133 +0,0 @@ | |||
1 | #ifndef _X86_64_PGALLOC_H | ||
2 | #define _X86_64_PGALLOC_H | ||
3 | |||
4 | #include <asm/pda.h> | ||
5 | #include <linux/threads.h> | ||
6 | #include <linux/mm.h> | ||
7 | |||
8 | #define pmd_populate_kernel(mm, pmd, pte) \ | ||
9 | set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte))) | ||
10 | #define pud_populate(mm, pud, pmd) \ | ||
11 | set_pud(pud, __pud(_PAGE_TABLE | __pa(pmd))) | ||
12 | #define pgd_populate(mm, pgd, pud) \ | ||
13 | set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud))) | ||
14 | |||
15 | #define pmd_pgtable(pmd) pmd_page(pmd) | ||
16 | |||
17 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte) | ||
18 | { | ||
19 | set_pmd(pmd, __pmd(_PAGE_TABLE | (page_to_pfn(pte) << PAGE_SHIFT))); | ||
20 | } | ||
21 | |||
22 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) | ||
23 | { | ||
24 | BUG_ON((unsigned long)pmd & (PAGE_SIZE-1)); | ||
25 | free_page((unsigned long)pmd); | ||
26 | } | ||
27 | |||
28 | static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr) | ||
29 | { | ||
30 | return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
31 | } | ||
32 | |||
33 | static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr) | ||
34 | { | ||
35 | return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
36 | } | ||
37 | |||
38 | static inline void pud_free(struct mm_struct *mm, pud_t *pud) | ||
39 | { | ||
40 | BUG_ON((unsigned long)pud & (PAGE_SIZE-1)); | ||
41 | free_page((unsigned long)pud); | ||
42 | } | ||
43 | |||
44 | static inline void pgd_list_add(pgd_t *pgd) | ||
45 | { | ||
46 | struct page *page = virt_to_page(pgd); | ||
47 | unsigned long flags; | ||
48 | |||
49 | spin_lock_irqsave(&pgd_lock, flags); | ||
50 | list_add(&page->lru, &pgd_list); | ||
51 | spin_unlock_irqrestore(&pgd_lock, flags); | ||
52 | } | ||
53 | |||
54 | static inline void pgd_list_del(pgd_t *pgd) | ||
55 | { | ||
56 | struct page *page = virt_to_page(pgd); | ||
57 | unsigned long flags; | ||
58 | |||
59 | spin_lock_irqsave(&pgd_lock, flags); | ||
60 | list_del(&page->lru); | ||
61 | spin_unlock_irqrestore(&pgd_lock, flags); | ||
62 | } | ||
63 | |||
64 | static inline pgd_t *pgd_alloc(struct mm_struct *mm) | ||
65 | { | ||
66 | unsigned boundary; | ||
67 | pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); | ||
68 | if (!pgd) | ||
69 | return NULL; | ||
70 | pgd_list_add(pgd); | ||
71 | /* | ||
72 | * Copy kernel pointers in from init. | ||
73 | * Could keep a freelist or slab cache of those because the kernel | ||
74 | * part never changes. | ||
75 | */ | ||
76 | boundary = pgd_index(__PAGE_OFFSET); | ||
77 | memset(pgd, 0, boundary * sizeof(pgd_t)); | ||
78 | memcpy(pgd + boundary, | ||
79 | init_level4_pgt + boundary, | ||
80 | (PTRS_PER_PGD - boundary) * sizeof(pgd_t)); | ||
81 | return pgd; | ||
82 | } | ||
83 | |||
84 | static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) | ||
85 | { | ||
86 | BUG_ON((unsigned long)pgd & (PAGE_SIZE-1)); | ||
87 | pgd_list_del(pgd); | ||
88 | free_page((unsigned long)pgd); | ||
89 | } | ||
90 | |||
91 | static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | ||
92 | { | ||
93 | return (pte_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
94 | } | ||
95 | |||
96 | static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) | ||
97 | { | ||
98 | struct page *page; | ||
99 | void *p; | ||
100 | |||
101 | p = (void *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); | ||
102 | if (!p) | ||
103 | return NULL; | ||
104 | page = virt_to_page(p); | ||
105 | pgtable_page_ctor(page); | ||
106 | return page; | ||
107 | } | ||
108 | |||
109 | /* Should really implement gc for free page table pages. This could be | ||
110 | done with a reference count in struct page. */ | ||
111 | |||
112 | static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) | ||
113 | { | ||
114 | BUG_ON((unsigned long)pte & (PAGE_SIZE-1)); | ||
115 | free_page((unsigned long)pte); | ||
116 | } | ||
117 | |||
118 | static inline void pte_free(struct mm_struct *mm, pgtable_t pte) | ||
119 | { | ||
120 | pgtable_page_dtor(pte); | ||
121 | __free_page(pte); | ||
122 | } | ||
123 | |||
124 | #define __pte_free_tlb(tlb,pte) \ | ||
125 | do { \ | ||
126 | pgtable_page_dtor((pte)); \ | ||
127 | tlb_remove_page((tlb), (pte)); \ | ||
128 | } while (0) | ||
129 | |||
130 | #define __pmd_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x)) | ||
131 | #define __pud_free_tlb(tlb,x) tlb_remove_page((tlb),virt_to_page(x)) | ||
132 | |||
133 | #endif /* _X86_64_PGALLOC_H */ | ||
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h index f1d9f4a03f6f..801b31f71452 100644 --- a/include/asm-x86/pgtable.h +++ b/include/asm-x86/pgtable.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _ASM_X86_PGTABLE_H | 1 | #ifndef _ASM_X86_PGTABLE_H |
2 | #define _ASM_X86_PGTABLE_H | 2 | #define _ASM_X86_PGTABLE_H |
3 | 3 | ||
4 | #define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1) | ||
5 | #define FIRST_USER_ADDRESS 0 | 4 | #define FIRST_USER_ADDRESS 0 |
6 | 5 | ||
7 | #define _PAGE_BIT_PRESENT 0 /* is present */ | 6 | #define _PAGE_BIT_PRESENT 0 /* is present */ |
@@ -196,6 +195,11 @@ static inline int pte_exec(pte_t pte) | |||
196 | return !(pte_val(pte) & _PAGE_NX); | 195 | return !(pte_val(pte) & _PAGE_NX); |
197 | } | 196 | } |
198 | 197 | ||
198 | static inline int pte_special(pte_t pte) | ||
199 | { | ||
200 | return 0; | ||
201 | } | ||
202 | |||
199 | static inline int pmd_large(pmd_t pte) | 203 | static inline int pmd_large(pmd_t pte) |
200 | { | 204 | { |
201 | return (pmd_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) == | 205 | return (pmd_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) == |
@@ -257,6 +261,11 @@ static inline pte_t pte_clrglobal(pte_t pte) | |||
257 | return __pte(pte_val(pte) & ~(pteval_t)_PAGE_GLOBAL); | 261 | return __pte(pte_val(pte) & ~(pteval_t)_PAGE_GLOBAL); |
258 | } | 262 | } |
259 | 263 | ||
264 | static inline pte_t pte_mkspecial(pte_t pte) | ||
265 | { | ||
266 | return pte; | ||
267 | } | ||
268 | |||
260 | extern pteval_t __supported_pte_mask; | 269 | extern pteval_t __supported_pte_mask; |
261 | 270 | ||
262 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) | 271 | static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) |
@@ -289,6 +298,15 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
289 | 298 | ||
290 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) | 299 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) |
291 | 300 | ||
301 | #ifndef __ASSEMBLY__ | ||
302 | #define __HAVE_PHYS_MEM_ACCESS_PROT | ||
303 | struct file; | ||
304 | pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, | ||
305 | unsigned long size, pgprot_t vma_prot); | ||
306 | int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn, | ||
307 | unsigned long size, pgprot_t *vma_prot); | ||
308 | #endif | ||
309 | |||
292 | #ifdef CONFIG_PARAVIRT | 310 | #ifdef CONFIG_PARAVIRT |
293 | #include <asm/paravirt.h> | 311 | #include <asm/paravirt.h> |
294 | #else /* !CONFIG_PARAVIRT */ | 312 | #else /* !CONFIG_PARAVIRT */ |
@@ -330,6 +348,9 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
330 | # include "pgtable_64.h" | 348 | # include "pgtable_64.h" |
331 | #endif | 349 | #endif |
332 | 350 | ||
351 | #define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET) | ||
352 | #define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY) | ||
353 | |||
333 | #ifndef __ASSEMBLY__ | 354 | #ifndef __ASSEMBLY__ |
334 | 355 | ||
335 | enum { | 356 | enum { |
@@ -389,37 +410,17 @@ static inline void native_set_pte_at(struct mm_struct *mm, unsigned long addr, | |||
389 | * bit at the same time. | 410 | * bit at the same time. |
390 | */ | 411 | */ |
391 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS | 412 | #define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS |
392 | #define ptep_set_access_flags(vma, address, ptep, entry, dirty) \ | 413 | extern int ptep_set_access_flags(struct vm_area_struct *vma, |
393 | ({ \ | 414 | unsigned long address, pte_t *ptep, |
394 | int __changed = !pte_same(*(ptep), entry); \ | 415 | pte_t entry, int dirty); |
395 | if (__changed && dirty) { \ | ||
396 | *ptep = entry; \ | ||
397 | pte_update_defer((vma)->vm_mm, (address), (ptep)); \ | ||
398 | flush_tlb_page(vma, address); \ | ||
399 | } \ | ||
400 | __changed; \ | ||
401 | }) | ||
402 | 416 | ||
403 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG | 417 | #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG |
404 | #define ptep_test_and_clear_young(vma, addr, ptep) ({ \ | 418 | extern int ptep_test_and_clear_young(struct vm_area_struct *vma, |
405 | int __ret = 0; \ | 419 | unsigned long addr, pte_t *ptep); |
406 | if (pte_young(*(ptep))) \ | ||
407 | __ret = test_and_clear_bit(_PAGE_BIT_ACCESSED, \ | ||
408 | &(ptep)->pte); \ | ||
409 | if (__ret) \ | ||
410 | pte_update((vma)->vm_mm, addr, ptep); \ | ||
411 | __ret; \ | ||
412 | }) | ||
413 | 420 | ||
414 | #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH | 421 | #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH |
415 | #define ptep_clear_flush_young(vma, address, ptep) \ | 422 | extern int ptep_clear_flush_young(struct vm_area_struct *vma, |
416 | ({ \ | 423 | unsigned long address, pte_t *ptep); |
417 | int __young; \ | ||
418 | __young = ptep_test_and_clear_young((vma), (address), (ptep)); \ | ||
419 | if (__young) \ | ||
420 | flush_tlb_page(vma, address); \ | ||
421 | __young; \ | ||
422 | }) | ||
423 | 424 | ||
424 | #define __HAVE_ARCH_PTEP_GET_AND_CLEAR | 425 | #define __HAVE_ARCH_PTEP_GET_AND_CLEAR |
425 | static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | 426 | static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, |
@@ -456,6 +457,22 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, | |||
456 | pte_update(mm, addr, ptep); | 457 | pte_update(mm, addr, ptep); |
457 | } | 458 | } |
458 | 459 | ||
460 | /* | ||
461 | * clone_pgd_range(pgd_t *dst, pgd_t *src, int count); | ||
462 | * | ||
463 | * dst - pointer to pgd range anwhere on a pgd page | ||
464 | * src - "" | ||
465 | * count - the number of pgds to copy. | ||
466 | * | ||
467 | * dst and src can be on the same page, but the range must not overlap, | ||
468 | * and must not cross a page boundary. | ||
469 | */ | ||
470 | static inline void clone_pgd_range(pgd_t *dst, pgd_t *src, int count) | ||
471 | { | ||
472 | memcpy(dst, src, count * sizeof(pgd_t)); | ||
473 | } | ||
474 | |||
475 | |||
459 | #include <asm-generic/pgtable.h> | 476 | #include <asm-generic/pgtable.h> |
460 | #endif /* __ASSEMBLY__ */ | 477 | #endif /* __ASSEMBLY__ */ |
461 | 478 | ||
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h index c4a643674458..577ab79c4c27 100644 --- a/include/asm-x86/pgtable_32.h +++ b/include/asm-x86/pgtable_32.h | |||
@@ -48,9 +48,6 @@ void paging_init(void); | |||
48 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | 48 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) |
49 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) | 49 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) |
50 | 50 | ||
51 | #define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT) | ||
52 | #define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS) | ||
53 | |||
54 | /* Just any arbitrary offset to the start of the vmalloc VM area: the | 51 | /* Just any arbitrary offset to the start of the vmalloc VM area: the |
55 | * current 8MB value just means that there will be a 8MB "hole" after the | 52 | * current 8MB value just means that there will be a 8MB "hole" after the |
56 | * physical memory until the kernel virtual memory starts. That means that | 53 | * physical memory until the kernel virtual memory starts. That means that |
@@ -109,21 +106,6 @@ extern int pmd_bad(pmd_t pmd); | |||
109 | #endif | 106 | #endif |
110 | 107 | ||
111 | /* | 108 | /* |
112 | * clone_pgd_range(pgd_t *dst, pgd_t *src, int count); | ||
113 | * | ||
114 | * dst - pointer to pgd range anwhere on a pgd page | ||
115 | * src - "" | ||
116 | * count - the number of pgds to copy. | ||
117 | * | ||
118 | * dst and src can be on the same page, but the range must not overlap, | ||
119 | * and must not cross a page boundary. | ||
120 | */ | ||
121 | static inline void clone_pgd_range(pgd_t *dst, pgd_t *src, int count) | ||
122 | { | ||
123 | memcpy(dst, src, count * sizeof(pgd_t)); | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * Macro to mark a page protection value as "uncacheable". | 109 | * Macro to mark a page protection value as "uncacheable". |
128 | * On processors which do not support it, this is a no-op. | 110 | * On processors which do not support it, this is a no-op. |
129 | */ | 111 | */ |
@@ -216,16 +198,16 @@ do { \ | |||
216 | */ | 198 | */ |
217 | #define update_mmu_cache(vma, address, pte) do { } while (0) | 199 | #define update_mmu_cache(vma, address, pte) do { } while (0) |
218 | 200 | ||
219 | void native_pagetable_setup_start(pgd_t *base); | 201 | extern void native_pagetable_setup_start(pgd_t *base); |
220 | void native_pagetable_setup_done(pgd_t *base); | 202 | extern void native_pagetable_setup_done(pgd_t *base); |
221 | 203 | ||
222 | #ifndef CONFIG_PARAVIRT | 204 | #ifndef CONFIG_PARAVIRT |
223 | static inline void paravirt_pagetable_setup_start(pgd_t *base) | 205 | static inline void __init paravirt_pagetable_setup_start(pgd_t *base) |
224 | { | 206 | { |
225 | native_pagetable_setup_start(base); | 207 | native_pagetable_setup_start(base); |
226 | } | 208 | } |
227 | 209 | ||
228 | static inline void paravirt_pagetable_setup_done(pgd_t *base) | 210 | static inline void __init paravirt_pagetable_setup_done(pgd_t *base) |
229 | { | 211 | { |
230 | native_pagetable_setup_done(base); | 212 | native_pagetable_setup_done(base); |
231 | } | 213 | } |
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h index 9fd87d0b6477..a3bbf8766c1d 100644 --- a/include/asm-x86/pgtable_64.h +++ b/include/asm-x86/pgtable_64.h | |||
@@ -24,7 +24,7 @@ extern void paging_init(void); | |||
24 | 24 | ||
25 | #endif /* !__ASSEMBLY__ */ | 25 | #endif /* !__ASSEMBLY__ */ |
26 | 26 | ||
27 | #define SHARED_KERNEL_PMD 1 | 27 | #define SHARED_KERNEL_PMD 0 |
28 | 28 | ||
29 | /* | 29 | /* |
30 | * PGDIR_SHIFT determines what a top-level page table entry can map | 30 | * PGDIR_SHIFT determines what a top-level page table entry can map |
diff --git a/include/asm-x86/posix_types.h b/include/asm-x86/posix_types.h index fe312a5ba204..bb7133dc155d 100644 --- a/include/asm-x86/posix_types.h +++ b/include/asm-x86/posix_types.h | |||
@@ -1,5 +1,11 @@ | |||
1 | #ifdef __KERNEL__ | 1 | #ifdef __KERNEL__ |
2 | # if defined(CONFIG_X86_32) || defined(__i386__) | 2 | # ifdef CONFIG_X86_32 |
3 | # include "posix_types_32.h" | ||
4 | # else | ||
5 | # include "posix_types_64.h" | ||
6 | # endif | ||
7 | #else | ||
8 | # ifdef __i386__ | ||
3 | # include "posix_types_32.h" | 9 | # include "posix_types_32.h" |
4 | # else | 10 | # else |
5 | # include "posix_types_64.h" | 11 | # include "posix_types_64.h" |
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h index e6bf92ddeb21..2e7974ec77ec 100644 --- a/include/asm-x86/processor.h +++ b/include/asm-x86/processor.h | |||
@@ -118,7 +118,6 @@ struct cpuinfo_x86 { | |||
118 | #define X86_VENDOR_CYRIX 1 | 118 | #define X86_VENDOR_CYRIX 1 |
119 | #define X86_VENDOR_AMD 2 | 119 | #define X86_VENDOR_AMD 2 |
120 | #define X86_VENDOR_UMC 3 | 120 | #define X86_VENDOR_UMC 3 |
121 | #define X86_VENDOR_NEXGEN 4 | ||
122 | #define X86_VENDOR_CENTAUR 5 | 121 | #define X86_VENDOR_CENTAUR 5 |
123 | #define X86_VENDOR_TRANSMETA 7 | 122 | #define X86_VENDOR_TRANSMETA 7 |
124 | #define X86_VENDOR_NSC 8 | 123 | #define X86_VENDOR_NSC 8 |
@@ -723,6 +722,7 @@ static inline void __mwait(unsigned long eax, unsigned long ecx) | |||
723 | 722 | ||
724 | static inline void __sti_mwait(unsigned long eax, unsigned long ecx) | 723 | static inline void __sti_mwait(unsigned long eax, unsigned long ecx) |
725 | { | 724 | { |
725 | trace_hardirqs_on(); | ||
726 | /* "mwait %eax, %ecx;" */ | 726 | /* "mwait %eax, %ecx;" */ |
727 | asm volatile("sti; .byte 0x0f, 0x01, 0xc9;" | 727 | asm volatile("sti; .byte 0x0f, 0x01, 0xc9;" |
728 | :: "a" (eax), "c" (ecx)); | 728 | :: "a" (eax), "c" (ecx)); |
diff --git a/include/asm-x86/ptrace.h b/include/asm-x86/ptrace.h index 24ec061566c5..9f922b0b95d6 100644 --- a/include/asm-x86/ptrace.h +++ b/include/asm-x86/ptrace.h | |||
@@ -231,6 +231,8 @@ extern int do_get_thread_area(struct task_struct *p, int idx, | |||
231 | extern int do_set_thread_area(struct task_struct *p, int idx, | 231 | extern int do_set_thread_area(struct task_struct *p, int idx, |
232 | struct user_desc __user *info, int can_allocate); | 232 | struct user_desc __user *info, int can_allocate); |
233 | 233 | ||
234 | #define __ARCH_WANT_COMPAT_SYS_PTRACE | ||
235 | |||
234 | #endif /* __KERNEL__ */ | 236 | #endif /* __KERNEL__ */ |
235 | 237 | ||
236 | #endif /* !__ASSEMBLY__ */ | 238 | #endif /* !__ASSEMBLY__ */ |
diff --git a/include/asm-x86/reboot.h b/include/asm-x86/reboot.h index 6b5233b4f84b..e63741f19392 100644 --- a/include/asm-x86/reboot.h +++ b/include/asm-x86/reboot.h | |||
@@ -15,5 +15,7 @@ struct machine_ops { | |||
15 | extern struct machine_ops machine_ops; | 15 | extern struct machine_ops machine_ops; |
16 | 16 | ||
17 | void machine_real_restart(unsigned char *code, int length); | 17 | void machine_real_restart(unsigned char *code, int length); |
18 | void native_machine_crash_shutdown(struct pt_regs *regs); | ||
19 | void native_machine_shutdown(void); | ||
18 | 20 | ||
19 | #endif /* _ASM_REBOOT_H */ | 21 | #endif /* _ASM_REBOOT_H */ |
diff --git a/include/asm-x86/rio.h b/include/asm-x86/rio.h index 3451c576e6af..c9448bd8968f 100644 --- a/include/asm-x86/rio.h +++ b/include/asm-x86/rio.h | |||
@@ -60,15 +60,4 @@ enum { | |||
60 | ALT_CALGARY = 5, /* Second Planar Calgary */ | 60 | ALT_CALGARY = 5, /* Second Planar Calgary */ |
61 | }; | 61 | }; |
62 | 62 | ||
63 | /* | ||
64 | * there is a real-mode segmented pointer pointing to the | ||
65 | * 4K EBDA area at 0x40E. | ||
66 | */ | ||
67 | static inline unsigned long get_bios_ebda(void) | ||
68 | { | ||
69 | unsigned long address = *(unsigned short *)phys_to_virt(0x40EUL); | ||
70 | address <<= 4; | ||
71 | return address; | ||
72 | } | ||
73 | |||
74 | #endif /* __ASM_RIO_H */ | 63 | #endif /* __ASM_RIO_H */ |
diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h index 62ebdec394b9..1ebaa5cd3112 100644 --- a/include/asm-x86/smp.h +++ b/include/asm-x86/smp.h | |||
@@ -199,7 +199,6 @@ static inline int hard_smp_processor_id(void) | |||
199 | #ifdef CONFIG_HOTPLUG_CPU | 199 | #ifdef CONFIG_HOTPLUG_CPU |
200 | extern void cpu_exit_clear(void); | 200 | extern void cpu_exit_clear(void); |
201 | extern void cpu_uninit(void); | 201 | extern void cpu_uninit(void); |
202 | extern void remove_siblinginfo(int cpu); | ||
203 | #endif | 202 | #endif |
204 | 203 | ||
205 | extern void smp_alloc_memory(void); | 204 | extern void smp_alloc_memory(void); |
diff --git a/include/asm-x86/time.h b/include/asm-x86/time.h index 68779b048a3e..bce72d7a958c 100644 --- a/include/asm-x86/time.h +++ b/include/asm-x86/time.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _ASMX86_TIME_H | 1 | #ifndef _ASMX86_TIME_H |
2 | #define _ASMX86_TIME_H | 2 | #define _ASMX86_TIME_H |
3 | 3 | ||
4 | extern void (*late_time_init)(void); | ||
5 | extern void hpet_time_init(void); | 4 | extern void hpet_time_init(void); |
6 | 5 | ||
7 | #include <asm/mc146818rtc.h> | 6 | #include <asm/mc146818rtc.h> |
diff --git a/include/asm-x86/topology.h b/include/asm-x86/topology.h index 22073268b481..0e6d6b03affe 100644 --- a/include/asm-x86/topology.h +++ b/include/asm-x86/topology.h | |||
@@ -193,9 +193,25 @@ extern cpumask_t cpu_coregroup_map(int cpu); | |||
193 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) | 193 | #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) |
194 | #endif | 194 | #endif |
195 | 195 | ||
196 | struct pci_bus; | ||
197 | void set_pci_bus_resources_arch_default(struct pci_bus *b); | ||
198 | |||
196 | #ifdef CONFIG_SMP | 199 | #ifdef CONFIG_SMP |
197 | #define mc_capable() (boot_cpu_data.x86_max_cores > 1) | 200 | #define mc_capable() (boot_cpu_data.x86_max_cores > 1) |
198 | #define smt_capable() (smp_num_siblings > 1) | 201 | #define smt_capable() (smp_num_siblings > 1) |
199 | #endif | 202 | #endif |
200 | 203 | ||
204 | #ifdef CONFIG_NUMA | ||
205 | extern int get_mp_bus_to_node(int busnum); | ||
206 | extern void set_mp_bus_to_node(int busnum, int node); | ||
207 | #else | ||
208 | static inline int get_mp_bus_to_node(int busnum) | ||
209 | { | ||
210 | return 0; | ||
211 | } | ||
212 | static inline void set_mp_bus_to_node(int busnum, int node) | ||
213 | { | ||
214 | } | ||
215 | #endif | ||
216 | |||
201 | #endif | 217 | #endif |
diff --git a/include/asm-x86/tsc.h b/include/asm-x86/tsc.h index 0434bd8349a7..548873ab5fc1 100644 --- a/include/asm-x86/tsc.h +++ b/include/asm-x86/tsc.h | |||
@@ -18,7 +18,6 @@ extern unsigned int cpu_khz; | |||
18 | extern unsigned int tsc_khz; | 18 | extern unsigned int tsc_khz; |
19 | 19 | ||
20 | extern void disable_TSC(void); | 20 | extern void disable_TSC(void); |
21 | extern void enable_TSC(void); | ||
22 | 21 | ||
23 | static inline cycles_t get_cycles(void) | 22 | static inline cycles_t get_cycles(void) |
24 | { | 23 | { |
@@ -33,7 +32,7 @@ static inline cycles_t get_cycles(void) | |||
33 | return ret; | 32 | return ret; |
34 | } | 33 | } |
35 | 34 | ||
36 | static inline cycles_t vget_cycles(void) | 35 | static __always_inline cycles_t vget_cycles(void) |
37 | { | 36 | { |
38 | /* | 37 | /* |
39 | * We only do VDSOs on TSC capable CPUs, so this shouldnt | 38 | * We only do VDSOs on TSC capable CPUs, so this shouldnt |
diff --git a/include/asm-x86/unaligned.h b/include/asm-x86/unaligned.h index d270ffe72759..a7bd416b4763 100644 --- a/include/asm-x86/unaligned.h +++ b/include/asm-x86/unaligned.h | |||
@@ -3,35 +3,12 @@ | |||
3 | 3 | ||
4 | /* | 4 | /* |
5 | * The x86 can do unaligned accesses itself. | 5 | * The x86 can do unaligned accesses itself. |
6 | * | ||
7 | * The strange macros are there to make sure these can't | ||
8 | * be misused in a way that makes them not work on other | ||
9 | * architectures where unaligned accesses aren't as simple. | ||
10 | */ | 6 | */ |
11 | 7 | ||
12 | /** | 8 | #include <linux/unaligned/access_ok.h> |
13 | * get_unaligned - get value from possibly mis-aligned location | 9 | #include <linux/unaligned/generic.h> |
14 | * @ptr: pointer to value | ||
15 | * | ||
16 | * This macro should be used for accessing values larger in size than | ||
17 | * single bytes at locations that are expected to be improperly aligned, | ||
18 | * e.g. retrieving a u16 value from a location not u16-aligned. | ||
19 | * | ||
20 | * Note that unaligned accesses can be very expensive on some architectures. | ||
21 | */ | ||
22 | #define get_unaligned(ptr) (*(ptr)) | ||
23 | 10 | ||
24 | /** | 11 | #define get_unaligned __get_unaligned_le |
25 | * put_unaligned - put value to a possibly mis-aligned location | 12 | #define put_unaligned __put_unaligned_le |
26 | * @val: value to place | ||
27 | * @ptr: pointer to location | ||
28 | * | ||
29 | * This macro should be used for placing values larger in size than | ||
30 | * single bytes at locations that are expected to be improperly aligned, | ||
31 | * e.g. writing a u16 value to a location not u16-aligned. | ||
32 | * | ||
33 | * Note that unaligned accesses can be very expensive on some architectures. | ||
34 | */ | ||
35 | #define put_unaligned(val, ptr) ((void)(*(ptr) = (val))) | ||
36 | 13 | ||
37 | #endif /* _ASM_X86_UNALIGNED_H */ | 14 | #endif /* _ASM_X86_UNALIGNED_H */ |
diff --git a/include/asm-x86/unistd.h b/include/asm-x86/unistd.h index effc7ad8e12f..2a58ed3e51d8 100644 --- a/include/asm-x86/unistd.h +++ b/include/asm-x86/unistd.h | |||
@@ -1,5 +1,11 @@ | |||
1 | #ifdef __KERNEL__ | 1 | #ifdef __KERNEL__ |
2 | # if defined(CONFIG_X86_32) || defined(__i386__) | 2 | # ifdef CONFIG_X86_32 |
3 | # include "unistd_32.h" | ||
4 | # else | ||
5 | # include "unistd_64.h" | ||
6 | # endif | ||
7 | #else | ||
8 | # ifdef __i386__ | ||
3 | # include "unistd_32.h" | 9 | # include "unistd_32.h" |
4 | # else | 10 | # else |
5 | # include "unistd_64.h" | 11 | # include "unistd_64.h" |
diff --git a/include/asm-x86/xen/events.h b/include/asm-x86/xen/events.h new file mode 100644 index 000000000000..596312a7bfc9 --- /dev/null +++ b/include/asm-x86/xen/events.h | |||
@@ -0,0 +1,22 @@ | |||
1 | #ifndef __XEN_EVENTS_H | ||
2 | #define __XEN_EVENTS_H | ||
3 | |||
4 | enum ipi_vector { | ||
5 | XEN_RESCHEDULE_VECTOR, | ||
6 | XEN_CALL_FUNCTION_VECTOR, | ||
7 | |||
8 | XEN_NR_IPIS, | ||
9 | }; | ||
10 | |||
11 | static inline int xen_irqs_disabled(struct pt_regs *regs) | ||
12 | { | ||
13 | return raw_irqs_disabled_flags(regs->flags); | ||
14 | } | ||
15 | |||
16 | static inline void xen_do_IRQ(int irq, struct pt_regs *regs) | ||
17 | { | ||
18 | regs->orig_ax = ~irq; | ||
19 | do_IRQ(regs); | ||
20 | } | ||
21 | |||
22 | #endif /* __XEN_EVENTS_H */ | ||
diff --git a/include/asm-x86/xen/grant_table.h b/include/asm-x86/xen/grant_table.h new file mode 100644 index 000000000000..2444d4593a3b --- /dev/null +++ b/include/asm-x86/xen/grant_table.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __XEN_GRANT_TABLE_H | ||
2 | #define __XEN_GRANT_TABLE_H | ||
3 | |||
4 | #define xen_alloc_vm_area(size) alloc_vm_area(size) | ||
5 | #define xen_free_vm_area(area) free_vm_area(area) | ||
6 | |||
7 | #endif /* __XEN_GRANT_TABLE_H */ | ||
diff --git a/include/asm-x86/xen/hypercall.h b/include/asm-x86/xen/hypercall.h index bc0ee7d961ca..c2ccd997ed35 100644 --- a/include/asm-x86/xen/hypercall.h +++ b/include/asm-x86/xen/hypercall.h | |||
@@ -164,6 +164,12 @@ HYPERVISOR_set_callbacks(unsigned long event_selector, | |||
164 | } | 164 | } |
165 | 165 | ||
166 | static inline int | 166 | static inline int |
167 | HYPERVISOR_callback_op(int cmd, void *arg) | ||
168 | { | ||
169 | return _hypercall2(int, callback_op, cmd, arg); | ||
170 | } | ||
171 | |||
172 | static inline int | ||
167 | HYPERVISOR_fpu_taskswitch(int set) | 173 | HYPERVISOR_fpu_taskswitch(int set) |
168 | { | 174 | { |
169 | return _hypercall1(int, fpu_taskswitch, set); | 175 | return _hypercall1(int, fpu_taskswitch, set); |
diff --git a/include/asm-x86/xen/interface.h b/include/asm-x86/xen/interface.h index 165c3968e138..6227000a1e84 100644 --- a/include/asm-x86/xen/interface.h +++ b/include/asm-x86/xen/interface.h | |||
@@ -22,6 +22,30 @@ | |||
22 | #define DEFINE_GUEST_HANDLE(name) __DEFINE_GUEST_HANDLE(name, name) | 22 | #define DEFINE_GUEST_HANDLE(name) __DEFINE_GUEST_HANDLE(name, name) |
23 | #define GUEST_HANDLE(name) __guest_handle_ ## name | 23 | #define GUEST_HANDLE(name) __guest_handle_ ## name |
24 | 24 | ||
25 | #ifdef __XEN__ | ||
26 | #if defined(__i386__) | ||
27 | #define set_xen_guest_handle(hnd, val) \ | ||
28 | do { \ | ||
29 | if (sizeof(hnd) == 8) \ | ||
30 | *(uint64_t *)&(hnd) = 0; \ | ||
31 | (hnd).p = val; \ | ||
32 | } while (0) | ||
33 | #elif defined(__x86_64__) | ||
34 | #define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0) | ||
35 | #endif | ||
36 | #else | ||
37 | #if defined(__i386__) | ||
38 | #define set_xen_guest_handle(hnd, val) \ | ||
39 | do { \ | ||
40 | if (sizeof(hnd) == 8) \ | ||
41 | *(uint64_t *)&(hnd) = 0; \ | ||
42 | (hnd) = val; \ | ||
43 | } while (0) | ||
44 | #elif defined(__x86_64__) | ||
45 | #define set_xen_guest_handle(hnd, val) do { (hnd) = val; } while (0) | ||
46 | #endif | ||
47 | #endif | ||
48 | |||
25 | #ifndef __ASSEMBLY__ | 49 | #ifndef __ASSEMBLY__ |
26 | /* Guest handles for primitive C types. */ | 50 | /* Guest handles for primitive C types. */ |
27 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); | 51 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
@@ -171,6 +195,10 @@ struct arch_vcpu_info { | |||
171 | unsigned long pad[5]; /* sizeof(struct vcpu_info) == 64 */ | 195 | unsigned long pad[5]; /* sizeof(struct vcpu_info) == 64 */ |
172 | }; | 196 | }; |
173 | 197 | ||
198 | struct xen_callback { | ||
199 | unsigned long cs; | ||
200 | unsigned long eip; | ||
201 | }; | ||
174 | #endif /* !__ASSEMBLY__ */ | 202 | #endif /* !__ASSEMBLY__ */ |
175 | 203 | ||
176 | /* | 204 | /* |
diff --git a/include/asm-x86/xen/page.h b/include/asm-x86/xen/page.h new file mode 100644 index 000000000000..01799305f02a --- /dev/null +++ b/include/asm-x86/xen/page.h | |||
@@ -0,0 +1,168 @@ | |||
1 | #ifndef __XEN_PAGE_H | ||
2 | #define __XEN_PAGE_H | ||
3 | |||
4 | #include <linux/pfn.h> | ||
5 | |||
6 | #include <asm/uaccess.h> | ||
7 | #include <asm/pgtable.h> | ||
8 | |||
9 | #include <xen/features.h> | ||
10 | |||
11 | /* Xen machine address */ | ||
12 | typedef struct xmaddr { | ||
13 | phys_addr_t maddr; | ||
14 | } xmaddr_t; | ||
15 | |||
16 | /* Xen pseudo-physical address */ | ||
17 | typedef struct xpaddr { | ||
18 | phys_addr_t paddr; | ||
19 | } xpaddr_t; | ||
20 | |||
21 | #define XMADDR(x) ((xmaddr_t) { .maddr = (x) }) | ||
22 | #define XPADDR(x) ((xpaddr_t) { .paddr = (x) }) | ||
23 | |||
24 | /**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/ | ||
25 | #define INVALID_P2M_ENTRY (~0UL) | ||
26 | #define FOREIGN_FRAME_BIT (1UL<<31) | ||
27 | #define FOREIGN_FRAME(m) ((m) | FOREIGN_FRAME_BIT) | ||
28 | |||
29 | extern unsigned long *phys_to_machine_mapping; | ||
30 | |||
31 | static inline unsigned long pfn_to_mfn(unsigned long pfn) | ||
32 | { | ||
33 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
34 | return pfn; | ||
35 | |||
36 | return phys_to_machine_mapping[(unsigned int)(pfn)] & | ||
37 | ~FOREIGN_FRAME_BIT; | ||
38 | } | ||
39 | |||
40 | static inline int phys_to_machine_mapping_valid(unsigned long pfn) | ||
41 | { | ||
42 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
43 | return 1; | ||
44 | |||
45 | return (phys_to_machine_mapping[pfn] != INVALID_P2M_ENTRY); | ||
46 | } | ||
47 | |||
48 | static inline unsigned long mfn_to_pfn(unsigned long mfn) | ||
49 | { | ||
50 | unsigned long pfn; | ||
51 | |||
52 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
53 | return mfn; | ||
54 | |||
55 | #if 0 | ||
56 | if (unlikely((mfn >> machine_to_phys_order) != 0)) | ||
57 | return max_mapnr; | ||
58 | #endif | ||
59 | |||
60 | pfn = 0; | ||
61 | /* | ||
62 | * The array access can fail (e.g., device space beyond end of RAM). | ||
63 | * In such cases it doesn't matter what we return (we return garbage), | ||
64 | * but we must handle the fault without crashing! | ||
65 | */ | ||
66 | __get_user(pfn, &machine_to_phys_mapping[mfn]); | ||
67 | |||
68 | return pfn; | ||
69 | } | ||
70 | |||
71 | static inline xmaddr_t phys_to_machine(xpaddr_t phys) | ||
72 | { | ||
73 | unsigned offset = phys.paddr & ~PAGE_MASK; | ||
74 | return XMADDR(PFN_PHYS((u64)pfn_to_mfn(PFN_DOWN(phys.paddr))) | offset); | ||
75 | } | ||
76 | |||
77 | static inline xpaddr_t machine_to_phys(xmaddr_t machine) | ||
78 | { | ||
79 | unsigned offset = machine.maddr & ~PAGE_MASK; | ||
80 | return XPADDR(PFN_PHYS((u64)mfn_to_pfn(PFN_DOWN(machine.maddr))) | offset); | ||
81 | } | ||
82 | |||
83 | /* | ||
84 | * We detect special mappings in one of two ways: | ||
85 | * 1. If the MFN is an I/O page then Xen will set the m2p entry | ||
86 | * to be outside our maximum possible pseudophys range. | ||
87 | * 2. If the MFN belongs to a different domain then we will certainly | ||
88 | * not have MFN in our p2m table. Conversely, if the page is ours, | ||
89 | * then we'll have p2m(m2p(MFN))==MFN. | ||
90 | * If we detect a special mapping then it doesn't have a 'struct page'. | ||
91 | * We force !pfn_valid() by returning an out-of-range pointer. | ||
92 | * | ||
93 | * NB. These checks require that, for any MFN that is not in our reservation, | ||
94 | * there is no PFN such that p2m(PFN) == MFN. Otherwise we can get confused if | ||
95 | * we are foreign-mapping the MFN, and the other domain as m2p(MFN) == PFN. | ||
96 | * Yikes! Various places must poke in INVALID_P2M_ENTRY for safety. | ||
97 | * | ||
98 | * NB2. When deliberately mapping foreign pages into the p2m table, you *must* | ||
99 | * use FOREIGN_FRAME(). This will cause pte_pfn() to choke on it, as we | ||
100 | * require. In all the cases we care about, the FOREIGN_FRAME bit is | ||
101 | * masked (e.g., pfn_to_mfn()) so behaviour there is correct. | ||
102 | */ | ||
103 | static inline unsigned long mfn_to_local_pfn(unsigned long mfn) | ||
104 | { | ||
105 | extern unsigned long max_mapnr; | ||
106 | unsigned long pfn = mfn_to_pfn(mfn); | ||
107 | if ((pfn < max_mapnr) | ||
108 | && !xen_feature(XENFEAT_auto_translated_physmap) | ||
109 | && (phys_to_machine_mapping[pfn] != mfn)) | ||
110 | return max_mapnr; /* force !pfn_valid() */ | ||
111 | return pfn; | ||
112 | } | ||
113 | |||
114 | static inline void set_phys_to_machine(unsigned long pfn, unsigned long mfn) | ||
115 | { | ||
116 | if (xen_feature(XENFEAT_auto_translated_physmap)) { | ||
117 | BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY); | ||
118 | return; | ||
119 | } | ||
120 | phys_to_machine_mapping[pfn] = mfn; | ||
121 | } | ||
122 | |||
123 | /* VIRT <-> MACHINE conversion */ | ||
124 | #define virt_to_machine(v) (phys_to_machine(XPADDR(__pa(v)))) | ||
125 | #define virt_to_mfn(v) (pfn_to_mfn(PFN_DOWN(__pa(v)))) | ||
126 | #define mfn_to_virt(m) (__va(mfn_to_pfn(m) << PAGE_SHIFT)) | ||
127 | |||
128 | static inline unsigned long pte_mfn(pte_t pte) | ||
129 | { | ||
130 | return (pte.pte & ~_PAGE_NX) >> PAGE_SHIFT; | ||
131 | } | ||
132 | |||
133 | static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot) | ||
134 | { | ||
135 | pte_t pte; | ||
136 | |||
137 | pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) | | ||
138 | (pgprot_val(pgprot) & __supported_pte_mask); | ||
139 | |||
140 | return pte; | ||
141 | } | ||
142 | |||
143 | static inline pteval_t pte_val_ma(pte_t pte) | ||
144 | { | ||
145 | return pte.pte; | ||
146 | } | ||
147 | |||
148 | static inline pte_t __pte_ma(pteval_t x) | ||
149 | { | ||
150 | return (pte_t) { .pte = x }; | ||
151 | } | ||
152 | |||
153 | #ifdef CONFIG_X86_PAE | ||
154 | #define pmd_val_ma(v) ((v).pmd) | ||
155 | #define pud_val_ma(v) ((v).pgd.pgd) | ||
156 | #define __pmd_ma(x) ((pmd_t) { (x) } ) | ||
157 | #else /* !X86_PAE */ | ||
158 | #define pmd_val_ma(v) ((v).pud.pgd.pgd) | ||
159 | #endif /* CONFIG_X86_PAE */ | ||
160 | |||
161 | #define pgd_val_ma(x) ((x).pgd) | ||
162 | |||
163 | |||
164 | xmaddr_t arbitrary_virt_to_machine(unsigned long address); | ||
165 | void make_lowmem_page_readonly(void *vaddr); | ||
166 | void make_lowmem_page_readwrite(void *vaddr); | ||
167 | |||
168 | #endif /* __XEN_PAGE_H */ | ||
diff --git a/include/asm-xtensa/pgtable.h b/include/asm-xtensa/pgtable.h index c8b024a48b4d..8014d96b21f1 100644 --- a/include/asm-xtensa/pgtable.h +++ b/include/asm-xtensa/pgtable.h | |||
@@ -210,6 +210,8 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_WRITABLE; } | |||
210 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | 210 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } |
211 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | 211 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } |
212 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | 212 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } |
213 | static inline int pte_special(pte_t pte) { return 0; } | ||
214 | |||
213 | static inline pte_t pte_wrprotect(pte_t pte) | 215 | static inline pte_t pte_wrprotect(pte_t pte) |
214 | { pte_val(pte) &= ~(_PAGE_WRITABLE | _PAGE_HW_WRITE); return pte; } | 216 | { pte_val(pte) &= ~(_PAGE_WRITABLE | _PAGE_HW_WRITE); return pte; } |
215 | static inline pte_t pte_mkclean(pte_t pte) | 217 | static inline pte_t pte_mkclean(pte_t pte) |
@@ -222,6 +224,8 @@ static inline pte_t pte_mkyoung(pte_t pte) | |||
222 | { pte_val(pte) |= _PAGE_ACCESSED; return pte; } | 224 | { pte_val(pte) |= _PAGE_ACCESSED; return pte; } |
223 | static inline pte_t pte_mkwrite(pte_t pte) | 225 | static inline pte_t pte_mkwrite(pte_t pte) |
224 | { pte_val(pte) |= _PAGE_WRITABLE; return pte; } | 226 | { pte_val(pte) |= _PAGE_WRITABLE; return pte; } |
227 | static inline pte_t pte_mkspecial(pte_t pte) | ||
228 | { return pte; } | ||
225 | 229 | ||
226 | /* | 230 | /* |
227 | * Conversion functions: convert a page and protection to a page entry, | 231 | * Conversion functions: convert a page and protection to a page entry, |
diff --git a/include/asm-xtensa/unaligned.h b/include/asm-xtensa/unaligned.h index 28220890d0a6..8f3424fc5d18 100644 --- a/include/asm-xtensa/unaligned.h +++ b/include/asm-xtensa/unaligned.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * include/asm-xtensa/unaligned.h | ||
3 | * | ||
4 | * Xtensa doesn't handle unaligned accesses efficiently. | 2 | * Xtensa doesn't handle unaligned accesses efficiently. |
5 | * | 3 | * |
6 | * This file is subject to the terms and conditions of the GNU General Public | 4 | * This file is subject to the terms and conditions of the GNU General Public |
@@ -9,20 +7,23 @@ | |||
9 | * | 7 | * |
10 | * Copyright (C) 2001 - 2005 Tensilica Inc. | 8 | * Copyright (C) 2001 - 2005 Tensilica Inc. |
11 | */ | 9 | */ |
10 | #ifndef _ASM_XTENSA_UNALIGNED_H | ||
11 | #define _ASM_XTENSA_UNALIGNED_H | ||
12 | 12 | ||
13 | #ifndef _XTENSA_UNALIGNED_H | 13 | #ifdef __XTENSA_EL__ |
14 | #define _XTENSA_UNALIGNED_H | 14 | # include <linux/unaligned/le_memmove.h> |
15 | 15 | # include <linux/unaligned/be_byteshift.h> | |
16 | #include <linux/string.h> | 16 | # include <linux/unaligned/generic.h> |
17 | 17 | # define get_unaligned __get_unaligned_le | |
18 | /* Use memmove here, so gcc does not insert a __builtin_memcpy. */ | 18 | # define put_unaligned __put_unaligned_le |
19 | 19 | #elif defined(__XTENSA_EB__) | |
20 | #define get_unaligned(ptr) \ | 20 | # include <linux/unaligned/be_memmove.h> |
21 | ({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) | 21 | # include <linux/unaligned/le_byteshift.h> |
22 | 22 | # include <linux/unaligned/generic.h> | |
23 | #define put_unaligned(val, ptr) \ | 23 | # define get_unaligned __get_unaligned_be |
24 | ({ __typeof__(*(ptr)) __tmp = (val); \ | 24 | # define put_unaligned __put_unaligned_be |
25 | memmove((ptr), &__tmp, sizeof(*(ptr))); \ | 25 | #else |
26 | (void)0; }) | 26 | # error processor byte order undefined! |
27 | #endif | ||
27 | 28 | ||
28 | #endif /* _XTENSA_UNALIGNED_H */ | 29 | #endif /* _ASM_XTENSA_UNALIGNED_H */ |
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index cbb5ccb27de3..78fade0a1e35 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -20,6 +20,7 @@ header-y += affs_hardblocks.h | |||
20 | header-y += aio_abi.h | 20 | header-y += aio_abi.h |
21 | header-y += arcfb.h | 21 | header-y += arcfb.h |
22 | header-y += atmapi.h | 22 | header-y += atmapi.h |
23 | header-y += atmarp.h | ||
23 | header-y += atmbr2684.h | 24 | header-y += atmbr2684.h |
24 | header-y += atmclip.h | 25 | header-y += atmclip.h |
25 | header-y += atm_eni.h | 26 | header-y += atm_eni.h |
@@ -48,6 +49,7 @@ header-y += coff.h | |||
48 | header-y += comstats.h | 49 | header-y += comstats.h |
49 | header-y += const.h | 50 | header-y += const.h |
50 | header-y += cgroupstats.h | 51 | header-y += cgroupstats.h |
52 | header-y += cramfs_fs.h | ||
51 | header-y += cycx_cfm.h | 53 | header-y += cycx_cfm.h |
52 | header-y += dlmconstants.h | 54 | header-y += dlmconstants.h |
53 | header-y += dlm_device.h | 55 | header-y += dlm_device.h |
@@ -70,10 +72,12 @@ header-y += firewire-constants.h | |||
70 | header-y += fuse.h | 72 | header-y += fuse.h |
71 | header-y += genetlink.h | 73 | header-y += genetlink.h |
72 | header-y += gen_stats.h | 74 | header-y += gen_stats.h |
75 | header-y += gfs2_ondisk.h | ||
73 | header-y += gigaset_dev.h | 76 | header-y += gigaset_dev.h |
74 | header-y += hysdn_if.h | 77 | header-y += hysdn_if.h |
75 | header-y += i2o-dev.h | 78 | header-y += i2o-dev.h |
76 | header-y += i8k.h | 79 | header-y += i8k.h |
80 | header-y += if_addrlabel.h | ||
77 | header-y += if_arcnet.h | 81 | header-y += if_arcnet.h |
78 | header-y += if_bonding.h | 82 | header-y += if_bonding.h |
79 | header-y += if_cablemodem.h | 83 | header-y += if_cablemodem.h |
@@ -91,6 +95,7 @@ header-y += if_tunnel.h | |||
91 | header-y += in6.h | 95 | header-y += in6.h |
92 | header-y += in_route.h | 96 | header-y += in_route.h |
93 | header-y += ioctl.h | 97 | header-y += ioctl.h |
98 | header-y += ip6_tunnel.h | ||
94 | header-y += ipmi_msgdefs.h | 99 | header-y += ipmi_msgdefs.h |
95 | header-y += ipsec.h | 100 | header-y += ipsec.h |
96 | header-y += ipx.h | 101 | header-y += ipx.h |
@@ -117,7 +122,6 @@ header-y += nfs2.h | |||
117 | header-y += nfs4_mount.h | 122 | header-y += nfs4_mount.h |
118 | header-y += nfs_mount.h | 123 | header-y += nfs_mount.h |
119 | header-y += nl80211.h | 124 | header-y += nl80211.h |
120 | header-y += oom.h | ||
121 | header-y += param.h | 125 | header-y += param.h |
122 | header-y += pci_regs.h | 126 | header-y += pci_regs.h |
123 | header-y += pfkeyv2.h | 127 | header-y += pfkeyv2.h |
@@ -166,7 +170,6 @@ unifdef-y += adfs_fs.h | |||
166 | unifdef-y += agpgart.h | 170 | unifdef-y += agpgart.h |
167 | unifdef-y += apm_bios.h | 171 | unifdef-y += apm_bios.h |
168 | unifdef-y += atalk.h | 172 | unifdef-y += atalk.h |
169 | unifdef-y += atmarp.h | ||
170 | unifdef-y += atmdev.h | 173 | unifdef-y += atmdev.h |
171 | unifdef-y += atm.h | 174 | unifdef-y += atm.h |
172 | unifdef-y += atm_tcp.h | 175 | unifdef-y += atm_tcp.h |
@@ -182,7 +185,6 @@ unifdef-y += cm4000_cs.h | |||
182 | unifdef-y += cn_proc.h | 185 | unifdef-y += cn_proc.h |
183 | unifdef-y += coda.h | 186 | unifdef-y += coda.h |
184 | unifdef-y += connector.h | 187 | unifdef-y += connector.h |
185 | unifdef-y += cramfs_fs.h | ||
186 | unifdef-y += cuda.h | 188 | unifdef-y += cuda.h |
187 | unifdef-y += cyclades.h | 189 | unifdef-y += cyclades.h |
188 | unifdef-y += dccp.h | 190 | unifdef-y += dccp.h |
@@ -205,12 +207,10 @@ unifdef-y += futex.h | |||
205 | unifdef-y += fs.h | 207 | unifdef-y += fs.h |
206 | unifdef-y += gameport.h | 208 | unifdef-y += gameport.h |
207 | unifdef-y += generic_serial.h | 209 | unifdef-y += generic_serial.h |
208 | unifdef-y += gfs2_ondisk.h | ||
209 | unifdef-y += hayesesp.h | 210 | unifdef-y += hayesesp.h |
210 | unifdef-y += hdlcdrv.h | 211 | unifdef-y += hdlcdrv.h |
211 | unifdef-y += hdlc.h | 212 | unifdef-y += hdlc.h |
212 | unifdef-y += hdreg.h | 213 | unifdef-y += hdreg.h |
213 | unifdef-y += hdsmart.h | ||
214 | unifdef-y += hid.h | 214 | unifdef-y += hid.h |
215 | unifdef-y += hiddev.h | 215 | unifdef-y += hiddev.h |
216 | unifdef-y += hidraw.h | 216 | unifdef-y += hidraw.h |
@@ -220,7 +220,6 @@ unifdef-y += i2c-dev.h | |||
220 | unifdef-y += icmp.h | 220 | unifdef-y += icmp.h |
221 | unifdef-y += icmpv6.h | 221 | unifdef-y += icmpv6.h |
222 | unifdef-y += if_addr.h | 222 | unifdef-y += if_addr.h |
223 | unifdef-y += if_addrlabel.h | ||
224 | unifdef-y += if_arp.h | 223 | unifdef-y += if_arp.h |
225 | unifdef-y += if_bridge.h | 224 | unifdef-y += if_bridge.h |
226 | unifdef-y += if_ec.h | 225 | unifdef-y += if_ec.h |
@@ -244,7 +243,6 @@ unifdef-y += ipc.h | |||
244 | unifdef-y += ipmi.h | 243 | unifdef-y += ipmi.h |
245 | unifdef-y += ipv6.h | 244 | unifdef-y += ipv6.h |
246 | unifdef-y += ipv6_route.h | 245 | unifdef-y += ipv6_route.h |
247 | unifdef-y += ip6_tunnel.h | ||
248 | unifdef-y += isdn.h | 246 | unifdef-y += isdn.h |
249 | unifdef-y += isdnif.h | 247 | unifdef-y += isdnif.h |
250 | unifdef-y += isdn_divertif.h | 248 | unifdef-y += isdn_divertif.h |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 2c7e003356ac..41f7ce7edd7a 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -79,6 +79,7 @@ typedef int (*acpi_table_handler) (struct acpi_table_header *table); | |||
79 | typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end); | 79 | typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end); |
80 | 80 | ||
81 | char * __acpi_map_table (unsigned long phys_addr, unsigned long size); | 81 | char * __acpi_map_table (unsigned long phys_addr, unsigned long size); |
82 | int early_acpi_boot_init(void); | ||
82 | int acpi_boot_init (void); | 83 | int acpi_boot_init (void); |
83 | int acpi_boot_table_init (void); | 84 | int acpi_boot_table_init (void); |
84 | int acpi_numa_init (void); | 85 | int acpi_numa_init (void); |
@@ -235,6 +236,10 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n, | |||
235 | 236 | ||
236 | #else /* CONFIG_ACPI */ | 237 | #else /* CONFIG_ACPI */ |
237 | 238 | ||
239 | static inline int early_acpi_boot_init(void) | ||
240 | { | ||
241 | return 0; | ||
242 | } | ||
238 | static inline int acpi_boot_init(void) | 243 | static inline int acpi_boot_init(void) |
239 | { | 244 | { |
240 | return 0; | 245 | return 0; |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 0d0b7f629bd3..b51ddd28444e 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -209,27 +209,8 @@ extern ssize_t wait_on_sync_kiocb(struct kiocb *iocb); | |||
209 | extern int aio_put_req(struct kiocb *iocb); | 209 | extern int aio_put_req(struct kiocb *iocb); |
210 | extern void kick_iocb(struct kiocb *iocb); | 210 | extern void kick_iocb(struct kiocb *iocb); |
211 | extern int aio_complete(struct kiocb *iocb, long res, long res2); | 211 | extern int aio_complete(struct kiocb *iocb, long res, long res2); |
212 | extern void __put_ioctx(struct kioctx *ctx); | ||
213 | struct mm_struct; | 212 | struct mm_struct; |
214 | extern void exit_aio(struct mm_struct *mm); | 213 | extern void exit_aio(struct mm_struct *mm); |
215 | extern struct kioctx *lookup_ioctx(unsigned long ctx_id); | ||
216 | extern int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | ||
217 | struct iocb *iocb); | ||
218 | |||
219 | /* semi private, but used by the 32bit emulations: */ | ||
220 | struct kioctx *lookup_ioctx(unsigned long ctx_id); | ||
221 | int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | ||
222 | struct iocb *iocb); | ||
223 | |||
224 | #define get_ioctx(kioctx) do { \ | ||
225 | BUG_ON(atomic_read(&(kioctx)->users) <= 0); \ | ||
226 | atomic_inc(&(kioctx)->users); \ | ||
227 | } while (0) | ||
228 | #define put_ioctx(kioctx) do { \ | ||
229 | BUG_ON(atomic_read(&(kioctx)->users) <= 0); \ | ||
230 | if (unlikely(atomic_dec_and_test(&(kioctx)->users))) \ | ||
231 | __put_ioctx(kioctx); \ | ||
232 | } while (0) | ||
233 | 214 | ||
234 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 215 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
235 | 216 | ||
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index 48a62baace58..b66fa2bdfd9c 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h | |||
@@ -156,9 +156,7 @@ static inline unsigned long bdi_stat_error(struct backing_dev_info *bdi) | |||
156 | extern struct backing_dev_info default_backing_dev_info; | 156 | extern struct backing_dev_info default_backing_dev_info; |
157 | void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page); | 157 | void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page); |
158 | 158 | ||
159 | int writeback_acquire(struct backing_dev_info *bdi); | ||
160 | int writeback_in_progress(struct backing_dev_info *bdi); | 159 | int writeback_in_progress(struct backing_dev_info *bdi); |
161 | void writeback_release(struct backing_dev_info *bdi); | ||
162 | 160 | ||
163 | static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits) | 161 | static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits) |
164 | { | 162 | { |
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index b7fc55ec8d48..b512e48f6d8e 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
@@ -34,7 +34,8 @@ struct linux_binprm{ | |||
34 | #endif | 34 | #endif |
35 | struct mm_struct *mm; | 35 | struct mm_struct *mm; |
36 | unsigned long p; /* current top of mem */ | 36 | unsigned long p; /* current top of mem */ |
37 | int sh_bang; | 37 | unsigned int sh_bang:1, |
38 | misc_bang:1; | ||
38 | struct file * file; | 39 | struct file * file; |
39 | int e_uid, e_gid; | 40 | int e_uid, e_gid; |
40 | kernel_cap_t cap_inheritable, cap_permitted; | 41 | kernel_cap_t cap_inheritable, cap_permitted; |
@@ -48,7 +49,6 @@ struct linux_binprm{ | |||
48 | unsigned interp_flags; | 49 | unsigned interp_flags; |
49 | unsigned interp_data; | 50 | unsigned interp_data; |
50 | unsigned long loader, exec; | 51 | unsigned long loader, exec; |
51 | unsigned long argv_len; | ||
52 | }; | 52 | }; |
53 | 53 | ||
54 | #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 | 54 | #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 |
diff --git a/include/linux/bio.h b/include/linux/bio.h index d259690863fb..61c15eaf3fb3 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
@@ -324,6 +324,8 @@ extern struct bio *bio_map_user_iov(struct request_queue *, | |||
324 | extern void bio_unmap_user(struct bio *); | 324 | extern void bio_unmap_user(struct bio *); |
325 | extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int, | 325 | extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int, |
326 | gfp_t); | 326 | gfp_t); |
327 | extern struct bio *bio_copy_kern(struct request_queue *, void *, unsigned int, | ||
328 | gfp_t, int); | ||
327 | extern void bio_set_pages_dirty(struct bio *bio); | 329 | extern void bio_set_pages_dirty(struct bio *bio); |
328 | extern void bio_check_pages_dirty(struct bio *bio); | 330 | extern void bio_check_pages_dirty(struct bio *bio); |
329 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); | 331 | extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 1dbe074f1c64..43b406def35f 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
@@ -46,6 +46,8 @@ | |||
46 | * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n | 46 | * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n |
47 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) | 47 | * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) |
48 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) | 48 | * bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) |
49 | * bitmap_onto(dst, orig, relmap, nbits) *dst = orig relative to relmap | ||
50 | * bitmap_fold(dst, orig, sz, nbits) dst bits = orig bits mod sz | ||
49 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf | 51 | * bitmap_scnprintf(buf, len, src, nbits) Print bitmap src to buf |
50 | * bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf | 52 | * bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf |
51 | * bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf | 53 | * bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf |
@@ -121,6 +123,10 @@ extern void bitmap_remap(unsigned long *dst, const unsigned long *src, | |||
121 | const unsigned long *old, const unsigned long *new, int bits); | 123 | const unsigned long *old, const unsigned long *new, int bits); |
122 | extern int bitmap_bitremap(int oldbit, | 124 | extern int bitmap_bitremap(int oldbit, |
123 | const unsigned long *old, const unsigned long *new, int bits); | 125 | const unsigned long *old, const unsigned long *new, int bits); |
126 | extern void bitmap_onto(unsigned long *dst, const unsigned long *orig, | ||
127 | const unsigned long *relmap, int bits); | ||
128 | extern void bitmap_fold(unsigned long *dst, const unsigned long *orig, | ||
129 | int sz, int bits); | ||
124 | extern int bitmap_find_free_region(unsigned long *bitmap, int bits, int order); | 130 | extern int bitmap_find_free_region(unsigned long *bitmap, int bits, int order); |
125 | extern void bitmap_release_region(unsigned long *bitmap, int pos, int order); | 131 | extern void bitmap_release_region(unsigned long *bitmap, int pos, int order); |
126 | extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order); | 132 | extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order); |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 40d54731de7e..024f2b027244 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
@@ -6,8 +6,8 @@ | |||
6 | #define BIT(nr) (1UL << (nr)) | 6 | #define BIT(nr) (1UL << (nr)) |
7 | #define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) | 7 | #define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG)) |
8 | #define BIT_WORD(nr) ((nr) / BITS_PER_LONG) | 8 | #define BIT_WORD(nr) ((nr) / BITS_PER_LONG) |
9 | #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG) | ||
10 | #define BITS_PER_BYTE 8 | 9 | #define BITS_PER_BYTE 8 |
10 | #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) | ||
11 | #endif | 11 | #endif |
12 | 12 | ||
13 | /* | 13 | /* |
@@ -112,4 +112,53 @@ static inline unsigned fls_long(unsigned long l) | |||
112 | return fls64(l); | 112 | return fls64(l); |
113 | } | 113 | } |
114 | 114 | ||
115 | #ifdef __KERNEL__ | ||
116 | #ifdef CONFIG_GENERIC_FIND_FIRST_BIT | ||
117 | |||
118 | /** | ||
119 | * find_first_bit - find the first set bit in a memory region | ||
120 | * @addr: The address to start the search at | ||
121 | * @size: The maximum size to search | ||
122 | * | ||
123 | * Returns the bit number of the first set bit. | ||
124 | */ | ||
125 | extern unsigned long find_first_bit(const unsigned long *addr, | ||
126 | unsigned long size); | ||
127 | |||
128 | /** | ||
129 | * find_first_zero_bit - find the first cleared bit in a memory region | ||
130 | * @addr: The address to start the search at | ||
131 | * @size: The maximum size to search | ||
132 | * | ||
133 | * Returns the bit number of the first cleared bit. | ||
134 | */ | ||
135 | extern unsigned long find_first_zero_bit(const unsigned long *addr, | ||
136 | unsigned long size); | ||
137 | |||
138 | #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ | ||
139 | |||
140 | #ifdef CONFIG_GENERIC_FIND_NEXT_BIT | ||
141 | |||
142 | /** | ||
143 | * find_next_bit - find the next set bit in a memory region | ||
144 | * @addr: The address to base the search on | ||
145 | * @offset: The bitnumber to start searching at | ||
146 | * @size: The bitmap size in bits | ||
147 | */ | ||
148 | extern unsigned long find_next_bit(const unsigned long *addr, | ||
149 | unsigned long size, unsigned long offset); | ||
150 | |||
151 | /** | ||
152 | * find_next_zero_bit - find the next cleared bit in a memory region | ||
153 | * @addr: The address to base the search on | ||
154 | * @offset: The bitnumber to start searching at | ||
155 | * @size: The bitmap size in bits | ||
156 | */ | ||
157 | |||
158 | extern unsigned long find_next_zero_bit(const unsigned long *addr, | ||
159 | unsigned long size, | ||
160 | unsigned long offset); | ||
161 | |||
162 | #endif /* CONFIG_GENERIC_FIND_NEXT_BIT */ | ||
163 | #endif /* __KERNEL__ */ | ||
115 | #endif | 164 | #endif |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index c5065e3d2ca9..95864b3ff298 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -215,8 +215,9 @@ struct request { | |||
215 | /* | 215 | /* |
216 | * when request is used as a packet command carrier | 216 | * when request is used as a packet command carrier |
217 | */ | 217 | */ |
218 | unsigned int cmd_len; | 218 | unsigned short cmd_len; |
219 | unsigned char cmd[BLK_MAX_CDB]; | 219 | unsigned char __cmd[BLK_MAX_CDB]; |
220 | unsigned char *cmd; | ||
220 | 221 | ||
221 | unsigned int data_len; | 222 | unsigned int data_len; |
222 | unsigned int extra_len; /* length of alignment and padding */ | 223 | unsigned int extra_len; /* length of alignment and padding */ |
@@ -407,6 +408,37 @@ struct request_queue | |||
407 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ | 408 | #define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */ |
408 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ | 409 | #define QUEUE_FLAG_ELVSWITCH 8 /* don't use elevator, just do FIFO */ |
409 | #define QUEUE_FLAG_BIDI 9 /* queue supports bidi requests */ | 410 | #define QUEUE_FLAG_BIDI 9 /* queue supports bidi requests */ |
411 | #define QUEUE_FLAG_NOMERGES 10 /* disable merge attempts */ | ||
412 | |||
413 | static inline int queue_is_locked(struct request_queue *q) | ||
414 | { | ||
415 | spinlock_t *lock = q->queue_lock; | ||
416 | return lock && spin_is_locked(lock); | ||
417 | } | ||
418 | |||
419 | static inline void queue_flag_set_unlocked(unsigned int flag, | ||
420 | struct request_queue *q) | ||
421 | { | ||
422 | __set_bit(flag, &q->queue_flags); | ||
423 | } | ||
424 | |||
425 | static inline void queue_flag_set(unsigned int flag, struct request_queue *q) | ||
426 | { | ||
427 | WARN_ON_ONCE(!queue_is_locked(q)); | ||
428 | __set_bit(flag, &q->queue_flags); | ||
429 | } | ||
430 | |||
431 | static inline void queue_flag_clear_unlocked(unsigned int flag, | ||
432 | struct request_queue *q) | ||
433 | { | ||
434 | __clear_bit(flag, &q->queue_flags); | ||
435 | } | ||
436 | |||
437 | static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | ||
438 | { | ||
439 | WARN_ON_ONCE(!queue_is_locked(q)); | ||
440 | __clear_bit(flag, &q->queue_flags); | ||
441 | } | ||
410 | 442 | ||
411 | enum { | 443 | enum { |
412 | /* | 444 | /* |
@@ -451,6 +483,7 @@ enum { | |||
451 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) | 483 | #define blk_queue_plugged(q) test_bit(QUEUE_FLAG_PLUGGED, &(q)->queue_flags) |
452 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) | 484 | #define blk_queue_tagged(q) test_bit(QUEUE_FLAG_QUEUED, &(q)->queue_flags) |
453 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) | 485 | #define blk_queue_stopped(q) test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags) |
486 | #define blk_queue_nomerges(q) test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags) | ||
454 | #define blk_queue_flushing(q) ((q)->ordseq) | 487 | #define blk_queue_flushing(q) ((q)->ordseq) |
455 | 488 | ||
456 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) | 489 | #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) |
@@ -496,17 +529,17 @@ static inline int blk_queue_full(struct request_queue *q, int rw) | |||
496 | static inline void blk_set_queue_full(struct request_queue *q, int rw) | 529 | static inline void blk_set_queue_full(struct request_queue *q, int rw) |
497 | { | 530 | { |
498 | if (rw == READ) | 531 | if (rw == READ) |
499 | set_bit(QUEUE_FLAG_READFULL, &q->queue_flags); | 532 | queue_flag_set(QUEUE_FLAG_READFULL, q); |
500 | else | 533 | else |
501 | set_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); | 534 | queue_flag_set(QUEUE_FLAG_WRITEFULL, q); |
502 | } | 535 | } |
503 | 536 | ||
504 | static inline void blk_clear_queue_full(struct request_queue *q, int rw) | 537 | static inline void blk_clear_queue_full(struct request_queue *q, int rw) |
505 | { | 538 | { |
506 | if (rw == READ) | 539 | if (rw == READ) |
507 | clear_bit(QUEUE_FLAG_READFULL, &q->queue_flags); | 540 | queue_flag_clear(QUEUE_FLAG_READFULL, q); |
508 | else | 541 | else |
509 | clear_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags); | 542 | queue_flag_clear(QUEUE_FLAG_WRITEFULL, q); |
510 | } | 543 | } |
511 | 544 | ||
512 | 545 | ||
@@ -583,6 +616,7 @@ extern int blk_register_queue(struct gendisk *disk); | |||
583 | extern void blk_unregister_queue(struct gendisk *disk); | 616 | extern void blk_unregister_queue(struct gendisk *disk); |
584 | extern void register_disk(struct gendisk *dev); | 617 | extern void register_disk(struct gendisk *dev); |
585 | extern void generic_make_request(struct bio *bio); | 618 | extern void generic_make_request(struct bio *bio); |
619 | extern void blk_rq_init(struct request_queue *q, struct request *rq); | ||
586 | extern void blk_put_request(struct request *); | 620 | extern void blk_put_request(struct request *); |
587 | extern void __blk_put_request(struct request_queue *, struct request *); | 621 | extern void __blk_put_request(struct request_queue *, struct request *); |
588 | extern void blk_end_sync_rq(struct request *rq, int error); | 622 | extern void blk_end_sync_rq(struct request *rq, int error); |
@@ -626,6 +660,7 @@ extern void blk_start_queue(struct request_queue *q); | |||
626 | extern void blk_stop_queue(struct request_queue *q); | 660 | extern void blk_stop_queue(struct request_queue *q); |
627 | extern void blk_sync_queue(struct request_queue *q); | 661 | extern void blk_sync_queue(struct request_queue *q); |
628 | extern void __blk_stop_queue(struct request_queue *q); | 662 | extern void __blk_stop_queue(struct request_queue *q); |
663 | extern void __blk_run_queue(struct request_queue *); | ||
629 | extern void blk_run_queue(struct request_queue *); | 664 | extern void blk_run_queue(struct request_queue *); |
630 | extern void blk_start_queueing(struct request_queue *); | 665 | extern void blk_start_queueing(struct request_queue *); |
631 | extern int blk_rq_map_user(struct request_queue *, struct request *, void __user *, unsigned long); | 666 | extern int blk_rq_map_user(struct request_queue *, struct request *, void __user *, unsigned long); |
diff --git a/include/linux/bootmem.h b/include/linux/bootmem.h index 4e4e340592fb..6a5dbdc8a7dc 100644 --- a/include/linux/bootmem.h +++ b/include/linux/bootmem.h | |||
@@ -101,6 +101,8 @@ extern void reserve_bootmem_node(pg_data_t *pgdat, | |||
101 | extern void free_bootmem_node(pg_data_t *pgdat, | 101 | extern void free_bootmem_node(pg_data_t *pgdat, |
102 | unsigned long addr, | 102 | unsigned long addr, |
103 | unsigned long size); | 103 | unsigned long size); |
104 | extern void *alloc_bootmem_section(unsigned long size, | ||
105 | unsigned long section_nr); | ||
104 | 106 | ||
105 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE | 107 | #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE |
106 | #define alloc_bootmem_node(pgdat, x) \ | 108 | #define alloc_bootmem_node(pgdat, x) \ |
diff --git a/include/linux/bsg.h b/include/linux/bsg.h index e8406c55c6d3..cf0303a60611 100644 --- a/include/linux/bsg.h +++ b/include/linux/bsg.h | |||
@@ -56,19 +56,25 @@ struct sg_io_v4 { | |||
56 | #if defined(CONFIG_BLK_DEV_BSG) | 56 | #if defined(CONFIG_BLK_DEV_BSG) |
57 | struct bsg_class_device { | 57 | struct bsg_class_device { |
58 | struct device *class_dev; | 58 | struct device *class_dev; |
59 | struct device *dev; | 59 | struct device *parent; |
60 | int minor; | 60 | int minor; |
61 | struct request_queue *queue; | 61 | struct request_queue *queue; |
62 | struct kref ref; | ||
63 | void (*release)(struct device *); | ||
62 | }; | 64 | }; |
63 | 65 | ||
64 | extern int bsg_register_queue(struct request_queue *, struct device *, const char *); | 66 | extern int bsg_register_queue(struct request_queue *q, |
67 | struct device *parent, const char *name, | ||
68 | void (*release)(struct device *)); | ||
65 | extern void bsg_unregister_queue(struct request_queue *); | 69 | extern void bsg_unregister_queue(struct request_queue *); |
66 | #else | 70 | #else |
67 | static inline int bsg_register_queue(struct request_queue * rq, struct device *dev, const char *name) | 71 | static inline int bsg_register_queue(struct request_queue *q, |
72 | struct device *parent, const char *name, | ||
73 | void (*release)(struct device *)) | ||
68 | { | 74 | { |
69 | return 0; | 75 | return 0; |
70 | } | 76 | } |
71 | static inline void bsg_unregister_queue(struct request_queue *rq) | 77 | static inline void bsg_unregister_queue(struct request_queue *q) |
72 | { | 78 | { |
73 | } | 79 | } |
74 | #endif | 80 | #endif |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 932eb02a2753..82aa36c53ea7 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
@@ -225,7 +225,6 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct page *page, | |||
225 | get_block_t get_block); | 225 | get_block_t get_block); |
226 | void block_sync_page(struct page *); | 226 | void block_sync_page(struct page *); |
227 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); | 227 | sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *); |
228 | int generic_commit_write(struct file *, struct page *, unsigned, unsigned); | ||
229 | int block_truncate_page(struct address_space *, loff_t, get_block_t *); | 228 | int block_truncate_page(struct address_space *, loff_t, get_block_t *); |
230 | int file_fsync(struct file *, struct dentry *, int); | 229 | int file_fsync(struct file *, struct dentry *, int); |
231 | int nobh_write_begin(struct file *, struct address_space *, | 230 | int nobh_write_begin(struct file *, struct address_space *, |
diff --git a/include/linux/cache.h b/include/linux/cache.h index 4552504c0228..97e24881c4c6 100644 --- a/include/linux/cache.h +++ b/include/linux/cache.h | |||
@@ -60,4 +60,8 @@ | |||
60 | #endif | 60 | #endif |
61 | #endif | 61 | #endif |
62 | 62 | ||
63 | #ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE | ||
64 | #define cache_line_size() L1_CACHE_BYTES | ||
65 | #endif | ||
66 | |||
63 | #endif /* __LINUX_CACHE_H */ | 67 | #endif /* __LINUX_CACHE_H */ |
diff --git a/include/linux/capability.h b/include/linux/capability.h index 7d50ff6d269f..eaab759b1460 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
@@ -155,6 +155,7 @@ typedef struct kernel_cap_struct { | |||
155 | * Add any capability from current's capability bounding set | 155 | * Add any capability from current's capability bounding set |
156 | * to the current process' inheritable set | 156 | * to the current process' inheritable set |
157 | * Allow taking bits out of capability bounding set | 157 | * Allow taking bits out of capability bounding set |
158 | * Allow modification of the securebits for a process | ||
158 | */ | 159 | */ |
159 | 160 | ||
160 | #define CAP_SETPCAP 8 | 161 | #define CAP_SETPCAP 8 |
@@ -490,8 +491,6 @@ extern const kernel_cap_t __cap_init_eff_set; | |||
490 | int capable(int cap); | 491 | int capable(int cap); |
491 | int __capable(struct task_struct *t, int cap); | 492 | int __capable(struct task_struct *t, int cap); |
492 | 493 | ||
493 | extern long cap_prctl_drop(unsigned long cap); | ||
494 | |||
495 | #endif /* __KERNEL__ */ | 494 | #endif /* __KERNEL__ */ |
496 | 495 | ||
497 | #endif /* !_LINUX_CAPABILITY_H */ | 496 | #endif /* !_LINUX_CAPABILITY_H */ |
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index a6a6035a4e1e..e155aa78d859 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
@@ -88,6 +88,17 @@ static inline void css_put(struct cgroup_subsys_state *css) | |||
88 | __css_put(css); | 88 | __css_put(css); |
89 | } | 89 | } |
90 | 90 | ||
91 | /* bits in struct cgroup flags field */ | ||
92 | enum { | ||
93 | /* Control Group is dead */ | ||
94 | CGRP_REMOVED, | ||
95 | /* Control Group has previously had a child cgroup or a task, | ||
96 | * but no longer (only if CGRP_NOTIFY_ON_RELEASE is set) */ | ||
97 | CGRP_RELEASABLE, | ||
98 | /* Control Group requires release notifications to userspace */ | ||
99 | CGRP_NOTIFY_ON_RELEASE, | ||
100 | }; | ||
101 | |||
91 | struct cgroup { | 102 | struct cgroup { |
92 | unsigned long flags; /* "unsigned long" so bitops work */ | 103 | unsigned long flags; /* "unsigned long" so bitops work */ |
93 | 104 | ||
@@ -139,10 +150,10 @@ struct css_set { | |||
139 | struct kref ref; | 150 | struct kref ref; |
140 | 151 | ||
141 | /* | 152 | /* |
142 | * List running through all cgroup groups. Protected by | 153 | * List running through all cgroup groups in the same hash |
143 | * css_set_lock | 154 | * slot. Protected by css_set_lock |
144 | */ | 155 | */ |
145 | struct list_head list; | 156 | struct hlist_node hlist; |
146 | 157 | ||
147 | /* | 158 | /* |
148 | * List running through all tasks using this cgroup | 159 | * List running through all tasks using this cgroup |
@@ -163,7 +174,16 @@ struct css_set { | |||
163 | * during subsystem registration (at boot time). | 174 | * during subsystem registration (at boot time). |
164 | */ | 175 | */ |
165 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; | 176 | struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; |
177 | }; | ||
178 | |||
179 | /* | ||
180 | * cgroup_map_cb is an abstract callback API for reporting map-valued | ||
181 | * control files | ||
182 | */ | ||
166 | 183 | ||
184 | struct cgroup_map_cb { | ||
185 | int (*fill)(struct cgroup_map_cb *cb, const char *key, u64 value); | ||
186 | void *state; | ||
167 | }; | 187 | }; |
168 | 188 | ||
169 | /* struct cftype: | 189 | /* struct cftype: |
@@ -190,20 +210,51 @@ struct cftype { | |||
190 | struct file *file, | 210 | struct file *file, |
191 | char __user *buf, size_t nbytes, loff_t *ppos); | 211 | char __user *buf, size_t nbytes, loff_t *ppos); |
192 | /* | 212 | /* |
193 | * read_uint() is a shortcut for the common case of returning a | 213 | * read_u64() is a shortcut for the common case of returning a |
194 | * single integer. Use it in place of read() | 214 | * single integer. Use it in place of read() |
195 | */ | 215 | */ |
196 | u64 (*read_uint) (struct cgroup *cgrp, struct cftype *cft); | 216 | u64 (*read_u64) (struct cgroup *cgrp, struct cftype *cft); |
217 | /* | ||
218 | * read_s64() is a signed version of read_u64() | ||
219 | */ | ||
220 | s64 (*read_s64) (struct cgroup *cgrp, struct cftype *cft); | ||
221 | /* | ||
222 | * read_map() is used for defining a map of key/value | ||
223 | * pairs. It should call cb->fill(cb, key, value) for each | ||
224 | * entry. The key/value pairs (and their ordering) should not | ||
225 | * change between reboots. | ||
226 | */ | ||
227 | int (*read_map) (struct cgroup *cont, struct cftype *cft, | ||
228 | struct cgroup_map_cb *cb); | ||
229 | /* | ||
230 | * read_seq_string() is used for outputting a simple sequence | ||
231 | * using seqfile. | ||
232 | */ | ||
233 | int (*read_seq_string) (struct cgroup *cont, struct cftype *cft, | ||
234 | struct seq_file *m); | ||
235 | |||
197 | ssize_t (*write) (struct cgroup *cgrp, struct cftype *cft, | 236 | ssize_t (*write) (struct cgroup *cgrp, struct cftype *cft, |
198 | struct file *file, | 237 | struct file *file, |
199 | const char __user *buf, size_t nbytes, loff_t *ppos); | 238 | const char __user *buf, size_t nbytes, loff_t *ppos); |
200 | 239 | ||
201 | /* | 240 | /* |
202 | * write_uint() is a shortcut for the common case of accepting | 241 | * write_u64() is a shortcut for the common case of accepting |
203 | * a single integer (as parsed by simple_strtoull) from | 242 | * a single integer (as parsed by simple_strtoull) from |
204 | * userspace. Use in place of write(); return 0 or error. | 243 | * userspace. Use in place of write(); return 0 or error. |
205 | */ | 244 | */ |
206 | int (*write_uint) (struct cgroup *cgrp, struct cftype *cft, u64 val); | 245 | int (*write_u64) (struct cgroup *cgrp, struct cftype *cft, u64 val); |
246 | /* | ||
247 | * write_s64() is a signed version of write_u64() | ||
248 | */ | ||
249 | int (*write_s64) (struct cgroup *cgrp, struct cftype *cft, s64 val); | ||
250 | |||
251 | /* | ||
252 | * trigger() callback can be used to get some kick from the | ||
253 | * userspace, when the actual string written is not important | ||
254 | * at all. The private field can be used to determine the | ||
255 | * kick type for multiplexing. | ||
256 | */ | ||
257 | int (*trigger)(struct cgroup *cgrp, unsigned int event); | ||
207 | 258 | ||
208 | int (*release) (struct inode *inode, struct file *file); | 259 | int (*release) (struct inode *inode, struct file *file); |
209 | }; | 260 | }; |
@@ -254,6 +305,12 @@ struct cgroup_subsys { | |||
254 | struct cgroup *cgrp); | 305 | struct cgroup *cgrp); |
255 | void (*post_clone)(struct cgroup_subsys *ss, struct cgroup *cgrp); | 306 | void (*post_clone)(struct cgroup_subsys *ss, struct cgroup *cgrp); |
256 | void (*bind)(struct cgroup_subsys *ss, struct cgroup *root); | 307 | void (*bind)(struct cgroup_subsys *ss, struct cgroup *root); |
308 | /* | ||
309 | * This routine is called with the task_lock of mm->owner held | ||
310 | */ | ||
311 | void (*mm_owner_changed)(struct cgroup_subsys *ss, | ||
312 | struct cgroup *old, | ||
313 | struct cgroup *new); | ||
257 | int subsys_id; | 314 | int subsys_id; |
258 | int active; | 315 | int active; |
259 | int disabled; | 316 | int disabled; |
@@ -339,4 +396,13 @@ static inline int cgroupstats_build(struct cgroupstats *stats, | |||
339 | 396 | ||
340 | #endif /* !CONFIG_CGROUPS */ | 397 | #endif /* !CONFIG_CGROUPS */ |
341 | 398 | ||
399 | #ifdef CONFIG_MM_OWNER | ||
400 | extern void | ||
401 | cgroup_mm_owner_callbacks(struct task_struct *old, struct task_struct *new); | ||
402 | #else /* !CONFIG_MM_OWNER */ | ||
403 | static inline void | ||
404 | cgroup_mm_owner_callbacks(struct task_struct *old, struct task_struct *new) | ||
405 | { | ||
406 | } | ||
407 | #endif /* CONFIG_MM_OWNER */ | ||
342 | #endif /* _LINUX_CGROUP_H */ | 408 | #endif /* _LINUX_CGROUP_H */ |
diff --git a/include/linux/cgroup_subsys.h b/include/linux/cgroup_subsys.h index 1ddebfc52565..e2877454ec82 100644 --- a/include/linux/cgroup_subsys.h +++ b/include/linux/cgroup_subsys.h | |||
@@ -42,3 +42,9 @@ SUBSYS(mem_cgroup) | |||
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | /* */ | 44 | /* */ |
45 | |||
46 | #ifdef CONFIG_CGROUP_DEVICE | ||
47 | SUBSYS(devices) | ||
48 | #endif | ||
49 | |||
50 | /* */ | ||
diff --git a/include/linux/coda_linux.h b/include/linux/coda_linux.h index 1c47a34aa794..31b75311e2ca 100644 --- a/include/linux/coda_linux.h +++ b/include/linux/coda_linux.h | |||
@@ -43,9 +43,6 @@ int coda_getattr(struct vfsmount *, struct dentry *, struct kstat *); | |||
43 | int coda_setattr(struct dentry *, struct iattr *); | 43 | int coda_setattr(struct dentry *, struct iattr *); |
44 | 44 | ||
45 | /* this file: heloers */ | 45 | /* this file: heloers */ |
46 | static __inline__ struct CodaFid *coda_i2f(struct inode *); | ||
47 | static __inline__ char *coda_i2s(struct inode *); | ||
48 | static __inline__ void coda_flag_inode(struct inode *, int flag); | ||
49 | char *coda_f2s(struct CodaFid *f); | 46 | char *coda_f2s(struct CodaFid *f); |
50 | int coda_isroot(struct inode *i); | 47 | int coda_isroot(struct inode *i); |
51 | int coda_iscontrol(const char *name, size_t length); | 48 | int coda_iscontrol(const char *name, size_t length); |
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index fe23792f05c1..b2fd7547b58d 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h | |||
@@ -28,9 +28,16 @@ | |||
28 | #define __must_be_array(a) \ | 28 | #define __must_be_array(a) \ |
29 | BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(&a[0]))) | 29 | BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(&a[0]))) |
30 | 30 | ||
31 | #define inline inline __attribute__((always_inline)) | 31 | /* |
32 | #define __inline__ __inline__ __attribute__((always_inline)) | 32 | * Force always-inline if the user requests it so via the .config: |
33 | #define __inline __inline __attribute__((always_inline)) | 33 | */ |
34 | #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ | ||
35 | !defined(CONFIG_OPTIMIZE_INLINING) && (__GNUC__ >= 4) | ||
36 | # define inline inline __attribute__((always_inline)) | ||
37 | # define __inline__ __inline__ __attribute__((always_inline)) | ||
38 | # define __inline __inline __attribute__((always_inline)) | ||
39 | #endif | ||
40 | |||
34 | #define __deprecated __attribute__((deprecated)) | 41 | #define __deprecated __attribute__((deprecated)) |
35 | #define __packed __attribute__((packed)) | 42 | #define __packed __attribute__((packed)) |
36 | #define __weak __attribute__((weak)) | 43 | #define __weak __attribute__((weak)) |
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index d71f7c0f931b..b03f80a078be 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h | |||
@@ -53,6 +53,7 @@ struct vc_data { | |||
53 | unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ | 53 | unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ |
54 | struct console_font vc_font; /* Current VC font set */ | 54 | struct console_font vc_font; /* Current VC font set */ |
55 | unsigned short vc_video_erase_char; /* Background erase character */ | 55 | unsigned short vc_video_erase_char; /* Background erase character */ |
56 | unsigned short vc_scrl_erase_char; /* Erase character for scroll */ | ||
56 | /* VT terminal data */ | 57 | /* VT terminal data */ |
57 | unsigned int vc_state; /* Escape sequence parser state */ | 58 | unsigned int vc_state; /* Escape sequence parser state */ |
58 | unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ | 59 | unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index f212fa98283e..7464ba3b4333 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
@@ -108,7 +108,7 @@ static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | |||
108 | extern void get_online_cpus(void); | 108 | extern void get_online_cpus(void); |
109 | extern void put_online_cpus(void); | 109 | extern void put_online_cpus(void); |
110 | #define hotcpu_notifier(fn, pri) { \ | 110 | #define hotcpu_notifier(fn, pri) { \ |
111 | static struct notifier_block fn##_nb = \ | 111 | static struct notifier_block fn##_nb __cpuinitdata = \ |
112 | { .notifier_call = fn, .priority = pri }; \ | 112 | { .notifier_call = fn, .priority = pri }; \ |
113 | register_cpu_notifier(&fn##_nb); \ | 113 | register_cpu_notifier(&fn##_nb); \ |
114 | } | 114 | } |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index ddd8652fc3f3..e7e91dbfde0f 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -83,7 +83,8 @@ struct cpufreq_real_policy { | |||
83 | }; | 83 | }; |
84 | 84 | ||
85 | struct cpufreq_policy { | 85 | struct cpufreq_policy { |
86 | cpumask_t cpus; /* affected CPUs */ | 86 | cpumask_t cpus; /* CPUs requiring sw coordination */ |
87 | cpumask_t related_cpus; /* CPUs with any coordination */ | ||
87 | unsigned int shared_type; /* ANY or ALL affected CPUs | 88 | unsigned int shared_type; /* ANY or ALL affected CPUs |
88 | should set cpufreq */ | 89 | should set cpufreq */ |
89 | unsigned int cpu; /* cpu nr of registered CPU */ | 90 | unsigned int cpu; /* cpu nr of registered CPU */ |
@@ -307,6 +308,9 @@ extern struct cpufreq_governor cpufreq_gov_performance; | |||
307 | #endif | 308 | #endif |
308 | #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE | 309 | #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE |
309 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_performance) | 310 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_performance) |
311 | #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE) | ||
312 | extern struct cpufreq_governor cpufreq_gov_powersave; | ||
313 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_powersave) | ||
310 | #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) | 314 | #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) |
311 | extern struct cpufreq_governor cpufreq_gov_userspace; | 315 | extern struct cpufreq_governor cpufreq_gov_userspace; |
312 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_userspace) | 316 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_userspace) |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 259c8051155d..9650806fe2ea 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
@@ -14,6 +14,8 @@ | |||
14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c | 15 | * For details of cpu_remap(), see bitmap_bitremap in lib/bitmap.c |
16 | * For details of cpus_remap(), see bitmap_remap in lib/bitmap.c. | 16 | * For details of cpus_remap(), see bitmap_remap in lib/bitmap.c. |
17 | * For details of cpus_onto(), see bitmap_onto in lib/bitmap.c. | ||
18 | * For details of cpus_fold(), see bitmap_fold in lib/bitmap.c. | ||
17 | * | 19 | * |
18 | * The available cpumask operations are: | 20 | * The available cpumask operations are: |
19 | * | 21 | * |
@@ -53,7 +55,9 @@ | |||
53 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing | 55 | * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing |
54 | * int cpulist_parse(buf, map) Parse ascii string as cpulist | 56 | * int cpulist_parse(buf, map) Parse ascii string as cpulist |
55 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 57 | * int cpu_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
56 | * int cpus_remap(dst, src, old, new) *dst = map(old, new)(src) | 58 | * void cpus_remap(dst, src, old, new) *dst = map(old, new)(src) |
59 | * void cpus_onto(dst, orig, relmap) *dst = orig relative to relmap | ||
60 | * void cpus_fold(dst, orig, sz) dst bits = orig bits mod sz | ||
57 | * | 61 | * |
58 | * for_each_cpu_mask(cpu, mask) for-loop cpu over mask | 62 | * for_each_cpu_mask(cpu, mask) for-loop cpu over mask |
59 | * | 63 | * |
@@ -330,6 +334,22 @@ static inline void __cpus_remap(cpumask_t *dstp, const cpumask_t *srcp, | |||
330 | bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); | 334 | bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); |
331 | } | 335 | } |
332 | 336 | ||
337 | #define cpus_onto(dst, orig, relmap) \ | ||
338 | __cpus_onto(&(dst), &(orig), &(relmap), NR_CPUS) | ||
339 | static inline void __cpus_onto(cpumask_t *dstp, const cpumask_t *origp, | ||
340 | const cpumask_t *relmapp, int nbits) | ||
341 | { | ||
342 | bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits); | ||
343 | } | ||
344 | |||
345 | #define cpus_fold(dst, orig, sz) \ | ||
346 | __cpus_fold(&(dst), &(orig), sz, NR_CPUS) | ||
347 | static inline void __cpus_fold(cpumask_t *dstp, const cpumask_t *origp, | ||
348 | int sz, int nbits) | ||
349 | { | ||
350 | bitmap_fold(dstp->bits, origp->bits, sz, nbits); | ||
351 | } | ||
352 | |||
333 | #if NR_CPUS > 1 | 353 | #if NR_CPUS > 1 |
334 | #define for_each_cpu_mask(cpu, mask) \ | 354 | #define for_each_cpu_mask(cpu, mask) \ |
335 | for ((cpu) = first_cpu(mask); \ | 355 | for ((cpu) = first_cpu(mask); \ |
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h index 726761e24003..038578362b47 100644 --- a/include/linux/cpuset.h +++ b/include/linux/cpuset.h | |||
@@ -26,7 +26,7 @@ extern nodemask_t cpuset_mems_allowed(struct task_struct *p); | |||
26 | #define cpuset_current_mems_allowed (current->mems_allowed) | 26 | #define cpuset_current_mems_allowed (current->mems_allowed) |
27 | void cpuset_init_current_mems_allowed(void); | 27 | void cpuset_init_current_mems_allowed(void); |
28 | void cpuset_update_task_memory_state(void); | 28 | void cpuset_update_task_memory_state(void); |
29 | int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl); | 29 | int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask); |
30 | 30 | ||
31 | extern int __cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask); | 31 | extern int __cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask); |
32 | extern int __cpuset_zone_allowed_hardwall(struct zone *z, gfp_t gfp_mask); | 32 | extern int __cpuset_zone_allowed_hardwall(struct zone *z, gfp_t gfp_mask); |
@@ -103,7 +103,7 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p) | |||
103 | static inline void cpuset_init_current_mems_allowed(void) {} | 103 | static inline void cpuset_init_current_mems_allowed(void) {} |
104 | static inline void cpuset_update_task_memory_state(void) {} | 104 | static inline void cpuset_update_task_memory_state(void) {} |
105 | 105 | ||
106 | static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl) | 106 | static inline int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask) |
107 | { | 107 | { |
108 | return 1; | 108 | return 1; |
109 | } | 109 | } |
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index cb784579956b..ad3b787479a4 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2001 Sistina Software (UK) Limited. | 2 | * Copyright (C) 2001 Sistina Software (UK) Limited. |
3 | * Copyright (C) 2004 Red Hat, Inc. All rights reserved. | 3 | * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. |
4 | * | 4 | * |
5 | * This file is released under the LGPL. | 5 | * This file is released under the LGPL. |
6 | */ | 6 | */ |
@@ -10,6 +10,8 @@ | |||
10 | 10 | ||
11 | #ifdef __KERNEL__ | 11 | #ifdef __KERNEL__ |
12 | 12 | ||
13 | #include <linux/bio.h> | ||
14 | |||
13 | struct dm_target; | 15 | struct dm_target; |
14 | struct dm_table; | 16 | struct dm_table; |
15 | struct dm_dev; | 17 | struct dm_dev; |
@@ -250,11 +252,97 @@ void dm_table_event(struct dm_table *t); | |||
250 | */ | 252 | */ |
251 | int dm_swap_table(struct mapped_device *md, struct dm_table *t); | 253 | int dm_swap_table(struct mapped_device *md, struct dm_table *t); |
252 | 254 | ||
255 | /*----------------------------------------------------------------- | ||
256 | * Macros. | ||
257 | *---------------------------------------------------------------*/ | ||
258 | #define DM_NAME "device-mapper" | ||
259 | |||
260 | #define DMERR(f, arg...) \ | ||
261 | printk(KERN_ERR DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg) | ||
262 | #define DMERR_LIMIT(f, arg...) \ | ||
263 | do { \ | ||
264 | if (printk_ratelimit()) \ | ||
265 | printk(KERN_ERR DM_NAME ": " DM_MSG_PREFIX ": " \ | ||
266 | f "\n", ## arg); \ | ||
267 | } while (0) | ||
268 | |||
269 | #define DMWARN(f, arg...) \ | ||
270 | printk(KERN_WARNING DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg) | ||
271 | #define DMWARN_LIMIT(f, arg...) \ | ||
272 | do { \ | ||
273 | if (printk_ratelimit()) \ | ||
274 | printk(KERN_WARNING DM_NAME ": " DM_MSG_PREFIX ": " \ | ||
275 | f "\n", ## arg); \ | ||
276 | } while (0) | ||
277 | |||
278 | #define DMINFO(f, arg...) \ | ||
279 | printk(KERN_INFO DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg) | ||
280 | #define DMINFO_LIMIT(f, arg...) \ | ||
281 | do { \ | ||
282 | if (printk_ratelimit()) \ | ||
283 | printk(KERN_INFO DM_NAME ": " DM_MSG_PREFIX ": " f \ | ||
284 | "\n", ## arg); \ | ||
285 | } while (0) | ||
286 | |||
287 | #ifdef CONFIG_DM_DEBUG | ||
288 | # define DMDEBUG(f, arg...) \ | ||
289 | printk(KERN_DEBUG DM_NAME ": " DM_MSG_PREFIX " DEBUG: " f "\n", ## arg) | ||
290 | # define DMDEBUG_LIMIT(f, arg...) \ | ||
291 | do { \ | ||
292 | if (printk_ratelimit()) \ | ||
293 | printk(KERN_DEBUG DM_NAME ": " DM_MSG_PREFIX ": " f \ | ||
294 | "\n", ## arg); \ | ||
295 | } while (0) | ||
296 | #else | ||
297 | # define DMDEBUG(f, arg...) do {} while (0) | ||
298 | # define DMDEBUG_LIMIT(f, arg...) do {} while (0) | ||
299 | #endif | ||
300 | |||
301 | #define DMEMIT(x...) sz += ((sz >= maxlen) ? \ | ||
302 | 0 : scnprintf(result + sz, maxlen - sz, x)) | ||
303 | |||
304 | #define SECTOR_SHIFT 9 | ||
305 | |||
306 | /* | ||
307 | * Definitions of return values from target end_io function. | ||
308 | */ | ||
309 | #define DM_ENDIO_INCOMPLETE 1 | ||
310 | #define DM_ENDIO_REQUEUE 2 | ||
311 | |||
312 | /* | ||
313 | * Definitions of return values from target map function. | ||
314 | */ | ||
315 | #define DM_MAPIO_SUBMITTED 0 | ||
316 | #define DM_MAPIO_REMAPPED 1 | ||
317 | #define DM_MAPIO_REQUEUE DM_ENDIO_REQUEUE | ||
318 | |||
319 | /* | ||
320 | * Ceiling(n / sz) | ||
321 | */ | ||
322 | #define dm_div_up(n, sz) (((n) + (sz) - 1) / (sz)) | ||
323 | |||
324 | #define dm_sector_div_up(n, sz) ( \ | ||
325 | { \ | ||
326 | sector_t _r = ((n) + (sz) - 1); \ | ||
327 | sector_div(_r, (sz)); \ | ||
328 | _r; \ | ||
329 | } \ | ||
330 | ) | ||
331 | |||
253 | /* | 332 | /* |
254 | * Prepare a table for a device that will error all I/O. | 333 | * ceiling(n / size) * size |
255 | * To make it active, call dm_suspend(), dm_swap_table() then dm_resume(). | ||
256 | */ | 334 | */ |
257 | int dm_create_error_table(struct dm_table **result, struct mapped_device *md); | 335 | #define dm_round_up(n, sz) (dm_div_up((n), (sz)) * (sz)) |
336 | |||
337 | static inline sector_t to_sector(unsigned long n) | ||
338 | { | ||
339 | return (n >> SECTOR_SHIFT); | ||
340 | } | ||
341 | |||
342 | static inline unsigned long to_bytes(sector_t n) | ||
343 | { | ||
344 | return (n << SECTOR_SHIFT); | ||
345 | } | ||
258 | 346 | ||
259 | #endif /* __KERNEL__ */ | 347 | #endif /* __KERNEL__ */ |
260 | #endif /* _LINUX_DEVICE_MAPPER_H */ | 348 | #endif /* _LINUX_DEVICE_MAPPER_H */ |
diff --git a/include/linux/device_cgroup.h b/include/linux/device_cgroup.h new file mode 100644 index 000000000000..0b0d9c39ed67 --- /dev/null +++ b/include/linux/device_cgroup.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #include <linux/module.h> | ||
2 | #include <linux/fs.h> | ||
3 | |||
4 | #ifdef CONFIG_CGROUP_DEVICE | ||
5 | extern int devcgroup_inode_permission(struct inode *inode, int mask); | ||
6 | extern int devcgroup_inode_mknod(int mode, dev_t dev); | ||
7 | #else | ||
8 | static inline int devcgroup_inode_permission(struct inode *inode, int mask) | ||
9 | { return 0; } | ||
10 | static inline int devcgroup_inode_mknod(int mode, dev_t dev) | ||
11 | { return 0; } | ||
12 | #endif | ||
diff --git a/include/linux/dm-dirty-log.h b/include/linux/dm-dirty-log.h new file mode 100644 index 000000000000..600c5fb2daad --- /dev/null +++ b/include/linux/dm-dirty-log.h | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2003 Sistina Software | ||
3 | * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. | ||
4 | * | ||
5 | * Device-Mapper dirty region log. | ||
6 | * | ||
7 | * This file is released under the LGPL. | ||
8 | */ | ||
9 | |||
10 | #ifndef _LINUX_DM_DIRTY_LOG | ||
11 | #define _LINUX_DM_DIRTY_LOG | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | #include <linux/types.h> | ||
16 | #include <linux/device-mapper.h> | ||
17 | |||
18 | typedef sector_t region_t; | ||
19 | |||
20 | struct dm_dirty_log_type; | ||
21 | |||
22 | struct dm_dirty_log { | ||
23 | struct dm_dirty_log_type *type; | ||
24 | void *context; | ||
25 | }; | ||
26 | |||
27 | struct dm_dirty_log_type { | ||
28 | const char *name; | ||
29 | struct module *module; | ||
30 | |||
31 | int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti, | ||
32 | unsigned argc, char **argv); | ||
33 | void (*dtr)(struct dm_dirty_log *log); | ||
34 | |||
35 | /* | ||
36 | * There are times when we don't want the log to touch | ||
37 | * the disk. | ||
38 | */ | ||
39 | int (*presuspend)(struct dm_dirty_log *log); | ||
40 | int (*postsuspend)(struct dm_dirty_log *log); | ||
41 | int (*resume)(struct dm_dirty_log *log); | ||
42 | |||
43 | /* | ||
44 | * Retrieves the smallest size of region that the log can | ||
45 | * deal with. | ||
46 | */ | ||
47 | uint32_t (*get_region_size)(struct dm_dirty_log *log); | ||
48 | |||
49 | /* | ||
50 | * A predicate to say whether a region is clean or not. | ||
51 | * May block. | ||
52 | */ | ||
53 | int (*is_clean)(struct dm_dirty_log *log, region_t region); | ||
54 | |||
55 | /* | ||
56 | * Returns: 0, 1, -EWOULDBLOCK, < 0 | ||
57 | * | ||
58 | * A predicate function to check the area given by | ||
59 | * [sector, sector + len) is in sync. | ||
60 | * | ||
61 | * If -EWOULDBLOCK is returned the state of the region is | ||
62 | * unknown, typically this will result in a read being | ||
63 | * passed to a daemon to deal with, since a daemon is | ||
64 | * allowed to block. | ||
65 | */ | ||
66 | int (*in_sync)(struct dm_dirty_log *log, region_t region, | ||
67 | int can_block); | ||
68 | |||
69 | /* | ||
70 | * Flush the current log state (eg, to disk). This | ||
71 | * function may block. | ||
72 | */ | ||
73 | int (*flush)(struct dm_dirty_log *log); | ||
74 | |||
75 | /* | ||
76 | * Mark an area as clean or dirty. These functions may | ||
77 | * block, though for performance reasons blocking should | ||
78 | * be extremely rare (eg, allocating another chunk of | ||
79 | * memory for some reason). | ||
80 | */ | ||
81 | void (*mark_region)(struct dm_dirty_log *log, region_t region); | ||
82 | void (*clear_region)(struct dm_dirty_log *log, region_t region); | ||
83 | |||
84 | /* | ||
85 | * Returns: <0 (error), 0 (no region), 1 (region) | ||
86 | * | ||
87 | * The mirrord will need perform recovery on regions of | ||
88 | * the mirror that are in the NOSYNC state. This | ||
89 | * function asks the log to tell the caller about the | ||
90 | * next region that this machine should recover. | ||
91 | * | ||
92 | * Do not confuse this function with 'in_sync()', one | ||
93 | * tells you if an area is synchronised, the other | ||
94 | * assigns recovery work. | ||
95 | */ | ||
96 | int (*get_resync_work)(struct dm_dirty_log *log, region_t *region); | ||
97 | |||
98 | /* | ||
99 | * This notifies the log that the resync status of a region | ||
100 | * has changed. It also clears the region from the recovering | ||
101 | * list (if present). | ||
102 | */ | ||
103 | void (*set_region_sync)(struct dm_dirty_log *log, | ||
104 | region_t region, int in_sync); | ||
105 | |||
106 | /* | ||
107 | * Returns the number of regions that are in sync. | ||
108 | */ | ||
109 | region_t (*get_sync_count)(struct dm_dirty_log *log); | ||
110 | |||
111 | /* | ||
112 | * Support function for mirror status requests. | ||
113 | */ | ||
114 | int (*status)(struct dm_dirty_log *log, status_type_t status_type, | ||
115 | char *result, unsigned maxlen); | ||
116 | }; | ||
117 | |||
118 | int dm_dirty_log_type_register(struct dm_dirty_log_type *type); | ||
119 | int dm_dirty_log_type_unregister(struct dm_dirty_log_type *type); | ||
120 | |||
121 | /* | ||
122 | * Make sure you use these two functions, rather than calling | ||
123 | * type->constructor/destructor() directly. | ||
124 | */ | ||
125 | struct dm_dirty_log *dm_dirty_log_create(const char *type_name, | ||
126 | struct dm_target *ti, | ||
127 | unsigned argc, char **argv); | ||
128 | void dm_dirty_log_destroy(struct dm_dirty_log *log); | ||
129 | |||
130 | #endif /* __KERNEL__ */ | ||
131 | #endif /* _LINUX_DM_DIRTY_LOG_H */ | ||
diff --git a/include/linux/dm-io.h b/include/linux/dm-io.h new file mode 100644 index 000000000000..b6bf17ee2f61 --- /dev/null +++ b/include/linux/dm-io.h | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2003 Sistina Software | ||
3 | * Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved. | ||
4 | * | ||
5 | * Device-Mapper low-level I/O. | ||
6 | * | ||
7 | * This file is released under the GPL. | ||
8 | */ | ||
9 | |||
10 | #ifndef _LINUX_DM_IO_H | ||
11 | #define _LINUX_DM_IO_H | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | #include <linux/types.h> | ||
16 | |||
17 | struct dm_io_region { | ||
18 | struct block_device *bdev; | ||
19 | sector_t sector; | ||
20 | sector_t count; /* If this is zero the region is ignored. */ | ||
21 | }; | ||
22 | |||
23 | struct page_list { | ||
24 | struct page_list *next; | ||
25 | struct page *page; | ||
26 | }; | ||
27 | |||
28 | typedef void (*io_notify_fn)(unsigned long error, void *context); | ||
29 | |||
30 | enum dm_io_mem_type { | ||
31 | DM_IO_PAGE_LIST,/* Page list */ | ||
32 | DM_IO_BVEC, /* Bio vector */ | ||
33 | DM_IO_VMA, /* Virtual memory area */ | ||
34 | DM_IO_KMEM, /* Kernel memory */ | ||
35 | }; | ||
36 | |||
37 | struct dm_io_memory { | ||
38 | enum dm_io_mem_type type; | ||
39 | |||
40 | union { | ||
41 | struct page_list *pl; | ||
42 | struct bio_vec *bvec; | ||
43 | void *vma; | ||
44 | void *addr; | ||
45 | } ptr; | ||
46 | |||
47 | unsigned offset; | ||
48 | }; | ||
49 | |||
50 | struct dm_io_notify { | ||
51 | io_notify_fn fn; /* Callback for asynchronous requests */ | ||
52 | void *context; /* Passed to callback */ | ||
53 | }; | ||
54 | |||
55 | /* | ||
56 | * IO request structure | ||
57 | */ | ||
58 | struct dm_io_client; | ||
59 | struct dm_io_request { | ||
60 | int bi_rw; /* READ|WRITE - not READA */ | ||
61 | struct dm_io_memory mem; /* Memory to use for io */ | ||
62 | struct dm_io_notify notify; /* Synchronous if notify.fn is NULL */ | ||
63 | struct dm_io_client *client; /* Client memory handler */ | ||
64 | }; | ||
65 | |||
66 | /* | ||
67 | * For async io calls, users can alternatively use the dm_io() function below | ||
68 | * and dm_io_client_create() to create private mempools for the client. | ||
69 | * | ||
70 | * Create/destroy may block. | ||
71 | */ | ||
72 | struct dm_io_client *dm_io_client_create(unsigned num_pages); | ||
73 | int dm_io_client_resize(unsigned num_pages, struct dm_io_client *client); | ||
74 | void dm_io_client_destroy(struct dm_io_client *client); | ||
75 | |||
76 | /* | ||
77 | * IO interface using private per-client pools. | ||
78 | * Each bit in the optional 'sync_error_bits' bitset indicates whether an | ||
79 | * error occurred doing io to the corresponding region. | ||
80 | */ | ||
81 | int dm_io(struct dm_io_request *io_req, unsigned num_regions, | ||
82 | struct dm_io_region *region, unsigned long *sync_error_bits); | ||
83 | |||
84 | #endif /* __KERNEL__ */ | ||
85 | #endif /* _LINUX_DM_IO_H */ | ||
diff --git a/include/linux/dm-kcopyd.h b/include/linux/dm-kcopyd.h new file mode 100644 index 000000000000..5db216311695 --- /dev/null +++ b/include/linux/dm-kcopyd.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001 - 2003 Sistina Software | ||
3 | * Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved. | ||
4 | * | ||
5 | * kcopyd provides a simple interface for copying an area of one | ||
6 | * block-device to one or more other block-devices, either synchronous | ||
7 | * or with an asynchronous completion notification. | ||
8 | * | ||
9 | * This file is released under the GPL. | ||
10 | */ | ||
11 | |||
12 | #ifndef _LINUX_DM_KCOPYD_H | ||
13 | #define _LINUX_DM_KCOPYD_H | ||
14 | |||
15 | #ifdef __KERNEL__ | ||
16 | |||
17 | #include <linux/dm-io.h> | ||
18 | |||
19 | /* FIXME: make this configurable */ | ||
20 | #define DM_KCOPYD_MAX_REGIONS 8 | ||
21 | |||
22 | #define DM_KCOPYD_IGNORE_ERROR 1 | ||
23 | |||
24 | /* | ||
25 | * To use kcopyd you must first create a dm_kcopyd_client object. | ||
26 | */ | ||
27 | struct dm_kcopyd_client; | ||
28 | int dm_kcopyd_client_create(unsigned num_pages, | ||
29 | struct dm_kcopyd_client **result); | ||
30 | void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc); | ||
31 | |||
32 | /* | ||
33 | * Submit a copy job to kcopyd. This is built on top of the | ||
34 | * previous three fns. | ||
35 | * | ||
36 | * read_err is a boolean, | ||
37 | * write_err is a bitset, with 1 bit for each destination region | ||
38 | */ | ||
39 | typedef void (*dm_kcopyd_notify_fn)(int read_err, unsigned long write_err, | ||
40 | void *context); | ||
41 | |||
42 | int dm_kcopyd_copy(struct dm_kcopyd_client *kc, struct dm_io_region *from, | ||
43 | unsigned num_dests, struct dm_io_region *dests, | ||
44 | unsigned flags, dm_kcopyd_notify_fn fn, void *context); | ||
45 | |||
46 | #endif /* __KERNEL__ */ | ||
47 | #endif /* _LINUX_DM_KCOPYD_H */ | ||
diff --git a/include/linux/dma-attrs.h b/include/linux/dma-attrs.h new file mode 100644 index 000000000000..1677e2bfa00c --- /dev/null +++ b/include/linux/dma-attrs.h | |||
@@ -0,0 +1,74 @@ | |||
1 | #ifndef _DMA_ATTR_H | ||
2 | #define _DMA_ATTR_H | ||
3 | |||
4 | #include <linux/bitmap.h> | ||
5 | #include <linux/bitops.h> | ||
6 | #include <linux/bug.h> | ||
7 | |||
8 | /** | ||
9 | * an enum dma_attr represents an attribute associated with a DMA | ||
10 | * mapping. The semantics of each attribute should be defined in | ||
11 | * Documentation/DMA-attributes.txt. | ||
12 | */ | ||
13 | enum dma_attr { | ||
14 | DMA_ATTR_WRITE_BARRIER, | ||
15 | DMA_ATTR_MAX, | ||
16 | }; | ||
17 | |||
18 | #define __DMA_ATTRS_LONGS BITS_TO_LONGS(DMA_ATTR_MAX) | ||
19 | |||
20 | /** | ||
21 | * struct dma_attrs - an opaque container for DMA attributes | ||
22 | * @flags - bitmask representing a collection of enum dma_attr | ||
23 | */ | ||
24 | struct dma_attrs { | ||
25 | unsigned long flags[__DMA_ATTRS_LONGS]; | ||
26 | }; | ||
27 | |||
28 | #define DEFINE_DMA_ATTRS(x) \ | ||
29 | struct dma_attrs x = { \ | ||
30 | .flags = { [0 ... __DMA_ATTRS_LONGS-1] = 0 }, \ | ||
31 | } | ||
32 | |||
33 | static inline void init_dma_attrs(struct dma_attrs *attrs) | ||
34 | { | ||
35 | bitmap_zero(attrs->flags, __DMA_ATTRS_LONGS); | ||
36 | } | ||
37 | |||
38 | #ifdef CONFIG_HAVE_DMA_ATTRS | ||
39 | /** | ||
40 | * dma_set_attr - set a specific attribute | ||
41 | * @attr: attribute to set | ||
42 | * @attrs: struct dma_attrs (may be NULL) | ||
43 | */ | ||
44 | static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs) | ||
45 | { | ||
46 | if (attrs == NULL) | ||
47 | return; | ||
48 | BUG_ON(attr >= DMA_ATTR_MAX); | ||
49 | __set_bit(attr, attrs->flags); | ||
50 | } | ||
51 | |||
52 | /** | ||
53 | * dma_get_attr - check for a specific attribute | ||
54 | * @attr: attribute to set | ||
55 | * @attrs: struct dma_attrs (may be NULL) | ||
56 | */ | ||
57 | static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs) | ||
58 | { | ||
59 | if (attrs == NULL) | ||
60 | return 0; | ||
61 | BUG_ON(attr >= DMA_ATTR_MAX); | ||
62 | return test_bit(attr, attrs->flags); | ||
63 | } | ||
64 | #else /* !CONFIG_HAVE_DMA_ATTRS */ | ||
65 | static inline void dma_set_attr(enum dma_attr attr, struct dma_attrs *attrs) | ||
66 | { | ||
67 | } | ||
68 | |||
69 | static inline int dma_get_attr(enum dma_attr attr, struct dma_attrs *attrs) | ||
70 | { | ||
71 | return 0; | ||
72 | } | ||
73 | #endif /* CONFIG_HAVE_DMA_ATTRS */ | ||
74 | #endif /* _DMA_ATTR_H */ | ||
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 332030709623..952e0f857ac9 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
@@ -146,4 +146,21 @@ static inline void dmam_release_declared_memory(struct device *dev) | |||
146 | } | 146 | } |
147 | #endif /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */ | 147 | #endif /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */ |
148 | 148 | ||
149 | #ifndef CONFIG_HAVE_DMA_ATTRS | ||
150 | struct dma_attrs; | ||
151 | |||
152 | #define dma_map_single_attrs(dev, cpu_addr, size, dir, attrs) \ | ||
153 | dma_map_single(dev, cpu_addr, size, dir) | ||
154 | |||
155 | #define dma_unmap_single_attrs(dev, dma_addr, size, dir, attrs) \ | ||
156 | dma_unmap_single(dev, dma_addr, size, dir) | ||
157 | |||
158 | #define dma_map_sg_attrs(dev, sgl, nents, dir, attrs) \ | ||
159 | dma_map_sg(dev, sgl, nents, dir) | ||
160 | |||
161 | #define dma_unmap_sg_attrs(dev, sgl, nents, dir, attrs) \ | ||
162 | dma_unmap_sg(dev, sgl, nents, dir) | ||
163 | |||
164 | #endif /* CONFIG_HAVE_DMA_ATTRS */ | ||
165 | |||
149 | #endif | 166 | #endif |
diff --git a/include/linux/dmi.h b/include/linux/dmi.h index 325acdf5c462..2a063b64133f 100644 --- a/include/linux/dmi.h +++ b/include/linux/dmi.h | |||
@@ -90,6 +90,7 @@ static inline int dmi_check_system(const struct dmi_system_id *list) { return 0; | |||
90 | static inline const char * dmi_get_system_info(int field) { return NULL; } | 90 | static inline const char * dmi_get_system_info(int field) { return NULL; } |
91 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, | 91 | static inline const struct dmi_device * dmi_find_device(int type, const char *name, |
92 | const struct dmi_device *from) { return NULL; } | 92 | const struct dmi_device *from) { return NULL; } |
93 | static inline void dmi_scan_machine(void) { return; } | ||
93 | static inline int dmi_get_year(int year) { return 0; } | 94 | static inline int dmi_get_year(int year) { return 0; } |
94 | static inline int dmi_name_in_vendors(const char *s) { return 0; } | 95 | static inline int dmi_name_in_vendors(const char *s) { return 0; } |
95 | #define dmi_available 0 | 96 | #define dmi_available 0 |
diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index c6a2353c4e68..402fb7a8d922 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h | |||
@@ -39,9 +39,10 @@ typedef enum | |||
39 | DMX_OUT_DECODER, /* Streaming directly to decoder. */ | 39 | DMX_OUT_DECODER, /* Streaming directly to decoder. */ |
40 | DMX_OUT_TAP, /* Output going to a memory buffer */ | 40 | DMX_OUT_TAP, /* Output going to a memory buffer */ |
41 | /* (to be retrieved via the read command).*/ | 41 | /* (to be retrieved via the read command).*/ |
42 | DMX_OUT_TS_TAP /* Output multiplexed into a new TS */ | 42 | DMX_OUT_TS_TAP, /* Output multiplexed into a new TS */ |
43 | /* (to be retrieved by reading from the */ | 43 | /* (to be retrieved by reading from the */ |
44 | /* logical DVR device). */ | 44 | /* logical DVR device). */ |
45 | DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */ | ||
45 | } dmx_output_t; | 46 | } dmx_output_t; |
46 | 47 | ||
47 | 48 | ||
diff --git a/include/linux/edac.h b/include/linux/edac.h index eab451e69a91..7cf92e8a4196 100644 --- a/include/linux/edac.h +++ b/include/linux/edac.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Author: Dave Jiang <djiang@mvista.com> | 4 | * Author: Dave Jiang <djiang@mvista.com> |
5 | * | 5 | * |
6 | * 2006-2007 (c) MontaVista Software, Inc. This file is licensed under | 6 | * 2006-2008 (c) MontaVista Software, Inc. This file is licensed under |
7 | * the terms of the GNU General Public License version 2. This program | 7 | * the terms of the GNU General Public License version 2. This program |
8 | * is licensed "as is" without any warranty of any kind, whether express | 8 | * is licensed "as is" without any warranty of any kind, whether express |
9 | * or implied. | 9 | * or implied. |
@@ -26,4 +26,16 @@ extern atomic_t edac_handlers; | |||
26 | extern int edac_handler_set(void); | 26 | extern int edac_handler_set(void); |
27 | extern void edac_atomic_assert_error(void); | 27 | extern void edac_atomic_assert_error(void); |
28 | 28 | ||
29 | static inline void opstate_init(void) | ||
30 | { | ||
31 | switch (edac_op_state) { | ||
32 | case EDAC_OPSTATE_POLL: | ||
33 | case EDAC_OPSTATE_NMI: | ||
34 | break; | ||
35 | default: | ||
36 | edac_op_state = EDAC_OPSTATE_POLL; | ||
37 | } | ||
38 | return; | ||
39 | } | ||
40 | |||
29 | #endif | 41 | #endif |
diff --git a/include/linux/elf.h b/include/linux/elf.h index bad1b16ec49a..ff9fbed90123 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h | |||
@@ -208,7 +208,7 @@ typedef struct elf32_hdr{ | |||
208 | } Elf32_Ehdr; | 208 | } Elf32_Ehdr; |
209 | 209 | ||
210 | typedef struct elf64_hdr { | 210 | typedef struct elf64_hdr { |
211 | unsigned char e_ident[16]; /* ELF "magic number" */ | 211 | unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */ |
212 | Elf64_Half e_type; | 212 | Elf64_Half e_type; |
213 | Elf64_Half e_machine; | 213 | Elf64_Half e_machine; |
214 | Elf64_Word e_version; | 214 | Elf64_Word e_version; |
diff --git a/include/linux/exportfs.h b/include/linux/exportfs.h index adcbb05b120b..de8387b7ceb6 100644 --- a/include/linux/exportfs.h +++ b/include/linux/exportfs.h | |||
@@ -43,7 +43,7 @@ struct fid { | |||
43 | u32 parent_ino; | 43 | u32 parent_ino; |
44 | u32 parent_gen; | 44 | u32 parent_gen; |
45 | } i32; | 45 | } i32; |
46 | __u32 raw[6]; | 46 | __u32 raw[0]; |
47 | }; | 47 | }; |
48 | }; | 48 | }; |
49 | 49 | ||
diff --git a/include/linux/fb.h b/include/linux/fb.h index 58c57a33e5dd..72295b099228 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h | |||
@@ -791,6 +791,17 @@ struct fb_tile_ops { | |||
791 | */ | 791 | */ |
792 | #define FBINFO_MISC_ALWAYS_SETPAR 0x40000 | 792 | #define FBINFO_MISC_ALWAYS_SETPAR 0x40000 |
793 | 793 | ||
794 | /* | ||
795 | * Host and GPU endianness differ. | ||
796 | */ | ||
797 | #define FBINFO_FOREIGN_ENDIAN 0x100000 | ||
798 | /* | ||
799 | * Big endian math. This is the same flags as above, but with different | ||
800 | * meaning, it is set by the fb subsystem depending FOREIGN_ENDIAN flag | ||
801 | * and host endianness. Drivers should not use this flag. | ||
802 | */ | ||
803 | #define FBINFO_BE_MATH 0x100000 | ||
804 | |||
794 | struct fb_info { | 805 | struct fb_info { |
795 | int node; | 806 | int node; |
796 | int flags; | 807 | int flags; |
@@ -899,15 +910,11 @@ struct fb_info { | |||
899 | 910 | ||
900 | #endif | 911 | #endif |
901 | 912 | ||
902 | #if defined (__BIG_ENDIAN) | 913 | #define FB_LEFT_POS(p, bpp) (fb_be_math(p) ? (32 - (bpp)) : 0) |
903 | #define FB_LEFT_POS(bpp) (32 - bpp) | 914 | #define FB_SHIFT_HIGH(p, val, bits) (fb_be_math(p) ? (val) >> (bits) : \ |
904 | #define FB_SHIFT_HIGH(val, bits) ((val) >> (bits)) | 915 | (val) << (bits)) |
905 | #define FB_SHIFT_LOW(val, bits) ((val) << (bits)) | 916 | #define FB_SHIFT_LOW(p, val, bits) (fb_be_math(p) ? (val) << (bits) : \ |
906 | #else | 917 | (val) >> (bits)) |
907 | #define FB_LEFT_POS(bpp) (0) | ||
908 | #define FB_SHIFT_HIGH(val, bits) ((val) << (bits)) | ||
909 | #define FB_SHIFT_LOW(val, bits) ((val) >> (bits)) | ||
910 | #endif | ||
911 | 918 | ||
912 | /* | 919 | /* |
913 | * `Generic' versions of the frame buffer device operations | 920 | * `Generic' versions of the frame buffer device operations |
@@ -970,6 +977,25 @@ extern void fb_deferred_io_cleanup(struct fb_info *info); | |||
970 | extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, | 977 | extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, |
971 | int datasync); | 978 | int datasync); |
972 | 979 | ||
980 | static inline bool fb_be_math(struct fb_info *info) | ||
981 | { | ||
982 | #ifdef CONFIG_FB_FOREIGN_ENDIAN | ||
983 | #if defined(CONFIG_FB_BOTH_ENDIAN) | ||
984 | return info->flags & FBINFO_BE_MATH; | ||
985 | #elif defined(CONFIG_FB_BIG_ENDIAN) | ||
986 | return true; | ||
987 | #elif defined(CONFIG_FB_LITTLE_ENDIAN) | ||
988 | return false; | ||
989 | #endif /* CONFIG_FB_BOTH_ENDIAN */ | ||
990 | #else | ||
991 | #ifdef __BIG_ENDIAN | ||
992 | return true; | ||
993 | #else | ||
994 | return false; | ||
995 | #endif /* __BIG_ENDIAN */ | ||
996 | #endif /* CONFIG_FB_FOREIGN_ENDIAN */ | ||
997 | } | ||
998 | |||
973 | /* drivers/video/fbsysfs.c */ | 999 | /* drivers/video/fbsysfs.c */ |
974 | extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev); | 1000 | extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev); |
975 | extern void framebuffer_release(struct fb_info *info); | 1001 | extern void framebuffer_release(struct fb_info *info); |
diff --git a/include/linux/file.h b/include/linux/file.h index 653477021e4c..69baf5a4f0a5 100644 --- a/include/linux/file.h +++ b/include/linux/file.h | |||
@@ -117,7 +117,8 @@ struct task_struct; | |||
117 | 117 | ||
118 | struct files_struct *get_files_struct(struct task_struct *); | 118 | struct files_struct *get_files_struct(struct task_struct *); |
119 | void put_files_struct(struct files_struct *fs); | 119 | void put_files_struct(struct files_struct *fs); |
120 | void reset_files_struct(struct task_struct *, struct files_struct *); | 120 | void reset_files_struct(struct files_struct *); |
121 | int unshare_files(struct files_struct **); | ||
121 | 122 | ||
122 | extern struct kmem_cache *files_cachep; | 123 | extern struct kmem_cache *files_cachep; |
123 | 124 | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index cc2be2cf7d41..a1ba005d08e7 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -474,8 +474,8 @@ struct address_space_operations { | |||
474 | int (*releasepage) (struct page *, gfp_t); | 474 | int (*releasepage) (struct page *, gfp_t); |
475 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, | 475 | ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov, |
476 | loff_t offset, unsigned long nr_segs); | 476 | loff_t offset, unsigned long nr_segs); |
477 | struct page* (*get_xip_page)(struct address_space *, sector_t, | 477 | int (*get_xip_mem)(struct address_space *, pgoff_t, int, |
478 | int); | 478 | void **, unsigned long *); |
479 | /* migrate the contents of a page to the specified target */ | 479 | /* migrate the contents of a page to the specified target */ |
480 | int (*migratepage) (struct address_space *, | 480 | int (*migratepage) (struct address_space *, |
481 | struct page *, struct page *); | 481 | struct page *, struct page *); |
@@ -973,6 +973,7 @@ extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset, | |||
973 | /* fs/locks.c */ | 973 | /* fs/locks.c */ |
974 | extern void locks_init_lock(struct file_lock *); | 974 | extern void locks_init_lock(struct file_lock *); |
975 | extern void locks_copy_lock(struct file_lock *, struct file_lock *); | 975 | extern void locks_copy_lock(struct file_lock *, struct file_lock *); |
976 | extern void __locks_copy_lock(struct file_lock *, const struct file_lock *); | ||
976 | extern void locks_remove_posix(struct file *, fl_owner_t); | 977 | extern void locks_remove_posix(struct file *, fl_owner_t); |
977 | extern void locks_remove_flock(struct file *); | 978 | extern void locks_remove_flock(struct file *); |
978 | extern void posix_test_lock(struct file *, struct file_lock *); | 979 | extern void posix_test_lock(struct file *, struct file_lock *); |
@@ -1177,7 +1178,8 @@ struct block_device_operations { | |||
1177 | int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); | 1178 | int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); |
1178 | long (*unlocked_ioctl) (struct file *, unsigned, unsigned long); | 1179 | long (*unlocked_ioctl) (struct file *, unsigned, unsigned long); |
1179 | long (*compat_ioctl) (struct file *, unsigned, unsigned long); | 1180 | long (*compat_ioctl) (struct file *, unsigned, unsigned long); |
1180 | int (*direct_access) (struct block_device *, sector_t, unsigned long *); | 1181 | int (*direct_access) (struct block_device *, sector_t, |
1182 | void **, unsigned long *); | ||
1181 | int (*media_changed) (struct gendisk *); | 1183 | int (*media_changed) (struct gendisk *); |
1182 | int (*revalidate_disk) (struct gendisk *); | 1184 | int (*revalidate_disk) (struct gendisk *); |
1183 | int (*getgeo)(struct block_device *, struct hd_geometry *); | 1185 | int (*getgeo)(struct block_device *, struct hd_geometry *); |
@@ -1308,7 +1310,7 @@ struct super_operations { | |||
1308 | int (*statfs) (struct dentry *, struct kstatfs *); | 1310 | int (*statfs) (struct dentry *, struct kstatfs *); |
1309 | int (*remount_fs) (struct super_block *, int *, char *); | 1311 | int (*remount_fs) (struct super_block *, int *, char *); |
1310 | void (*clear_inode) (struct inode *); | 1312 | void (*clear_inode) (struct inode *); |
1311 | void (*umount_begin) (struct vfsmount *, int); | 1313 | void (*umount_begin) (struct super_block *); |
1312 | 1314 | ||
1313 | int (*show_options)(struct seq_file *, struct vfsmount *); | 1315 | int (*show_options)(struct seq_file *, struct vfsmount *); |
1314 | int (*show_stats)(struct seq_file *, struct vfsmount *); | 1316 | int (*show_stats)(struct seq_file *, struct vfsmount *); |
@@ -1519,7 +1521,6 @@ extern int get_sb_pseudo(struct file_system_type *, char *, | |||
1519 | const struct super_operations *ops, unsigned long, | 1521 | const struct super_operations *ops, unsigned long, |
1520 | struct vfsmount *mnt); | 1522 | struct vfsmount *mnt); |
1521 | extern int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); | 1523 | extern int simple_set_mnt(struct vfsmount *mnt, struct super_block *sb); |
1522 | int __put_super(struct super_block *sb); | ||
1523 | int __put_super_and_need_restart(struct super_block *sb); | 1524 | int __put_super_and_need_restart(struct super_block *sb); |
1524 | void unnamed_dev_init(void); | 1525 | void unnamed_dev_init(void); |
1525 | 1526 | ||
@@ -1963,7 +1964,6 @@ extern int vfs_stat_fd(int dfd, char __user *, struct kstat *); | |||
1963 | extern int vfs_lstat_fd(int dfd, char __user *, struct kstat *); | 1964 | extern int vfs_lstat_fd(int dfd, char __user *, struct kstat *); |
1964 | extern int vfs_fstat(unsigned int, struct kstat *); | 1965 | extern int vfs_fstat(unsigned int, struct kstat *); |
1965 | 1966 | ||
1966 | extern long vfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); | ||
1967 | extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, | 1967 | extern int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, |
1968 | unsigned long arg); | 1968 | unsigned long arg); |
1969 | 1969 | ||
@@ -2033,9 +2033,6 @@ static inline ino_t parent_ino(struct dentry *dentry) | |||
2033 | return res; | 2033 | return res; |
2034 | } | 2034 | } |
2035 | 2035 | ||
2036 | /* kernel/fork.c */ | ||
2037 | extern int unshare_files(void); | ||
2038 | |||
2039 | /* Transaction based IO helpers */ | 2036 | /* Transaction based IO helpers */ |
2040 | 2037 | ||
2041 | /* | 2038 | /* |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 164be9da3c1b..b414be387180 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
@@ -40,9 +40,9 @@ struct vm_area_struct; | |||
40 | #define __GFP_FS ((__force gfp_t)0x80u) /* Can call down to low-level FS? */ | 40 | #define __GFP_FS ((__force gfp_t)0x80u) /* Can call down to low-level FS? */ |
41 | #define __GFP_COLD ((__force gfp_t)0x100u) /* Cache-cold page required */ | 41 | #define __GFP_COLD ((__force gfp_t)0x100u) /* Cache-cold page required */ |
42 | #define __GFP_NOWARN ((__force gfp_t)0x200u) /* Suppress page allocation failure warning */ | 42 | #define __GFP_NOWARN ((__force gfp_t)0x200u) /* Suppress page allocation failure warning */ |
43 | #define __GFP_REPEAT ((__force gfp_t)0x400u) /* Retry the allocation. Might fail */ | 43 | #define __GFP_REPEAT ((__force gfp_t)0x400u) /* See above */ |
44 | #define __GFP_NOFAIL ((__force gfp_t)0x800u) /* Retry for ever. Cannot fail */ | 44 | #define __GFP_NOFAIL ((__force gfp_t)0x800u) /* See above */ |
45 | #define __GFP_NORETRY ((__force gfp_t)0x1000u)/* Do not retry. Might fail */ | 45 | #define __GFP_NORETRY ((__force gfp_t)0x1000u)/* See above */ |
46 | #define __GFP_COMP ((__force gfp_t)0x4000u)/* Add compound page metadata */ | 46 | #define __GFP_COMP ((__force gfp_t)0x4000u)/* Add compound page metadata */ |
47 | #define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */ | 47 | #define __GFP_ZERO ((__force gfp_t)0x8000u)/* Return zeroed page on success */ |
48 | #define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */ | 48 | #define __GFP_NOMEMALLOC ((__force gfp_t)0x10000u) /* Don't use emergency reserves */ |
@@ -119,35 +119,22 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags) | |||
119 | 119 | ||
120 | static inline enum zone_type gfp_zone(gfp_t flags) | 120 | static inline enum zone_type gfp_zone(gfp_t flags) |
121 | { | 121 | { |
122 | int base = 0; | ||
123 | |||
124 | #ifdef CONFIG_NUMA | ||
125 | if (flags & __GFP_THISNODE) | ||
126 | base = MAX_NR_ZONES; | ||
127 | #endif | ||
128 | |||
129 | #ifdef CONFIG_ZONE_DMA | 122 | #ifdef CONFIG_ZONE_DMA |
130 | if (flags & __GFP_DMA) | 123 | if (flags & __GFP_DMA) |
131 | return base + ZONE_DMA; | 124 | return ZONE_DMA; |
132 | #endif | 125 | #endif |
133 | #ifdef CONFIG_ZONE_DMA32 | 126 | #ifdef CONFIG_ZONE_DMA32 |
134 | if (flags & __GFP_DMA32) | 127 | if (flags & __GFP_DMA32) |
135 | return base + ZONE_DMA32; | 128 | return ZONE_DMA32; |
136 | #endif | 129 | #endif |
137 | if ((flags & (__GFP_HIGHMEM | __GFP_MOVABLE)) == | 130 | if ((flags & (__GFP_HIGHMEM | __GFP_MOVABLE)) == |
138 | (__GFP_HIGHMEM | __GFP_MOVABLE)) | 131 | (__GFP_HIGHMEM | __GFP_MOVABLE)) |
139 | return base + ZONE_MOVABLE; | 132 | return ZONE_MOVABLE; |
140 | #ifdef CONFIG_HIGHMEM | 133 | #ifdef CONFIG_HIGHMEM |
141 | if (flags & __GFP_HIGHMEM) | 134 | if (flags & __GFP_HIGHMEM) |
142 | return base + ZONE_HIGHMEM; | 135 | return ZONE_HIGHMEM; |
143 | #endif | 136 | #endif |
144 | return base + ZONE_NORMAL; | 137 | return ZONE_NORMAL; |
145 | } | ||
146 | |||
147 | static inline gfp_t set_migrateflags(gfp_t gfp, gfp_t migrate_flags) | ||
148 | { | ||
149 | BUG_ON((gfp & GFP_MOVABLE_MASK) == GFP_MOVABLE_MASK); | ||
150 | return (gfp & ~(GFP_MOVABLE_MASK)) | migrate_flags; | ||
151 | } | 138 | } |
152 | 139 | ||
153 | /* | 140 | /* |
@@ -157,13 +144,27 @@ static inline gfp_t set_migrateflags(gfp_t gfp, gfp_t migrate_flags) | |||
157 | * virtual kernel addresses to the allocated page(s). | 144 | * virtual kernel addresses to the allocated page(s). |
158 | */ | 145 | */ |
159 | 146 | ||
147 | static inline int gfp_zonelist(gfp_t flags) | ||
148 | { | ||
149 | if (NUMA_BUILD && unlikely(flags & __GFP_THISNODE)) | ||
150 | return 1; | ||
151 | |||
152 | return 0; | ||
153 | } | ||
154 | |||
160 | /* | 155 | /* |
161 | * We get the zone list from the current node and the gfp_mask. | 156 | * We get the zone list from the current node and the gfp_mask. |
162 | * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones. | 157 | * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones. |
158 | * There are two zonelists per node, one for all zones with memory and | ||
159 | * one containing just zones from the node the zonelist belongs to. | ||
163 | * | 160 | * |
164 | * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets | 161 | * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets |
165 | * optimized to &contig_page_data at compile-time. | 162 | * optimized to &contig_page_data at compile-time. |
166 | */ | 163 | */ |
164 | static inline struct zonelist *node_zonelist(int nid, gfp_t flags) | ||
165 | { | ||
166 | return NODE_DATA(nid)->node_zonelists + gfp_zonelist(flags); | ||
167 | } | ||
167 | 168 | ||
168 | #ifndef HAVE_ARCH_FREE_PAGE | 169 | #ifndef HAVE_ARCH_FREE_PAGE |
169 | static inline void arch_free_page(struct page *page, int order) { } | 170 | static inline void arch_free_page(struct page *page, int order) { } |
@@ -174,6 +175,10 @@ static inline void arch_alloc_page(struct page *page, int order) { } | |||
174 | 175 | ||
175 | extern struct page *__alloc_pages(gfp_t, unsigned int, struct zonelist *); | 176 | extern struct page *__alloc_pages(gfp_t, unsigned int, struct zonelist *); |
176 | 177 | ||
178 | extern struct page * | ||
179 | __alloc_pages_nodemask(gfp_t, unsigned int, | ||
180 | struct zonelist *, nodemask_t *nodemask); | ||
181 | |||
177 | static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, | 182 | static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, |
178 | unsigned int order) | 183 | unsigned int order) |
179 | { | 184 | { |
@@ -184,8 +189,7 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask, | |||
184 | if (nid < 0) | 189 | if (nid < 0) |
185 | nid = numa_node_id(); | 190 | nid = numa_node_id(); |
186 | 191 | ||
187 | return __alloc_pages(gfp_mask, order, | 192 | return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask)); |
188 | NODE_DATA(nid)->node_zonelists + gfp_zone(gfp_mask)); | ||
189 | } | 193 | } |
190 | 194 | ||
191 | #ifdef CONFIG_NUMA | 195 | #ifdef CONFIG_NUMA |
diff --git a/include/linux/hdsmart.h b/include/linux/hdsmart.h deleted file mode 100644 index 4f4faf9d4238..000000000000 --- a/include/linux/hdsmart.h +++ /dev/null | |||
@@ -1,126 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/linux/hdsmart.h | ||
3 | * | ||
4 | * Copyright (C) 1999-2000 Michael Cornwell <cornwell@acm.org> | ||
5 | * Copyright (C) 2000 Andre Hedrick <andre@linux-ide.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2, or (at your option) | ||
10 | * any later version. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * (for example /usr/src/linux/COPYING); if not, write to the Free | ||
14 | * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
15 | */ | ||
16 | |||
17 | #ifndef _LINUX_HDSMART_H | ||
18 | #define _LINUX_HDSMART_H | ||
19 | |||
20 | #ifndef __KERNEL__ | ||
21 | #define OFFLINE_FULL_SCAN 0 | ||
22 | #define SHORT_SELF_TEST 1 | ||
23 | #define EXTEND_SELF_TEST 2 | ||
24 | #define SHORT_CAPTIVE_SELF_TEST 129 | ||
25 | #define EXTEND_CAPTIVE_SELF_TEST 130 | ||
26 | |||
27 | /* smart_attribute is the vendor specific in SFF-8035 spec */ | ||
28 | typedef struct ata_smart_attribute_s { | ||
29 | unsigned char id; | ||
30 | unsigned short status_flag; | ||
31 | unsigned char normalized; | ||
32 | unsigned char worse_normal; | ||
33 | unsigned char raw[6]; | ||
34 | unsigned char reserv; | ||
35 | } __attribute__ ((packed)) ata_smart_attribute_t; | ||
36 | |||
37 | /* smart_values is format of the read drive Atrribute command */ | ||
38 | typedef struct ata_smart_values_s { | ||
39 | unsigned short revnumber; | ||
40 | ata_smart_attribute_t vendor_attributes [30]; | ||
41 | unsigned char offline_data_collection_status; | ||
42 | unsigned char self_test_exec_status; | ||
43 | unsigned short total_time_to_complete_off_line; | ||
44 | unsigned char vendor_specific_366; | ||
45 | unsigned char offline_data_collection_capability; | ||
46 | unsigned short smart_capability; | ||
47 | unsigned char errorlog_capability; | ||
48 | unsigned char vendor_specific_371; | ||
49 | unsigned char short_test_completion_time; | ||
50 | unsigned char extend_test_completion_time; | ||
51 | unsigned char reserved_374_385 [12]; | ||
52 | unsigned char vendor_specific_386_509 [125]; | ||
53 | unsigned char chksum; | ||
54 | } __attribute__ ((packed)) ata_smart_values_t; | ||
55 | |||
56 | /* Smart Threshold data structures */ | ||
57 | /* Vendor attribute of SMART Threshold */ | ||
58 | typedef struct ata_smart_threshold_entry_s { | ||
59 | unsigned char id; | ||
60 | unsigned char normalized_threshold; | ||
61 | unsigned char reserved[10]; | ||
62 | } __attribute__ ((packed)) ata_smart_threshold_entry_t; | ||
63 | |||
64 | /* Format of Read SMART THreshold Command */ | ||
65 | typedef struct ata_smart_thresholds_s { | ||
66 | unsigned short revnumber; | ||
67 | ata_smart_threshold_entry_t thres_entries[30]; | ||
68 | unsigned char reserved[149]; | ||
69 | unsigned char chksum; | ||
70 | } __attribute__ ((packed)) ata_smart_thresholds_t; | ||
71 | |||
72 | typedef struct ata_smart_errorlog_command_struct_s { | ||
73 | unsigned char devicecontrolreg; | ||
74 | unsigned char featuresreg; | ||
75 | unsigned char sector_count; | ||
76 | unsigned char sector_number; | ||
77 | unsigned char cylinder_low; | ||
78 | unsigned char cylinder_high; | ||
79 | unsigned char drive_head; | ||
80 | unsigned char commandreg; | ||
81 | unsigned int timestamp; | ||
82 | } __attribute__ ((packed)) ata_smart_errorlog_command_struct_t; | ||
83 | |||
84 | typedef struct ata_smart_errorlog_error_struct_s { | ||
85 | unsigned char error_condition; | ||
86 | unsigned char extended_error[14]; | ||
87 | unsigned char state; | ||
88 | unsigned short timestamp; | ||
89 | } __attribute__ ((packed)) ata_smart_errorlog_error_struct_t; | ||
90 | |||
91 | typedef struct ata_smart_errorlog_struct_s { | ||
92 | ata_smart_errorlog_command_struct_t commands[6]; | ||
93 | ata_smart_errorlog_error_struct_t error_struct; | ||
94 | } __attribute__ ((packed)) ata_smart_errorlog_struct_t; | ||
95 | |||
96 | typedef struct ata_smart_errorlog_s { | ||
97 | unsigned char revnumber; | ||
98 | unsigned char error_log_pointer; | ||
99 | ata_smart_errorlog_struct_t errorlog_struct[5]; | ||
100 | unsigned short ata_error_count; | ||
101 | unsigned short non_fatal_count; | ||
102 | unsigned short drive_timeout_count; | ||
103 | unsigned char reserved[53]; | ||
104 | unsigned char chksum; | ||
105 | } __attribute__ ((packed)) ata_smart_errorlog_t; | ||
106 | |||
107 | typedef struct ata_smart_selftestlog_struct_s { | ||
108 | unsigned char selftestnumber; | ||
109 | unsigned char selfteststatus; | ||
110 | unsigned short timestamp; | ||
111 | unsigned char selftestfailurecheckpoint; | ||
112 | unsigned int lbafirstfailure; | ||
113 | unsigned char vendorspecific[15]; | ||
114 | } __attribute__ ((packed)) ata_smart_selftestlog_struct_t; | ||
115 | |||
116 | typedef struct ata_smart_selftestlog_s { | ||
117 | unsigned short revnumber; | ||
118 | ata_smart_selftestlog_struct_t selftest_struct[21]; | ||
119 | unsigned char vendorspecific[2]; | ||
120 | unsigned char mostrecenttest; | ||
121 | unsigned char resevered[2]; | ||
122 | unsigned char chksum; | ||
123 | } __attribute__ ((packed)) ata_smart_selftestlog_t; | ||
124 | #endif /* __KERNEL__ */ | ||
125 | |||
126 | #endif /* _LINUX_HDSMART_H */ | ||
diff --git a/include/linux/hid.h b/include/linux/hid.h index d951ec411241..4ce3b7a979ba 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -498,13 +498,13 @@ struct hid_parser { | |||
498 | 498 | ||
499 | struct hid_class_descriptor { | 499 | struct hid_class_descriptor { |
500 | __u8 bDescriptorType; | 500 | __u8 bDescriptorType; |
501 | __u16 wDescriptorLength; | 501 | __le16 wDescriptorLength; |
502 | } __attribute__ ((packed)); | 502 | } __attribute__ ((packed)); |
503 | 503 | ||
504 | struct hid_descriptor { | 504 | struct hid_descriptor { |
505 | __u8 bLength; | 505 | __u8 bLength; |
506 | __u8 bDescriptorType; | 506 | __u8 bDescriptorType; |
507 | __u16 bcdHID; | 507 | __le16 bcdHID; |
508 | __u8 bCountryCode; | 508 | __u8 bCountryCode; |
509 | __u8 bNumDescriptors; | 509 | __u8 bNumDescriptors; |
510 | 510 | ||
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index addca4cd4f11..a79e80b689d8 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #include <linux/mempolicy.h> | 8 | #include <linux/mempolicy.h> |
9 | #include <linux/shm.h> | 9 | #include <linux/shm.h> |
10 | #include <asm/tlbflush.h> | 10 | #include <asm/tlbflush.h> |
11 | #include <asm/hugetlb.h> | ||
11 | 12 | ||
12 | struct ctl_table; | 13 | struct ctl_table; |
13 | 14 | ||
@@ -51,51 +52,6 @@ int pmd_huge(pmd_t pmd); | |||
51 | void hugetlb_change_protection(struct vm_area_struct *vma, | 52 | void hugetlb_change_protection(struct vm_area_struct *vma, |
52 | unsigned long address, unsigned long end, pgprot_t newprot); | 53 | unsigned long address, unsigned long end, pgprot_t newprot); |
53 | 54 | ||
54 | #ifndef ARCH_HAS_HUGEPAGE_ONLY_RANGE | ||
55 | #define is_hugepage_only_range(mm, addr, len) 0 | ||
56 | #endif | ||
57 | |||
58 | #ifndef ARCH_HAS_HUGETLB_FREE_PGD_RANGE | ||
59 | #define hugetlb_free_pgd_range free_pgd_range | ||
60 | #else | ||
61 | void hugetlb_free_pgd_range(struct mmu_gather **tlb, unsigned long addr, | ||
62 | unsigned long end, unsigned long floor, | ||
63 | unsigned long ceiling); | ||
64 | #endif | ||
65 | |||
66 | #ifndef ARCH_HAS_PREPARE_HUGEPAGE_RANGE | ||
67 | /* | ||
68 | * If the arch doesn't supply something else, assume that hugepage | ||
69 | * size aligned regions are ok without further preparation. | ||
70 | */ | ||
71 | static inline int prepare_hugepage_range(unsigned long addr, unsigned long len) | ||
72 | { | ||
73 | if (len & ~HPAGE_MASK) | ||
74 | return -EINVAL; | ||
75 | if (addr & ~HPAGE_MASK) | ||
76 | return -EINVAL; | ||
77 | return 0; | ||
78 | } | ||
79 | #else | ||
80 | int prepare_hugepage_range(unsigned long addr, unsigned long len); | ||
81 | #endif | ||
82 | |||
83 | #ifndef ARCH_HAS_SETCLEAR_HUGE_PTE | ||
84 | #define set_huge_pte_at(mm, addr, ptep, pte) set_pte_at(mm, addr, ptep, pte) | ||
85 | #define huge_ptep_get_and_clear(mm, addr, ptep) ptep_get_and_clear(mm, addr, ptep) | ||
86 | #else | ||
87 | void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, | ||
88 | pte_t *ptep, pte_t pte); | ||
89 | pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, | ||
90 | pte_t *ptep); | ||
91 | #endif | ||
92 | |||
93 | #ifndef ARCH_HAS_HUGETLB_PREFAULT_HOOK | ||
94 | #define hugetlb_prefault_arch_hook(mm) do { } while (0) | ||
95 | #else | ||
96 | void hugetlb_prefault_arch_hook(struct mm_struct *mm); | ||
97 | #endif | ||
98 | |||
99 | #else /* !CONFIG_HUGETLB_PAGE */ | 55 | #else /* !CONFIG_HUGETLB_PAGE */ |
100 | 56 | ||
101 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) | 57 | static inline int is_vm_hugetlb_page(struct vm_area_struct *vma) |
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index b979112f74e0..32eb8bbe4831 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
@@ -125,6 +125,7 @@ | |||
125 | #define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ | 125 | #define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */ |
126 | #define I2C_HW_B_INTELFB 0x010021 /* intel framebuffer driver */ | 126 | #define I2C_HW_B_INTELFB 0x010021 /* intel framebuffer driver */ |
127 | #define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */ | 127 | #define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */ |
128 | #define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */ | ||
128 | 129 | ||
129 | /* --- PCF 8584 based algorithms */ | 130 | /* --- PCF 8584 based algorithms */ |
130 | #define I2C_HW_P_ELEK 0x020002 /* Elektor ISA Bus inteface card */ | 131 | #define I2C_HW_P_ELEK 0x020002 /* Elektor ISA Bus inteface card */ |
diff --git a/include/linux/i2o.h b/include/linux/i2o.h index e92170dda245..f65e58a1d925 100644 --- a/include/linux/i2o.h +++ b/include/linux/i2o.h | |||
@@ -613,14 +613,9 @@ struct i2o_sys_tbl { | |||
613 | extern struct list_head i2o_controllers; | 613 | extern struct list_head i2o_controllers; |
614 | 614 | ||
615 | /* Message functions */ | 615 | /* Message functions */ |
616 | static inline struct i2o_message *i2o_msg_get(struct i2o_controller *); | ||
617 | extern struct i2o_message *i2o_msg_get_wait(struct i2o_controller *, int); | 616 | extern struct i2o_message *i2o_msg_get_wait(struct i2o_controller *, int); |
618 | static inline void i2o_msg_post(struct i2o_controller *, struct i2o_message *); | ||
619 | static inline int i2o_msg_post_wait(struct i2o_controller *, | ||
620 | struct i2o_message *, unsigned long); | ||
621 | extern int i2o_msg_post_wait_mem(struct i2o_controller *, struct i2o_message *, | 617 | extern int i2o_msg_post_wait_mem(struct i2o_controller *, struct i2o_message *, |
622 | unsigned long, struct i2o_dma *); | 618 | unsigned long, struct i2o_dma *); |
623 | static inline void i2o_flush_reply(struct i2o_controller *, u32); | ||
624 | 619 | ||
625 | /* IOP functions */ | 620 | /* IOP functions */ |
626 | extern int i2o_status_get(struct i2o_controller *); | 621 | extern int i2o_status_get(struct i2o_controller *); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 5f3e82ae901a..b0135b0c3a04 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -48,13 +48,6 @@ typedef unsigned char byte; /* used everywhere */ | |||
48 | #define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ | 48 | #define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ |
49 | 49 | ||
50 | /* | 50 | /* |
51 | * Tune flags | ||
52 | */ | ||
53 | #define IDE_TUNE_NOAUTO 2 | ||
54 | #define IDE_TUNE_AUTO 1 | ||
55 | #define IDE_TUNE_DEFAULT 0 | ||
56 | |||
57 | /* | ||
58 | * state flags | 51 | * state flags |
59 | */ | 52 | */ |
60 | 53 | ||
@@ -68,23 +61,30 @@ typedef unsigned char byte; /* used everywhere */ | |||
68 | */ | 61 | */ |
69 | #define IDE_NR_PORTS (10) | 62 | #define IDE_NR_PORTS (10) |
70 | 63 | ||
71 | #define IDE_DATA_OFFSET (0) | 64 | struct ide_io_ports { |
72 | #define IDE_ERROR_OFFSET (1) | 65 | unsigned long data_addr; |
73 | #define IDE_NSECTOR_OFFSET (2) | 66 | |
74 | #define IDE_SECTOR_OFFSET (3) | 67 | union { |
75 | #define IDE_LCYL_OFFSET (4) | 68 | unsigned long error_addr; /* read: error */ |
76 | #define IDE_HCYL_OFFSET (5) | 69 | unsigned long feature_addr; /* write: feature */ |
77 | #define IDE_SELECT_OFFSET (6) | 70 | }; |
78 | #define IDE_STATUS_OFFSET (7) | 71 | |
79 | #define IDE_CONTROL_OFFSET (8) | 72 | unsigned long nsect_addr; |
80 | #define IDE_IRQ_OFFSET (9) | 73 | unsigned long lbal_addr; |
81 | 74 | unsigned long lbam_addr; | |
82 | #define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET | 75 | unsigned long lbah_addr; |
83 | #define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET | 76 | |
84 | #define IDE_ALTSTATUS_OFFSET IDE_CONTROL_OFFSET | 77 | unsigned long device_addr; |
85 | #define IDE_IREASON_OFFSET IDE_NSECTOR_OFFSET | 78 | |
86 | #define IDE_BCOUNTL_OFFSET IDE_LCYL_OFFSET | 79 | union { |
87 | #define IDE_BCOUNTH_OFFSET IDE_HCYL_OFFSET | 80 | unsigned long status_addr; /* read: status */ |
81 | unsigned long command_addr; /* write: command */ | ||
82 | }; | ||
83 | |||
84 | unsigned long ctl_addr; | ||
85 | |||
86 | unsigned long irq_addr; | ||
87 | }; | ||
88 | 88 | ||
89 | #define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) | 89 | #define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) |
90 | #define BAD_R_STAT (BUSY_STAT | ERR_STAT) | 90 | #define BAD_R_STAT (BUSY_STAT | ERR_STAT) |
@@ -163,14 +163,17 @@ typedef u8 hwif_chipset_t; | |||
163 | * Structure to hold all information about the location of this port | 163 | * Structure to hold all information about the location of this port |
164 | */ | 164 | */ |
165 | typedef struct hw_regs_s { | 165 | typedef struct hw_regs_s { |
166 | unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */ | 166 | union { |
167 | struct ide_io_ports io_ports; | ||
168 | unsigned long io_ports_array[IDE_NR_PORTS]; | ||
169 | }; | ||
170 | |||
167 | int irq; /* our irq number */ | 171 | int irq; /* our irq number */ |
168 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ | 172 | ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ |
169 | hwif_chipset_t chipset; | 173 | hwif_chipset_t chipset; |
170 | struct device *dev; | 174 | struct device *dev; |
171 | } hw_regs_t; | 175 | } hw_regs_t; |
172 | 176 | ||
173 | struct hwif_s * ide_find_port(unsigned long); | ||
174 | void ide_init_port_data(struct hwif_s *, unsigned int); | 177 | void ide_init_port_data(struct hwif_s *, unsigned int); |
175 | void ide_init_port_hw(struct hwif_s *, hw_regs_t *); | 178 | void ide_init_port_hw(struct hwif_s *, hw_regs_t *); |
176 | 179 | ||
@@ -180,10 +183,10 @@ static inline void ide_std_init_ports(hw_regs_t *hw, | |||
180 | { | 183 | { |
181 | unsigned int i; | 184 | unsigned int i; |
182 | 185 | ||
183 | for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) | 186 | for (i = 0; i <= 7; i++) |
184 | hw->io_ports[i] = io_addr++; | 187 | hw->io_ports_array[i] = io_addr++; |
185 | 188 | ||
186 | hw->io_ports[IDE_CONTROL_OFFSET] = ctl_addr; | 189 | hw->io_ports.ctl_addr = ctl_addr; |
187 | } | 190 | } |
188 | 191 | ||
189 | #include <asm/ide.h> | 192 | #include <asm/ide.h> |
@@ -329,7 +332,6 @@ typedef struct ide_drive_s { | |||
329 | unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */ | 332 | unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */ |
330 | unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ | 333 | unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ |
331 | unsigned nodma : 1; /* disallow DMA */ | 334 | unsigned nodma : 1; /* disallow DMA */ |
332 | unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */ | ||
333 | unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */ | 335 | unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */ |
334 | unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */ | 336 | unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */ |
335 | unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */ | 337 | unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */ |
@@ -388,6 +390,45 @@ typedef struct ide_drive_s { | |||
388 | 390 | ||
389 | struct ide_port_info; | 391 | struct ide_port_info; |
390 | 392 | ||
393 | struct ide_port_ops { | ||
394 | /* host specific initialization of devices on a port */ | ||
395 | void (*port_init_devs)(struct hwif_s *); | ||
396 | /* routine to program host for PIO mode */ | ||
397 | void (*set_pio_mode)(ide_drive_t *, const u8); | ||
398 | /* routine to program host for DMA mode */ | ||
399 | void (*set_dma_mode)(ide_drive_t *, const u8); | ||
400 | /* tweaks hardware to select drive */ | ||
401 | void (*selectproc)(ide_drive_t *); | ||
402 | /* chipset polling based on hba specifics */ | ||
403 | int (*reset_poll)(ide_drive_t *); | ||
404 | /* chipset specific changes to default for device-hba resets */ | ||
405 | void (*pre_reset)(ide_drive_t *); | ||
406 | /* routine to reset controller after a disk reset */ | ||
407 | void (*resetproc)(ide_drive_t *); | ||
408 | /* special host masking for drive selection */ | ||
409 | void (*maskproc)(ide_drive_t *, int); | ||
410 | /* check host's drive quirk list */ | ||
411 | void (*quirkproc)(ide_drive_t *); | ||
412 | |||
413 | u8 (*mdma_filter)(ide_drive_t *); | ||
414 | u8 (*udma_filter)(ide_drive_t *); | ||
415 | |||
416 | u8 (*cable_detect)(struct hwif_s *); | ||
417 | }; | ||
418 | |||
419 | struct ide_dma_ops { | ||
420 | void (*dma_host_set)(struct ide_drive_s *, int); | ||
421 | int (*dma_setup)(struct ide_drive_s *); | ||
422 | void (*dma_exec_cmd)(struct ide_drive_s *, u8); | ||
423 | void (*dma_start)(struct ide_drive_s *); | ||
424 | int (*dma_end)(struct ide_drive_s *); | ||
425 | int (*dma_test_irq)(struct ide_drive_s *); | ||
426 | void (*dma_lost_irq)(struct ide_drive_s *); | ||
427 | void (*dma_timeout)(struct ide_drive_s *); | ||
428 | }; | ||
429 | |||
430 | struct ide_task_s; | ||
431 | |||
391 | typedef struct hwif_s { | 432 | typedef struct hwif_s { |
392 | struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ | 433 | struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ |
393 | struct hwif_s *mate; /* other hwif from same PCI chip */ | 434 | struct hwif_s *mate; /* other hwif from same PCI chip */ |
@@ -396,8 +437,8 @@ typedef struct hwif_s { | |||
396 | 437 | ||
397 | char name[6]; /* name of interface, eg. "ide0" */ | 438 | char name[6]; /* name of interface, eg. "ide0" */ |
398 | 439 | ||
399 | /* task file registers for pata and sata */ | 440 | struct ide_io_ports io_ports; |
400 | unsigned long io_ports[IDE_NR_PORTS]; | 441 | |
401 | unsigned long sata_scr[SATA_NR_PORTS]; | 442 | unsigned long sata_scr[SATA_NR_PORTS]; |
402 | 443 | ||
403 | ide_drive_t drives[MAX_DRIVES]; /* drive info */ | 444 | ide_drive_t drives[MAX_DRIVES]; /* drive info */ |
@@ -421,65 +462,25 @@ typedef struct hwif_s { | |||
421 | 462 | ||
422 | struct device *dev; | 463 | struct device *dev; |
423 | 464 | ||
424 | const struct ide_port_info *cds; /* chipset device struct */ | ||
425 | |||
426 | ide_ack_intr_t *ack_intr; | 465 | ide_ack_intr_t *ack_intr; |
427 | 466 | ||
428 | void (*rw_disk)(ide_drive_t *, struct request *); | 467 | void (*rw_disk)(ide_drive_t *, struct request *); |
429 | 468 | ||
430 | #if 0 | 469 | const struct ide_port_ops *port_ops; |
431 | ide_hwif_ops_t *hwifops; | 470 | const struct ide_dma_ops *dma_ops; |
432 | #else | ||
433 | /* host specific initialization of devices on a port */ | ||
434 | void (*port_init_devs)(struct hwif_s *); | ||
435 | /* routine to program host for PIO mode */ | ||
436 | void (*set_pio_mode)(ide_drive_t *, const u8); | ||
437 | /* routine to program host for DMA mode */ | ||
438 | void (*set_dma_mode)(ide_drive_t *, const u8); | ||
439 | /* tweaks hardware to select drive */ | ||
440 | void (*selectproc)(ide_drive_t *); | ||
441 | /* chipset polling based on hba specifics */ | ||
442 | int (*reset_poll)(ide_drive_t *); | ||
443 | /* chipset specific changes to default for device-hba resets */ | ||
444 | void (*pre_reset)(ide_drive_t *); | ||
445 | /* routine to reset controller after a disk reset */ | ||
446 | void (*resetproc)(ide_drive_t *); | ||
447 | /* special host masking for drive selection */ | ||
448 | void (*maskproc)(ide_drive_t *, int); | ||
449 | /* check host's drive quirk list */ | ||
450 | void (*quirkproc)(ide_drive_t *); | ||
451 | #endif | ||
452 | u8 (*mdma_filter)(ide_drive_t *); | ||
453 | u8 (*udma_filter)(ide_drive_t *); | ||
454 | |||
455 | u8 (*cable_detect)(struct hwif_s *); | ||
456 | 471 | ||
457 | void (*ata_input_data)(ide_drive_t *, void *, u32); | 472 | void (*tf_load)(ide_drive_t *, struct ide_task_s *); |
458 | void (*ata_output_data)(ide_drive_t *, void *, u32); | 473 | void (*tf_read)(ide_drive_t *, struct ide_task_s *); |
459 | 474 | ||
460 | void (*atapi_input_bytes)(ide_drive_t *, void *, u32); | 475 | void (*input_data)(ide_drive_t *, struct request *, void *, unsigned); |
461 | void (*atapi_output_bytes)(ide_drive_t *, void *, u32); | 476 | void (*output_data)(ide_drive_t *, struct request *, void *, unsigned); |
462 | 477 | ||
463 | void (*dma_host_set)(ide_drive_t *, int); | ||
464 | int (*dma_setup)(ide_drive_t *); | ||
465 | void (*dma_exec_cmd)(ide_drive_t *, u8); | ||
466 | void (*dma_start)(ide_drive_t *); | ||
467 | int (*ide_dma_end)(ide_drive_t *drive); | ||
468 | int (*ide_dma_test_irq)(ide_drive_t *drive); | ||
469 | void (*ide_dma_clear_irq)(ide_drive_t *drive); | 478 | void (*ide_dma_clear_irq)(ide_drive_t *drive); |
470 | void (*dma_lost_irq)(ide_drive_t *drive); | ||
471 | void (*dma_timeout)(ide_drive_t *drive); | ||
472 | 479 | ||
473 | void (*OUTB)(u8 addr, unsigned long port); | 480 | void (*OUTB)(u8 addr, unsigned long port); |
474 | void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); | 481 | void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); |
475 | void (*OUTW)(u16 addr, unsigned long port); | ||
476 | void (*OUTSW)(unsigned long port, void *addr, u32 count); | ||
477 | void (*OUTSL)(unsigned long port, void *addr, u32 count); | ||
478 | 482 | ||
479 | u8 (*INB)(unsigned long port); | 483 | u8 (*INB)(unsigned long port); |
480 | u16 (*INW)(unsigned long port); | ||
481 | void (*INSW)(unsigned long port, void *addr, u32 count); | ||
482 | void (*INSL)(unsigned long port, void *addr, u32 count); | ||
483 | 484 | ||
484 | /* dma physical region descriptor table (cpu view) */ | 485 | /* dma physical region descriptor table (cpu view) */ |
485 | unsigned int *dmatable_cpu; | 486 | unsigned int *dmatable_cpu; |
@@ -504,10 +505,7 @@ typedef struct hwif_s { | |||
504 | 505 | ||
505 | unsigned long dma_base; /* base addr for dma ports */ | 506 | unsigned long dma_base; /* base addr for dma ports */ |
506 | unsigned long dma_command; /* dma command register */ | 507 | unsigned long dma_command; /* dma command register */ |
507 | unsigned long dma_vendor1; /* dma vendor 1 register */ | ||
508 | unsigned long dma_status; /* dma status register */ | 508 | unsigned long dma_status; /* dma status register */ |
509 | unsigned long dma_vendor3; /* dma vendor 3 register */ | ||
510 | unsigned long dma_prdtable; /* actual prd table address */ | ||
511 | 509 | ||
512 | unsigned long config_data; /* for use by chipset-specific code */ | 510 | unsigned long config_data; /* for use by chipset-specific code */ |
513 | unsigned long select_data; /* for use by chipset-specific code */ | 511 | unsigned long select_data; /* for use by chipset-specific code */ |
@@ -515,14 +513,11 @@ typedef struct hwif_s { | |||
515 | unsigned long extra_base; /* extra addr for dma ports */ | 513 | unsigned long extra_base; /* extra addr for dma ports */ |
516 | unsigned extra_ports; /* number of extra dma ports */ | 514 | unsigned extra_ports; /* number of extra dma ports */ |
517 | 515 | ||
518 | unsigned noprobe : 1; /* don't probe for this interface */ | ||
519 | unsigned present : 1; /* this interface exists */ | 516 | unsigned present : 1; /* this interface exists */ |
520 | unsigned serialized : 1; /* serialized all channel operation */ | 517 | unsigned serialized : 1; /* serialized all channel operation */ |
521 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ | 518 | unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ |
522 | unsigned reset : 1; /* reset after probe */ | ||
523 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ | 519 | unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ |
524 | unsigned mmio : 1; /* host uses MMIO */ | 520 | unsigned mmio : 1; /* host uses MMIO */ |
525 | unsigned straight8 : 1; /* Alan's straight 8 check */ | ||
526 | 521 | ||
527 | struct device gendev; | 522 | struct device gendev; |
528 | struct device *portdev; | 523 | struct device *portdev; |
@@ -545,7 +540,7 @@ typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); | |||
545 | typedef int (ide_expiry_t)(ide_drive_t *); | 540 | typedef int (ide_expiry_t)(ide_drive_t *); |
546 | 541 | ||
547 | /* used by ide-cd, ide-floppy, etc. */ | 542 | /* used by ide-cd, ide-floppy, etc. */ |
548 | typedef void (xfer_func_t)(ide_drive_t *, void *, u32); | 543 | typedef void (xfer_func_t)(ide_drive_t *, struct request *rq, void *, unsigned); |
549 | 544 | ||
550 | typedef struct hwgroup_s { | 545 | typedef struct hwgroup_s { |
551 | /* irq handler, if active */ | 546 | /* irq handler, if active */ |
@@ -703,10 +698,6 @@ void ide_add_generic_settings(ide_drive_t *); | |||
703 | read_proc_t proc_ide_read_capacity; | 698 | read_proc_t proc_ide_read_capacity; |
704 | read_proc_t proc_ide_read_geometry; | 699 | read_proc_t proc_ide_read_geometry; |
705 | 700 | ||
706 | #ifdef CONFIG_BLK_DEV_IDEPCI | ||
707 | void ide_pci_create_host_proc(const char *, get_info_t *); | ||
708 | #endif | ||
709 | |||
710 | /* | 701 | /* |
711 | * Standard exit stuff: | 702 | * Standard exit stuff: |
712 | */ | 703 | */ |
@@ -807,8 +798,21 @@ int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsig | |||
807 | #ifndef _IDE_C | 798 | #ifndef _IDE_C |
808 | extern ide_hwif_t ide_hwifs[]; /* master data repository */ | 799 | extern ide_hwif_t ide_hwifs[]; /* master data repository */ |
809 | #endif | 800 | #endif |
801 | extern int ide_noacpi; | ||
802 | extern int ide_acpigtf; | ||
803 | extern int ide_acpionboot; | ||
810 | extern int noautodma; | 804 | extern int noautodma; |
811 | 805 | ||
806 | extern int ide_vlb_clk; | ||
807 | extern int ide_pci_clk; | ||
808 | |||
809 | ide_hwif_t *ide_find_port_slot(const struct ide_port_info *); | ||
810 | |||
811 | static inline ide_hwif_t *ide_find_port(void) | ||
812 | { | ||
813 | return ide_find_port_slot(NULL); | ||
814 | } | ||
815 | |||
812 | extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); | 816 | extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); |
813 | int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, | 817 | int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, |
814 | int uptodate, int nr_sectors); | 818 | int uptodate, int nr_sectors); |
@@ -818,6 +822,10 @@ extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigne | |||
818 | void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, | 822 | void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, |
819 | ide_expiry_t *); | 823 | ide_expiry_t *); |
820 | 824 | ||
825 | void ide_execute_pkt_cmd(ide_drive_t *); | ||
826 | |||
827 | void ide_pad_transfer(ide_drive_t *, int, int); | ||
828 | |||
821 | ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); | 829 | ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); |
822 | 830 | ||
823 | ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); | 831 | ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); |
@@ -954,8 +962,7 @@ typedef struct ide_task_s { | |||
954 | void *special; /* valid_t generally */ | 962 | void *special; /* valid_t generally */ |
955 | } ide_task_t; | 963 | } ide_task_t; |
956 | 964 | ||
957 | void ide_tf_load(ide_drive_t *, ide_task_t *); | 965 | void ide_tf_dump(const char *, struct ide_taskfile *); |
958 | void ide_tf_read(ide_drive_t *, ide_task_t *); | ||
959 | 966 | ||
960 | extern void SELECT_DRIVE(ide_drive_t *); | 967 | extern void SELECT_DRIVE(ide_drive_t *); |
961 | extern void SELECT_MASK(ide_drive_t *, int); | 968 | extern void SELECT_MASK(ide_drive_t *, int); |
@@ -1004,10 +1011,15 @@ void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, u8 | |||
1004 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); | 1011 | void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); |
1005 | 1012 | ||
1006 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI | 1013 | #ifdef CONFIG_BLK_DEV_IDEDMA_PCI |
1007 | void ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); | 1014 | int ide_pci_set_master(struct pci_dev *, const char *); |
1015 | unsigned long ide_pci_dma_base(ide_hwif_t *, const struct ide_port_info *); | ||
1016 | int ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); | ||
1008 | #else | 1017 | #else |
1009 | static inline void ide_hwif_setup_dma(ide_hwif_t *hwif, | 1018 | static inline int ide_hwif_setup_dma(ide_hwif_t *hwif, |
1010 | const struct ide_port_info *d) { } | 1019 | const struct ide_port_info *d) |
1020 | { | ||
1021 | return -EINVAL; | ||
1022 | } | ||
1011 | #endif | 1023 | #endif |
1012 | 1024 | ||
1013 | extern void default_hwif_iops(ide_hwif_t *); | 1025 | extern void default_hwif_iops(ide_hwif_t *); |
@@ -1027,8 +1039,8 @@ enum { | |||
1027 | IDE_HFLAG_SINGLE = (1 << 1), | 1039 | IDE_HFLAG_SINGLE = (1 << 1), |
1028 | /* don't use legacy PIO blacklist */ | 1040 | /* don't use legacy PIO blacklist */ |
1029 | IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2), | 1041 | IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2), |
1030 | /* don't use conservative PIO "downgrade" */ | 1042 | /* set for the second port of QD65xx */ |
1031 | IDE_HFLAG_PIO_NO_DOWNGRADE = (1 << 3), | 1043 | IDE_HFLAG_QD_2ND_PORT = (1 << 3), |
1032 | /* use PIO8/9 for prefetch off/on */ | 1044 | /* use PIO8/9 for prefetch off/on */ |
1033 | IDE_HFLAG_ABUSE_PREFETCH = (1 << 4), | 1045 | IDE_HFLAG_ABUSE_PREFETCH = (1 << 4), |
1034 | /* use PIO6/7 for fast-devsel off/on */ | 1046 | /* use PIO6/7 for fast-devsel off/on */ |
@@ -1050,14 +1062,14 @@ enum { | |||
1050 | IDE_HFLAG_VDMA = (1 << 11), | 1062 | IDE_HFLAG_VDMA = (1 << 11), |
1051 | /* ATAPI DMA is unsupported */ | 1063 | /* ATAPI DMA is unsupported */ |
1052 | IDE_HFLAG_NO_ATAPI_DMA = (1 << 12), | 1064 | IDE_HFLAG_NO_ATAPI_DMA = (1 << 12), |
1053 | /* set if host is a "bootable" controller */ | 1065 | /* set if host is a "non-bootable" controller */ |
1054 | IDE_HFLAG_BOOTABLE = (1 << 13), | 1066 | IDE_HFLAG_NON_BOOTABLE = (1 << 13), |
1055 | /* host doesn't support DMA */ | 1067 | /* host doesn't support DMA */ |
1056 | IDE_HFLAG_NO_DMA = (1 << 14), | 1068 | IDE_HFLAG_NO_DMA = (1 << 14), |
1057 | /* check if host is PCI IDE device before allowing DMA */ | 1069 | /* check if host is PCI IDE device before allowing DMA */ |
1058 | IDE_HFLAG_NO_AUTODMA = (1 << 15), | 1070 | IDE_HFLAG_NO_AUTODMA = (1 << 15), |
1059 | /* don't autotune PIO */ | 1071 | /* host uses MMIO */ |
1060 | IDE_HFLAG_NO_AUTOTUNE = (1 << 16), | 1072 | IDE_HFLAG_MMIO = (1 << 16), |
1061 | /* host is CS5510/CS5520 */ | 1073 | /* host is CS5510/CS5520 */ |
1062 | IDE_HFLAG_CS5520 = IDE_HFLAG_VDMA, | 1074 | IDE_HFLAG_CS5520 = IDE_HFLAG_VDMA, |
1063 | /* no LBA48 */ | 1075 | /* no LBA48 */ |
@@ -1079,8 +1091,8 @@ enum { | |||
1079 | /* unmask IRQs */ | 1091 | /* unmask IRQs */ |
1080 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), | 1092 | IDE_HFLAG_UNMASK_IRQS = (1 << 25), |
1081 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), | 1093 | IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 << 26), |
1082 | /* host is CY82C693 */ | 1094 | /* serialize ports if DMA is possible (for sl82c105) */ |
1083 | IDE_HFLAG_CY82C693 = (1 << 27), | 1095 | IDE_HFLAG_SERIALIZE_DMA = (1 << 27), |
1084 | /* force host out of "simplex" mode */ | 1096 | /* force host out of "simplex" mode */ |
1085 | IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), | 1097 | IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), |
1086 | /* DSC overlap is unsupported */ | 1098 | /* DSC overlap is unsupported */ |
@@ -1092,9 +1104,9 @@ enum { | |||
1092 | }; | 1104 | }; |
1093 | 1105 | ||
1094 | #ifdef CONFIG_BLK_DEV_OFFBOARD | 1106 | #ifdef CONFIG_BLK_DEV_OFFBOARD |
1095 | # define IDE_HFLAG_OFF_BOARD IDE_HFLAG_BOOTABLE | ||
1096 | #else | ||
1097 | # define IDE_HFLAG_OFF_BOARD 0 | 1107 | # define IDE_HFLAG_OFF_BOARD 0 |
1108 | #else | ||
1109 | # define IDE_HFLAG_OFF_BOARD IDE_HFLAG_NON_BOOTABLE | ||
1098 | #endif | 1110 | #endif |
1099 | 1111 | ||
1100 | struct ide_port_info { | 1112 | struct ide_port_info { |
@@ -1102,10 +1114,14 @@ struct ide_port_info { | |||
1102 | unsigned int (*init_chipset)(struct pci_dev *, const char *); | 1114 | unsigned int (*init_chipset)(struct pci_dev *, const char *); |
1103 | void (*init_iops)(ide_hwif_t *); | 1115 | void (*init_iops)(ide_hwif_t *); |
1104 | void (*init_hwif)(ide_hwif_t *); | 1116 | void (*init_hwif)(ide_hwif_t *); |
1105 | void (*init_dma)(ide_hwif_t *, unsigned long); | 1117 | int (*init_dma)(ide_hwif_t *, |
1118 | const struct ide_port_info *); | ||
1119 | |||
1120 | const struct ide_port_ops *port_ops; | ||
1121 | const struct ide_dma_ops *dma_ops; | ||
1122 | |||
1106 | ide_pci_enablebit_t enablebits[2]; | 1123 | ide_pci_enablebit_t enablebits[2]; |
1107 | hwif_chipset_t chipset; | 1124 | hwif_chipset_t chipset; |
1108 | u8 extra; | ||
1109 | u32 host_flags; | 1125 | u32 host_flags; |
1110 | u8 pio_mask; | 1126 | u8 pio_mask; |
1111 | u8 swdma_mask; | 1127 | u8 swdma_mask; |
@@ -1152,13 +1168,16 @@ void ide_destroy_dmatable(ide_drive_t *); | |||
1152 | 1168 | ||
1153 | #ifdef CONFIG_BLK_DEV_IDEDMA_SFF | 1169 | #ifdef CONFIG_BLK_DEV_IDEDMA_SFF |
1154 | extern int ide_build_dmatable(ide_drive_t *, struct request *); | 1170 | extern int ide_build_dmatable(ide_drive_t *, struct request *); |
1155 | extern int ide_release_dma(ide_hwif_t *); | 1171 | int ide_allocate_dma_engine(ide_hwif_t *); |
1156 | extern void ide_setup_dma(ide_hwif_t *, unsigned long); | 1172 | void ide_release_dma_engine(ide_hwif_t *); |
1173 | void ide_setup_dma(ide_hwif_t *, unsigned long); | ||
1157 | 1174 | ||
1158 | void ide_dma_host_set(ide_drive_t *, int); | 1175 | void ide_dma_host_set(ide_drive_t *, int); |
1159 | extern int ide_dma_setup(ide_drive_t *); | 1176 | extern int ide_dma_setup(ide_drive_t *); |
1177 | void ide_dma_exec_cmd(ide_drive_t *, u8); | ||
1160 | extern void ide_dma_start(ide_drive_t *); | 1178 | extern void ide_dma_start(ide_drive_t *); |
1161 | extern int __ide_dma_end(ide_drive_t *); | 1179 | extern int __ide_dma_end(ide_drive_t *); |
1180 | int ide_dma_test_irq(ide_drive_t *); | ||
1162 | extern void ide_dma_lost_irq(ide_drive_t *); | 1181 | extern void ide_dma_lost_irq(ide_drive_t *); |
1163 | extern void ide_dma_timeout(ide_drive_t *); | 1182 | extern void ide_dma_timeout(ide_drive_t *); |
1164 | #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ | 1183 | #endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ |
@@ -1176,7 +1195,7 @@ static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } | |||
1176 | #endif /* CONFIG_BLK_DEV_IDEDMA */ | 1195 | #endif /* CONFIG_BLK_DEV_IDEDMA */ |
1177 | 1196 | ||
1178 | #ifndef CONFIG_BLK_DEV_IDEDMA_SFF | 1197 | #ifndef CONFIG_BLK_DEV_IDEDMA_SFF |
1179 | static inline void ide_release_dma(ide_hwif_t *drive) {;} | 1198 | static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } |
1180 | #endif | 1199 | #endif |
1181 | 1200 | ||
1182 | #ifdef CONFIG_BLK_DEV_IDEACPI | 1201 | #ifdef CONFIG_BLK_DEV_IDEACPI |
@@ -1196,17 +1215,18 @@ static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} | |||
1196 | #endif | 1215 | #endif |
1197 | 1216 | ||
1198 | void ide_remove_port_from_hwgroup(ide_hwif_t *); | 1217 | void ide_remove_port_from_hwgroup(ide_hwif_t *); |
1199 | extern int ide_hwif_request_regions(ide_hwif_t *hwif); | 1218 | void ide_unregister(ide_hwif_t *); |
1200 | extern void ide_hwif_release_regions(ide_hwif_t* hwif); | ||
1201 | void ide_unregister(unsigned int); | ||
1202 | 1219 | ||
1203 | void ide_register_region(struct gendisk *); | 1220 | void ide_register_region(struct gendisk *); |
1204 | void ide_unregister_region(struct gendisk *); | 1221 | void ide_unregister_region(struct gendisk *); |
1205 | 1222 | ||
1206 | void ide_undecoded_slave(ide_drive_t *); | 1223 | void ide_undecoded_slave(ide_drive_t *); |
1207 | 1224 | ||
1225 | void ide_port_apply_params(ide_hwif_t *); | ||
1226 | |||
1208 | int ide_device_add_all(u8 *idx, const struct ide_port_info *); | 1227 | int ide_device_add_all(u8 *idx, const struct ide_port_info *); |
1209 | int ide_device_add(u8 idx[4], const struct ide_port_info *); | 1228 | int ide_device_add(u8 idx[4], const struct ide_port_info *); |
1229 | int ide_legacy_device_add(const struct ide_port_info *, unsigned long); | ||
1210 | void ide_port_unregister_devices(ide_hwif_t *); | 1230 | void ide_port_unregister_devices(ide_hwif_t *); |
1211 | void ide_port_scan(ide_hwif_t *); | 1231 | void ide_port_scan(ide_hwif_t *); |
1212 | 1232 | ||
@@ -1315,51 +1335,27 @@ static inline void ide_set_irq(ide_drive_t *drive, int on) | |||
1315 | { | 1335 | { |
1316 | ide_hwif_t *hwif = drive->hwif; | 1336 | ide_hwif_t *hwif = drive->hwif; |
1317 | 1337 | ||
1318 | hwif->OUTB(drive->ctl | (on ? 0 : 2), | 1338 | hwif->OUTB(drive->ctl | (on ? 0 : 2), hwif->io_ports.ctl_addr); |
1319 | hwif->io_ports[IDE_CONTROL_OFFSET]); | ||
1320 | } | 1339 | } |
1321 | 1340 | ||
1322 | static inline u8 ide_read_status(ide_drive_t *drive) | 1341 | static inline u8 ide_read_status(ide_drive_t *drive) |
1323 | { | 1342 | { |
1324 | ide_hwif_t *hwif = drive->hwif; | 1343 | ide_hwif_t *hwif = drive->hwif; |
1325 | 1344 | ||
1326 | return hwif->INB(hwif->io_ports[IDE_STATUS_OFFSET]); | 1345 | return hwif->INB(hwif->io_ports.status_addr); |
1327 | } | 1346 | } |
1328 | 1347 | ||
1329 | static inline u8 ide_read_altstatus(ide_drive_t *drive) | 1348 | static inline u8 ide_read_altstatus(ide_drive_t *drive) |
1330 | { | 1349 | { |
1331 | ide_hwif_t *hwif = drive->hwif; | 1350 | ide_hwif_t *hwif = drive->hwif; |
1332 | 1351 | ||
1333 | return hwif->INB(hwif->io_ports[IDE_CONTROL_OFFSET]); | 1352 | return hwif->INB(hwif->io_ports.ctl_addr); |
1334 | } | 1353 | } |
1335 | 1354 | ||
1336 | static inline u8 ide_read_error(ide_drive_t *drive) | 1355 | static inline u8 ide_read_error(ide_drive_t *drive) |
1337 | { | 1356 | { |
1338 | ide_hwif_t *hwif = drive->hwif; | 1357 | ide_hwif_t *hwif = drive->hwif; |
1339 | 1358 | ||
1340 | return hwif->INB(hwif->io_ports[IDE_ERROR_OFFSET]); | 1359 | return hwif->INB(hwif->io_ports.error_addr); |
1341 | } | 1360 | } |
1342 | |||
1343 | /* | ||
1344 | * Too bad. The drive wants to send us data which we are not ready to accept. | ||
1345 | * Just throw it away. | ||
1346 | */ | ||
1347 | static inline void ide_atapi_discard_data(ide_drive_t *drive, unsigned bcount) | ||
1348 | { | ||
1349 | ide_hwif_t *hwif = drive->hwif; | ||
1350 | |||
1351 | /* FIXME: use ->atapi_input_bytes */ | ||
1352 | while (bcount--) | ||
1353 | (void)hwif->INB(hwif->io_ports[IDE_DATA_OFFSET]); | ||
1354 | } | ||
1355 | |||
1356 | static inline void ide_atapi_write_zeros(ide_drive_t *drive, unsigned bcount) | ||
1357 | { | ||
1358 | ide_hwif_t *hwif = drive->hwif; | ||
1359 | |||
1360 | /* FIXME: use ->atapi_output_bytes */ | ||
1361 | while (bcount--) | ||
1362 | hwif->OUTB(0, hwif->io_ports[IDE_DATA_OFFSET]); | ||
1363 | } | ||
1364 | |||
1365 | #endif /* _IDE_H */ | 1361 | #endif /* _IDE_H */ |
diff --git a/include/linux/idr.h b/include/linux/idr.h index 0edda411959c..9a2d762124de 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/types.h> | 15 | #include <linux/types.h> |
16 | #include <linux/bitops.h> | 16 | #include <linux/bitops.h> |
17 | #include <linux/init.h> | ||
17 | 18 | ||
18 | #if BITS_PER_LONG == 32 | 19 | #if BITS_PER_LONG == 32 |
19 | # define IDR_BITS 5 | 20 | # define IDR_BITS 5 |
@@ -115,4 +116,6 @@ void ida_remove(struct ida *ida, int id); | |||
115 | void ida_destroy(struct ida *ida); | 116 | void ida_destroy(struct ida *ida); |
116 | void ida_init(struct ida *ida); | 117 | void ida_init(struct ida *ida); |
117 | 118 | ||
119 | void __init idr_init_cache(void); | ||
120 | |||
118 | #endif /* __IDR_H__ */ | 121 | #endif /* __IDR_H__ */ |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index f27d11ab418b..529f301d9372 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -465,13 +465,19 @@ enum ieee80211_eid { | |||
465 | WLAN_EID_TS_DELAY = 43, | 465 | WLAN_EID_TS_DELAY = 43, |
466 | WLAN_EID_TCLAS_PROCESSING = 44, | 466 | WLAN_EID_TCLAS_PROCESSING = 44, |
467 | WLAN_EID_QOS_CAPA = 46, | 467 | WLAN_EID_QOS_CAPA = 46, |
468 | /* 802.11s */ | 468 | /* 802.11s |
469 | WLAN_EID_MESH_CONFIG = 36, /* Pending IEEE 802.11 ANA approval */ | 469 | * |
470 | WLAN_EID_MESH_ID = 37, /* Pending IEEE 802.11 ANA approval */ | 470 | * All mesh EID numbers are pending IEEE 802.11 ANA approval. |
471 | WLAN_EID_PEER_LINK = 40, /* Pending IEEE 802.11 ANA approval */ | 471 | * The numbers have been incremented from those suggested in |
472 | WLAN_EID_PREQ = 53, /* Pending IEEE 802.11 ANA approval */ | 472 | * 802.11s/D2.0 so that MESH_CONFIG does not conflict with |
473 | WLAN_EID_PREP = 54, /* Pending IEEE 802.11 ANA approval */ | 473 | * EXT_SUPP_RATES. |
474 | WLAN_EID_PERR = 55, /* Pending IEEE 802.11 ANA approval */ | 474 | */ |
475 | WLAN_EID_MESH_CONFIG = 51, | ||
476 | WLAN_EID_MESH_ID = 52, | ||
477 | WLAN_EID_PEER_LINK = 55, | ||
478 | WLAN_EID_PREQ = 68, | ||
479 | WLAN_EID_PREP = 69, | ||
480 | WLAN_EID_PERR = 70, | ||
475 | /* 802.11h */ | 481 | /* 802.11h */ |
476 | WLAN_EID_PWR_CONSTRAINT = 32, | 482 | WLAN_EID_PWR_CONSTRAINT = 32, |
477 | WLAN_EID_PWR_CAPABILITY = 33, | 483 | WLAN_EID_PWR_CAPABILITY = 33, |
diff --git a/include/linux/init.h b/include/linux/init.h index fb58c0493cf2..21d658cdfa27 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
@@ -147,6 +147,8 @@ extern unsigned int reset_devices; | |||
147 | void setup_arch(char **); | 147 | void setup_arch(char **); |
148 | void prepare_namespace(void); | 148 | void prepare_namespace(void); |
149 | 149 | ||
150 | extern void (*late_time_init)(void); | ||
151 | |||
150 | #endif | 152 | #endif |
151 | 153 | ||
152 | #ifndef MODULE | 154 | #ifndef MODULE |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 37a6f5bc4a92..bf6b8a61f8db 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/ipc.h> | 9 | #include <linux/ipc.h> |
10 | #include <linux/pid_namespace.h> | 10 | #include <linux/pid_namespace.h> |
11 | #include <linux/user_namespace.h> | 11 | #include <linux/user_namespace.h> |
12 | #include <linux/securebits.h> | ||
12 | #include <net/net_namespace.h> | 13 | #include <net/net_namespace.h> |
13 | 14 | ||
14 | #define INIT_FDTABLE \ | 15 | #define INIT_FDTABLE \ |
@@ -172,7 +173,7 @@ extern struct group_info init_groups; | |||
172 | .cap_inheritable = CAP_INIT_INH_SET, \ | 173 | .cap_inheritable = CAP_INIT_INH_SET, \ |
173 | .cap_permitted = CAP_FULL_SET, \ | 174 | .cap_permitted = CAP_FULL_SET, \ |
174 | .cap_bset = CAP_INIT_BSET, \ | 175 | .cap_bset = CAP_INIT_BSET, \ |
175 | .keep_capabilities = 0, \ | 176 | .securebits = SECUREBITS_DEFAULT, \ |
176 | .user = INIT_USER, \ | 177 | .user = INIT_USER, \ |
177 | .comm = "swapper", \ | 178 | .comm = "swapper", \ |
178 | .thread = INIT_THREAD, \ | 179 | .thread = INIT_THREAD, \ |
diff --git a/include/linux/input.h b/include/linux/input.h index cae2c35d1206..28a094fcfe20 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
@@ -1025,10 +1025,6 @@ struct ff_effect { | |||
1025 | * @node: used to place the device onto input_dev_list | 1025 | * @node: used to place the device onto input_dev_list |
1026 | */ | 1026 | */ |
1027 | struct input_dev { | 1027 | struct input_dev { |
1028 | /* private: */ | ||
1029 | void *private; /* do not use */ | ||
1030 | /* public: */ | ||
1031 | |||
1032 | const char *name; | 1028 | const char *name; |
1033 | const char *phys; | 1029 | const char *phys; |
1034 | const char *uniq; | 1030 | const char *uniq; |
@@ -1238,12 +1234,12 @@ static inline void input_put_device(struct input_dev *dev) | |||
1238 | 1234 | ||
1239 | static inline void *input_get_drvdata(struct input_dev *dev) | 1235 | static inline void *input_get_drvdata(struct input_dev *dev) |
1240 | { | 1236 | { |
1241 | return dev->private; | 1237 | return dev_get_drvdata(&dev->dev); |
1242 | } | 1238 | } |
1243 | 1239 | ||
1244 | static inline void input_set_drvdata(struct input_dev *dev, void *data) | 1240 | static inline void input_set_drvdata(struct input_dev *dev, void *data) |
1245 | { | 1241 | { |
1246 | dev->private = data; | 1242 | dev_set_drvdata(&dev->dev, data); |
1247 | } | 1243 | } |
1248 | 1244 | ||
1249 | int __must_check input_register_device(struct input_dev *); | 1245 | int __must_check input_register_device(struct input_dev *); |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index b5fef13148bd..f1fc7470d26c 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -289,6 +289,7 @@ struct softirq_action | |||
289 | }; | 289 | }; |
290 | 290 | ||
291 | asmlinkage void do_softirq(void); | 291 | asmlinkage void do_softirq(void); |
292 | asmlinkage void __do_softirq(void); | ||
292 | extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data); | 293 | extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data); |
293 | extern void softirq_init(void); | 294 | extern void softirq_init(void); |
294 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) | 295 | #define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0) |
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h index e4451d1da753..ea6c18a8b0d4 100644 --- a/include/linux/ipc_namespace.h +++ b/include/linux/ipc_namespace.h | |||
@@ -4,6 +4,17 @@ | |||
4 | #include <linux/err.h> | 4 | #include <linux/err.h> |
5 | #include <linux/idr.h> | 5 | #include <linux/idr.h> |
6 | #include <linux/rwsem.h> | 6 | #include <linux/rwsem.h> |
7 | #include <linux/notifier.h> | ||
8 | |||
9 | /* | ||
10 | * ipc namespace events | ||
11 | */ | ||
12 | #define IPCNS_MEMCHANGED 0x00000001 /* Notify lowmem size changed */ | ||
13 | #define IPCNS_CREATED 0x00000002 /* Notify new ipc namespace created */ | ||
14 | #define IPCNS_REMOVED 0x00000003 /* Notify ipc namespace removed */ | ||
15 | |||
16 | #define IPCNS_CALLBACK_PRI 0 | ||
17 | |||
7 | 18 | ||
8 | struct ipc_ids { | 19 | struct ipc_ids { |
9 | int in_use; | 20 | int in_use; |
@@ -30,15 +41,24 @@ struct ipc_namespace { | |||
30 | size_t shm_ctlall; | 41 | size_t shm_ctlall; |
31 | int shm_ctlmni; | 42 | int shm_ctlmni; |
32 | int shm_tot; | 43 | int shm_tot; |
44 | |||
45 | struct notifier_block ipcns_nb; | ||
33 | }; | 46 | }; |
34 | 47 | ||
35 | extern struct ipc_namespace init_ipc_ns; | 48 | extern struct ipc_namespace init_ipc_ns; |
49 | extern atomic_t nr_ipc_ns; | ||
36 | 50 | ||
37 | #ifdef CONFIG_SYSVIPC | 51 | #ifdef CONFIG_SYSVIPC |
38 | #define INIT_IPC_NS(ns) .ns = &init_ipc_ns, | 52 | #define INIT_IPC_NS(ns) .ns = &init_ipc_ns, |
39 | #else | 53 | |
54 | extern int register_ipcns_notifier(struct ipc_namespace *); | ||
55 | extern int cond_register_ipcns_notifier(struct ipc_namespace *); | ||
56 | extern int unregister_ipcns_notifier(struct ipc_namespace *); | ||
57 | extern int ipcns_notify(unsigned long); | ||
58 | |||
59 | #else /* CONFIG_SYSVIPC */ | ||
40 | #define INIT_IPC_NS(ns) | 60 | #define INIT_IPC_NS(ns) |
41 | #endif | 61 | #endif /* CONFIG_SYSVIPC */ |
42 | 62 | ||
43 | #if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS) | 63 | #if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS) |
44 | extern void free_ipc_ns(struct kref *kref); | 64 | extern void free_ipc_ns(struct kref *kref); |
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h index c5bd28b69aec..7ebdb4fb4e54 100644 --- a/include/linux/ipmi.h +++ b/include/linux/ipmi.h | |||
@@ -64,7 +64,7 @@ | |||
64 | * applications and another for userland applications. The | 64 | * applications and another for userland applications. The |
65 | * capabilities are basically the same for both interface, although | 65 | * capabilities are basically the same for both interface, although |
66 | * the interfaces are somewhat different. The stuff in the | 66 | * the interfaces are somewhat different. The stuff in the |
67 | * #ifdef KERNEL below is the in-kernel interface. The userland | 67 | * #ifdef __KERNEL__ below is the in-kernel interface. The userland |
68 | * interface is defined later in the file. */ | 68 | * interface is defined later in the file. */ |
69 | 69 | ||
70 | 70 | ||
@@ -75,8 +75,7 @@ | |||
75 | * work for sockets. | 75 | * work for sockets. |
76 | */ | 76 | */ |
77 | #define IPMI_MAX_ADDR_SIZE 32 | 77 | #define IPMI_MAX_ADDR_SIZE 32 |
78 | struct ipmi_addr | 78 | struct ipmi_addr { |
79 | { | ||
80 | /* Try to take these from the "Channel Medium Type" table | 79 | /* Try to take these from the "Channel Medium Type" table |
81 | in section 6.5 of the IPMI 1.5 manual. */ | 80 | in section 6.5 of the IPMI 1.5 manual. */ |
82 | int addr_type; | 81 | int addr_type; |
@@ -90,8 +89,7 @@ struct ipmi_addr | |||
90 | * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC. | 89 | * 0), or IPMC_BMC_CHANNEL if communicating directly with the BMC. |
91 | */ | 90 | */ |
92 | #define IPMI_SYSTEM_INTERFACE_ADDR_TYPE 0x0c | 91 | #define IPMI_SYSTEM_INTERFACE_ADDR_TYPE 0x0c |
93 | struct ipmi_system_interface_addr | 92 | struct ipmi_system_interface_addr { |
94 | { | ||
95 | int addr_type; | 93 | int addr_type; |
96 | short channel; | 94 | short channel; |
97 | unsigned char lun; | 95 | unsigned char lun; |
@@ -100,10 +98,9 @@ struct ipmi_system_interface_addr | |||
100 | /* An IPMB Address. */ | 98 | /* An IPMB Address. */ |
101 | #define IPMI_IPMB_ADDR_TYPE 0x01 | 99 | #define IPMI_IPMB_ADDR_TYPE 0x01 |
102 | /* Used for broadcast get device id as described in section 17.9 of the | 100 | /* Used for broadcast get device id as described in section 17.9 of the |
103 | IPMI 1.5 manual. */ | 101 | IPMI 1.5 manual. */ |
104 | #define IPMI_IPMB_BROADCAST_ADDR_TYPE 0x41 | 102 | #define IPMI_IPMB_BROADCAST_ADDR_TYPE 0x41 |
105 | struct ipmi_ipmb_addr | 103 | struct ipmi_ipmb_addr { |
106 | { | ||
107 | int addr_type; | 104 | int addr_type; |
108 | short channel; | 105 | short channel; |
109 | unsigned char slave_addr; | 106 | unsigned char slave_addr; |
@@ -128,8 +125,7 @@ struct ipmi_ipmb_addr | |||
128 | * message is a little weird, but this is required. | 125 | * message is a little weird, but this is required. |
129 | */ | 126 | */ |
130 | #define IPMI_LAN_ADDR_TYPE 0x04 | 127 | #define IPMI_LAN_ADDR_TYPE 0x04 |
131 | struct ipmi_lan_addr | 128 | struct ipmi_lan_addr { |
132 | { | ||
133 | int addr_type; | 129 | int addr_type; |
134 | short channel; | 130 | short channel; |
135 | unsigned char privilege; | 131 | unsigned char privilege; |
@@ -162,16 +158,14 @@ struct ipmi_lan_addr | |||
162 | * byte of data in the response (as the spec shows the messages laid | 158 | * byte of data in the response (as the spec shows the messages laid |
163 | * out). | 159 | * out). |
164 | */ | 160 | */ |
165 | struct ipmi_msg | 161 | struct ipmi_msg { |
166 | { | ||
167 | unsigned char netfn; | 162 | unsigned char netfn; |
168 | unsigned char cmd; | 163 | unsigned char cmd; |
169 | unsigned short data_len; | 164 | unsigned short data_len; |
170 | unsigned char __user *data; | 165 | unsigned char __user *data; |
171 | }; | 166 | }; |
172 | 167 | ||
173 | struct kernel_ipmi_msg | 168 | struct kernel_ipmi_msg { |
174 | { | ||
175 | unsigned char netfn; | 169 | unsigned char netfn; |
176 | unsigned char cmd; | 170 | unsigned char cmd; |
177 | unsigned short data_len; | 171 | unsigned short data_len; |
@@ -239,12 +233,11 @@ typedef struct ipmi_user *ipmi_user_t; | |||
239 | * used after the message is delivered, so the upper layer may use the | 233 | * used after the message is delivered, so the upper layer may use the |
240 | * link to build a linked list, if it likes. | 234 | * link to build a linked list, if it likes. |
241 | */ | 235 | */ |
242 | struct ipmi_recv_msg | 236 | struct ipmi_recv_msg { |
243 | { | ||
244 | struct list_head link; | 237 | struct list_head link; |
245 | 238 | ||
246 | /* The type of message as defined in the "Receive Types" | 239 | /* The type of message as defined in the "Receive Types" |
247 | defines above. */ | 240 | defines above. */ |
248 | int recv_type; | 241 | int recv_type; |
249 | 242 | ||
250 | ipmi_user_t user; | 243 | ipmi_user_t user; |
@@ -271,9 +264,8 @@ struct ipmi_recv_msg | |||
271 | /* Allocate and free the receive message. */ | 264 | /* Allocate and free the receive message. */ |
272 | void ipmi_free_recv_msg(struct ipmi_recv_msg *msg); | 265 | void ipmi_free_recv_msg(struct ipmi_recv_msg *msg); |
273 | 266 | ||
274 | struct ipmi_user_hndl | 267 | struct ipmi_user_hndl { |
275 | { | 268 | /* Routine type to call when a message needs to be routed to |
276 | /* Routine type to call when a message needs to be routed to | ||
277 | the upper layer. This will be called with some locks held, | 269 | the upper layer. This will be called with some locks held, |
278 | the only IPMI routines that can be called are ipmi_request | 270 | the only IPMI routines that can be called are ipmi_request |
279 | and the alloc/free operations. The handler_data is the | 271 | and the alloc/free operations. The handler_data is the |
@@ -368,9 +360,8 @@ int ipmi_request_supply_msgs(ipmi_user_t user, | |||
368 | * Poll the IPMI interface for the user. This causes the IPMI code to | 360 | * Poll the IPMI interface for the user. This causes the IPMI code to |
369 | * do an immediate check for information from the driver and handle | 361 | * do an immediate check for information from the driver and handle |
370 | * anything that is immediately pending. This will not block in any | 362 | * anything that is immediately pending. This will not block in any |
371 | * way. This is useful if you need to implement polling from the user | 363 | * way. This is useful if you need to spin waiting for something to |
372 | * for things like modifying the watchdog timeout when a panic occurs | 364 | * happen in the IPMI driver. |
373 | * or disabling the watchdog timer on a reboot. | ||
374 | */ | 365 | */ |
375 | void ipmi_poll_interface(ipmi_user_t user); | 366 | void ipmi_poll_interface(ipmi_user_t user); |
376 | 367 | ||
@@ -422,12 +413,6 @@ int ipmi_get_maintenance_mode(ipmi_user_t user); | |||
422 | int ipmi_set_maintenance_mode(ipmi_user_t user, int mode); | 413 | int ipmi_set_maintenance_mode(ipmi_user_t user, int mode); |
423 | 414 | ||
424 | /* | 415 | /* |
425 | * Allow run-to-completion mode to be set for the interface of | ||
426 | * a specific user. | ||
427 | */ | ||
428 | void ipmi_user_set_run_to_completion(ipmi_user_t user, int val); | ||
429 | |||
430 | /* | ||
431 | * When the user is created, it will not receive IPMI events by | 416 | * When the user is created, it will not receive IPMI events by |
432 | * default. The user must set this to TRUE to get incoming events. | 417 | * default. The user must set this to TRUE to get incoming events. |
433 | * The first user that sets this to TRUE will receive all events that | 418 | * The first user that sets this to TRUE will receive all events that |
@@ -440,8 +425,7 @@ int ipmi_set_gets_events(ipmi_user_t user, int val); | |||
440 | * every existing interface when a new watcher is registered with | 425 | * every existing interface when a new watcher is registered with |
441 | * ipmi_smi_watcher_register(). | 426 | * ipmi_smi_watcher_register(). |
442 | */ | 427 | */ |
443 | struct ipmi_smi_watcher | 428 | struct ipmi_smi_watcher { |
444 | { | ||
445 | struct list_head link; | 429 | struct list_head link; |
446 | 430 | ||
447 | /* You must set the owner to the current module, if you are in | 431 | /* You must set the owner to the current module, if you are in |
@@ -512,8 +496,7 @@ int ipmi_validate_addr(struct ipmi_addr *addr, int len); | |||
512 | 496 | ||
513 | 497 | ||
514 | /* Messages sent to the interface are this format. */ | 498 | /* Messages sent to the interface are this format. */ |
515 | struct ipmi_req | 499 | struct ipmi_req { |
516 | { | ||
517 | unsigned char __user *addr; /* Address to send the message to. */ | 500 | unsigned char __user *addr; /* Address to send the message to. */ |
518 | unsigned int addr_len; | 501 | unsigned int addr_len; |
519 | 502 | ||
@@ -538,12 +521,11 @@ struct ipmi_req | |||
538 | 521 | ||
539 | /* Messages sent to the interface with timing parameters are this | 522 | /* Messages sent to the interface with timing parameters are this |
540 | format. */ | 523 | format. */ |
541 | struct ipmi_req_settime | 524 | struct ipmi_req_settime { |
542 | { | ||
543 | struct ipmi_req req; | 525 | struct ipmi_req req; |
544 | 526 | ||
545 | /* See ipmi_request_settime() above for details on these | 527 | /* See ipmi_request_settime() above for details on these |
546 | values. */ | 528 | values. */ |
547 | int retries; | 529 | int retries; |
548 | unsigned int retry_time_ms; | 530 | unsigned int retry_time_ms; |
549 | }; | 531 | }; |
@@ -560,8 +542,7 @@ struct ipmi_req_settime | |||
560 | struct ipmi_req_settime) | 542 | struct ipmi_req_settime) |
561 | 543 | ||
562 | /* Messages received from the interface are this format. */ | 544 | /* Messages received from the interface are this format. */ |
563 | struct ipmi_recv | 545 | struct ipmi_recv { |
564 | { | ||
565 | int recv_type; /* Is this a command, response or an | 546 | int recv_type; /* Is this a command, response or an |
566 | asyncronous event. */ | 547 | asyncronous event. */ |
567 | 548 | ||
@@ -607,13 +588,12 @@ struct ipmi_recv | |||
607 | struct ipmi_recv) | 588 | struct ipmi_recv) |
608 | 589 | ||
609 | /* Register to get commands from other entities on this interface. */ | 590 | /* Register to get commands from other entities on this interface. */ |
610 | struct ipmi_cmdspec | 591 | struct ipmi_cmdspec { |
611 | { | ||
612 | unsigned char netfn; | 592 | unsigned char netfn; |
613 | unsigned char cmd; | 593 | unsigned char cmd; |
614 | }; | 594 | }; |
615 | 595 | ||
616 | /* | 596 | /* |
617 | * Register to receive a specific command. error values: | 597 | * Register to receive a specific command. error values: |
618 | * - EFAULT - an address supplied was invalid. | 598 | * - EFAULT - an address supplied was invalid. |
619 | * - EBUSY - The netfn/cmd supplied was already in use. | 599 | * - EBUSY - The netfn/cmd supplied was already in use. |
@@ -636,8 +616,7 @@ struct ipmi_cmdspec | |||
636 | * else. The chans field is a bitmask, (1 << channel) for each channel. | 616 | * else. The chans field is a bitmask, (1 << channel) for each channel. |
637 | * It may be IPMI_CHAN_ALL for all channels. | 617 | * It may be IPMI_CHAN_ALL for all channels. |
638 | */ | 618 | */ |
639 | struct ipmi_cmdspec_chans | 619 | struct ipmi_cmdspec_chans { |
640 | { | ||
641 | unsigned int netfn; | 620 | unsigned int netfn; |
642 | unsigned int cmd; | 621 | unsigned int cmd; |
643 | unsigned int chans; | 622 | unsigned int chans; |
@@ -659,7 +638,7 @@ struct ipmi_cmdspec_chans | |||
659 | #define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29, \ | 638 | #define IPMICTL_UNREGISTER_FOR_CMD_CHANS _IOR(IPMI_IOC_MAGIC, 29, \ |
660 | struct ipmi_cmdspec_chans) | 639 | struct ipmi_cmdspec_chans) |
661 | 640 | ||
662 | /* | 641 | /* |
663 | * Set whether this interface receives events. Note that the first | 642 | * Set whether this interface receives events. Note that the first |
664 | * user registered for events will get all pending events for the | 643 | * user registered for events will get all pending events for the |
665 | * interface. error values: | 644 | * interface. error values: |
@@ -675,15 +654,18 @@ struct ipmi_cmdspec_chans | |||
675 | * things it takes to determine your address (if not the BMC) and set | 654 | * things it takes to determine your address (if not the BMC) and set |
676 | * it for everyone else. You should probably leave the LUN alone. | 655 | * it for everyone else. You should probably leave the LUN alone. |
677 | */ | 656 | */ |
678 | struct ipmi_channel_lun_address_set | 657 | struct ipmi_channel_lun_address_set { |
679 | { | ||
680 | unsigned short channel; | 658 | unsigned short channel; |
681 | unsigned char value; | 659 | unsigned char value; |
682 | }; | 660 | }; |
683 | #define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set) | 661 | #define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD \ |
684 | #define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set) | 662 | _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set) |
685 | #define IPMICTL_SET_MY_CHANNEL_LUN_CMD _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set) | 663 | #define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD \ |
686 | #define IPMICTL_GET_MY_CHANNEL_LUN_CMD _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set) | 664 | _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set) |
665 | #define IPMICTL_SET_MY_CHANNEL_LUN_CMD \ | ||
666 | _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set) | ||
667 | #define IPMICTL_GET_MY_CHANNEL_LUN_CMD \ | ||
668 | _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set) | ||
687 | /* Legacy interfaces, these only set IPMB 0. */ | 669 | /* Legacy interfaces, these only set IPMB 0. */ |
688 | #define IPMICTL_SET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 17, unsigned int) | 670 | #define IPMICTL_SET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 17, unsigned int) |
689 | #define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int) | 671 | #define IPMICTL_GET_MY_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 18, unsigned int) |
@@ -694,8 +676,7 @@ struct ipmi_channel_lun_address_set | |||
694 | * Get/set the default timing values for an interface. You shouldn't | 676 | * Get/set the default timing values for an interface. You shouldn't |
695 | * generally mess with these. | 677 | * generally mess with these. |
696 | */ | 678 | */ |
697 | struct ipmi_timing_parms | 679 | struct ipmi_timing_parms { |
698 | { | ||
699 | int retries; | 680 | int retries; |
700 | unsigned int retry_time_ms; | 681 | unsigned int retry_time_ms; |
701 | }; | 682 | }; |
diff --git a/include/linux/ipmi_smi.h b/include/linux/ipmi_smi.h index 6e8cec503380..62b73668b602 100644 --- a/include/linux/ipmi_smi.h +++ b/include/linux/ipmi_smi.h | |||
@@ -60,8 +60,7 @@ typedef struct ipmi_smi *ipmi_smi_t; | |||
60 | * asynchronous data and messages and request them from the | 60 | * asynchronous data and messages and request them from the |
61 | * interface. | 61 | * interface. |
62 | */ | 62 | */ |
63 | struct ipmi_smi_msg | 63 | struct ipmi_smi_msg { |
64 | { | ||
65 | struct list_head link; | 64 | struct list_head link; |
66 | 65 | ||
67 | long msgid; | 66 | long msgid; |
@@ -74,12 +73,11 @@ struct ipmi_smi_msg | |||
74 | unsigned char rsp[IPMI_MAX_MSG_LENGTH]; | 73 | unsigned char rsp[IPMI_MAX_MSG_LENGTH]; |
75 | 74 | ||
76 | /* Will be called when the system is done with the message | 75 | /* Will be called when the system is done with the message |
77 | (presumably to free it). */ | 76 | (presumably to free it). */ |
78 | void (*done)(struct ipmi_smi_msg *msg); | 77 | void (*done)(struct ipmi_smi_msg *msg); |
79 | }; | 78 | }; |
80 | 79 | ||
81 | struct ipmi_smi_handlers | 80 | struct ipmi_smi_handlers { |
82 | { | ||
83 | struct module *owner; | 81 | struct module *owner; |
84 | 82 | ||
85 | /* The low-level interface cannot start sending messages to | 83 | /* The low-level interface cannot start sending messages to |
@@ -231,7 +229,7 @@ static inline void ipmi_free_smi_msg(struct ipmi_smi_msg *msg) | |||
231 | directory for this interface. Note that the entry will | 229 | directory for this interface. Note that the entry will |
232 | automatically be dstroyed when the interface is destroyed. */ | 230 | automatically be dstroyed when the interface is destroyed. */ |
233 | int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name, | 231 | int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name, |
234 | read_proc_t *read_proc, write_proc_t *write_proc, | 232 | read_proc_t *read_proc, |
235 | void *data, struct module *owner); | 233 | void *data, struct module *owner); |
236 | 234 | ||
237 | #endif /* __LINUX_IPMI_SMI_H */ | 235 | #endif /* __LINUX_IPMI_SMI_H */ |
diff --git a/include/linux/kbuild.h b/include/linux/kbuild.h new file mode 100644 index 000000000000..22a72198c14b --- /dev/null +++ b/include/linux/kbuild.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef __LINUX_KBUILD_H | ||
2 | #define __LINUX_KBUILD_H | ||
3 | |||
4 | #define DEFINE(sym, val) \ | ||
5 | asm volatile("\n->" #sym " %0 " #val : : "i" (val)) | ||
6 | |||
7 | #define BLANK() asm volatile("\n->" : : ) | ||
8 | |||
9 | #define OFFSET(sym, str, mem) \ | ||
10 | DEFINE(sym, offsetof(struct str, mem)) | ||
11 | |||
12 | #define COMMENT(x) \ | ||
13 | asm volatile("\n->#" x) | ||
14 | |||
15 | #endif | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index cd6d02cf854d..53839ba265ec 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -20,6 +20,9 @@ | |||
20 | extern const char linux_banner[]; | 20 | extern const char linux_banner[]; |
21 | extern const char linux_proc_banner[]; | 21 | extern const char linux_proc_banner[]; |
22 | 22 | ||
23 | #define USHORT_MAX ((u16)(~0U)) | ||
24 | #define SHORT_MAX ((s16)(USHORT_MAX>>1)) | ||
25 | #define SHORT_MIN (-SHORT_MAX - 1) | ||
23 | #define INT_MAX ((int)(~0U>>1)) | 26 | #define INT_MAX ((int)(~0U>>1)) |
24 | #define INT_MIN (-INT_MAX - 1) | 27 | #define INT_MIN (-INT_MAX - 1) |
25 | #define UINT_MAX (~0U) | 28 | #define UINT_MAX (~0U) |
@@ -188,6 +191,7 @@ extern int log_buf_copy(char *dest, int idx, int len); | |||
188 | extern int printk_ratelimit_jiffies; | 191 | extern int printk_ratelimit_jiffies; |
189 | extern int printk_ratelimit_burst; | 192 | extern int printk_ratelimit_burst; |
190 | extern int printk_ratelimit(void); | 193 | extern int printk_ratelimit(void); |
194 | extern int __ratelimit(int ratelimit_jiffies, int ratelimit_burst); | ||
191 | extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst); | 195 | extern int __printk_ratelimit(int ratelimit_jiffies, int ratelimit_burst); |
192 | extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, | 196 | extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, |
193 | unsigned int interval_msec); | 197 | unsigned int interval_msec); |
@@ -255,6 +259,7 @@ extern enum system_states { | |||
255 | #define TAINT_USER (1<<6) | 259 | #define TAINT_USER (1<<6) |
256 | #define TAINT_DIE (1<<7) | 260 | #define TAINT_DIE (1<<7) |
257 | #define TAINT_OVERRIDDEN_ACPI_TABLE (1<<8) | 261 | #define TAINT_OVERRIDDEN_ACPI_TABLE (1<<8) |
262 | #define TAINT_WARN (1<<9) | ||
258 | 263 | ||
259 | extern void dump_stack(void) __cold; | 264 | extern void dump_stack(void) __cold; |
260 | 265 | ||
diff --git a/include/linux/key.h b/include/linux/key.h index a70b8a8f2005..c45c962d1cc5 100644 --- a/include/linux/key.h +++ b/include/linux/key.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/list.h> | 19 | #include <linux/list.h> |
20 | #include <linux/rbtree.h> | 20 | #include <linux/rbtree.h> |
21 | #include <linux/rcupdate.h> | 21 | #include <linux/rcupdate.h> |
22 | #include <linux/sysctl.h> | ||
22 | #include <asm/atomic.h> | 23 | #include <asm/atomic.h> |
23 | 24 | ||
24 | #ifdef __KERNEL__ | 25 | #ifdef __KERNEL__ |
@@ -67,6 +68,8 @@ struct key; | |||
67 | #define KEY_OTH_SETATTR 0x00000020 | 68 | #define KEY_OTH_SETATTR 0x00000020 |
68 | #define KEY_OTH_ALL 0x0000003f | 69 | #define KEY_OTH_ALL 0x0000003f |
69 | 70 | ||
71 | #define KEY_PERM_UNDEF 0xffffffff | ||
72 | |||
70 | struct seq_file; | 73 | struct seq_file; |
71 | struct user_struct; | 74 | struct user_struct; |
72 | struct signal_struct; | 75 | struct signal_struct; |
@@ -208,16 +211,19 @@ extern struct key *request_key(struct key_type *type, | |||
208 | 211 | ||
209 | extern struct key *request_key_with_auxdata(struct key_type *type, | 212 | extern struct key *request_key_with_auxdata(struct key_type *type, |
210 | const char *description, | 213 | const char *description, |
211 | const char *callout_info, | 214 | const void *callout_info, |
215 | size_t callout_len, | ||
212 | void *aux); | 216 | void *aux); |
213 | 217 | ||
214 | extern struct key *request_key_async(struct key_type *type, | 218 | extern struct key *request_key_async(struct key_type *type, |
215 | const char *description, | 219 | const char *description, |
216 | const char *callout_info); | 220 | const void *callout_info, |
221 | size_t callout_len); | ||
217 | 222 | ||
218 | extern struct key *request_key_async_with_auxdata(struct key_type *type, | 223 | extern struct key *request_key_async_with_auxdata(struct key_type *type, |
219 | const char *description, | 224 | const char *description, |
220 | const char *callout_info, | 225 | const void *callout_info, |
226 | size_t callout_len, | ||
221 | void *aux); | 227 | void *aux); |
222 | 228 | ||
223 | extern int wait_for_key_construction(struct key *key, bool intr); | 229 | extern int wait_for_key_construction(struct key *key, bool intr); |
@@ -229,6 +235,7 @@ extern key_ref_t key_create_or_update(key_ref_t keyring, | |||
229 | const char *description, | 235 | const char *description, |
230 | const void *payload, | 236 | const void *payload, |
231 | size_t plen, | 237 | size_t plen, |
238 | key_perm_t perm, | ||
232 | unsigned long flags); | 239 | unsigned long flags); |
233 | 240 | ||
234 | extern int key_update(key_ref_t key, | 241 | extern int key_update(key_ref_t key, |
@@ -257,14 +264,18 @@ extern int keyring_add_key(struct key *keyring, | |||
257 | 264 | ||
258 | extern struct key *key_lookup(key_serial_t id); | 265 | extern struct key *key_lookup(key_serial_t id); |
259 | 266 | ||
260 | #define key_serial(key) ((key) ? (key)->serial : 0) | 267 | static inline key_serial_t key_serial(struct key *key) |
268 | { | ||
269 | return key ? key->serial : 0; | ||
270 | } | ||
271 | |||
272 | #ifdef CONFIG_SYSCTL | ||
273 | extern ctl_table key_sysctls[]; | ||
274 | #endif | ||
261 | 275 | ||
262 | /* | 276 | /* |
263 | * the userspace interface | 277 | * the userspace interface |
264 | */ | 278 | */ |
265 | extern struct key root_user_keyring, root_session_keyring; | ||
266 | extern int alloc_uid_keyring(struct user_struct *user, | ||
267 | struct task_struct *ctx); | ||
268 | extern void switch_uid_keyring(struct user_struct *new_user); | 279 | extern void switch_uid_keyring(struct user_struct *new_user); |
269 | extern int copy_keys(unsigned long clone_flags, struct task_struct *tsk); | 280 | extern int copy_keys(unsigned long clone_flags, struct task_struct *tsk); |
270 | extern int copy_thread_group_keys(struct task_struct *tsk); | 281 | extern int copy_thread_group_keys(struct task_struct *tsk); |
@@ -293,7 +304,6 @@ extern void key_init(void); | |||
293 | #define make_key_ref(k, p) ({ NULL; }) | 304 | #define make_key_ref(k, p) ({ NULL; }) |
294 | #define key_ref_to_ptr(k) ({ NULL; }) | 305 | #define key_ref_to_ptr(k) ({ NULL; }) |
295 | #define is_key_possessed(k) 0 | 306 | #define is_key_possessed(k) 0 |
296 | #define alloc_uid_keyring(u,c) 0 | ||
297 | #define switch_uid_keyring(u) do { } while(0) | 307 | #define switch_uid_keyring(u) do { } while(0) |
298 | #define __install_session_keyring(t, k) ({ NULL; }) | 308 | #define __install_session_keyring(t, k) ({ NULL; }) |
299 | #define copy_keys(f,t) 0 | 309 | #define copy_keys(f,t) 0 |
@@ -306,10 +316,6 @@ extern void key_init(void); | |||
306 | #define key_fsgid_changed(t) do { } while(0) | 316 | #define key_fsgid_changed(t) do { } while(0) |
307 | #define key_init() do { } while(0) | 317 | #define key_init() do { } while(0) |
308 | 318 | ||
309 | /* Initial keyrings */ | ||
310 | extern struct key root_user_keyring; | ||
311 | extern struct key root_session_keyring; | ||
312 | |||
313 | #endif /* CONFIG_KEYS */ | 319 | #endif /* CONFIG_KEYS */ |
314 | #endif /* __KERNEL__ */ | 320 | #endif /* __KERNEL__ */ |
315 | #endif /* _LINUX_KEY_H */ | 321 | #endif /* _LINUX_KEY_H */ |
diff --git a/include/linux/keyboard.h b/include/linux/keyboard.h index 65c2d70853e9..a3c984d780f0 100644 --- a/include/linux/keyboard.h +++ b/include/linux/keyboard.h | |||
@@ -33,6 +33,7 @@ struct keyboard_notifier_param { | |||
33 | struct vc_data *vc; /* VC on which the keyboard press was done */ | 33 | struct vc_data *vc; /* VC on which the keyboard press was done */ |
34 | int down; /* Pressure of the key? */ | 34 | int down; /* Pressure of the key? */ |
35 | int shift; /* Current shift mask */ | 35 | int shift; /* Current shift mask */ |
36 | int ledstate; /* Current led state */ | ||
36 | unsigned int value; /* keycode, unicode value or keysym */ | 37 | unsigned int value; /* keycode, unicode value or keysym */ |
37 | }; | 38 | }; |
38 | 39 | ||
diff --git a/include/linux/keyctl.h b/include/linux/keyctl.h index 3365945640c9..656ee6b77a4a 100644 --- a/include/linux/keyctl.h +++ b/include/linux/keyctl.h | |||
@@ -49,5 +49,6 @@ | |||
49 | #define KEYCTL_SET_REQKEY_KEYRING 14 /* set default request-key keyring */ | 49 | #define KEYCTL_SET_REQKEY_KEYRING 14 /* set default request-key keyring */ |
50 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ | 50 | #define KEYCTL_SET_TIMEOUT 15 /* set key timeout */ |
51 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ | 51 | #define KEYCTL_ASSUME_AUTHORITY 16 /* assume request_key() authorisation */ |
52 | #define KEYCTL_GET_SECURITY 17 /* get key security label */ | ||
52 | 53 | ||
53 | #endif /* _LINUX_KEYCTL_H */ | 54 | #endif /* _LINUX_KEYCTL_H */ |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 0f28486f6360..1036631ff4fa 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -173,6 +173,13 @@ struct kretprobe_blackpoint { | |||
173 | const char *name; | 173 | const char *name; |
174 | void *addr; | 174 | void *addr; |
175 | }; | 175 | }; |
176 | |||
177 | struct kprobe_blackpoint { | ||
178 | const char *name; | ||
179 | unsigned long start_addr; | ||
180 | unsigned long range; | ||
181 | }; | ||
182 | |||
176 | extern struct kretprobe_blackpoint kretprobe_blacklist[]; | 183 | extern struct kretprobe_blackpoint kretprobe_blacklist[]; |
177 | 184 | ||
178 | static inline void kretprobe_assert(struct kretprobe_instance *ri, | 185 | static inline void kretprobe_assert(struct kretprobe_instance *ri, |
@@ -227,15 +234,21 @@ static inline struct kprobe_ctlblk *get_kprobe_ctlblk(void) | |||
227 | 234 | ||
228 | int register_kprobe(struct kprobe *p); | 235 | int register_kprobe(struct kprobe *p); |
229 | void unregister_kprobe(struct kprobe *p); | 236 | void unregister_kprobe(struct kprobe *p); |
237 | int register_kprobes(struct kprobe **kps, int num); | ||
238 | void unregister_kprobes(struct kprobe **kps, int num); | ||
230 | int setjmp_pre_handler(struct kprobe *, struct pt_regs *); | 239 | int setjmp_pre_handler(struct kprobe *, struct pt_regs *); |
231 | int longjmp_break_handler(struct kprobe *, struct pt_regs *); | 240 | int longjmp_break_handler(struct kprobe *, struct pt_regs *); |
232 | int register_jprobe(struct jprobe *p); | 241 | int register_jprobe(struct jprobe *p); |
233 | void unregister_jprobe(struct jprobe *p); | 242 | void unregister_jprobe(struct jprobe *p); |
243 | int register_jprobes(struct jprobe **jps, int num); | ||
244 | void unregister_jprobes(struct jprobe **jps, int num); | ||
234 | void jprobe_return(void); | 245 | void jprobe_return(void); |
235 | unsigned long arch_deref_entry_point(void *); | 246 | unsigned long arch_deref_entry_point(void *); |
236 | 247 | ||
237 | int register_kretprobe(struct kretprobe *rp); | 248 | int register_kretprobe(struct kretprobe *rp); |
238 | void unregister_kretprobe(struct kretprobe *rp); | 249 | void unregister_kretprobe(struct kretprobe *rp); |
250 | int register_kretprobes(struct kretprobe **rps, int num); | ||
251 | void unregister_kretprobes(struct kretprobe **rps, int num); | ||
239 | 252 | ||
240 | void kprobe_flush_task(struct task_struct *tk); | 253 | void kprobe_flush_task(struct task_struct *tk); |
241 | void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); | 254 | void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head); |
@@ -254,16 +267,30 @@ static inline int register_kprobe(struct kprobe *p) | |||
254 | { | 267 | { |
255 | return -ENOSYS; | 268 | return -ENOSYS; |
256 | } | 269 | } |
270 | static inline int register_kprobes(struct kprobe **kps, int num) | ||
271 | { | ||
272 | return -ENOSYS; | ||
273 | } | ||
257 | static inline void unregister_kprobe(struct kprobe *p) | 274 | static inline void unregister_kprobe(struct kprobe *p) |
258 | { | 275 | { |
259 | } | 276 | } |
277 | static inline void unregister_kprobes(struct kprobe **kps, int num) | ||
278 | { | ||
279 | } | ||
260 | static inline int register_jprobe(struct jprobe *p) | 280 | static inline int register_jprobe(struct jprobe *p) |
261 | { | 281 | { |
262 | return -ENOSYS; | 282 | return -ENOSYS; |
263 | } | 283 | } |
284 | static inline int register_jprobes(struct jprobe **jps, int num) | ||
285 | { | ||
286 | return -ENOSYS; | ||
287 | } | ||
264 | static inline void unregister_jprobe(struct jprobe *p) | 288 | static inline void unregister_jprobe(struct jprobe *p) |
265 | { | 289 | { |
266 | } | 290 | } |
291 | static inline void unregister_jprobes(struct jprobe **jps, int num) | ||
292 | { | ||
293 | } | ||
267 | static inline void jprobe_return(void) | 294 | static inline void jprobe_return(void) |
268 | { | 295 | { |
269 | } | 296 | } |
@@ -271,9 +298,16 @@ static inline int register_kretprobe(struct kretprobe *rp) | |||
271 | { | 298 | { |
272 | return -ENOSYS; | 299 | return -ENOSYS; |
273 | } | 300 | } |
301 | static inline int register_kretprobes(struct kretprobe **rps, int num) | ||
302 | { | ||
303 | return -ENOSYS; | ||
304 | } | ||
274 | static inline void unregister_kretprobe(struct kretprobe *rp) | 305 | static inline void unregister_kretprobe(struct kretprobe *rp) |
275 | { | 306 | { |
276 | } | 307 | } |
308 | static inline void unregister_kretprobes(struct kretprobe **rps, int num) | ||
309 | { | ||
310 | } | ||
277 | static inline void kprobe_flush_task(struct task_struct *tk) | 311 | static inline void kprobe_flush_task(struct task_struct *tk) |
278 | { | 312 | { |
279 | } | 313 | } |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index c1ec04fd000d..a281afeddfbb 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -8,11 +8,18 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <asm/types.h> | 10 | #include <asm/types.h> |
11 | #include <linux/compiler.h> | ||
11 | #include <linux/ioctl.h> | 12 | #include <linux/ioctl.h> |
12 | #include <asm/kvm.h> | 13 | #include <asm/kvm.h> |
13 | 14 | ||
14 | #define KVM_API_VERSION 12 | 15 | #define KVM_API_VERSION 12 |
15 | 16 | ||
17 | /* for KVM_TRACE_ENABLE */ | ||
18 | struct kvm_user_trace_setup { | ||
19 | __u32 buf_size; /* sub_buffer size of each per-cpu */ | ||
20 | __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ | ||
21 | }; | ||
22 | |||
16 | /* for KVM_CREATE_MEMORY_REGION */ | 23 | /* for KVM_CREATE_MEMORY_REGION */ |
17 | struct kvm_memory_region { | 24 | struct kvm_memory_region { |
18 | __u32 slot; | 25 | __u32 slot; |
@@ -73,6 +80,9 @@ struct kvm_irqchip { | |||
73 | #define KVM_EXIT_INTR 10 | 80 | #define KVM_EXIT_INTR 10 |
74 | #define KVM_EXIT_SET_TPR 11 | 81 | #define KVM_EXIT_SET_TPR 11 |
75 | #define KVM_EXIT_TPR_ACCESS 12 | 82 | #define KVM_EXIT_TPR_ACCESS 12 |
83 | #define KVM_EXIT_S390_SIEIC 13 | ||
84 | #define KVM_EXIT_S390_RESET 14 | ||
85 | #define KVM_EXIT_DCR 15 | ||
76 | 86 | ||
77 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ | 87 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
78 | struct kvm_run { | 88 | struct kvm_run { |
@@ -137,6 +147,27 @@ struct kvm_run { | |||
137 | __u32 is_write; | 147 | __u32 is_write; |
138 | __u32 pad; | 148 | __u32 pad; |
139 | } tpr_access; | 149 | } tpr_access; |
150 | /* KVM_EXIT_S390_SIEIC */ | ||
151 | struct { | ||
152 | __u8 icptcode; | ||
153 | __u64 mask; /* psw upper half */ | ||
154 | __u64 addr; /* psw lower half */ | ||
155 | __u16 ipa; | ||
156 | __u32 ipb; | ||
157 | } s390_sieic; | ||
158 | /* KVM_EXIT_S390_RESET */ | ||
159 | #define KVM_S390_RESET_POR 1 | ||
160 | #define KVM_S390_RESET_CLEAR 2 | ||
161 | #define KVM_S390_RESET_SUBSYSTEM 4 | ||
162 | #define KVM_S390_RESET_CPU_INIT 8 | ||
163 | #define KVM_S390_RESET_IPL 16 | ||
164 | __u64 s390_reset_flags; | ||
165 | /* KVM_EXIT_DCR */ | ||
166 | struct { | ||
167 | __u32 dcrn; | ||
168 | __u32 data; | ||
169 | __u8 is_write; | ||
170 | } dcr; | ||
140 | /* Fix the size of the union. */ | 171 | /* Fix the size of the union. */ |
141 | char padding[256]; | 172 | char padding[256]; |
142 | }; | 173 | }; |
@@ -204,6 +235,74 @@ struct kvm_vapic_addr { | |||
204 | __u64 vapic_addr; | 235 | __u64 vapic_addr; |
205 | }; | 236 | }; |
206 | 237 | ||
238 | /* for KVM_SET_MPSTATE */ | ||
239 | |||
240 | #define KVM_MP_STATE_RUNNABLE 0 | ||
241 | #define KVM_MP_STATE_UNINITIALIZED 1 | ||
242 | #define KVM_MP_STATE_INIT_RECEIVED 2 | ||
243 | #define KVM_MP_STATE_HALTED 3 | ||
244 | #define KVM_MP_STATE_SIPI_RECEIVED 4 | ||
245 | |||
246 | struct kvm_mp_state { | ||
247 | __u32 mp_state; | ||
248 | }; | ||
249 | |||
250 | struct kvm_s390_psw { | ||
251 | __u64 mask; | ||
252 | __u64 addr; | ||
253 | }; | ||
254 | |||
255 | /* valid values for type in kvm_s390_interrupt */ | ||
256 | #define KVM_S390_SIGP_STOP 0xfffe0000u | ||
257 | #define KVM_S390_PROGRAM_INT 0xfffe0001u | ||
258 | #define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u | ||
259 | #define KVM_S390_RESTART 0xfffe0003u | ||
260 | #define KVM_S390_INT_VIRTIO 0xffff2603u | ||
261 | #define KVM_S390_INT_SERVICE 0xffff2401u | ||
262 | #define KVM_S390_INT_EMERGENCY 0xffff1201u | ||
263 | |||
264 | struct kvm_s390_interrupt { | ||
265 | __u32 type; | ||
266 | __u32 parm; | ||
267 | __u64 parm64; | ||
268 | }; | ||
269 | |||
270 | #define KVM_TRC_SHIFT 16 | ||
271 | /* | ||
272 | * kvm trace categories | ||
273 | */ | ||
274 | #define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT) | ||
275 | #define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */ | ||
276 | |||
277 | /* | ||
278 | * kvm trace action | ||
279 | */ | ||
280 | #define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01) | ||
281 | #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) | ||
282 | #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) | ||
283 | |||
284 | #define KVM_TRC_HEAD_SIZE 12 | ||
285 | #define KVM_TRC_CYCLE_SIZE 8 | ||
286 | #define KVM_TRC_EXTRA_MAX 7 | ||
287 | |||
288 | /* This structure represents a single trace buffer record. */ | ||
289 | struct kvm_trace_rec { | ||
290 | __u32 event:28; | ||
291 | __u32 extra_u32:3; | ||
292 | __u32 cycle_in:1; | ||
293 | __u32 pid; | ||
294 | __u32 vcpu_id; | ||
295 | union { | ||
296 | struct { | ||
297 | __u32 cycle_lo, cycle_hi; | ||
298 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
299 | } cycle; | ||
300 | struct { | ||
301 | __u32 extra_u32[KVM_TRC_EXTRA_MAX]; | ||
302 | } nocycle; | ||
303 | } u; | ||
304 | }; | ||
305 | |||
207 | #define KVMIO 0xAE | 306 | #define KVMIO 0xAE |
208 | 307 | ||
209 | /* | 308 | /* |
@@ -212,6 +311,8 @@ struct kvm_vapic_addr { | |||
212 | #define KVM_GET_API_VERSION _IO(KVMIO, 0x00) | 311 | #define KVM_GET_API_VERSION _IO(KVMIO, 0x00) |
213 | #define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ | 312 | #define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ |
214 | #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) | 313 | #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) |
314 | |||
315 | #define KVM_S390_ENABLE_SIE _IO(KVMIO, 0x06) | ||
215 | /* | 316 | /* |
216 | * Check if a kvm extension is available. Argument is extension number, | 317 | * Check if a kvm extension is available. Argument is extension number, |
217 | * return is 1 (yes) or 0 (no, sorry). | 318 | * return is 1 (yes) or 0 (no, sorry). |
@@ -222,7 +323,12 @@ struct kvm_vapic_addr { | |||
222 | */ | 323 | */ |
223 | #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ | 324 | #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ |
224 | #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) | 325 | #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) |
225 | 326 | /* | |
327 | * ioctls for kvm trace | ||
328 | */ | ||
329 | #define KVM_TRACE_ENABLE _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) | ||
330 | #define KVM_TRACE_PAUSE _IO(KVMIO, 0x07) | ||
331 | #define KVM_TRACE_DISABLE _IO(KVMIO, 0x08) | ||
226 | /* | 332 | /* |
227 | * Extension capability list. | 333 | * Extension capability list. |
228 | */ | 334 | */ |
@@ -233,6 +339,13 @@ struct kvm_vapic_addr { | |||
233 | #define KVM_CAP_SET_TSS_ADDR 4 | 339 | #define KVM_CAP_SET_TSS_ADDR 4 |
234 | #define KVM_CAP_VAPIC 6 | 340 | #define KVM_CAP_VAPIC 6 |
235 | #define KVM_CAP_EXT_CPUID 7 | 341 | #define KVM_CAP_EXT_CPUID 7 |
342 | #define KVM_CAP_CLOCKSOURCE 8 | ||
343 | #define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */ | ||
344 | #define KVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */ | ||
345 | #define KVM_CAP_PIT 11 | ||
346 | #define KVM_CAP_NOP_IO_DELAY 12 | ||
347 | #define KVM_CAP_PV_MMU 13 | ||
348 | #define KVM_CAP_MP_STATE 14 | ||
236 | 349 | ||
237 | /* | 350 | /* |
238 | * ioctls for VM fds | 351 | * ioctls for VM fds |
@@ -255,6 +368,9 @@ struct kvm_vapic_addr { | |||
255 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) | 368 | #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) |
256 | #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) | 369 | #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) |
257 | #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) | 370 | #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) |
371 | #define KVM_CREATE_PIT _IO(KVMIO, 0x64) | ||
372 | #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) | ||
373 | #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) | ||
258 | 374 | ||
259 | /* | 375 | /* |
260 | * ioctls for vcpu fds | 376 | * ioctls for vcpu fds |
@@ -281,5 +397,17 @@ struct kvm_vapic_addr { | |||
281 | #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) | 397 | #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) |
282 | /* Available with KVM_CAP_VAPIC */ | 398 | /* Available with KVM_CAP_VAPIC */ |
283 | #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) | 399 | #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) |
400 | /* valid for virtual machine (for floating interrupt)_and_ vcpu */ | ||
401 | #define KVM_S390_INTERRUPT _IOW(KVMIO, 0x94, struct kvm_s390_interrupt) | ||
402 | /* store status for s390 */ | ||
403 | #define KVM_S390_STORE_STATUS_NOADDR (-1ul) | ||
404 | #define KVM_S390_STORE_STATUS_PREFIXED (-2ul) | ||
405 | #define KVM_S390_STORE_STATUS _IOW(KVMIO, 0x95, unsigned long) | ||
406 | /* initial ipl psw for s390 */ | ||
407 | #define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) | ||
408 | /* initial reset for s390 */ | ||
409 | #define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) | ||
410 | #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) | ||
411 | #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) | ||
284 | 412 | ||
285 | #endif | 413 | #endif |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 928b0d59e9ba..398978972b7a 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <linux/preempt.h> | 17 | #include <linux/preempt.h> |
18 | #include <linux/marker.h> | ||
18 | #include <asm/signal.h> | 19 | #include <asm/signal.h> |
19 | 20 | ||
20 | #include <linux/kvm.h> | 21 | #include <linux/kvm.h> |
@@ -24,29 +25,18 @@ | |||
24 | 25 | ||
25 | #include <asm/kvm_host.h> | 26 | #include <asm/kvm_host.h> |
26 | 27 | ||
27 | #define KVM_MAX_VCPUS 4 | ||
28 | #define KVM_MEMORY_SLOTS 8 | ||
29 | /* memory slots that does not exposed to userspace */ | ||
30 | #define KVM_PRIVATE_MEM_SLOTS 4 | ||
31 | |||
32 | #define KVM_PIO_PAGE_OFFSET 1 | ||
33 | |||
34 | /* | 28 | /* |
35 | * vcpu->requests bit members | 29 | * vcpu->requests bit members |
36 | */ | 30 | */ |
37 | #define KVM_REQ_TLB_FLUSH 0 | 31 | #define KVM_REQ_TLB_FLUSH 0 |
38 | #define KVM_REQ_MIGRATE_TIMER 1 | 32 | #define KVM_REQ_MIGRATE_TIMER 1 |
39 | #define KVM_REQ_REPORT_TPR_ACCESS 2 | 33 | #define KVM_REQ_REPORT_TPR_ACCESS 2 |
34 | #define KVM_REQ_MMU_RELOAD 3 | ||
35 | #define KVM_REQ_TRIPLE_FAULT 4 | ||
40 | 36 | ||
41 | struct kvm_vcpu; | 37 | struct kvm_vcpu; |
42 | extern struct kmem_cache *kvm_vcpu_cache; | 38 | extern struct kmem_cache *kvm_vcpu_cache; |
43 | 39 | ||
44 | struct kvm_guest_debug { | ||
45 | int enabled; | ||
46 | unsigned long bp[4]; | ||
47 | int singlestep; | ||
48 | }; | ||
49 | |||
50 | /* | 40 | /* |
51 | * It would be nice to use something smarter than a linear search, TBD... | 41 | * It would be nice to use something smarter than a linear search, TBD... |
52 | * Thankfully we dont expect many devices to register (famous last words :), | 42 | * Thankfully we dont expect many devices to register (famous last words :), |
@@ -67,7 +57,9 @@ void kvm_io_bus_register_dev(struct kvm_io_bus *bus, | |||
67 | 57 | ||
68 | struct kvm_vcpu { | 58 | struct kvm_vcpu { |
69 | struct kvm *kvm; | 59 | struct kvm *kvm; |
60 | #ifdef CONFIG_PREEMPT_NOTIFIERS | ||
70 | struct preempt_notifier preempt_notifier; | 61 | struct preempt_notifier preempt_notifier; |
62 | #endif | ||
71 | int vcpu_id; | 63 | int vcpu_id; |
72 | struct mutex mutex; | 64 | struct mutex mutex; |
73 | int cpu; | 65 | int cpu; |
@@ -100,6 +92,10 @@ struct kvm_memory_slot { | |||
100 | unsigned long flags; | 92 | unsigned long flags; |
101 | unsigned long *rmap; | 93 | unsigned long *rmap; |
102 | unsigned long *dirty_bitmap; | 94 | unsigned long *dirty_bitmap; |
95 | struct { | ||
96 | unsigned long rmap_pde; | ||
97 | int write_count; | ||
98 | } *lpage_info; | ||
103 | unsigned long userspace_addr; | 99 | unsigned long userspace_addr; |
104 | int user_alloc; | 100 | int user_alloc; |
105 | }; | 101 | }; |
@@ -114,11 +110,11 @@ struct kvm { | |||
114 | KVM_PRIVATE_MEM_SLOTS]; | 110 | KVM_PRIVATE_MEM_SLOTS]; |
115 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; | 111 | struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; |
116 | struct list_head vm_list; | 112 | struct list_head vm_list; |
117 | struct file *filp; | ||
118 | struct kvm_io_bus mmio_bus; | 113 | struct kvm_io_bus mmio_bus; |
119 | struct kvm_io_bus pio_bus; | 114 | struct kvm_io_bus pio_bus; |
120 | struct kvm_vm_stat stat; | 115 | struct kvm_vm_stat stat; |
121 | struct kvm_arch arch; | 116 | struct kvm_arch arch; |
117 | atomic_t users_count; | ||
122 | }; | 118 | }; |
123 | 119 | ||
124 | /* The guest did something we don't support. */ | 120 | /* The guest did something we don't support. */ |
@@ -145,14 +141,19 @@ int kvm_init(void *opaque, unsigned int vcpu_size, | |||
145 | struct module *module); | 141 | struct module *module); |
146 | void kvm_exit(void); | 142 | void kvm_exit(void); |
147 | 143 | ||
144 | void kvm_get_kvm(struct kvm *kvm); | ||
145 | void kvm_put_kvm(struct kvm *kvm); | ||
146 | |||
148 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) | 147 | #define HPA_MSB ((sizeof(hpa_t) * 8) - 1) |
149 | #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) | 148 | #define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) |
150 | static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } | 149 | static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } |
151 | struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva); | 150 | struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva); |
152 | 151 | ||
153 | extern struct page *bad_page; | 152 | extern struct page *bad_page; |
153 | extern pfn_t bad_pfn; | ||
154 | 154 | ||
155 | int is_error_page(struct page *page); | 155 | int is_error_page(struct page *page); |
156 | int is_error_pfn(pfn_t pfn); | ||
156 | int kvm_is_error_hva(unsigned long addr); | 157 | int kvm_is_error_hva(unsigned long addr); |
157 | int kvm_set_memory_region(struct kvm *kvm, | 158 | int kvm_set_memory_region(struct kvm *kvm, |
158 | struct kvm_userspace_memory_region *mem, | 159 | struct kvm_userspace_memory_region *mem, |
@@ -166,8 +167,19 @@ int kvm_arch_set_memory_region(struct kvm *kvm, | |||
166 | int user_alloc); | 167 | int user_alloc); |
167 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); | 168 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn); |
168 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); | 169 | struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); |
170 | unsigned long gfn_to_hva(struct kvm *kvm, gfn_t gfn); | ||
169 | void kvm_release_page_clean(struct page *page); | 171 | void kvm_release_page_clean(struct page *page); |
170 | void kvm_release_page_dirty(struct page *page); | 172 | void kvm_release_page_dirty(struct page *page); |
173 | void kvm_set_page_dirty(struct page *page); | ||
174 | void kvm_set_page_accessed(struct page *page); | ||
175 | |||
176 | pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn); | ||
177 | void kvm_release_pfn_dirty(pfn_t); | ||
178 | void kvm_release_pfn_clean(pfn_t pfn); | ||
179 | void kvm_set_pfn_dirty(pfn_t pfn); | ||
180 | void kvm_set_pfn_accessed(pfn_t pfn); | ||
181 | void kvm_get_pfn(pfn_t pfn); | ||
182 | |||
171 | int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset, | 183 | int kvm_read_guest_page(struct kvm *kvm, gfn_t gfn, void *data, int offset, |
172 | int len); | 184 | int len); |
173 | int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data, | 185 | int kvm_read_guest_atomic(struct kvm *kvm, gpa_t gpa, void *data, |
@@ -188,6 +200,7 @@ void kvm_resched(struct kvm_vcpu *vcpu); | |||
188 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); | 200 | void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); |
189 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); | 201 | void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); |
190 | void kvm_flush_remote_tlbs(struct kvm *kvm); | 202 | void kvm_flush_remote_tlbs(struct kvm *kvm); |
203 | void kvm_reload_remote_mmus(struct kvm *kvm); | ||
191 | 204 | ||
192 | long kvm_arch_dev_ioctl(struct file *filp, | 205 | long kvm_arch_dev_ioctl(struct file *filp, |
193 | unsigned int ioctl, unsigned long arg); | 206 | unsigned int ioctl, unsigned long arg); |
@@ -223,6 +236,10 @@ int kvm_arch_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu, | |||
223 | struct kvm_sregs *sregs); | 236 | struct kvm_sregs *sregs); |
224 | int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | 237 | int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, |
225 | struct kvm_sregs *sregs); | 238 | struct kvm_sregs *sregs); |
239 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | ||
240 | struct kvm_mp_state *mp_state); | ||
241 | int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu, | ||
242 | struct kvm_mp_state *mp_state); | ||
226 | int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, | 243 | int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu, |
227 | struct kvm_debug_guest *dbg); | 244 | struct kvm_debug_guest *dbg); |
228 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); | 245 | int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); |
@@ -255,6 +272,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm); | |||
255 | 272 | ||
256 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); | 273 | int kvm_cpu_get_interrupt(struct kvm_vcpu *v); |
257 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); | 274 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v); |
275 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); | ||
258 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); | 276 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu); |
259 | 277 | ||
260 | static inline void kvm_guest_enter(void) | 278 | static inline void kvm_guest_enter(void) |
@@ -296,5 +314,18 @@ struct kvm_stats_debugfs_item { | |||
296 | struct dentry *dentry; | 314 | struct dentry *dentry; |
297 | }; | 315 | }; |
298 | extern struct kvm_stats_debugfs_item debugfs_entries[]; | 316 | extern struct kvm_stats_debugfs_item debugfs_entries[]; |
317 | extern struct dentry *kvm_debugfs_dir; | ||
318 | |||
319 | #ifdef CONFIG_KVM_TRACE | ||
320 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg); | ||
321 | void kvm_trace_cleanup(void); | ||
322 | #else | ||
323 | static inline | ||
324 | int kvm_trace_ioctl(unsigned int ioctl, unsigned long arg) | ||
325 | { | ||
326 | return -EINVAL; | ||
327 | } | ||
328 | #define kvm_trace_cleanup() ((void)0) | ||
329 | #endif | ||
299 | 330 | ||
300 | #endif | 331 | #endif |
diff --git a/include/linux/kvm_para.h b/include/linux/kvm_para.h index 5497aac0d2f8..3ddce03766ca 100644 --- a/include/linux/kvm_para.h +++ b/include/linux/kvm_para.h | |||
@@ -11,8 +11,11 @@ | |||
11 | 11 | ||
12 | /* Return values for hypercalls */ | 12 | /* Return values for hypercalls */ |
13 | #define KVM_ENOSYS 1000 | 13 | #define KVM_ENOSYS 1000 |
14 | #define KVM_EFAULT EFAULT | ||
15 | #define KVM_E2BIG E2BIG | ||
14 | 16 | ||
15 | #define KVM_HC_VAPIC_POLL_IRQ 1 | 17 | #define KVM_HC_VAPIC_POLL_IRQ 1 |
18 | #define KVM_HC_MMU_OP 2 | ||
16 | 19 | ||
17 | /* | 20 | /* |
18 | * hypercalls use architecture specific | 21 | * hypercalls use architecture specific |
@@ -20,6 +23,12 @@ | |||
20 | #include <asm/kvm_para.h> | 23 | #include <asm/kvm_para.h> |
21 | 24 | ||
22 | #ifdef __KERNEL__ | 25 | #ifdef __KERNEL__ |
26 | #ifdef CONFIG_KVM_GUEST | ||
27 | void __init kvm_guest_init(void); | ||
28 | #else | ||
29 | #define kvm_guest_init() do { } while (0) | ||
30 | #endif | ||
31 | |||
23 | static inline int kvm_para_has_feature(unsigned int feature) | 32 | static inline int kvm_para_has_feature(unsigned int feature) |
24 | { | 33 | { |
25 | if (kvm_arch_para_features() & (1UL << feature)) | 34 | if (kvm_arch_para_features() & (1UL << feature)) |
diff --git a/include/linux/kvm_types.h b/include/linux/kvm_types.h index 1c4e46decb22..9b6f395c9625 100644 --- a/include/linux/kvm_types.h +++ b/include/linux/kvm_types.h | |||
@@ -38,6 +38,8 @@ typedef unsigned long hva_t; | |||
38 | typedef u64 hpa_t; | 38 | typedef u64 hpa_t; |
39 | typedef unsigned long hfn_t; | 39 | typedef unsigned long hfn_t; |
40 | 40 | ||
41 | typedef hfn_t pfn_t; | ||
42 | |||
41 | struct kvm_pio_request { | 43 | struct kvm_pio_request { |
42 | unsigned long count; | 44 | unsigned long count; |
43 | int cur_count; | 45 | int cur_count; |
diff --git a/include/linux/leds.h b/include/linux/leds.h index b07e3d400bd6..519df72e939d 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
@@ -35,8 +35,11 @@ struct led_classdev { | |||
35 | #define LED_SUSPENDED (1 << 0) | 35 | #define LED_SUSPENDED (1 << 0) |
36 | 36 | ||
37 | /* Set LED brightness level */ | 37 | /* Set LED brightness level */ |
38 | /* Must not sleep, use a workqueue if needed */ | ||
38 | void (*brightness_set)(struct led_classdev *led_cdev, | 39 | void (*brightness_set)(struct led_classdev *led_cdev, |
39 | enum led_brightness brightness); | 40 | enum led_brightness brightness); |
41 | /* Get LED brightness level */ | ||
42 | enum led_brightness (*brightness_get)(struct led_classdev *led_cdev); | ||
40 | 43 | ||
41 | /* Activate hardware accelerated blink */ | 44 | /* Activate hardware accelerated blink */ |
42 | int (*blink_set)(struct led_classdev *led_cdev, | 45 | int (*blink_set)(struct led_classdev *led_cdev, |
@@ -126,6 +129,9 @@ struct gpio_led { | |||
126 | struct gpio_led_platform_data { | 129 | struct gpio_led_platform_data { |
127 | int num_leds; | 130 | int num_leds; |
128 | struct gpio_led *leds; | 131 | struct gpio_led *leds; |
132 | int (*gpio_blink_set)(unsigned gpio, | ||
133 | unsigned long *delay_on, | ||
134 | unsigned long *delay_off); | ||
129 | }; | 135 | }; |
130 | 136 | ||
131 | 137 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index 07ed56f7a767..395a523d8c30 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -847,7 +847,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap) | |||
847 | return ap->ops == &ata_dummy_port_ops; | 847 | return ap->ops == &ata_dummy_port_ops; |
848 | } | 848 | } |
849 | 849 | ||
850 | extern void sata_print_link_status(struct ata_link *link); | ||
851 | extern void ata_port_probe(struct ata_port *); | 850 | extern void ata_port_probe(struct ata_port *); |
852 | extern int sata_set_spd(struct ata_link *link); | 851 | extern int sata_set_spd(struct ata_link *link); |
853 | extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); | 852 | extern int ata_std_prereset(struct ata_link *link, unsigned long deadline); |
diff --git a/include/linux/list.h b/include/linux/list.h index dac16f99c701..7627508f1b74 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
@@ -319,7 +319,16 @@ static inline int list_empty_careful(const struct list_head *head) | |||
319 | return (next == head) && (next == head->prev); | 319 | return (next == head) && (next == head->prev); |
320 | } | 320 | } |
321 | 321 | ||
322 | static inline void __list_splice(struct list_head *list, | 322 | /** |
323 | * list_is_singular - tests whether a list has just one entry. | ||
324 | * @head: the list to test. | ||
325 | */ | ||
326 | static inline int list_is_singular(const struct list_head *head) | ||
327 | { | ||
328 | return !list_empty(head) && (head->next == head->prev); | ||
329 | } | ||
330 | |||
331 | static inline void __list_splice(const struct list_head *list, | ||
323 | struct list_head *head) | 332 | struct list_head *head) |
324 | { | 333 | { |
325 | struct list_head *first = list->next; | 334 | struct list_head *first = list->next; |
@@ -338,7 +347,8 @@ static inline void __list_splice(struct list_head *list, | |||
338 | * @list: the new list to add. | 347 | * @list: the new list to add. |
339 | * @head: the place to add it in the first list. | 348 | * @head: the place to add it in the first list. |
340 | */ | 349 | */ |
341 | static inline void list_splice(struct list_head *list, struct list_head *head) | 350 | static inline void list_splice(const struct list_head *list, |
351 | struct list_head *head) | ||
342 | { | 352 | { |
343 | if (!list_empty(list)) | 353 | if (!list_empty(list)) |
344 | __list_splice(list, head); | 354 | __list_splice(list, head); |
diff --git a/include/linux/lmb.h b/include/linux/lmb.h index 271153d27fba..c46c89505dac 100644 --- a/include/linux/lmb.h +++ b/include/linux/lmb.h | |||
@@ -40,7 +40,8 @@ extern struct lmb lmb; | |||
40 | 40 | ||
41 | extern void __init lmb_init(void); | 41 | extern void __init lmb_init(void); |
42 | extern void __init lmb_analyze(void); | 42 | extern void __init lmb_analyze(void); |
43 | extern long __init lmb_add(u64 base, u64 size); | 43 | extern long lmb_add(u64 base, u64 size); |
44 | extern long lmb_remove(u64 base, u64 size); | ||
44 | extern long __init lmb_reserve(u64 base, u64 size); | 45 | extern long __init lmb_reserve(u64 base, u64 size); |
45 | extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid, | 46 | extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid, |
46 | u64 (*nid_range)(u64, u64, int *)); | 47 | u64 (*nid_range)(u64, u64, int *)); |
@@ -53,6 +54,7 @@ extern u64 __init lmb_phys_mem_size(void); | |||
53 | extern u64 __init lmb_end_of_DRAM(void); | 54 | extern u64 __init lmb_end_of_DRAM(void); |
54 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); | 55 | extern void __init lmb_enforce_memory_limit(u64 memory_limit); |
55 | extern int __init lmb_is_reserved(u64 addr); | 56 | extern int __init lmb_is_reserved(u64 addr); |
57 | extern int lmb_find(struct lmb_property *res); | ||
56 | 58 | ||
57 | extern void lmb_dump_all(void); | 59 | extern void lmb_dump_all(void); |
58 | 60 | ||
diff --git a/include/linux/lockd/lockd.h b/include/linux/lockd/lockd.h index 4babb2a129ac..102d928f7206 100644 --- a/include/linux/lockd/lockd.h +++ b/include/linux/lockd/lockd.h | |||
@@ -91,6 +91,7 @@ struct nlm_wait; | |||
91 | */ | 91 | */ |
92 | #define NLMCLNT_OHSIZE ((__NEW_UTS_LEN) + 10u) | 92 | #define NLMCLNT_OHSIZE ((__NEW_UTS_LEN) + 10u) |
93 | struct nlm_rqst { | 93 | struct nlm_rqst { |
94 | atomic_t a_count; | ||
94 | unsigned int a_flags; /* initial RPC task flags */ | 95 | unsigned int a_flags; /* initial RPC task flags */ |
95 | struct nlm_host * a_host; /* host handle */ | 96 | struct nlm_host * a_host; /* host handle */ |
96 | struct nlm_args a_args; /* arguments */ | 97 | struct nlm_args a_args; /* arguments */ |
@@ -173,8 +174,10 @@ void nlmclnt_next_cookie(struct nlm_cookie *); | |||
173 | /* | 174 | /* |
174 | * Host cache | 175 | * Host cache |
175 | */ | 176 | */ |
176 | struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *, int, int, | 177 | struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin, |
177 | const char *, unsigned int); | 178 | int proto, u32 version, |
179 | const char *hostname, | ||
180 | unsigned int hostname_len); | ||
178 | struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *, | 181 | struct nlm_host *nlmsvc_lookup_host(struct svc_rqst *, const char *, |
179 | unsigned int); | 182 | unsigned int); |
180 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); | 183 | struct rpc_clnt * nlm_bind_host(struct nlm_host *); |
@@ -191,7 +194,7 @@ void nsm_release(struct nsm_handle *); | |||
191 | * This is used in garbage collection and resource reclaim | 194 | * This is used in garbage collection and resource reclaim |
192 | * A return value != 0 means destroy the lock/block/share | 195 | * A return value != 0 means destroy the lock/block/share |
193 | */ | 196 | */ |
194 | typedef int (*nlm_host_match_fn_t)(struct nlm_host *cur, struct nlm_host *ref); | 197 | typedef int (*nlm_host_match_fn_t)(void *cur, struct nlm_host *ref); |
195 | 198 | ||
196 | /* | 199 | /* |
197 | * Server-side lock handling | 200 | * Server-side lock handling |
@@ -217,8 +220,13 @@ void nlmsvc_mark_resources(void); | |||
217 | void nlmsvc_free_host_resources(struct nlm_host *); | 220 | void nlmsvc_free_host_resources(struct nlm_host *); |
218 | void nlmsvc_invalidate_all(void); | 221 | void nlmsvc_invalidate_all(void); |
219 | 222 | ||
220 | static __inline__ struct inode * | 223 | /* |
221 | nlmsvc_file_inode(struct nlm_file *file) | 224 | * Cluster failover support |
225 | */ | ||
226 | int nlmsvc_unlock_all_by_sb(struct super_block *sb); | ||
227 | int nlmsvc_unlock_all_by_ip(__be32 server_addr); | ||
228 | |||
229 | static inline struct inode *nlmsvc_file_inode(struct nlm_file *file) | ||
222 | { | 230 | { |
223 | return file->f_file->f_path.dentry->d_inode; | 231 | return file->f_file->f_path.dentry->d_inode; |
224 | } | 232 | } |
@@ -226,8 +234,8 @@ nlmsvc_file_inode(struct nlm_file *file) | |||
226 | /* | 234 | /* |
227 | * Compare two host addresses (needs modifying for ipv6) | 235 | * Compare two host addresses (needs modifying for ipv6) |
228 | */ | 236 | */ |
229 | static __inline__ int | 237 | static inline int nlm_cmp_addr(const struct sockaddr_in *sin1, |
230 | nlm_cmp_addr(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2) | 238 | const struct sockaddr_in *sin2) |
231 | { | 239 | { |
232 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; | 240 | return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr; |
233 | } | 241 | } |
@@ -236,8 +244,8 @@ nlm_cmp_addr(const struct sockaddr_in *sin1, const struct sockaddr_in *sin2) | |||
236 | * Compare two NLM locks. | 244 | * Compare two NLM locks. |
237 | * When the second lock is of type F_UNLCK, this acts like a wildcard. | 245 | * When the second lock is of type F_UNLCK, this acts like a wildcard. |
238 | */ | 246 | */ |
239 | static __inline__ int | 247 | static inline int nlm_compare_locks(const struct file_lock *fl1, |
240 | nlm_compare_locks(const struct file_lock *fl1, const struct file_lock *fl2) | 248 | const struct file_lock *fl2) |
241 | { | 249 | { |
242 | return fl1->fl_pid == fl2->fl_pid | 250 | return fl1->fl_pid == fl2->fl_pid |
243 | && fl1->fl_owner == fl2->fl_owner | 251 | && fl1->fl_owner == fl2->fl_owner |
diff --git a/include/linux/lockd/sm_inter.h b/include/linux/lockd/sm_inter.h index 22a645828f26..5a5448bdb17d 100644 --- a/include/linux/lockd/sm_inter.h +++ b/include/linux/lockd/sm_inter.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #define SM_NOTIFY 6 | 19 | #define SM_NOTIFY 6 |
20 | 20 | ||
21 | #define SM_MAXSTRLEN 1024 | 21 | #define SM_MAXSTRLEN 1024 |
22 | #define SM_PRIV_SIZE 16 | ||
22 | 23 | ||
23 | /* | 24 | /* |
24 | * Arguments for all calls to statd | 25 | * Arguments for all calls to statd |
diff --git a/include/linux/mca-legacy.h b/include/linux/mca-legacy.h index f2bb770e530a..7a3aea845902 100644 --- a/include/linux/mca-legacy.h +++ b/include/linux/mca-legacy.h | |||
@@ -34,7 +34,6 @@ | |||
34 | extern int mca_find_adapter(int id, int start); | 34 | extern int mca_find_adapter(int id, int start); |
35 | extern int mca_find_unused_adapter(int id, int start); | 35 | extern int mca_find_unused_adapter(int id, int start); |
36 | 36 | ||
37 | extern int mca_is_adapter_used(int slot); | ||
38 | extern int mca_mark_as_used(int slot); | 37 | extern int mca_mark_as_used(int slot); |
39 | extern void mca_mark_as_unused(int slot); | 38 | extern void mca_mark_as_unused(int slot); |
40 | 39 | ||
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 8b1c4295848b..e6608776bc96 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -27,9 +27,6 @@ struct mm_struct; | |||
27 | 27 | ||
28 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 28 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
29 | 29 | ||
30 | extern void mm_init_cgroup(struct mm_struct *mm, struct task_struct *p); | ||
31 | extern void mm_free_cgroup(struct mm_struct *mm); | ||
32 | |||
33 | #define page_reset_bad_cgroup(page) ((page)->page_cgroup = 0) | 30 | #define page_reset_bad_cgroup(page) ((page)->page_cgroup = 0) |
34 | 31 | ||
35 | extern struct page_cgroup *page_get_page_cgroup(struct page *page); | 32 | extern struct page_cgroup *page_get_page_cgroup(struct page *page); |
@@ -48,8 +45,10 @@ extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, | |||
48 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); | 45 | extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask); |
49 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); | 46 | int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); |
50 | 47 | ||
48 | extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p); | ||
49 | |||
51 | #define mm_match_cgroup(mm, cgroup) \ | 50 | #define mm_match_cgroup(mm, cgroup) \ |
52 | ((cgroup) == rcu_dereference((mm)->mem_cgroup)) | 51 | ((cgroup) == mem_cgroup_from_task((mm)->owner)) |
53 | 52 | ||
54 | extern int mem_cgroup_prepare_migration(struct page *page); | 53 | extern int mem_cgroup_prepare_migration(struct page *page); |
55 | extern void mem_cgroup_end_migration(struct page *page); | 54 | extern void mem_cgroup_end_migration(struct page *page); |
@@ -73,15 +72,6 @@ extern long mem_cgroup_calc_reclaim_inactive(struct mem_cgroup *mem, | |||
73 | struct zone *zone, int priority); | 72 | struct zone *zone, int priority); |
74 | 73 | ||
75 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ | 74 | #else /* CONFIG_CGROUP_MEM_RES_CTLR */ |
76 | static inline void mm_init_cgroup(struct mm_struct *mm, | ||
77 | struct task_struct *p) | ||
78 | { | ||
79 | } | ||
80 | |||
81 | static inline void mm_free_cgroup(struct mm_struct *mm) | ||
82 | { | ||
83 | } | ||
84 | |||
85 | static inline void page_reset_bad_cgroup(struct page *page) | 75 | static inline void page_reset_bad_cgroup(struct page *page) |
86 | { | 76 | { |
87 | } | 77 | } |
diff --git a/include/linux/memory.h b/include/linux/memory.h index f80e0e331cb7..2f5f8a5ef2a0 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
@@ -53,6 +53,13 @@ struct memory_notify { | |||
53 | struct notifier_block; | 53 | struct notifier_block; |
54 | struct mem_section; | 54 | struct mem_section; |
55 | 55 | ||
56 | /* | ||
57 | * Priorities for the hotplug memory callback routines (stored in decreasing | ||
58 | * order in the callback chain) | ||
59 | */ | ||
60 | #define SLAB_CALLBACK_PRI 1 | ||
61 | #define IPC_CALLBACK_PRI 10 | ||
62 | |||
56 | #ifndef CONFIG_MEMORY_HOTPLUG_SPARSE | 63 | #ifndef CONFIG_MEMORY_HOTPLUG_SPARSE |
57 | static inline int memory_dev_init(void) | 64 | static inline int memory_dev_init(void) |
58 | { | 65 | { |
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 8fee7a45736b..73e358612eaf 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
@@ -8,8 +8,18 @@ | |||
8 | struct page; | 8 | struct page; |
9 | struct zone; | 9 | struct zone; |
10 | struct pglist_data; | 10 | struct pglist_data; |
11 | struct mem_section; | ||
11 | 12 | ||
12 | #ifdef CONFIG_MEMORY_HOTPLUG | 13 | #ifdef CONFIG_MEMORY_HOTPLUG |
14 | |||
15 | /* | ||
16 | * Magic number for free bootmem. | ||
17 | * The normal smallest mapcount is -1. Here is smaller value than it. | ||
18 | */ | ||
19 | #define SECTION_INFO 0xfffffffe | ||
20 | #define MIX_INFO 0xfffffffd | ||
21 | #define NODE_INFO 0xfffffffc | ||
22 | |||
13 | /* | 23 | /* |
14 | * pgdat resizing functions | 24 | * pgdat resizing functions |
15 | */ | 25 | */ |
@@ -64,9 +74,11 @@ extern int offline_pages(unsigned long, unsigned long, unsigned long); | |||
64 | /* reasonably generic interface to expand the physical pages in a zone */ | 74 | /* reasonably generic interface to expand the physical pages in a zone */ |
65 | extern int __add_pages(struct zone *zone, unsigned long start_pfn, | 75 | extern int __add_pages(struct zone *zone, unsigned long start_pfn, |
66 | unsigned long nr_pages); | 76 | unsigned long nr_pages); |
77 | extern int __remove_pages(struct zone *zone, unsigned long start_pfn, | ||
78 | unsigned long nr_pages); | ||
67 | 79 | ||
68 | /* | 80 | /* |
69 | * Walk thorugh all memory which is registered as resource. | 81 | * Walk through all memory which is registered as resource. |
70 | * arg is (start_pfn, nr_pages, private_arg_pointer) | 82 | * arg is (start_pfn, nr_pages, private_arg_pointer) |
71 | */ | 83 | */ |
72 | extern int walk_memory_resource(unsigned long start_pfn, | 84 | extern int walk_memory_resource(unsigned long start_pfn, |
@@ -142,6 +154,18 @@ static inline void arch_refresh_nodedata(int nid, pg_data_t *pgdat) | |||
142 | #endif /* CONFIG_NUMA */ | 154 | #endif /* CONFIG_NUMA */ |
143 | #endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ | 155 | #endif /* CONFIG_HAVE_ARCH_NODEDATA_EXTENSION */ |
144 | 156 | ||
157 | #ifdef CONFIG_SPARSEMEM_VMEMMAP | ||
158 | static inline void register_page_bootmem_info_node(struct pglist_data *pgdat) | ||
159 | { | ||
160 | } | ||
161 | static inline void put_page_bootmem(struct page *page) | ||
162 | { | ||
163 | } | ||
164 | #else | ||
165 | extern void register_page_bootmem_info_node(struct pglist_data *pgdat); | ||
166 | extern void put_page_bootmem(struct page *page); | ||
167 | #endif | ||
168 | |||
145 | #else /* ! CONFIG_MEMORY_HOTPLUG */ | 169 | #else /* ! CONFIG_MEMORY_HOTPLUG */ |
146 | /* | 170 | /* |
147 | * Stub functions for when hotplug is off | 171 | * Stub functions for when hotplug is off |
@@ -169,6 +193,10 @@ static inline int mhp_notimplemented(const char *func) | |||
169 | return -ENOSYS; | 193 | return -ENOSYS; |
170 | } | 194 | } |
171 | 195 | ||
196 | static inline void register_page_bootmem_info_node(struct pglist_data *pgdat) | ||
197 | { | ||
198 | } | ||
199 | |||
172 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ | 200 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ |
173 | 201 | ||
174 | extern int add_memory(int nid, u64 start, u64 size); | 202 | extern int add_memory(int nid, u64 start, u64 size); |
@@ -176,5 +204,8 @@ extern int arch_add_memory(int nid, u64 start, u64 size); | |||
176 | extern int remove_memory(u64 start, u64 size); | 204 | extern int remove_memory(u64 start, u64 size); |
177 | extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn, | 205 | extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn, |
178 | int nr_pages); | 206 | int nr_pages); |
207 | extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms); | ||
208 | extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map, | ||
209 | unsigned long pnum); | ||
179 | 210 | ||
180 | #endif /* __LINUX_MEMORY_HOTPLUG_H */ | 211 | #endif /* __LINUX_MEMORY_HOTPLUG_H */ |
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 59c4865bc85f..3a39570b81b8 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h | |||
@@ -8,15 +8,32 @@ | |||
8 | * Copyright 2003,2004 Andi Kleen SuSE Labs | 8 | * Copyright 2003,2004 Andi Kleen SuSE Labs |
9 | */ | 9 | */ |
10 | 10 | ||
11 | /* | ||
12 | * Both the MPOL_* mempolicy mode and the MPOL_F_* optional mode flags are | ||
13 | * passed by the user to either set_mempolicy() or mbind() in an 'int' actual. | ||
14 | * The MPOL_MODE_FLAGS macro determines the legal set of optional mode flags. | ||
15 | */ | ||
16 | |||
11 | /* Policies */ | 17 | /* Policies */ |
12 | #define MPOL_DEFAULT 0 | 18 | enum { |
13 | #define MPOL_PREFERRED 1 | 19 | MPOL_DEFAULT, |
14 | #define MPOL_BIND 2 | 20 | MPOL_PREFERRED, |
15 | #define MPOL_INTERLEAVE 3 | 21 | MPOL_BIND, |
22 | MPOL_INTERLEAVE, | ||
23 | MPOL_MAX, /* always last member of enum */ | ||
24 | }; | ||
16 | 25 | ||
17 | #define MPOL_MAX MPOL_INTERLEAVE | 26 | /* Flags for set_mempolicy */ |
27 | #define MPOL_F_STATIC_NODES (1 << 15) | ||
28 | #define MPOL_F_RELATIVE_NODES (1 << 14) | ||
18 | 29 | ||
19 | /* Flags for get_mem_policy */ | 30 | /* |
31 | * MPOL_MODE_FLAGS is the union of all possible optional mode flags passed to | ||
32 | * either set_mempolicy() or mbind(). | ||
33 | */ | ||
34 | #define MPOL_MODE_FLAGS (MPOL_F_STATIC_NODES | MPOL_F_RELATIVE_NODES) | ||
35 | |||
36 | /* Flags for get_mempolicy */ | ||
20 | #define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */ | 37 | #define MPOL_F_NODE (1<<0) /* return next IL mode instead of node mask */ |
21 | #define MPOL_F_ADDR (1<<1) /* look up vma using address */ | 38 | #define MPOL_F_ADDR (1<<1) /* look up vma using address */ |
22 | #define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */ | 39 | #define MPOL_F_MEMS_ALLOWED (1<<2) /* return allowed memories */ |
@@ -27,6 +44,14 @@ | |||
27 | #define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to mapping */ | 44 | #define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to mapping */ |
28 | #define MPOL_MF_INTERNAL (1<<3) /* Internal flags start here */ | 45 | #define MPOL_MF_INTERNAL (1<<3) /* Internal flags start here */ |
29 | 46 | ||
47 | /* | ||
48 | * Internal flags that share the struct mempolicy flags word with | ||
49 | * "mode flags". These flags are allocated from bit 0 up, as they | ||
50 | * are never OR'ed into the mode in mempolicy API arguments. | ||
51 | */ | ||
52 | #define MPOL_F_SHARED (1 << 0) /* identify shared policies */ | ||
53 | #define MPOL_F_LOCAL (1 << 1) /* preferred local allocation */ | ||
54 | |||
30 | #ifdef __KERNEL__ | 55 | #ifdef __KERNEL__ |
31 | 56 | ||
32 | #include <linux/mmzone.h> | 57 | #include <linux/mmzone.h> |
@@ -35,7 +60,6 @@ | |||
35 | #include <linux/spinlock.h> | 60 | #include <linux/spinlock.h> |
36 | #include <linux/nodemask.h> | 61 | #include <linux/nodemask.h> |
37 | 62 | ||
38 | struct vm_area_struct; | ||
39 | struct mm_struct; | 63 | struct mm_struct; |
40 | 64 | ||
41 | #ifdef CONFIG_NUMA | 65 | #ifdef CONFIG_NUMA |
@@ -54,22 +78,27 @@ struct mm_struct; | |||
54 | * mmap_sem. | 78 | * mmap_sem. |
55 | * | 79 | * |
56 | * Freeing policy: | 80 | * Freeing policy: |
57 | * When policy is MPOL_BIND v.zonelist is kmalloc'ed and must be kfree'd. | 81 | * Mempolicy objects are reference counted. A mempolicy will be freed when |
58 | * All other policies don't have any external state. mpol_free() handles this. | 82 | * mpol_put() decrements the reference count to zero. |
59 | * | 83 | * |
60 | * Copying policy objects: | 84 | * Duplicating policy objects: |
61 | * For MPOL_BIND the zonelist must be always duplicated. mpol_clone() does this. | 85 | * mpol_dup() allocates a new mempolicy and copies the specified mempolicy |
86 | * to the new storage. The reference count of the new object is initialized | ||
87 | * to 1, representing the caller of mpol_dup(). | ||
62 | */ | 88 | */ |
63 | struct mempolicy { | 89 | struct mempolicy { |
64 | atomic_t refcnt; | 90 | atomic_t refcnt; |
65 | short policy; /* See MPOL_* above */ | 91 | unsigned short mode; /* See MPOL_* above */ |
92 | unsigned short flags; /* See set_mempolicy() MPOL_F_* above */ | ||
66 | union { | 93 | union { |
67 | struct zonelist *zonelist; /* bind */ | ||
68 | short preferred_node; /* preferred */ | 94 | short preferred_node; /* preferred */ |
69 | nodemask_t nodes; /* interleave */ | 95 | nodemask_t nodes; /* interleave/bind */ |
70 | /* undefined for default */ | 96 | /* undefined for default */ |
71 | } v; | 97 | } v; |
72 | nodemask_t cpuset_mems_allowed; /* mempolicy relative to these nodes */ | 98 | union { |
99 | nodemask_t cpuset_mems_allowed; /* relative to these nodes */ | ||
100 | nodemask_t user_nodemask; /* nodemask passed by user */ | ||
101 | } w; | ||
73 | }; | 102 | }; |
74 | 103 | ||
75 | /* | 104 | /* |
@@ -77,18 +106,43 @@ struct mempolicy { | |||
77 | * The default fast path of a NULL MPOL_DEFAULT policy is always inlined. | 106 | * The default fast path of a NULL MPOL_DEFAULT policy is always inlined. |
78 | */ | 107 | */ |
79 | 108 | ||
80 | extern void __mpol_free(struct mempolicy *pol); | 109 | extern void __mpol_put(struct mempolicy *pol); |
81 | static inline void mpol_free(struct mempolicy *pol) | 110 | static inline void mpol_put(struct mempolicy *pol) |
82 | { | 111 | { |
83 | if (pol) | 112 | if (pol) |
84 | __mpol_free(pol); | 113 | __mpol_put(pol); |
85 | } | 114 | } |
86 | 115 | ||
87 | extern struct mempolicy *__mpol_copy(struct mempolicy *pol); | 116 | /* |
88 | static inline struct mempolicy *mpol_copy(struct mempolicy *pol) | 117 | * Does mempolicy pol need explicit unref after use? |
118 | * Currently only needed for shared policies. | ||
119 | */ | ||
120 | static inline int mpol_needs_cond_ref(struct mempolicy *pol) | ||
121 | { | ||
122 | return (pol && (pol->flags & MPOL_F_SHARED)); | ||
123 | } | ||
124 | |||
125 | static inline void mpol_cond_put(struct mempolicy *pol) | ||
126 | { | ||
127 | if (mpol_needs_cond_ref(pol)) | ||
128 | __mpol_put(pol); | ||
129 | } | ||
130 | |||
131 | extern struct mempolicy *__mpol_cond_copy(struct mempolicy *tompol, | ||
132 | struct mempolicy *frompol); | ||
133 | static inline struct mempolicy *mpol_cond_copy(struct mempolicy *tompol, | ||
134 | struct mempolicy *frompol) | ||
135 | { | ||
136 | if (!frompol) | ||
137 | return frompol; | ||
138 | return __mpol_cond_copy(tompol, frompol); | ||
139 | } | ||
140 | |||
141 | extern struct mempolicy *__mpol_dup(struct mempolicy *pol); | ||
142 | static inline struct mempolicy *mpol_dup(struct mempolicy *pol) | ||
89 | { | 143 | { |
90 | if (pol) | 144 | if (pol) |
91 | pol = __mpol_copy(pol); | 145 | pol = __mpol_dup(pol); |
92 | return pol; | 146 | return pol; |
93 | } | 147 | } |
94 | 148 | ||
@@ -108,11 +162,6 @@ static inline int mpol_equal(struct mempolicy *a, struct mempolicy *b) | |||
108 | return 1; | 162 | return 1; |
109 | return __mpol_equal(a, b); | 163 | return __mpol_equal(a, b); |
110 | } | 164 | } |
111 | #define vma_mpol_equal(a,b) mpol_equal(vma_policy(a), vma_policy(b)) | ||
112 | |||
113 | /* Could later add inheritance of the process policy here. */ | ||
114 | |||
115 | #define mpol_set_vma_default(vma) ((vma)->vm_policy = NULL) | ||
116 | 165 | ||
117 | /* | 166 | /* |
118 | * Tree of shared policies for a shared memory region. | 167 | * Tree of shared policies for a shared memory region. |
@@ -133,8 +182,7 @@ struct shared_policy { | |||
133 | spinlock_t lock; | 182 | spinlock_t lock; |
134 | }; | 183 | }; |
135 | 184 | ||
136 | void mpol_shared_policy_init(struct shared_policy *info, int policy, | 185 | void mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol); |
137 | nodemask_t *nodes); | ||
138 | int mpol_set_shared_policy(struct shared_policy *info, | 186 | int mpol_set_shared_policy(struct shared_policy *info, |
139 | struct vm_area_struct *vma, | 187 | struct vm_area_struct *vma, |
140 | struct mempolicy *new); | 188 | struct mempolicy *new); |
@@ -149,9 +197,9 @@ extern void mpol_rebind_task(struct task_struct *tsk, | |||
149 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); | 197 | extern void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new); |
150 | extern void mpol_fix_fork_child_flag(struct task_struct *p); | 198 | extern void mpol_fix_fork_child_flag(struct task_struct *p); |
151 | 199 | ||
152 | extern struct mempolicy default_policy; | ||
153 | extern struct zonelist *huge_zonelist(struct vm_area_struct *vma, | 200 | extern struct zonelist *huge_zonelist(struct vm_area_struct *vma, |
154 | unsigned long addr, gfp_t gfp_flags, struct mempolicy **mpol); | 201 | unsigned long addr, gfp_t gfp_flags, |
202 | struct mempolicy **mpol, nodemask_t **nodemask); | ||
155 | extern unsigned slab_node(struct mempolicy *policy); | 203 | extern unsigned slab_node(struct mempolicy *policy); |
156 | 204 | ||
157 | extern enum zone_type policy_zone; | 205 | extern enum zone_type policy_zone; |
@@ -165,6 +213,13 @@ static inline void check_highest_zone(enum zone_type k) | |||
165 | int do_migrate_pages(struct mm_struct *mm, | 213 | int do_migrate_pages(struct mm_struct *mm, |
166 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags); | 214 | const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags); |
167 | 215 | ||
216 | |||
217 | #ifdef CONFIG_TMPFS | ||
218 | extern int mpol_parse_str(char *str, struct mempolicy **mpol, int no_context); | ||
219 | |||
220 | extern int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, | ||
221 | int no_context); | ||
222 | #endif | ||
168 | #else | 223 | #else |
169 | 224 | ||
170 | struct mempolicy {}; | 225 | struct mempolicy {}; |
@@ -173,19 +228,26 @@ static inline int mpol_equal(struct mempolicy *a, struct mempolicy *b) | |||
173 | { | 228 | { |
174 | return 1; | 229 | return 1; |
175 | } | 230 | } |
176 | #define vma_mpol_equal(a,b) 1 | ||
177 | 231 | ||
178 | #define mpol_set_vma_default(vma) do {} while(0) | 232 | static inline void mpol_put(struct mempolicy *p) |
233 | { | ||
234 | } | ||
235 | |||
236 | static inline void mpol_cond_put(struct mempolicy *pol) | ||
237 | { | ||
238 | } | ||
179 | 239 | ||
180 | static inline void mpol_free(struct mempolicy *p) | 240 | static inline struct mempolicy *mpol_cond_copy(struct mempolicy *to, |
241 | struct mempolicy *from) | ||
181 | { | 242 | { |
243 | return from; | ||
182 | } | 244 | } |
183 | 245 | ||
184 | static inline void mpol_get(struct mempolicy *pol) | 246 | static inline void mpol_get(struct mempolicy *pol) |
185 | { | 247 | { |
186 | } | 248 | } |
187 | 249 | ||
188 | static inline struct mempolicy *mpol_copy(struct mempolicy *old) | 250 | static inline struct mempolicy *mpol_dup(struct mempolicy *old) |
189 | { | 251 | { |
190 | return NULL; | 252 | return NULL; |
191 | } | 253 | } |
@@ -199,8 +261,8 @@ static inline int mpol_set_shared_policy(struct shared_policy *info, | |||
199 | return -EINVAL; | 261 | return -EINVAL; |
200 | } | 262 | } |
201 | 263 | ||
202 | static inline void mpol_shared_policy_init(struct shared_policy *info, | 264 | static inline void mpol_shared_policy_init(struct shared_policy *sp, |
203 | int policy, nodemask_t *nodes) | 265 | struct mempolicy *mpol) |
204 | { | 266 | { |
205 | } | 267 | } |
206 | 268 | ||
@@ -239,9 +301,12 @@ static inline void mpol_fix_fork_child_flag(struct task_struct *p) | |||
239 | } | 301 | } |
240 | 302 | ||
241 | static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma, | 303 | static inline struct zonelist *huge_zonelist(struct vm_area_struct *vma, |
242 | unsigned long addr, gfp_t gfp_flags, struct mempolicy **mpol) | 304 | unsigned long addr, gfp_t gfp_flags, |
305 | struct mempolicy **mpol, nodemask_t **nodemask) | ||
243 | { | 306 | { |
244 | return NODE_DATA(0)->node_zonelists + gfp_zone(gfp_flags); | 307 | *mpol = NULL; |
308 | *nodemask = NULL; | ||
309 | return node_zonelist(0, gfp_flags); | ||
245 | } | 310 | } |
246 | 311 | ||
247 | static inline int do_migrate_pages(struct mm_struct *mm, | 312 | static inline int do_migrate_pages(struct mm_struct *mm, |
@@ -254,6 +319,21 @@ static inline int do_migrate_pages(struct mm_struct *mm, | |||
254 | static inline void check_highest_zone(int k) | 319 | static inline void check_highest_zone(int k) |
255 | { | 320 | { |
256 | } | 321 | } |
322 | |||
323 | #ifdef CONFIG_TMPFS | ||
324 | static inline int mpol_parse_str(char *str, struct mempolicy **mpol, | ||
325 | int no_context) | ||
326 | { | ||
327 | return 1; /* error */ | ||
328 | } | ||
329 | |||
330 | static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol, | ||
331 | int no_context) | ||
332 | { | ||
333 | return 0; | ||
334 | } | ||
335 | #endif | ||
336 | |||
257 | #endif /* CONFIG_NUMA */ | 337 | #endif /* CONFIG_NUMA */ |
258 | #endif /* __KERNEL__ */ | 338 | #endif /* __KERNEL__ */ |
259 | 339 | ||
diff --git a/include/linux/meye.h b/include/linux/meye.h index 39fd9c8ddd4b..12010ace1f04 100644 --- a/include/linux/meye.h +++ b/include/linux/meye.h | |||
@@ -58,7 +58,7 @@ struct meye_params { | |||
58 | 58 | ||
59 | /* V4L2 private controls */ | 59 | /* V4L2 private controls */ |
60 | #define V4L2_CID_AGC V4L2_CID_PRIVATE_BASE | 60 | #define V4L2_CID_AGC V4L2_CID_PRIVATE_BASE |
61 | #define V4L2_CID_SHARPNESS (V4L2_CID_PRIVATE_BASE + 1) | 61 | #define V4L2_CID_MEYE_SHARPNESS (V4L2_CID_PRIVATE_BASE + 1) |
62 | #define V4L2_CID_PICTURE (V4L2_CID_PRIVATE_BASE + 2) | 62 | #define V4L2_CID_PICTURE (V4L2_CID_PRIVATE_BASE + 2) |
63 | #define V4L2_CID_JPEGQUAL (V4L2_CID_PRIVATE_BASE + 3) | 63 | #define V4L2_CID_JPEGQUAL (V4L2_CID_PRIVATE_BASE + 3) |
64 | #define V4L2_CID_FRAMERATE (V4L2_CID_PRIVATE_BASE + 4) | 64 | #define V4L2_CID_FRAMERATE (V4L2_CID_PRIVATE_BASE + 4) |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index ff7df1a2222f..9fa1a8002ce2 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
@@ -208,6 +208,38 @@ struct mlx4_mtt { | |||
208 | int page_shift; | 208 | int page_shift; |
209 | }; | 209 | }; |
210 | 210 | ||
211 | enum { | ||
212 | MLX4_DB_PER_PAGE = PAGE_SIZE / 4 | ||
213 | }; | ||
214 | |||
215 | struct mlx4_db_pgdir { | ||
216 | struct list_head list; | ||
217 | DECLARE_BITMAP(order0, MLX4_DB_PER_PAGE); | ||
218 | DECLARE_BITMAP(order1, MLX4_DB_PER_PAGE / 2); | ||
219 | unsigned long *bits[2]; | ||
220 | __be32 *db_page; | ||
221 | dma_addr_t db_dma; | ||
222 | }; | ||
223 | |||
224 | struct mlx4_ib_user_db_page; | ||
225 | |||
226 | struct mlx4_db { | ||
227 | __be32 *db; | ||
228 | union { | ||
229 | struct mlx4_db_pgdir *pgdir; | ||
230 | struct mlx4_ib_user_db_page *user_page; | ||
231 | } u; | ||
232 | dma_addr_t dma; | ||
233 | int index; | ||
234 | int order; | ||
235 | }; | ||
236 | |||
237 | struct mlx4_hwq_resources { | ||
238 | struct mlx4_db db; | ||
239 | struct mlx4_mtt mtt; | ||
240 | struct mlx4_buf buf; | ||
241 | }; | ||
242 | |||
211 | struct mlx4_mr { | 243 | struct mlx4_mr { |
212 | struct mlx4_mtt mtt; | 244 | struct mlx4_mtt mtt; |
213 | u64 iova; | 245 | u64 iova; |
@@ -341,6 +373,14 @@ int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt, | |||
341 | int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt, | 373 | int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt, |
342 | struct mlx4_buf *buf); | 374 | struct mlx4_buf *buf); |
343 | 375 | ||
376 | int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order); | ||
377 | void mlx4_db_free(struct mlx4_dev *dev, struct mlx4_db *db); | ||
378 | |||
379 | int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres, | ||
380 | int size, int max_direct); | ||
381 | void mlx4_free_hwq_res(struct mlx4_dev *mdev, struct mlx4_hwq_resources *wqres, | ||
382 | int size); | ||
383 | |||
344 | int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, struct mlx4_mtt *mtt, | 384 | int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, struct mlx4_mtt *mtt, |
345 | struct mlx4_uar *uar, u64 db_rec, struct mlx4_cq *cq); | 385 | struct mlx4_uar *uar, u64 db_rec, struct mlx4_cq *cq); |
346 | void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq); | 386 | void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq); |
diff --git a/include/linux/mlx4/qp.h b/include/linux/mlx4/qp.h index a5e43febee4f..7f128b266faa 100644 --- a/include/linux/mlx4/qp.h +++ b/include/linux/mlx4/qp.h | |||
@@ -296,6 +296,10 @@ int mlx4_qp_modify(struct mlx4_dev *dev, struct mlx4_mtt *mtt, | |||
296 | int mlx4_qp_query(struct mlx4_dev *dev, struct mlx4_qp *qp, | 296 | int mlx4_qp_query(struct mlx4_dev *dev, struct mlx4_qp *qp, |
297 | struct mlx4_qp_context *context); | 297 | struct mlx4_qp_context *context); |
298 | 298 | ||
299 | int mlx4_qp_to_ready(struct mlx4_dev *dev, struct mlx4_mtt *mtt, | ||
300 | struct mlx4_qp_context *context, | ||
301 | struct mlx4_qp *qp, enum mlx4_qp_state *qp_state); | ||
302 | |||
299 | static inline struct mlx4_qp *__mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn) | 303 | static inline struct mlx4_qp *__mlx4_qp_lookup(struct mlx4_dev *dev, u32 qpn) |
300 | { | 304 | { |
301 | return radix_tree_lookup(&dev->qp_table_tree, qpn & (dev->caps.num_qps - 1)); | 305 | return radix_tree_lookup(&dev->qp_table_tree, qpn & (dev->caps.num_qps - 1)); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index b695875d63e3..c31a9cd2a30e 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -107,6 +107,7 @@ extern unsigned int kobjsize(const void *objp); | |||
107 | #define VM_ALWAYSDUMP 0x04000000 /* Always include in core dumps */ | 107 | #define VM_ALWAYSDUMP 0x04000000 /* Always include in core dumps */ |
108 | 108 | ||
109 | #define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */ | 109 | #define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */ |
110 | #define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ | ||
110 | 111 | ||
111 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ | 112 | #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ |
112 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS | 113 | #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS |
@@ -164,8 +165,6 @@ struct vm_operations_struct { | |||
164 | void (*open)(struct vm_area_struct * area); | 165 | void (*open)(struct vm_area_struct * area); |
165 | void (*close)(struct vm_area_struct * area); | 166 | void (*close)(struct vm_area_struct * area); |
166 | int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); | 167 | int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); |
167 | struct page *(*nopage)(struct vm_area_struct *area, | ||
168 | unsigned long address, int *type); | ||
169 | unsigned long (*nopfn)(struct vm_area_struct *area, | 168 | unsigned long (*nopfn)(struct vm_area_struct *area, |
170 | unsigned long address); | 169 | unsigned long address); |
171 | 170 | ||
@@ -173,7 +172,25 @@ struct vm_operations_struct { | |||
173 | * writable, if an error is returned it will cause a SIGBUS */ | 172 | * writable, if an error is returned it will cause a SIGBUS */ |
174 | int (*page_mkwrite)(struct vm_area_struct *vma, struct page *page); | 173 | int (*page_mkwrite)(struct vm_area_struct *vma, struct page *page); |
175 | #ifdef CONFIG_NUMA | 174 | #ifdef CONFIG_NUMA |
175 | /* | ||
176 | * set_policy() op must add a reference to any non-NULL @new mempolicy | ||
177 | * to hold the policy upon return. Caller should pass NULL @new to | ||
178 | * remove a policy and fall back to surrounding context--i.e. do not | ||
179 | * install a MPOL_DEFAULT policy, nor the task or system default | ||
180 | * mempolicy. | ||
181 | */ | ||
176 | int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new); | 182 | int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new); |
183 | |||
184 | /* | ||
185 | * get_policy() op must add reference [mpol_get()] to any policy at | ||
186 | * (vma,addr) marked as MPOL_SHARED. The shared policy infrastructure | ||
187 | * in mm/mempolicy.c will do this automatically. | ||
188 | * get_policy() must NOT add a ref if the policy at (vma,addr) is not | ||
189 | * marked as MPOL_SHARED. vma policies are protected by the mmap_sem. | ||
190 | * If no [shared/vma] mempolicy exists at the addr, get_policy() op | ||
191 | * must return NULL--i.e., do not "fallback" to task or system default | ||
192 | * policy. | ||
193 | */ | ||
177 | struct mempolicy *(*get_policy)(struct vm_area_struct *vma, | 194 | struct mempolicy *(*get_policy)(struct vm_area_struct *vma, |
178 | unsigned long addr); | 195 | unsigned long addr); |
179 | int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from, | 196 | int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from, |
@@ -397,11 +414,11 @@ static inline void set_compound_order(struct page *page, unsigned long order) | |||
397 | * we have run out of space and have to fall back to an | 414 | * we have run out of space and have to fall back to an |
398 | * alternate (slower) way of determining the node. | 415 | * alternate (slower) way of determining the node. |
399 | * | 416 | * |
400 | * No sparsemem: | NODE | ZONE | ... | FLAGS | | 417 | * No sparsemem or sparsemem vmemmap: | NODE | ZONE | ... | FLAGS | |
401 | * with space for node: | SECTION | NODE | ZONE | ... | FLAGS | | 418 | * classic sparse with space for node:| SECTION | NODE | ZONE | ... | FLAGS | |
402 | * no space for node: | SECTION | ZONE | ... | FLAGS | | 419 | * classic sparse no space for node: | SECTION | ZONE | ... | FLAGS | |
403 | */ | 420 | */ |
404 | #ifdef CONFIG_SPARSEMEM | 421 | #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) |
405 | #define SECTIONS_WIDTH SECTIONS_SHIFT | 422 | #define SECTIONS_WIDTH SECTIONS_SHIFT |
406 | #else | 423 | #else |
407 | #define SECTIONS_WIDTH 0 | 424 | #define SECTIONS_WIDTH 0 |
@@ -409,9 +426,12 @@ static inline void set_compound_order(struct page *page, unsigned long order) | |||
409 | 426 | ||
410 | #define ZONES_WIDTH ZONES_SHIFT | 427 | #define ZONES_WIDTH ZONES_SHIFT |
411 | 428 | ||
412 | #if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= FLAGS_RESERVED | 429 | #if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS |
413 | #define NODES_WIDTH NODES_SHIFT | 430 | #define NODES_WIDTH NODES_SHIFT |
414 | #else | 431 | #else |
432 | #ifdef CONFIG_SPARSEMEM_VMEMMAP | ||
433 | #error "Vmemmap: No space for nodes field in page flags" | ||
434 | #endif | ||
415 | #define NODES_WIDTH 0 | 435 | #define NODES_WIDTH 0 |
416 | #endif | 436 | #endif |
417 | 437 | ||
@@ -454,8 +474,8 @@ static inline void set_compound_order(struct page *page, unsigned long order) | |||
454 | 474 | ||
455 | #define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0)) | 475 | #define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0)) |
456 | 476 | ||
457 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 477 | #if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS |
458 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > FLAGS_RESERVED | 478 | #error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS |
459 | #endif | 479 | #endif |
460 | 480 | ||
461 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) | 481 | #define ZONES_MASK ((1UL << ZONES_WIDTH) - 1) |
@@ -504,10 +524,12 @@ static inline struct zone *page_zone(struct page *page) | |||
504 | return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; | 524 | return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]; |
505 | } | 525 | } |
506 | 526 | ||
527 | #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) | ||
507 | static inline unsigned long page_to_section(struct page *page) | 528 | static inline unsigned long page_to_section(struct page *page) |
508 | { | 529 | { |
509 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; | 530 | return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK; |
510 | } | 531 | } |
532 | #endif | ||
511 | 533 | ||
512 | static inline void set_page_zone(struct page *page, enum zone_type zone) | 534 | static inline void set_page_zone(struct page *page, enum zone_type zone) |
513 | { | 535 | { |
@@ -602,9 +624,12 @@ static inline struct address_space *page_mapping(struct page *page) | |||
602 | struct address_space *mapping = page->mapping; | 624 | struct address_space *mapping = page->mapping; |
603 | 625 | ||
604 | VM_BUG_ON(PageSlab(page)); | 626 | VM_BUG_ON(PageSlab(page)); |
627 | #ifdef CONFIG_SWAP | ||
605 | if (unlikely(PageSwapCache(page))) | 628 | if (unlikely(PageSwapCache(page))) |
606 | mapping = &swapper_space; | 629 | mapping = &swapper_space; |
607 | else if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON)) | 630 | else |
631 | #endif | ||
632 | if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON)) | ||
608 | mapping = NULL; | 633 | mapping = NULL; |
609 | return mapping; | 634 | return mapping; |
610 | } | 635 | } |
@@ -649,12 +674,6 @@ static inline int page_mapped(struct page *page) | |||
649 | } | 674 | } |
650 | 675 | ||
651 | /* | 676 | /* |
652 | * Error return values for the *_nopage functions | ||
653 | */ | ||
654 | #define NOPAGE_SIGBUS (NULL) | ||
655 | #define NOPAGE_OOM ((struct page *) (-1)) | ||
656 | |||
657 | /* | ||
658 | * Error return values for the *_nopfn functions | 677 | * Error return values for the *_nopfn functions |
659 | */ | 678 | */ |
660 | #define NOPFN_SIGBUS ((unsigned long) -1) | 679 | #define NOPFN_SIGBUS ((unsigned long) -1) |
@@ -720,7 +739,9 @@ struct zap_details { | |||
720 | unsigned long truncate_count; /* Compare vm_truncate_count */ | 739 | unsigned long truncate_count; /* Compare vm_truncate_count */ |
721 | }; | 740 | }; |
722 | 741 | ||
723 | struct page *vm_normal_page(struct vm_area_struct *, unsigned long, pte_t); | 742 | struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, |
743 | pte_t pte); | ||
744 | |||
724 | unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address, | 745 | unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address, |
725 | unsigned long size, struct zap_details *); | 746 | unsigned long size, struct zap_details *); |
726 | unsigned long unmap_vmas(struct mmu_gather **tlb, | 747 | unsigned long unmap_vmas(struct mmu_gather **tlb, |
@@ -1045,6 +1066,19 @@ extern void unlink_file_vma(struct vm_area_struct *); | |||
1045 | extern struct vm_area_struct *copy_vma(struct vm_area_struct **, | 1066 | extern struct vm_area_struct *copy_vma(struct vm_area_struct **, |
1046 | unsigned long addr, unsigned long len, pgoff_t pgoff); | 1067 | unsigned long addr, unsigned long len, pgoff_t pgoff); |
1047 | extern void exit_mmap(struct mm_struct *); | 1068 | extern void exit_mmap(struct mm_struct *); |
1069 | |||
1070 | #ifdef CONFIG_PROC_FS | ||
1071 | /* From fs/proc/base.c. callers must _not_ hold the mm's exe_file_lock */ | ||
1072 | extern void added_exe_file_vma(struct mm_struct *mm); | ||
1073 | extern void removed_exe_file_vma(struct mm_struct *mm); | ||
1074 | #else | ||
1075 | static inline void added_exe_file_vma(struct mm_struct *mm) | ||
1076 | {} | ||
1077 | |||
1078 | static inline void removed_exe_file_vma(struct mm_struct *mm) | ||
1079 | {} | ||
1080 | #endif /* CONFIG_PROC_FS */ | ||
1081 | |||
1048 | extern int may_expand_vm(struct mm_struct *mm, unsigned long npages); | 1082 | extern int may_expand_vm(struct mm_struct *mm, unsigned long npages); |
1049 | extern int install_special_mapping(struct mm_struct *mm, | 1083 | extern int install_special_mapping(struct mm_struct *mm, |
1050 | unsigned long addr, unsigned long len, | 1084 | unsigned long addr, unsigned long len, |
@@ -1149,6 +1183,8 @@ int remap_pfn_range(struct vm_area_struct *, unsigned long addr, | |||
1149 | int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *); | 1183 | int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *); |
1150 | int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr, | 1184 | int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr, |
1151 | unsigned long pfn); | 1185 | unsigned long pfn); |
1186 | int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, | ||
1187 | unsigned long pfn); | ||
1152 | 1188 | ||
1153 | struct page *follow_page(struct vm_area_struct *, unsigned long address, | 1189 | struct page *follow_page(struct vm_area_struct *, unsigned long address, |
1154 | unsigned int foll_flags); | 1190 | unsigned int foll_flags); |
@@ -1207,8 +1243,6 @@ int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | |||
1207 | void __user *, size_t *, loff_t *); | 1243 | void __user *, size_t *, loff_t *); |
1208 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, | 1244 | unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask, |
1209 | unsigned long lru_pages); | 1245 | unsigned long lru_pages); |
1210 | void drop_pagecache(void); | ||
1211 | void drop_slab(void); | ||
1212 | 1246 | ||
1213 | #ifndef CONFIG_MMU | 1247 | #ifndef CONFIG_MMU |
1214 | #define randomize_va_space 0 | 1248 | #define randomize_va_space 0 |
@@ -1229,6 +1263,7 @@ void vmemmap_verify(pte_t *, int, unsigned long, unsigned long); | |||
1229 | int vmemmap_populate_basepages(struct page *start_page, | 1263 | int vmemmap_populate_basepages(struct page *start_page, |
1230 | unsigned long pages, int node); | 1264 | unsigned long pages, int node); |
1231 | int vmemmap_populate(struct page *start_page, unsigned long pages, int node); | 1265 | int vmemmap_populate(struct page *start_page, unsigned long pages, int node); |
1266 | void vmemmap_populate_print_last(void); | ||
1232 | 1267 | ||
1233 | #endif /* __KERNEL__ */ | 1268 | #endif /* __KERNEL__ */ |
1234 | #endif /* _LINUX_MM_H */ | 1269 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index af190ceab971..eb7c16cc9559 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
@@ -42,7 +42,10 @@ struct page { | |||
42 | * to show when page is mapped | 42 | * to show when page is mapped |
43 | * & limit reverse map searches. | 43 | * & limit reverse map searches. |
44 | */ | 44 | */ |
45 | unsigned int inuse; /* SLUB: Nr of objects */ | 45 | struct { /* SLUB */ |
46 | u16 inuse; | ||
47 | u16 objects; | ||
48 | }; | ||
46 | }; | 49 | }; |
47 | union { | 50 | union { |
48 | struct { | 51 | struct { |
@@ -172,6 +175,7 @@ struct mm_struct { | |||
172 | atomic_t mm_users; /* How many users with user space? */ | 175 | atomic_t mm_users; /* How many users with user space? */ |
173 | atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ | 176 | atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ |
174 | int map_count; /* number of VMAs */ | 177 | int map_count; /* number of VMAs */ |
178 | int core_waiters; | ||
175 | struct rw_semaphore mmap_sem; | 179 | struct rw_semaphore mmap_sem; |
176 | spinlock_t page_table_lock; /* Protects page tables and some counters */ | 180 | spinlock_t page_table_lock; /* Protects page tables and some counters */ |
177 | 181 | ||
@@ -216,14 +220,20 @@ struct mm_struct { | |||
216 | unsigned long flags; /* Must use atomic bitops to access the bits */ | 220 | unsigned long flags; /* Must use atomic bitops to access the bits */ |
217 | 221 | ||
218 | /* coredumping support */ | 222 | /* coredumping support */ |
219 | int core_waiters; | ||
220 | struct completion *core_startup_done, core_done; | 223 | struct completion *core_startup_done, core_done; |
221 | 224 | ||
222 | /* aio bits */ | 225 | /* aio bits */ |
223 | rwlock_t ioctx_list_lock; | 226 | rwlock_t ioctx_list_lock; /* aio lock */ |
224 | struct kioctx *ioctx_list; | 227 | struct kioctx *ioctx_list; |
225 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 228 | #ifdef CONFIG_MM_OWNER |
226 | struct mem_cgroup *mem_cgroup; | 229 | struct task_struct *owner; /* The thread group leader that */ |
230 | /* owns the mm_struct. */ | ||
231 | #endif | ||
232 | |||
233 | #ifdef CONFIG_PROC_FS | ||
234 | /* store ref to file /proc/<pid>/exe symlink points to */ | ||
235 | struct file *exe_file; | ||
236 | unsigned long num_exe_file_vmas; | ||
227 | #endif | 237 | #endif |
228 | }; | 238 | }; |
229 | 239 | ||
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 9f274a687c7e..aad98003176f 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
@@ -3,6 +3,7 @@ | |||
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #ifdef __KERNEL__ |
5 | #ifndef __ASSEMBLY__ | 5 | #ifndef __ASSEMBLY__ |
6 | #ifndef __GENERATING_BOUNDS_H | ||
6 | 7 | ||
7 | #include <linux/spinlock.h> | 8 | #include <linux/spinlock.h> |
8 | #include <linux/list.h> | 9 | #include <linux/list.h> |
@@ -15,6 +16,7 @@ | |||
15 | #include <linux/seqlock.h> | 16 | #include <linux/seqlock.h> |
16 | #include <linux/nodemask.h> | 17 | #include <linux/nodemask.h> |
17 | #include <linux/pageblock-flags.h> | 18 | #include <linux/pageblock-flags.h> |
19 | #include <linux/bounds.h> | ||
18 | #include <asm/atomic.h> | 20 | #include <asm/atomic.h> |
19 | #include <asm/page.h> | 21 | #include <asm/page.h> |
20 | 22 | ||
@@ -129,6 +131,8 @@ struct per_cpu_pageset { | |||
129 | #define zone_pcp(__z, __cpu) (&(__z)->pageset[(__cpu)]) | 131 | #define zone_pcp(__z, __cpu) (&(__z)->pageset[(__cpu)]) |
130 | #endif | 132 | #endif |
131 | 133 | ||
134 | #endif /* !__GENERATING_BOUNDS.H */ | ||
135 | |||
132 | enum zone_type { | 136 | enum zone_type { |
133 | #ifdef CONFIG_ZONE_DMA | 137 | #ifdef CONFIG_ZONE_DMA |
134 | /* | 138 | /* |
@@ -177,9 +181,11 @@ enum zone_type { | |||
177 | ZONE_HIGHMEM, | 181 | ZONE_HIGHMEM, |
178 | #endif | 182 | #endif |
179 | ZONE_MOVABLE, | 183 | ZONE_MOVABLE, |
180 | MAX_NR_ZONES | 184 | __MAX_NR_ZONES |
181 | }; | 185 | }; |
182 | 186 | ||
187 | #ifndef __GENERATING_BOUNDS_H | ||
188 | |||
183 | /* | 189 | /* |
184 | * When a memory allocation must conform to specific limitations (such | 190 | * When a memory allocation must conform to specific limitations (such |
185 | * as being suitable for DMA) the caller will pass in hints to the | 191 | * as being suitable for DMA) the caller will pass in hints to the |
@@ -188,28 +194,15 @@ enum zone_type { | |||
188 | * match the requested limits. See gfp_zone() in include/linux/gfp.h | 194 | * match the requested limits. See gfp_zone() in include/linux/gfp.h |
189 | */ | 195 | */ |
190 | 196 | ||
191 | /* | 197 | #if MAX_NR_ZONES < 2 |
192 | * Count the active zones. Note that the use of defined(X) outside | ||
193 | * #if and family is not necessarily defined so ensure we cannot use | ||
194 | * it later. Use __ZONE_COUNT to work out how many shift bits we need. | ||
195 | */ | ||
196 | #define __ZONE_COUNT ( \ | ||
197 | defined(CONFIG_ZONE_DMA) \ | ||
198 | + defined(CONFIG_ZONE_DMA32) \ | ||
199 | + 1 \ | ||
200 | + defined(CONFIG_HIGHMEM) \ | ||
201 | + 1 \ | ||
202 | ) | ||
203 | #if __ZONE_COUNT < 2 | ||
204 | #define ZONES_SHIFT 0 | 198 | #define ZONES_SHIFT 0 |
205 | #elif __ZONE_COUNT <= 2 | 199 | #elif MAX_NR_ZONES <= 2 |
206 | #define ZONES_SHIFT 1 | 200 | #define ZONES_SHIFT 1 |
207 | #elif __ZONE_COUNT <= 4 | 201 | #elif MAX_NR_ZONES <= 4 |
208 | #define ZONES_SHIFT 2 | 202 | #define ZONES_SHIFT 2 |
209 | #else | 203 | #else |
210 | #error ZONES_SHIFT -- too many zones configured adjust calculation | 204 | #error ZONES_SHIFT -- too many zones configured adjust calculation |
211 | #endif | 205 | #endif |
212 | #undef __ZONE_COUNT | ||
213 | 206 | ||
214 | struct zone { | 207 | struct zone { |
215 | /* Fields commonly accessed by the page allocator */ | 208 | /* Fields commonly accessed by the page allocator */ |
@@ -393,10 +386,10 @@ static inline int zone_is_oom_locked(const struct zone *zone) | |||
393 | * The NUMA zonelists are doubled becausse we need zonelists that restrict the | 386 | * The NUMA zonelists are doubled becausse we need zonelists that restrict the |
394 | * allocations to a single node for GFP_THISNODE. | 387 | * allocations to a single node for GFP_THISNODE. |
395 | * | 388 | * |
396 | * [0 .. MAX_NR_ZONES -1] : Zonelists with fallback | 389 | * [0] : Zonelist with fallback |
397 | * [MAZ_NR_ZONES ... MAZ_ZONELISTS -1] : No fallback (GFP_THISNODE) | 390 | * [1] : No fallback (GFP_THISNODE) |
398 | */ | 391 | */ |
399 | #define MAX_ZONELISTS (2 * MAX_NR_ZONES) | 392 | #define MAX_ZONELISTS 2 |
400 | 393 | ||
401 | 394 | ||
402 | /* | 395 | /* |
@@ -464,11 +457,20 @@ struct zonelist_cache { | |||
464 | unsigned long last_full_zap; /* when last zap'd (jiffies) */ | 457 | unsigned long last_full_zap; /* when last zap'd (jiffies) */ |
465 | }; | 458 | }; |
466 | #else | 459 | #else |
467 | #define MAX_ZONELISTS MAX_NR_ZONES | 460 | #define MAX_ZONELISTS 1 |
468 | struct zonelist_cache; | 461 | struct zonelist_cache; |
469 | #endif | 462 | #endif |
470 | 463 | ||
471 | /* | 464 | /* |
465 | * This struct contains information about a zone in a zonelist. It is stored | ||
466 | * here to avoid dereferences into large structures and lookups of tables | ||
467 | */ | ||
468 | struct zoneref { | ||
469 | struct zone *zone; /* Pointer to actual zone */ | ||
470 | int zone_idx; /* zone_idx(zoneref->zone) */ | ||
471 | }; | ||
472 | |||
473 | /* | ||
472 | * One allocation request operates on a zonelist. A zonelist | 474 | * One allocation request operates on a zonelist. A zonelist |
473 | * is a list of zones, the first one is the 'goal' of the | 475 | * is a list of zones, the first one is the 'goal' of the |
474 | * allocation, the other zones are fallback zones, in decreasing | 476 | * allocation, the other zones are fallback zones, in decreasing |
@@ -476,34 +478,23 @@ struct zonelist_cache; | |||
476 | * | 478 | * |
477 | * If zlcache_ptr is not NULL, then it is just the address of zlcache, | 479 | * If zlcache_ptr is not NULL, then it is just the address of zlcache, |
478 | * as explained above. If zlcache_ptr is NULL, there is no zlcache. | 480 | * as explained above. If zlcache_ptr is NULL, there is no zlcache. |
481 | * * | ||
482 | * To speed the reading of the zonelist, the zonerefs contain the zone index | ||
483 | * of the entry being read. Helper functions to access information given | ||
484 | * a struct zoneref are | ||
485 | * | ||
486 | * zonelist_zone() - Return the struct zone * for an entry in _zonerefs | ||
487 | * zonelist_zone_idx() - Return the index of the zone for an entry | ||
488 | * zonelist_node_idx() - Return the index of the node for an entry | ||
479 | */ | 489 | */ |
480 | |||
481 | struct zonelist { | 490 | struct zonelist { |
482 | struct zonelist_cache *zlcache_ptr; // NULL or &zlcache | 491 | struct zonelist_cache *zlcache_ptr; // NULL or &zlcache |
483 | struct zone *zones[MAX_ZONES_PER_ZONELIST + 1]; // NULL delimited | 492 | struct zoneref _zonerefs[MAX_ZONES_PER_ZONELIST + 1]; |
484 | #ifdef CONFIG_NUMA | 493 | #ifdef CONFIG_NUMA |
485 | struct zonelist_cache zlcache; // optional ... | 494 | struct zonelist_cache zlcache; // optional ... |
486 | #endif | 495 | #endif |
487 | }; | 496 | }; |
488 | 497 | ||
489 | #ifdef CONFIG_NUMA | ||
490 | /* | ||
491 | * Only custom zonelists like MPOL_BIND need to be filtered as part of | ||
492 | * policies. As described in the comment for struct zonelist_cache, these | ||
493 | * zonelists will not have a zlcache so zlcache_ptr will not be set. Use | ||
494 | * that to determine if the zonelists needs to be filtered or not. | ||
495 | */ | ||
496 | static inline int alloc_should_filter_zonelist(struct zonelist *zonelist) | ||
497 | { | ||
498 | return !zonelist->zlcache_ptr; | ||
499 | } | ||
500 | #else | ||
501 | static inline int alloc_should_filter_zonelist(struct zonelist *zonelist) | ||
502 | { | ||
503 | return 0; | ||
504 | } | ||
505 | #endif /* CONFIG_NUMA */ | ||
506 | |||
507 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP | 498 | #ifdef CONFIG_ARCH_POPULATES_NODE_MAP |
508 | struct node_active_region { | 499 | struct node_active_region { |
509 | unsigned long start_pfn; | 500 | unsigned long start_pfn; |
@@ -637,9 +628,10 @@ static inline int is_normal_idx(enum zone_type idx) | |||
637 | static inline int is_highmem(struct zone *zone) | 628 | static inline int is_highmem(struct zone *zone) |
638 | { | 629 | { |
639 | #ifdef CONFIG_HIGHMEM | 630 | #ifdef CONFIG_HIGHMEM |
640 | int zone_idx = zone - zone->zone_pgdat->node_zones; | 631 | int zone_off = (char *)zone - (char *)zone->zone_pgdat->node_zones; |
641 | return zone_idx == ZONE_HIGHMEM || | 632 | return zone_off == ZONE_HIGHMEM * sizeof(*zone) || |
642 | (zone_idx == ZONE_MOVABLE && zone_movable_is_highmem()); | 633 | (zone_off == ZONE_MOVABLE * sizeof(*zone) && |
634 | zone_movable_is_highmem()); | ||
643 | #else | 635 | #else |
644 | return 0; | 636 | return 0; |
645 | #endif | 637 | #endif |
@@ -730,32 +722,103 @@ extern struct zone *next_zone(struct zone *zone); | |||
730 | zone; \ | 722 | zone; \ |
731 | zone = next_zone(zone)) | 723 | zone = next_zone(zone)) |
732 | 724 | ||
733 | #ifdef CONFIG_SPARSEMEM | 725 | static inline struct zone *zonelist_zone(struct zoneref *zoneref) |
734 | #include <asm/sparsemem.h> | 726 | { |
735 | #endif | 727 | return zoneref->zone; |
728 | } | ||
736 | 729 | ||
737 | #if BITS_PER_LONG == 32 | 730 | static inline int zonelist_zone_idx(struct zoneref *zoneref) |
738 | /* | 731 | { |
739 | * with 32 bit page->flags field, we reserve 9 bits for node/zone info. | 732 | return zoneref->zone_idx; |
740 | * there are 4 zones (3 bits) and this leaves 9-3=6 bits for nodes. | 733 | } |
734 | |||
735 | static inline int zonelist_node_idx(struct zoneref *zoneref) | ||
736 | { | ||
737 | #ifdef CONFIG_NUMA | ||
738 | /* zone_to_nid not available in this context */ | ||
739 | return zoneref->zone->node; | ||
740 | #else | ||
741 | return 0; | ||
742 | #endif /* CONFIG_NUMA */ | ||
743 | } | ||
744 | |||
745 | /** | ||
746 | * next_zones_zonelist - Returns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point | ||
747 | * @z - The cursor used as a starting point for the search | ||
748 | * @highest_zoneidx - The zone index of the highest zone to return | ||
749 | * @nodes - An optional nodemask to filter the zonelist with | ||
750 | * @zone - The first suitable zone found is returned via this parameter | ||
751 | * | ||
752 | * This function returns the next zone at or below a given zone index that is | ||
753 | * within the allowed nodemask using a cursor as the starting point for the | ||
754 | * search. The zoneref returned is a cursor that is used as the next starting | ||
755 | * point for future calls to next_zones_zonelist(). | ||
741 | */ | 756 | */ |
742 | #define FLAGS_RESERVED 9 | 757 | struct zoneref *next_zones_zonelist(struct zoneref *z, |
758 | enum zone_type highest_zoneidx, | ||
759 | nodemask_t *nodes, | ||
760 | struct zone **zone); | ||
743 | 761 | ||
744 | #elif BITS_PER_LONG == 64 | 762 | /** |
745 | /* | 763 | * first_zones_zonelist - Returns the first zone at or below highest_zoneidx within the allowed nodemask in a zonelist |
746 | * with 64 bit flags field, there's plenty of room. | 764 | * @zonelist - The zonelist to search for a suitable zone |
765 | * @highest_zoneidx - The zone index of the highest zone to return | ||
766 | * @nodes - An optional nodemask to filter the zonelist with | ||
767 | * @zone - The first suitable zone found is returned via this parameter | ||
768 | * | ||
769 | * This function returns the first zone at or below a given zone index that is | ||
770 | * within the allowed nodemask. The zoneref returned is a cursor that can be | ||
771 | * used to iterate the zonelist with next_zones_zonelist. The cursor should | ||
772 | * not be used by the caller as it does not match the value of the zone | ||
773 | * returned. | ||
747 | */ | 774 | */ |
748 | #define FLAGS_RESERVED 32 | 775 | static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist, |
776 | enum zone_type highest_zoneidx, | ||
777 | nodemask_t *nodes, | ||
778 | struct zone **zone) | ||
779 | { | ||
780 | return next_zones_zonelist(zonelist->_zonerefs, highest_zoneidx, nodes, | ||
781 | zone); | ||
782 | } | ||
749 | 783 | ||
750 | #else | 784 | /** |
785 | * for_each_zone_zonelist_nodemask - helper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask | ||
786 | * @zone - The current zone in the iterator | ||
787 | * @z - The current pointer within zonelist->zones being iterated | ||
788 | * @zlist - The zonelist being iterated | ||
789 | * @highidx - The zone index of the highest zone to return | ||
790 | * @nodemask - Nodemask allowed by the allocator | ||
791 | * | ||
792 | * This iterator iterates though all zones at or below a given zone index and | ||
793 | * within a given nodemask | ||
794 | */ | ||
795 | #define for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \ | ||
796 | for (z = first_zones_zonelist(zlist, highidx, nodemask, &zone); \ | ||
797 | zone; \ | ||
798 | z = next_zones_zonelist(z, highidx, nodemask, &zone)) \ | ||
751 | 799 | ||
752 | #error BITS_PER_LONG not defined | 800 | /** |
801 | * for_each_zone_zonelist - helper macro to iterate over valid zones in a zonelist at or below a given zone index | ||
802 | * @zone - The current zone in the iterator | ||
803 | * @z - The current pointer within zonelist->zones being iterated | ||
804 | * @zlist - The zonelist being iterated | ||
805 | * @highidx - The zone index of the highest zone to return | ||
806 | * | ||
807 | * This iterator iterates though all zones at or below a given zone index. | ||
808 | */ | ||
809 | #define for_each_zone_zonelist(zone, z, zlist, highidx) \ | ||
810 | for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, NULL) | ||
753 | 811 | ||
812 | #ifdef CONFIG_SPARSEMEM | ||
813 | #include <asm/sparsemem.h> | ||
754 | #endif | 814 | #endif |
755 | 815 | ||
756 | #if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \ | 816 | #if !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) && \ |
757 | !defined(CONFIG_ARCH_POPULATES_NODE_MAP) | 817 | !defined(CONFIG_ARCH_POPULATES_NODE_MAP) |
758 | #define early_pfn_to_nid(nid) (0UL) | 818 | static inline unsigned long early_pfn_to_nid(unsigned long pfn) |
819 | { | ||
820 | return 0; | ||
821 | } | ||
759 | #endif | 822 | #endif |
760 | 823 | ||
761 | #ifdef CONFIG_FLATMEM | 824 | #ifdef CONFIG_FLATMEM |
@@ -833,6 +896,7 @@ static inline struct mem_section *__nr_to_section(unsigned long nr) | |||
833 | return &mem_section[SECTION_NR_TO_ROOT(nr)][nr & SECTION_ROOT_MASK]; | 896 | return &mem_section[SECTION_NR_TO_ROOT(nr)][nr & SECTION_ROOT_MASK]; |
834 | } | 897 | } |
835 | extern int __section_nr(struct mem_section* ms); | 898 | extern int __section_nr(struct mem_section* ms); |
899 | extern unsigned long usemap_size(void); | ||
836 | 900 | ||
837 | /* | 901 | /* |
838 | * We use the lower bits of the mem_map pointer to store | 902 | * We use the lower bits of the mem_map pointer to store |
@@ -938,6 +1002,7 @@ unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long); | |||
938 | #define pfn_valid_within(pfn) (1) | 1002 | #define pfn_valid_within(pfn) (1) |
939 | #endif | 1003 | #endif |
940 | 1004 | ||
1005 | #endif /* !__GENERATING_BOUNDS.H */ | ||
941 | #endif /* !__ASSEMBLY__ */ | 1006 | #endif /* !__ASSEMBLY__ */ |
942 | #endif /* __KERNEL__ */ | 1007 | #endif /* __KERNEL__ */ |
943 | #endif /* _LINUX_MMZONE_H */ | 1008 | #endif /* _LINUX_MMZONE_H */ |
diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h index f950921523f5..b03b27457413 100644 --- a/include/linux/msdos_fs.h +++ b/include/linux/msdos_fs.h | |||
@@ -58,7 +58,11 @@ | |||
58 | #define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ | 58 | #define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ |
59 | 59 | ||
60 | /* media of boot sector */ | 60 | /* media of boot sector */ |
61 | #define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0) | 61 | static inline int fat_valid_media(u8 media) |
62 | { | ||
63 | return 0xf8 <= media || media == 0xf0; | ||
64 | } | ||
65 | |||
62 | #define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ | 66 | #define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ |
63 | MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) | 67 | MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) |
64 | 68 | ||
@@ -195,6 +199,7 @@ struct fat_mount_options { | |||
195 | char *iocharset; /* Charset used for filename input/display */ | 199 | char *iocharset; /* Charset used for filename input/display */ |
196 | unsigned short shortname; /* flags for shortname display/create rule */ | 200 | unsigned short shortname; /* flags for shortname display/create rule */ |
197 | unsigned char name_check; /* r = relaxed, n = normal, s = strict */ | 201 | unsigned char name_check; /* r = relaxed, n = normal, s = strict */ |
202 | unsigned short allow_utime;/* permission for setting the [am]time */ | ||
198 | unsigned quiet:1, /* set = fake successful chmods and chowns */ | 203 | unsigned quiet:1, /* set = fake successful chmods and chowns */ |
199 | showexec:1, /* set = only set x bit for com/exe/bat */ | 204 | showexec:1, /* set = only set x bit for com/exe/bat */ |
200 | sys_immutable:1, /* set = system files are immutable */ | 205 | sys_immutable:1, /* set = system files are immutable */ |
@@ -232,6 +237,7 @@ struct msdos_sb_info { | |||
232 | struct mutex fat_lock; | 237 | struct mutex fat_lock; |
233 | unsigned int prev_free; /* previously allocated cluster number */ | 238 | unsigned int prev_free; /* previously allocated cluster number */ |
234 | unsigned int free_clusters; /* -1 if undefined */ | 239 | unsigned int free_clusters; /* -1 if undefined */ |
240 | unsigned int free_clus_valid; /* is free_clusters valid? */ | ||
235 | struct fat_mount_options options; | 241 | struct fat_mount_options options; |
236 | struct nls_table *nls_disk; /* Codepage used on disk */ | 242 | struct nls_table *nls_disk; /* Codepage used on disk */ |
237 | struct nls_table *nls_io; /* Charset used for input and display */ | 243 | struct nls_table *nls_io; /* Charset used for input and display */ |
@@ -401,7 +407,7 @@ extern int fat_generic_ioctl(struct inode *inode, struct file *filp, | |||
401 | unsigned int cmd, unsigned long arg); | 407 | unsigned int cmd, unsigned long arg); |
402 | extern const struct file_operations fat_file_operations; | 408 | extern const struct file_operations fat_file_operations; |
403 | extern const struct inode_operations fat_file_inode_operations; | 409 | extern const struct inode_operations fat_file_inode_operations; |
404 | extern int fat_notify_change(struct dentry * dentry, struct iattr * attr); | 410 | extern int fat_setattr(struct dentry * dentry, struct iattr * attr); |
405 | extern void fat_truncate(struct inode *inode); | 411 | extern void fat_truncate(struct inode *inode); |
406 | extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, | 412 | extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, |
407 | struct kstat *stat); | 413 | struct kstat *stat); |
diff --git a/include/linux/msg.h b/include/linux/msg.h index 10a3d5a1abff..6f3b8e79a991 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h | |||
@@ -49,16 +49,26 @@ struct msginfo { | |||
49 | unsigned short msgseg; | 49 | unsigned short msgseg; |
50 | }; | 50 | }; |
51 | 51 | ||
52 | /* | ||
53 | * Scaling factor to compute msgmni: | ||
54 | * the memory dedicated to msg queues (msgmni * msgmnb) should occupy | ||
55 | * at most 1/MSG_MEM_SCALE of the lowmem (see the formula in ipc/msg.c): | ||
56 | * up to 8MB : msgmni = 16 (MSGMNI) | ||
57 | * 4 GB : msgmni = 8K | ||
58 | * more than 16 GB : msgmni = 32K (IPCMNI) | ||
59 | */ | ||
60 | #define MSG_MEM_SCALE 32 | ||
61 | |||
52 | #define MSGMNI 16 /* <= IPCMNI */ /* max # of msg queue identifiers */ | 62 | #define MSGMNI 16 /* <= IPCMNI */ /* max # of msg queue identifiers */ |
53 | #define MSGMAX 8192 /* <= INT_MAX */ /* max size of message (bytes) */ | 63 | #define MSGMAX 8192 /* <= INT_MAX */ /* max size of message (bytes) */ |
54 | #define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */ | 64 | #define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */ |
55 | 65 | ||
56 | /* unused */ | 66 | /* unused */ |
57 | #define MSGPOOL (MSGMNI*MSGMNB/1024) /* size in kilobytes of message pool */ | 67 | #define MSGPOOL (MSGMNI * MSGMNB) /* size in bytes of message pool */ |
58 | #define MSGTQL MSGMNB /* number of system message headers */ | 68 | #define MSGTQL MSGMNB /* number of system message headers */ |
59 | #define MSGMAP MSGMNB /* number of entries in message map */ | 69 | #define MSGMAP MSGMNB /* number of entries in message map */ |
60 | #define MSGSSZ 16 /* message segment size */ | 70 | #define MSGSSZ 16 /* message segment size */ |
61 | #define __MSGSEG ((MSGPOOL*1024)/ MSGSSZ) /* max no. of segments */ | 71 | #define __MSGSEG (MSGPOOL / MSGSSZ) /* max no. of segments */ |
62 | #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) | 72 | #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) |
63 | 73 | ||
64 | #ifdef __KERNEL__ | 74 | #ifdef __KERNEL__ |
diff --git a/include/linux/mtd/inftl.h b/include/linux/mtd/inftl.h index 6977780e548f..85fd041d44ad 100644 --- a/include/linux/mtd/inftl.h +++ b/include/linux/mtd/inftl.h | |||
@@ -57,6 +57,11 @@ extern char inftlmountrev[]; | |||
57 | void INFTL_dumptables(struct INFTLrecord *s); | 57 | void INFTL_dumptables(struct INFTLrecord *s); |
58 | void INFTL_dumpVUchains(struct INFTLrecord *s); | 58 | void INFTL_dumpVUchains(struct INFTLrecord *s); |
59 | 59 | ||
60 | int inftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len, | ||
61 | size_t *retlen, uint8_t *buf); | ||
62 | int inftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len, | ||
63 | size_t *retlen, uint8_t *buf); | ||
64 | |||
60 | #endif /* __KERNEL__ */ | 65 | #endif /* __KERNEL__ */ |
61 | 66 | ||
62 | #endif /* __MTD_INFTL_H__ */ | 67 | #endif /* __MTD_INFTL_H__ */ |
diff --git a/include/linux/mtd/nftl.h b/include/linux/mtd/nftl.h index bcf2fb3fa4a7..001eec50cac6 100644 --- a/include/linux/mtd/nftl.h +++ b/include/linux/mtd/nftl.h | |||
@@ -43,6 +43,11 @@ struct NFTLrecord { | |||
43 | int NFTL_mount(struct NFTLrecord *s); | 43 | int NFTL_mount(struct NFTLrecord *s); |
44 | int NFTL_formatblock(struct NFTLrecord *s, int block); | 44 | int NFTL_formatblock(struct NFTLrecord *s, int block); |
45 | 45 | ||
46 | int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len, | ||
47 | size_t *retlen, uint8_t *buf); | ||
48 | int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len, | ||
49 | size_t *retlen, uint8_t *buf); | ||
50 | |||
46 | #ifndef NFTL_MAJOR | 51 | #ifndef NFTL_MAJOR |
47 | #define NFTL_MAJOR 93 | 52 | #define NFTL_MAJOR 93 |
48 | #endif | 53 | #endif |
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h index fd0a260e070b..9aa2a9149b58 100644 --- a/include/linux/mtd/onenand.h +++ b/include/linux/mtd/onenand.h | |||
@@ -187,4 +187,7 @@ struct onenand_manufacturers { | |||
187 | char *name; | 187 | char *name; |
188 | }; | 188 | }; |
189 | 189 | ||
190 | int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from, | ||
191 | struct mtd_oob_ops *ops); | ||
192 | |||
190 | #endif /* __LINUX_MTD_ONENAND_H */ | 193 | #endif /* __LINUX_MTD_ONENAND_H */ |
diff --git a/include/linux/mtd/plat-ram.h b/include/linux/mtd/plat-ram.h index 9667863bd7e3..0e37ad07bce2 100644 --- a/include/linux/mtd/plat-ram.h +++ b/include/linux/mtd/plat-ram.h | |||
@@ -21,8 +21,9 @@ | |||
21 | #define PLATRAM_RW (1) | 21 | #define PLATRAM_RW (1) |
22 | 22 | ||
23 | struct platdata_mtd_ram { | 23 | struct platdata_mtd_ram { |
24 | char *mapname; | 24 | const char *mapname; |
25 | char **probes; | 25 | const char **map_probes; |
26 | const char **probes; | ||
26 | struct mtd_partition *partitions; | 27 | struct mtd_partition *partitions; |
27 | int nr_partitions; | 28 | int nr_partitions; |
28 | int bankwidth; | 29 | int bankwidth; |
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index 986572081e19..155719dab813 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h | |||
@@ -56,9 +56,11 @@ struct nbd_device { | |||
56 | int magic; | 56 | int magic; |
57 | 57 | ||
58 | spinlock_t queue_lock; | 58 | spinlock_t queue_lock; |
59 | struct list_head queue_head;/* Requests are added here... */ | 59 | struct list_head queue_head; /* Requests waiting result */ |
60 | struct request *active_req; | 60 | struct request *active_req; |
61 | wait_queue_head_t active_wq; | 61 | wait_queue_head_t active_wq; |
62 | struct list_head waiting_queue; /* Requests to be sent */ | ||
63 | wait_queue_head_t waiting_wq; | ||
62 | 64 | ||
63 | struct mutex tx_lock; | 65 | struct mutex tx_lock; |
64 | struct gendisk *disk; | 66 | struct gendisk *disk; |
@@ -86,11 +88,7 @@ struct nbd_request { | |||
86 | char handle[8]; | 88 | char handle[8]; |
87 | __be64 from; | 89 | __be64 from; |
88 | __be32 len; | 90 | __be32 len; |
89 | } | 91 | } __attribute__ ((packed)); |
90 | #ifdef __GNUC__ | ||
91 | __attribute__ ((packed)) | ||
92 | #endif | ||
93 | ; | ||
94 | 92 | ||
95 | /* | 93 | /* |
96 | * This is the reply packet that nbd-server sends back to the client after | 94 | * This is the reply packet that nbd-server sends back to the client after |
diff --git a/include/linux/ncp_fs.h b/include/linux/ncp_fs.h index 88766e43e121..9f2d76347f19 100644 --- a/include/linux/ncp_fs.h +++ b/include/linux/ncp_fs.h | |||
@@ -204,6 +204,7 @@ void ncp_update_inode2(struct inode *, struct ncp_entry_info *); | |||
204 | /* linux/fs/ncpfs/dir.c */ | 204 | /* linux/fs/ncpfs/dir.c */ |
205 | extern const struct inode_operations ncp_dir_inode_operations; | 205 | extern const struct inode_operations ncp_dir_inode_operations; |
206 | extern const struct file_operations ncp_dir_operations; | 206 | extern const struct file_operations ncp_dir_operations; |
207 | extern struct dentry_operations ncp_root_dentry_operations; | ||
207 | int ncp_conn_logged_in(struct super_block *); | 208 | int ncp_conn_logged_in(struct super_block *); |
208 | int ncp_date_dos2unix(__le16 time, __le16 date); | 209 | int ncp_date_dos2unix(__le16 time, __le16 date); |
209 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); | 210 | void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); |
@@ -223,6 +224,12 @@ int ncp_disconnect(struct ncp_server *server); | |||
223 | void ncp_lock_server(struct ncp_server *server); | 224 | void ncp_lock_server(struct ncp_server *server); |
224 | void ncp_unlock_server(struct ncp_server *server); | 225 | void ncp_unlock_server(struct ncp_server *server); |
225 | 226 | ||
227 | /* linux/fs/ncpfs/symlink.c */ | ||
228 | #if defined(CONFIG_NCPFS_EXTRAS) || defined(CONFIG_NCPFS_NFS_NS) | ||
229 | extern const struct address_space_operations ncp_symlink_aops; | ||
230 | int ncp_symlink(struct inode*, struct dentry*, const char*); | ||
231 | #endif | ||
232 | |||
226 | /* linux/fs/ncpfs/file.c */ | 233 | /* linux/fs/ncpfs/file.c */ |
227 | extern const struct inode_operations ncp_file_inode_operations; | 234 | extern const struct inode_operations ncp_file_inode_operations; |
228 | extern const struct file_operations ncp_file_operations; | 235 | extern const struct file_operations ncp_file_operations; |
diff --git a/include/linux/nfs3.h b/include/linux/nfs3.h index 7f11fa589207..539f3b550eab 100644 --- a/include/linux/nfs3.h +++ b/include/linux/nfs3.h | |||
@@ -96,7 +96,7 @@ struct nfs3_fh { | |||
96 | #define MOUNTPROC3_UMNTALL 4 | 96 | #define MOUNTPROC3_UMNTALL 4 |
97 | 97 | ||
98 | 98 | ||
99 | #if defined(__KERNEL__) || defined(NFS_NEED_KERNEL_TYPES) | 99 | #if defined(__KERNEL__) |
100 | 100 | ||
101 | /* Number of 32bit words in post_op_attr */ | 101 | /* Number of 32bit words in post_op_attr */ |
102 | #define NFS3_POST_OP_ATTR_WORDS 22 | 102 | #define NFS3_POST_OP_ATTR_WORDS 22 |
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index f4a0e4c218df..27d6a8d98cef 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h | |||
@@ -430,7 +430,6 @@ extern void nfs_unregister_sysctl(void); | |||
430 | /* | 430 | /* |
431 | * linux/fs/nfs/namespace.c | 431 | * linux/fs/nfs/namespace.c |
432 | */ | 432 | */ |
433 | extern struct list_head nfs_automount_list; | ||
434 | extern const struct inode_operations nfs_mountpoint_inode_operations; | 433 | extern const struct inode_operations nfs_mountpoint_inode_operations; |
435 | extern const struct inode_operations nfs_referral_inode_operations; | 434 | extern const struct inode_operations nfs_referral_inode_operations; |
436 | extern int nfs_mountpoint_expiry_timeout; | 435 | extern int nfs_mountpoint_expiry_timeout; |
@@ -466,9 +465,9 @@ extern int nfs_wb_page(struct inode *inode, struct page* page); | |||
466 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); | 465 | extern int nfs_wb_page_cancel(struct inode *inode, struct page* page); |
467 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) | 466 | #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4) |
468 | extern int nfs_commit_inode(struct inode *, int); | 467 | extern int nfs_commit_inode(struct inode *, int); |
469 | extern struct nfs_write_data *nfs_commit_alloc(void); | 468 | extern struct nfs_write_data *nfs_commitdata_alloc(void); |
470 | extern void nfs_commit_free(struct nfs_write_data *wdata); | 469 | extern void nfs_commit_free(struct nfs_write_data *wdata); |
471 | extern void nfs_commit_release(void *wdata); | 470 | extern void nfs_commitdata_release(void *wdata); |
472 | #else | 471 | #else |
473 | static inline int | 472 | static inline int |
474 | nfs_commit_inode(struct inode *inode, int how) | 473 | nfs_commit_inode(struct inode *inode, int how) |
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 3423c6761bf7..c9beacd16c00 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h | |||
@@ -32,6 +32,8 @@ struct nfs_client { | |||
32 | const struct nfs_rpc_ops *rpc_ops; /* NFS protocol vector */ | 32 | const struct nfs_rpc_ops *rpc_ops; /* NFS protocol vector */ |
33 | int cl_proto; /* Network transport protocol */ | 33 | int cl_proto; /* Network transport protocol */ |
34 | 34 | ||
35 | struct rpc_cred *cl_machine_cred; | ||
36 | |||
35 | #ifdef CONFIG_NFS_V4 | 37 | #ifdef CONFIG_NFS_V4 |
36 | u64 cl_clientid; /* constant */ | 38 | u64 cl_clientid; /* constant */ |
37 | nfs4_verifier cl_confirm; | 39 | nfs4_verifier cl_confirm; |
@@ -93,6 +95,7 @@ struct nfs_server { | |||
93 | unsigned int wpages; /* write size (in pages) */ | 95 | unsigned int wpages; /* write size (in pages) */ |
94 | unsigned int wtmult; /* server disk block size */ | 96 | unsigned int wtmult; /* server disk block size */ |
95 | unsigned int dtsize; /* readdir size */ | 97 | unsigned int dtsize; /* readdir size */ |
98 | unsigned short port; /* "port=" setting */ | ||
96 | unsigned int bsize; /* server block size */ | 99 | unsigned int bsize; /* server block size */ |
97 | unsigned int acregmin; /* attr cache timeouts */ | 100 | unsigned int acregmin; /* attr cache timeouts */ |
98 | unsigned int acregmax; | 101 | unsigned int acregmax; |
@@ -117,6 +120,13 @@ struct nfs_server { | |||
117 | 120 | ||
118 | atomic_t active; /* Keep trace of any activity to this server */ | 121 | atomic_t active; /* Keep trace of any activity to this server */ |
119 | wait_queue_head_t active_wq; /* Wait for any activity to stop */ | 122 | wait_queue_head_t active_wq; /* Wait for any activity to stop */ |
123 | |||
124 | /* mountd-related mount options */ | ||
125 | struct sockaddr_storage mountd_address; | ||
126 | size_t mountd_addrlen; | ||
127 | u32 mountd_version; | ||
128 | unsigned short mountd_port; | ||
129 | unsigned short mountd_protocol; | ||
120 | }; | 130 | }; |
121 | 131 | ||
122 | /* Server capabilities */ | 132 | /* Server capabilities */ |
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index f301d0b8babc..24263bb8e0be 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -140,6 +140,7 @@ struct nfs_openres { | |||
140 | __u32 rflags; | 140 | __u32 rflags; |
141 | struct nfs_fattr * f_attr; | 141 | struct nfs_fattr * f_attr; |
142 | struct nfs_fattr * dir_attr; | 142 | struct nfs_fattr * dir_attr; |
143 | struct nfs_seqid * seqid; | ||
143 | const struct nfs_server *server; | 144 | const struct nfs_server *server; |
144 | int delegation_type; | 145 | int delegation_type; |
145 | nfs4_stateid delegation; | 146 | nfs4_stateid delegation; |
@@ -159,6 +160,7 @@ struct nfs_open_confirmargs { | |||
159 | 160 | ||
160 | struct nfs_open_confirmres { | 161 | struct nfs_open_confirmres { |
161 | nfs4_stateid stateid; | 162 | nfs4_stateid stateid; |
163 | struct nfs_seqid * seqid; | ||
162 | }; | 164 | }; |
163 | 165 | ||
164 | /* | 166 | /* |
@@ -175,6 +177,7 @@ struct nfs_closeargs { | |||
175 | struct nfs_closeres { | 177 | struct nfs_closeres { |
176 | nfs4_stateid stateid; | 178 | nfs4_stateid stateid; |
177 | struct nfs_fattr * fattr; | 179 | struct nfs_fattr * fattr; |
180 | struct nfs_seqid * seqid; | ||
178 | const struct nfs_server *server; | 181 | const struct nfs_server *server; |
179 | }; | 182 | }; |
180 | /* | 183 | /* |
@@ -199,7 +202,9 @@ struct nfs_lock_args { | |||
199 | }; | 202 | }; |
200 | 203 | ||
201 | struct nfs_lock_res { | 204 | struct nfs_lock_res { |
202 | nfs4_stateid stateid; | 205 | nfs4_stateid stateid; |
206 | struct nfs_seqid * lock_seqid; | ||
207 | struct nfs_seqid * open_seqid; | ||
203 | }; | 208 | }; |
204 | 209 | ||
205 | struct nfs_locku_args { | 210 | struct nfs_locku_args { |
@@ -210,7 +215,8 @@ struct nfs_locku_args { | |||
210 | }; | 215 | }; |
211 | 216 | ||
212 | struct nfs_locku_res { | 217 | struct nfs_locku_res { |
213 | nfs4_stateid stateid; | 218 | nfs4_stateid stateid; |
219 | struct nfs_seqid * seqid; | ||
214 | }; | 220 | }; |
215 | 221 | ||
216 | struct nfs_lockt_args { | 222 | struct nfs_lockt_args { |
diff --git a/include/linux/nfsd/Kbuild b/include/linux/nfsd/Kbuild index e726fc3a4375..fc972048e572 100644 --- a/include/linux/nfsd/Kbuild +++ b/include/linux/nfsd/Kbuild | |||
@@ -1,6 +1,6 @@ | |||
1 | unifdef-y += const.h | 1 | unifdef-y += const.h |
2 | unifdef-y += debug.h | ||
2 | unifdef-y += export.h | 3 | unifdef-y += export.h |
4 | unifdef-y += nfsfh.h | ||
3 | unifdef-y += stats.h | 5 | unifdef-y += stats.h |
4 | unifdef-y += syscall.h | 6 | unifdef-y += syscall.h |
5 | unifdef-y += nfsfh.h | ||
6 | unifdef-y += debug.h | ||
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h index 7b5d784cc858..04b355c801d8 100644 --- a/include/linux/nfsd/cache.h +++ b/include/linux/nfsd/cache.h | |||
@@ -10,7 +10,6 @@ | |||
10 | #ifndef NFSCACHE_H | 10 | #ifndef NFSCACHE_H |
11 | #define NFSCACHE_H | 11 | #define NFSCACHE_H |
12 | 12 | ||
13 | #ifdef __KERNEL__ | ||
14 | #include <linux/in.h> | 13 | #include <linux/in.h> |
15 | #include <linux/uio.h> | 14 | #include <linux/uio.h> |
16 | 15 | ||
@@ -77,5 +76,4 @@ void nfsd_reply_cache_shutdown(void); | |||
77 | int nfsd_cache_lookup(struct svc_rqst *, int); | 76 | int nfsd_cache_lookup(struct svc_rqst *, int); |
78 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); | 77 | void nfsd_cache_update(struct svc_rqst *, int, __be32 *); |
79 | 78 | ||
80 | #endif /* __KERNEL__ */ | ||
81 | #endif /* NFSCACHE_H */ | 79 | #endif /* NFSCACHE_H */ |
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index 8caf4c4f64e6..41d30c9c9de6 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h | |||
@@ -27,7 +27,6 @@ | |||
27 | #define NFSD_VERSION "0.5" | 27 | #define NFSD_VERSION "0.5" |
28 | #define NFSD_SUPPORTED_MINOR_VERSION 0 | 28 | #define NFSD_SUPPORTED_MINOR_VERSION 0 |
29 | 29 | ||
30 | #ifdef __KERNEL__ | ||
31 | /* | 30 | /* |
32 | * Special flags for nfsd_permission. These must be different from MAY_READ, | 31 | * Special flags for nfsd_permission. These must be different from MAY_READ, |
33 | * MAY_WRITE, and MAY_EXEC. | 32 | * MAY_WRITE, and MAY_EXEC. |
@@ -56,12 +55,20 @@ extern struct svc_program nfsd_program; | |||
56 | extern struct svc_version nfsd_version2, nfsd_version3, | 55 | extern struct svc_version nfsd_version2, nfsd_version3, |
57 | nfsd_version4; | 56 | nfsd_version4; |
58 | extern struct svc_serv *nfsd_serv; | 57 | extern struct svc_serv *nfsd_serv; |
58 | |||
59 | extern struct seq_operations nfs_exports_op; | ||
60 | |||
59 | /* | 61 | /* |
60 | * Function prototypes. | 62 | * Function prototypes. |
61 | */ | 63 | */ |
62 | int nfsd_svc(unsigned short port, int nrservs); | 64 | int nfsd_svc(unsigned short port, int nrservs); |
63 | int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp); | 65 | int nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp); |
64 | 66 | ||
67 | int nfsd_nrthreads(void); | ||
68 | int nfsd_nrpools(void); | ||
69 | int nfsd_get_nrthreads(int n, int *); | ||
70 | int nfsd_set_nrthreads(int n, int *); | ||
71 | |||
65 | /* nfsd/vfs.c */ | 72 | /* nfsd/vfs.c */ |
66 | int fh_lock_parent(struct svc_fh *, struct dentry *); | 73 | int fh_lock_parent(struct svc_fh *, struct dentry *); |
67 | int nfsd_racache_init(int); | 74 | int nfsd_racache_init(int); |
@@ -322,10 +329,8 @@ extern struct timeval nfssvc_boot; | |||
322 | (FATTR4_WORD0_SIZE | FATTR4_WORD0_ACL ) | 329 | (FATTR4_WORD0_SIZE | FATTR4_WORD0_ACL ) |
323 | #define NFSD_WRITEABLE_ATTRS_WORD1 \ | 330 | #define NFSD_WRITEABLE_ATTRS_WORD1 \ |
324 | (FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \ | 331 | (FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \ |
325 | | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_METADATA | FATTR4_WORD1_TIME_MODIFY_SET) | 332 | | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET) |
326 | 333 | ||
327 | #endif /* CONFIG_NFSD_V4 */ | 334 | #endif /* CONFIG_NFSD_V4 */ |
328 | 335 | ||
329 | #endif /* __KERNEL__ */ | ||
330 | |||
331 | #endif /* LINUX_NFSD_NFSD_H */ | 336 | #endif /* LINUX_NFSD_NFSD_H */ |
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index 905e18f4b412..848025cd7087 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -14,6 +14,8 @@ | |||
14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. | 14 | * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c. |
15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. | 15 | * For details of node_remap(), see bitmap_bitremap in lib/bitmap.c. |
16 | * For details of nodes_remap(), see bitmap_remap in lib/bitmap.c. | 16 | * For details of nodes_remap(), see bitmap_remap in lib/bitmap.c. |
17 | * For details of nodes_onto(), see bitmap_onto in lib/bitmap.c. | ||
18 | * For details of nodes_fold(), see bitmap_fold in lib/bitmap.c. | ||
17 | * | 19 | * |
18 | * The available nodemask operations are: | 20 | * The available nodemask operations are: |
19 | * | 21 | * |
@@ -55,7 +57,9 @@ | |||
55 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing | 57 | * int nodelist_scnprintf(buf, len, mask) Format nodemask as list for printing |
56 | * int nodelist_parse(buf, map) Parse ascii string as nodelist | 58 | * int nodelist_parse(buf, map) Parse ascii string as nodelist |
57 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) | 59 | * int node_remap(oldbit, old, new) newbit = map(old, new)(oldbit) |
58 | * int nodes_remap(dst, src, old, new) *dst = map(old, new)(dst) | 60 | * void nodes_remap(dst, src, old, new) *dst = map(old, new)(src) |
61 | * void nodes_onto(dst, orig, relmap) *dst = orig relative to relmap | ||
62 | * void nodes_fold(dst, orig, sz) dst bits = orig bits mod sz | ||
59 | * | 63 | * |
60 | * for_each_node_mask(node, mask) for-loop node over mask | 64 | * for_each_node_mask(node, mask) for-loop node over mask |
61 | * | 65 | * |
@@ -326,6 +330,22 @@ static inline void __nodes_remap(nodemask_t *dstp, const nodemask_t *srcp, | |||
326 | bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); | 330 | bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits); |
327 | } | 331 | } |
328 | 332 | ||
333 | #define nodes_onto(dst, orig, relmap) \ | ||
334 | __nodes_onto(&(dst), &(orig), &(relmap), MAX_NUMNODES) | ||
335 | static inline void __nodes_onto(nodemask_t *dstp, const nodemask_t *origp, | ||
336 | const nodemask_t *relmapp, int nbits) | ||
337 | { | ||
338 | bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits); | ||
339 | } | ||
340 | |||
341 | #define nodes_fold(dst, orig, sz) \ | ||
342 | __nodes_fold(&(dst), &(orig), sz, MAX_NUMNODES) | ||
343 | static inline void __nodes_fold(nodemask_t *dstp, const nodemask_t *origp, | ||
344 | int sz, int nbits) | ||
345 | { | ||
346 | bitmap_fold(dstp->bits, origp->bits, sz, nbits); | ||
347 | } | ||
348 | |||
329 | #if MAX_NUMNODES > 1 | 349 | #if MAX_NUMNODES > 1 |
330 | #define for_each_node_mask(node, mask) \ | 350 | #define for_each_node_mask(node, mask) \ |
331 | for ((node) = first_node(mask); \ | 351 | for ((node) = first_node(mask); \ |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h index f4df40038f0c..0ff6224d172a 100644 --- a/include/linux/notifier.h +++ b/include/linux/notifier.h | |||
@@ -121,6 +121,10 @@ extern int raw_notifier_chain_register(struct raw_notifier_head *nh, | |||
121 | extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh, | 121 | extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh, |
122 | struct notifier_block *nb); | 122 | struct notifier_block *nb); |
123 | 123 | ||
124 | extern int blocking_notifier_chain_cond_register( | ||
125 | struct blocking_notifier_head *nh, | ||
126 | struct notifier_block *nb); | ||
127 | |||
124 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, | 128 | extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, |
125 | struct notifier_block *nb); | 129 | struct notifier_block *nb); |
126 | extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh, | 130 | extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh, |
@@ -247,6 +251,7 @@ extern struct blocking_notifier_head reboot_notifier_list; | |||
247 | #define VT_DEALLOCATE 0x0002 /* Console will be deallocated */ | 251 | #define VT_DEALLOCATE 0x0002 /* Console will be deallocated */ |
248 | #define VT_WRITE 0x0003 /* A char got output */ | 252 | #define VT_WRITE 0x0003 /* A char got output */ |
249 | #define VT_UPDATE 0x0004 /* A bigger update occurred */ | 253 | #define VT_UPDATE 0x0004 /* A bigger update occurred */ |
254 | #define VT_PREWRITE 0x0005 /* A char is about to be written to the console */ | ||
250 | 255 | ||
251 | #endif /* __KERNEL__ */ | 256 | #endif /* __KERNEL__ */ |
252 | #endif /* _LINUX_NOTIFIER_H */ | 257 | #endif /* _LINUX_NOTIFIER_H */ |
diff --git a/include/linux/oom.h b/include/linux/oom.h index 3852436b652a..a7979baf1e39 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
@@ -23,8 +23,8 @@ enum oom_constraint { | |||
23 | CONSTRAINT_MEMORY_POLICY, | 23 | CONSTRAINT_MEMORY_POLICY, |
24 | }; | 24 | }; |
25 | 25 | ||
26 | extern int try_set_zone_oom(struct zonelist *zonelist); | 26 | extern int try_set_zone_oom(struct zonelist *zonelist, gfp_t gfp_flags); |
27 | extern void clear_zonelist_oom(struct zonelist *zonelist); | 27 | extern void clear_zonelist_oom(struct zonelist *zonelist, gfp_t gfp_flags); |
28 | 28 | ||
29 | extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order); | 29 | extern void out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, int order); |
30 | extern int register_oom_notifier(struct notifier_block *nb); | 30 | extern int register_oom_notifier(struct notifier_block *nb); |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index b5b30f1c1e59..590cff32415d 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
@@ -6,7 +6,10 @@ | |||
6 | #define PAGE_FLAGS_H | 6 | #define PAGE_FLAGS_H |
7 | 7 | ||
8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
9 | #ifndef __GENERATING_BOUNDS_H | ||
9 | #include <linux/mm_types.h> | 10 | #include <linux/mm_types.h> |
11 | #include <linux/bounds.h> | ||
12 | #endif /* !__GENERATING_BOUNDS_H */ | ||
10 | 13 | ||
11 | /* | 14 | /* |
12 | * Various page->flags bits: | 15 | * Various page->flags bits: |
@@ -59,77 +62,138 @@ | |||
59 | * extends from the high bits downwards. | 62 | * extends from the high bits downwards. |
60 | * | 63 | * |
61 | * | FIELD | ... | FLAGS | | 64 | * | FIELD | ... | FLAGS | |
62 | * N-1 ^ 0 | 65 | * N-1 ^ 0 |
63 | * (N-FLAGS_RESERVED) | 66 | * (NR_PAGEFLAGS) |
64 | * | 67 | * |
65 | * The fields area is reserved for fields mapping zone, node and SPARSEMEM | 68 | * The fields area is reserved for fields mapping zone, node (for NUMA) and |
66 | * section. The boundry between these two areas is defined by | 69 | * SPARSEMEM section (for variants of SPARSEMEM that require section ids like |
67 | * FLAGS_RESERVED which defines the width of the fields section | 70 | * SPARSEMEM_EXTREME with !SPARSEMEM_VMEMMAP). |
68 | * (see linux/mmzone.h). New flags must _not_ overlap with this area. | ||
69 | */ | 71 | */ |
70 | #define PG_locked 0 /* Page is locked. Don't touch. */ | 72 | enum pageflags { |
71 | #define PG_error 1 | 73 | PG_locked, /* Page is locked. Don't touch. */ |
72 | #define PG_referenced 2 | 74 | PG_error, |
73 | #define PG_uptodate 3 | 75 | PG_referenced, |
76 | PG_uptodate, | ||
77 | PG_dirty, | ||
78 | PG_lru, | ||
79 | PG_active, | ||
80 | PG_slab, | ||
81 | PG_owner_priv_1, /* Owner use. If pagecache, fs may use*/ | ||
82 | PG_arch_1, | ||
83 | PG_reserved, | ||
84 | PG_private, /* If pagecache, has fs-private data */ | ||
85 | PG_writeback, /* Page is under writeback */ | ||
86 | #ifdef CONFIG_PAGEFLAGS_EXTENDED | ||
87 | PG_head, /* A head page */ | ||
88 | PG_tail, /* A tail page */ | ||
89 | #else | ||
90 | PG_compound, /* A compound page */ | ||
91 | #endif | ||
92 | PG_swapcache, /* Swap page: swp_entry_t in private */ | ||
93 | PG_mappedtodisk, /* Has blocks allocated on-disk */ | ||
94 | PG_reclaim, /* To be reclaimed asap */ | ||
95 | PG_buddy, /* Page is free, on buddy lists */ | ||
96 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR | ||
97 | PG_uncached, /* Page has been mapped as uncached */ | ||
98 | #endif | ||
99 | __NR_PAGEFLAGS | ||
100 | }; | ||
101 | |||
102 | #ifndef __GENERATING_BOUNDS_H | ||
103 | |||
104 | /* | ||
105 | * Macros to create function definitions for page flags | ||
106 | */ | ||
107 | #define TESTPAGEFLAG(uname, lname) \ | ||
108 | static inline int Page##uname(struct page *page) \ | ||
109 | { return test_bit(PG_##lname, &page->flags); } | ||
74 | 110 | ||
75 | #define PG_dirty 4 | 111 | #define SETPAGEFLAG(uname, lname) \ |
76 | #define PG_lru 5 | 112 | static inline void SetPage##uname(struct page *page) \ |
77 | #define PG_active 6 | 113 | { set_bit(PG_##lname, &page->flags); } |
78 | #define PG_slab 7 /* slab debug (Suparna wants this) */ | ||
79 | 114 | ||
80 | #define PG_owner_priv_1 8 /* Owner use. If pagecache, fs may use*/ | 115 | #define CLEARPAGEFLAG(uname, lname) \ |
81 | #define PG_arch_1 9 | 116 | static inline void ClearPage##uname(struct page *page) \ |
82 | #define PG_reserved 10 | 117 | { clear_bit(PG_##lname, &page->flags); } |
83 | #define PG_private 11 /* If pagecache, has fs-private data */ | ||
84 | 118 | ||
85 | #define PG_writeback 12 /* Page is under writeback */ | 119 | #define __SETPAGEFLAG(uname, lname) \ |
86 | #define PG_compound 14 /* Part of a compound page */ | 120 | static inline void __SetPage##uname(struct page *page) \ |
87 | #define PG_swapcache 15 /* Swap page: swp_entry_t in private */ | 121 | { __set_bit(PG_##lname, &page->flags); } |
88 | 122 | ||
89 | #define PG_mappedtodisk 16 /* Has blocks allocated on-disk */ | 123 | #define __CLEARPAGEFLAG(uname, lname) \ |
90 | #define PG_reclaim 17 /* To be reclaimed asap */ | 124 | static inline void __ClearPage##uname(struct page *page) \ |
91 | #define PG_buddy 19 /* Page is free, on buddy lists */ | 125 | { __clear_bit(PG_##lname, &page->flags); } |
126 | |||
127 | #define TESTSETFLAG(uname, lname) \ | ||
128 | static inline int TestSetPage##uname(struct page *page) \ | ||
129 | { return test_and_set_bit(PG_##lname, &page->flags); } | ||
130 | |||
131 | #define TESTCLEARFLAG(uname, lname) \ | ||
132 | static inline int TestClearPage##uname(struct page *page) \ | ||
133 | { return test_and_clear_bit(PG_##lname, &page->flags); } | ||
92 | 134 | ||
93 | /* PG_readahead is only used for file reads; PG_reclaim is only for writes */ | ||
94 | #define PG_readahead PG_reclaim /* Reminder to do async read-ahead */ | ||
95 | 135 | ||
96 | /* PG_owner_priv_1 users should have descriptive aliases */ | 136 | #define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ |
97 | #define PG_checked PG_owner_priv_1 /* Used by some filesystems */ | 137 | SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) |
98 | #define PG_pinned PG_owner_priv_1 /* Xen pinned pagetable */ | 138 | |
139 | #define __PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ | ||
140 | __SETPAGEFLAG(uname, lname) __CLEARPAGEFLAG(uname, lname) | ||
141 | |||
142 | #define PAGEFLAG_FALSE(uname) \ | ||
143 | static inline int Page##uname(struct page *page) \ | ||
144 | { return 0; } | ||
145 | |||
146 | #define TESTSCFLAG(uname, lname) \ | ||
147 | TESTSETFLAG(uname, lname) TESTCLEARFLAG(uname, lname) | ||
148 | |||
149 | struct page; /* forward declaration */ | ||
150 | |||
151 | PAGEFLAG(Locked, locked) TESTSCFLAG(Locked, locked) | ||
152 | PAGEFLAG(Error, error) | ||
153 | PAGEFLAG(Referenced, referenced) TESTCLEARFLAG(Referenced, referenced) | ||
154 | PAGEFLAG(Dirty, dirty) TESTSCFLAG(Dirty, dirty) __CLEARPAGEFLAG(Dirty, dirty) | ||
155 | PAGEFLAG(LRU, lru) __CLEARPAGEFLAG(LRU, lru) | ||
156 | PAGEFLAG(Active, active) __CLEARPAGEFLAG(Active, active) | ||
157 | __PAGEFLAG(Slab, slab) | ||
158 | PAGEFLAG(Checked, owner_priv_1) /* Used by some filesystems */ | ||
159 | PAGEFLAG(Pinned, owner_priv_1) TESTSCFLAG(Pinned, owner_priv_1) /* Xen */ | ||
160 | PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved) | ||
161 | PAGEFLAG(Private, private) __CLEARPAGEFLAG(Private, private) | ||
162 | __SETPAGEFLAG(Private, private) | ||
99 | 163 | ||
100 | #if (BITS_PER_LONG > 32) | ||
101 | /* | 164 | /* |
102 | * 64-bit-only flags build down from bit 31 | 165 | * Only test-and-set exist for PG_writeback. The unconditional operators are |
103 | * | 166 | * risky: they bypass page accounting. |
104 | * 32 bit -------------------------------| FIELDS | FLAGS | | ||
105 | * 64 bit | FIELDS | ?????? FLAGS | | ||
106 | * 63 32 0 | ||
107 | */ | 167 | */ |
108 | #define PG_uncached 31 /* Page has been mapped as uncached */ | 168 | TESTPAGEFLAG(Writeback, writeback) TESTSCFLAG(Writeback, writeback) |
109 | #endif | 169 | __PAGEFLAG(Buddy, buddy) |
170 | PAGEFLAG(MappedToDisk, mappedtodisk) | ||
110 | 171 | ||
172 | /* PG_readahead is only used for file reads; PG_reclaim is only for writes */ | ||
173 | PAGEFLAG(Reclaim, reclaim) TESTCLEARFLAG(Reclaim, reclaim) | ||
174 | PAGEFLAG(Readahead, reclaim) /* Reminder to do async read-ahead */ | ||
175 | |||
176 | #ifdef CONFIG_HIGHMEM | ||
111 | /* | 177 | /* |
112 | * Manipulation of page state flags | 178 | * Must use a macro here due to header dependency issues. page_zone() is not |
179 | * available at this point. | ||
113 | */ | 180 | */ |
114 | #define PageLocked(page) \ | 181 | #define PageHighMem(__p) is_highmem(page_zone(__p)) |
115 | test_bit(PG_locked, &(page)->flags) | 182 | #else |
116 | #define SetPageLocked(page) \ | 183 | PAGEFLAG_FALSE(HighMem) |
117 | set_bit(PG_locked, &(page)->flags) | 184 | #endif |
118 | #define TestSetPageLocked(page) \ | 185 | |
119 | test_and_set_bit(PG_locked, &(page)->flags) | 186 | #ifdef CONFIG_SWAP |
120 | #define ClearPageLocked(page) \ | 187 | PAGEFLAG(SwapCache, swapcache) |
121 | clear_bit(PG_locked, &(page)->flags) | 188 | #else |
122 | #define TestClearPageLocked(page) \ | 189 | PAGEFLAG_FALSE(SwapCache) |
123 | test_and_clear_bit(PG_locked, &(page)->flags) | 190 | #endif |
124 | 191 | ||
125 | #define PageError(page) test_bit(PG_error, &(page)->flags) | 192 | #ifdef CONFIG_IA64_UNCACHED_ALLOCATOR |
126 | #define SetPageError(page) set_bit(PG_error, &(page)->flags) | 193 | PAGEFLAG(Uncached, uncached) |
127 | #define ClearPageError(page) clear_bit(PG_error, &(page)->flags) | 194 | #else |
128 | 195 | PAGEFLAG_FALSE(Uncached) | |
129 | #define PageReferenced(page) test_bit(PG_referenced, &(page)->flags) | 196 | #endif |
130 | #define SetPageReferenced(page) set_bit(PG_referenced, &(page)->flags) | ||
131 | #define ClearPageReferenced(page) clear_bit(PG_referenced, &(page)->flags) | ||
132 | #define TestClearPageReferenced(page) test_and_clear_bit(PG_referenced, &(page)->flags) | ||
133 | 197 | ||
134 | static inline int PageUptodate(struct page *page) | 198 | static inline int PageUptodate(struct page *page) |
135 | { | 199 | { |
@@ -177,97 +241,59 @@ static inline void SetPageUptodate(struct page *page) | |||
177 | #endif | 241 | #endif |
178 | } | 242 | } |
179 | 243 | ||
180 | #define ClearPageUptodate(page) clear_bit(PG_uptodate, &(page)->flags) | 244 | CLEARPAGEFLAG(Uptodate, uptodate) |
181 | |||
182 | #define PageDirty(page) test_bit(PG_dirty, &(page)->flags) | ||
183 | #define SetPageDirty(page) set_bit(PG_dirty, &(page)->flags) | ||
184 | #define TestSetPageDirty(page) test_and_set_bit(PG_dirty, &(page)->flags) | ||
185 | #define ClearPageDirty(page) clear_bit(PG_dirty, &(page)->flags) | ||
186 | #define __ClearPageDirty(page) __clear_bit(PG_dirty, &(page)->flags) | ||
187 | #define TestClearPageDirty(page) test_and_clear_bit(PG_dirty, &(page)->flags) | ||
188 | |||
189 | #define PageLRU(page) test_bit(PG_lru, &(page)->flags) | ||
190 | #define SetPageLRU(page) set_bit(PG_lru, &(page)->flags) | ||
191 | #define ClearPageLRU(page) clear_bit(PG_lru, &(page)->flags) | ||
192 | #define __ClearPageLRU(page) __clear_bit(PG_lru, &(page)->flags) | ||
193 | |||
194 | #define PageActive(page) test_bit(PG_active, &(page)->flags) | ||
195 | #define SetPageActive(page) set_bit(PG_active, &(page)->flags) | ||
196 | #define ClearPageActive(page) clear_bit(PG_active, &(page)->flags) | ||
197 | #define __ClearPageActive(page) __clear_bit(PG_active, &(page)->flags) | ||
198 | |||
199 | #define PageSlab(page) test_bit(PG_slab, &(page)->flags) | ||
200 | #define __SetPageSlab(page) __set_bit(PG_slab, &(page)->flags) | ||
201 | #define __ClearPageSlab(page) __clear_bit(PG_slab, &(page)->flags) | ||
202 | |||
203 | #ifdef CONFIG_HIGHMEM | ||
204 | #define PageHighMem(page) is_highmem(page_zone(page)) | ||
205 | #else | ||
206 | #define PageHighMem(page) 0 /* needed to optimize away at compile time */ | ||
207 | #endif | ||
208 | 245 | ||
209 | #define PageChecked(page) test_bit(PG_checked, &(page)->flags) | 246 | extern void cancel_dirty_page(struct page *page, unsigned int account_size); |
210 | #define SetPageChecked(page) set_bit(PG_checked, &(page)->flags) | ||
211 | #define ClearPageChecked(page) clear_bit(PG_checked, &(page)->flags) | ||
212 | |||
213 | #define PagePinned(page) test_bit(PG_pinned, &(page)->flags) | ||
214 | #define SetPagePinned(page) set_bit(PG_pinned, &(page)->flags) | ||
215 | #define ClearPagePinned(page) clear_bit(PG_pinned, &(page)->flags) | ||
216 | 247 | ||
217 | #define PageReserved(page) test_bit(PG_reserved, &(page)->flags) | 248 | int test_clear_page_writeback(struct page *page); |
218 | #define SetPageReserved(page) set_bit(PG_reserved, &(page)->flags) | 249 | int test_set_page_writeback(struct page *page); |
219 | #define ClearPageReserved(page) clear_bit(PG_reserved, &(page)->flags) | ||
220 | #define __ClearPageReserved(page) __clear_bit(PG_reserved, &(page)->flags) | ||
221 | 250 | ||
222 | #define SetPagePrivate(page) set_bit(PG_private, &(page)->flags) | 251 | static inline void set_page_writeback(struct page *page) |
223 | #define ClearPagePrivate(page) clear_bit(PG_private, &(page)->flags) | 252 | { |
224 | #define PagePrivate(page) test_bit(PG_private, &(page)->flags) | 253 | test_set_page_writeback(page); |
225 | #define __SetPagePrivate(page) __set_bit(PG_private, &(page)->flags) | 254 | } |
226 | #define __ClearPagePrivate(page) __clear_bit(PG_private, &(page)->flags) | ||
227 | 255 | ||
256 | #ifdef CONFIG_PAGEFLAGS_EXTENDED | ||
228 | /* | 257 | /* |
229 | * Only test-and-set exist for PG_writeback. The unconditional operators are | 258 | * System with lots of page flags available. This allows separate |
230 | * risky: they bypass page accounting. | 259 | * flags for PageHead() and PageTail() checks of compound pages so that bit |
260 | * tests can be used in performance sensitive paths. PageCompound is | ||
261 | * generally not used in hot code paths. | ||
231 | */ | 262 | */ |
232 | #define PageWriteback(page) test_bit(PG_writeback, &(page)->flags) | 263 | __PAGEFLAG(Head, head) |
233 | #define TestSetPageWriteback(page) test_and_set_bit(PG_writeback, \ | 264 | __PAGEFLAG(Tail, tail) |
234 | &(page)->flags) | ||
235 | #define TestClearPageWriteback(page) test_and_clear_bit(PG_writeback, \ | ||
236 | &(page)->flags) | ||
237 | 265 | ||
238 | #define PageBuddy(page) test_bit(PG_buddy, &(page)->flags) | 266 | static inline int PageCompound(struct page *page) |
239 | #define __SetPageBuddy(page) __set_bit(PG_buddy, &(page)->flags) | 267 | { |
240 | #define __ClearPageBuddy(page) __clear_bit(PG_buddy, &(page)->flags) | 268 | return page->flags & ((1L << PG_head) | (1L << PG_tail)); |
241 | |||
242 | #define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags) | ||
243 | #define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags) | ||
244 | #define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags) | ||
245 | |||
246 | #define PageReadahead(page) test_bit(PG_readahead, &(page)->flags) | ||
247 | #define SetPageReadahead(page) set_bit(PG_readahead, &(page)->flags) | ||
248 | #define ClearPageReadahead(page) clear_bit(PG_readahead, &(page)->flags) | ||
249 | |||
250 | #define PageReclaim(page) test_bit(PG_reclaim, &(page)->flags) | ||
251 | #define SetPageReclaim(page) set_bit(PG_reclaim, &(page)->flags) | ||
252 | #define ClearPageReclaim(page) clear_bit(PG_reclaim, &(page)->flags) | ||
253 | #define TestClearPageReclaim(page) test_and_clear_bit(PG_reclaim, &(page)->flags) | ||
254 | 269 | ||
255 | #define PageCompound(page) test_bit(PG_compound, &(page)->flags) | 270 | } |
256 | #define __SetPageCompound(page) __set_bit(PG_compound, &(page)->flags) | 271 | #else |
257 | #define __ClearPageCompound(page) __clear_bit(PG_compound, &(page)->flags) | 272 | /* |
273 | * Reduce page flag use as much as possible by overlapping | ||
274 | * compound page flags with the flags used for page cache pages. Possible | ||
275 | * because PageCompound is always set for compound pages and not for | ||
276 | * pages on the LRU and/or pagecache. | ||
277 | */ | ||
278 | TESTPAGEFLAG(Compound, compound) | ||
279 | __PAGEFLAG(Head, compound) | ||
258 | 280 | ||
259 | /* | 281 | /* |
260 | * PG_reclaim is used in combination with PG_compound to mark the | 282 | * PG_reclaim is used in combination with PG_compound to mark the |
261 | * head and tail of a compound page | 283 | * head and tail of a compound page. This saves one page flag |
284 | * but makes it impossible to use compound pages for the page cache. | ||
285 | * The PG_reclaim bit would have to be used for reclaim or readahead | ||
286 | * if compound pages enter the page cache. | ||
262 | * | 287 | * |
263 | * PG_compound & PG_reclaim => Tail page | 288 | * PG_compound & PG_reclaim => Tail page |
264 | * PG_compound & ~PG_reclaim => Head page | 289 | * PG_compound & ~PG_reclaim => Head page |
265 | */ | 290 | */ |
266 | |||
267 | #define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim)) | 291 | #define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim)) |
268 | 292 | ||
269 | #define PageTail(page) (((page)->flags & PG_head_tail_mask) \ | 293 | static inline int PageTail(struct page *page) |
270 | == PG_head_tail_mask) | 294 | { |
295 | return ((page->flags & PG_head_tail_mask) == PG_head_tail_mask); | ||
296 | } | ||
271 | 297 | ||
272 | static inline void __SetPageTail(struct page *page) | 298 | static inline void __SetPageTail(struct page *page) |
273 | { | 299 | { |
@@ -279,33 +305,6 @@ static inline void __ClearPageTail(struct page *page) | |||
279 | page->flags &= ~PG_head_tail_mask; | 305 | page->flags &= ~PG_head_tail_mask; |
280 | } | 306 | } |
281 | 307 | ||
282 | #define PageHead(page) (((page)->flags & PG_head_tail_mask) \ | 308 | #endif /* !PAGEFLAGS_EXTENDED */ |
283 | == (1L << PG_compound)) | 309 | #endif /* !__GENERATING_BOUNDS_H */ |
284 | #define __SetPageHead(page) __SetPageCompound(page) | ||
285 | #define __ClearPageHead(page) __ClearPageCompound(page) | ||
286 | |||
287 | #ifdef CONFIG_SWAP | ||
288 | #define PageSwapCache(page) test_bit(PG_swapcache, &(page)->flags) | ||
289 | #define SetPageSwapCache(page) set_bit(PG_swapcache, &(page)->flags) | ||
290 | #define ClearPageSwapCache(page) clear_bit(PG_swapcache, &(page)->flags) | ||
291 | #else | ||
292 | #define PageSwapCache(page) 0 | ||
293 | #endif | ||
294 | |||
295 | #define PageUncached(page) test_bit(PG_uncached, &(page)->flags) | ||
296 | #define SetPageUncached(page) set_bit(PG_uncached, &(page)->flags) | ||
297 | #define ClearPageUncached(page) clear_bit(PG_uncached, &(page)->flags) | ||
298 | |||
299 | struct page; /* forward declaration */ | ||
300 | |||
301 | extern void cancel_dirty_page(struct page *page, unsigned int account_size); | ||
302 | |||
303 | int test_clear_page_writeback(struct page *page); | ||
304 | int test_set_page_writeback(struct page *page); | ||
305 | |||
306 | static inline void set_page_writeback(struct page *page) | ||
307 | { | ||
308 | test_set_page_writeback(page); | ||
309 | } | ||
310 | |||
311 | #endif /* PAGE_FLAGS_H */ | 310 | #endif /* PAGE_FLAGS_H */ |
diff --git a/include/linux/pci.h b/include/linux/pci.h index e09c57e9c373..96acd0dae241 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -254,7 +254,7 @@ static inline void pci_add_saved_cap(struct pci_dev *pci_dev, | |||
254 | #define PCI_NUM_RESOURCES 11 | 254 | #define PCI_NUM_RESOURCES 11 |
255 | 255 | ||
256 | #ifndef PCI_BUS_NUM_RESOURCES | 256 | #ifndef PCI_BUS_NUM_RESOURCES |
257 | #define PCI_BUS_NUM_RESOURCES 8 | 257 | #define PCI_BUS_NUM_RESOURCES 16 |
258 | #endif | 258 | #endif |
259 | 259 | ||
260 | #define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ | 260 | #define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ |
@@ -666,6 +666,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, | |||
666 | 666 | ||
667 | void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *), | 667 | void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *), |
668 | void *userdata); | 668 | void *userdata); |
669 | int pci_cfg_space_size_ext(struct pci_dev *dev, unsigned check_exp_pcix); | ||
669 | int pci_cfg_space_size(struct pci_dev *dev); | 670 | int pci_cfg_space_size(struct pci_dev *dev); |
670 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); | 671 | unsigned char pci_bus_max_busnr(struct pci_bus *bus); |
671 | 672 | ||
@@ -1059,5 +1060,13 @@ extern unsigned long pci_cardbus_mem_size; | |||
1059 | 1060 | ||
1060 | extern int pcibios_add_platform_entries(struct pci_dev *dev); | 1061 | extern int pcibios_add_platform_entries(struct pci_dev *dev); |
1061 | 1062 | ||
1063 | #ifdef CONFIG_PCI_MMCONFIG | ||
1064 | extern void __init pci_mmcfg_early_init(void); | ||
1065 | extern void __init pci_mmcfg_late_init(void); | ||
1066 | #else | ||
1067 | static inline void pci_mmcfg_early_init(void) { } | ||
1068 | static inline void pci_mmcfg_late_init(void) { } | ||
1069 | #endif | ||
1070 | |||
1062 | #endif /* __KERNEL__ */ | 1071 | #endif /* __KERNEL__ */ |
1063 | #endif /* LINUX_PCI_H */ | 1072 | #endif /* LINUX_PCI_H */ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 1ac969724bb2..d746a2abb322 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -4,7 +4,6 @@ | |||
4 | #include <linux/preempt.h> | 4 | #include <linux/preempt.h> |
5 | #include <linux/slab.h> /* For kmalloc() */ | 5 | #include <linux/slab.h> /* For kmalloc() */ |
6 | #include <linux/smp.h> | 6 | #include <linux/smp.h> |
7 | #include <linux/string.h> /* For memset() */ | ||
8 | #include <linux/cpumask.h> | 7 | #include <linux/cpumask.h> |
9 | 8 | ||
10 | #include <asm/percpu.h> | 9 | #include <asm/percpu.h> |
diff --git a/include/linux/personality.h b/include/linux/personality.h index 012cd558189b..a84e9ff9b27e 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
@@ -105,10 +105,6 @@ struct exec_domain { | |||
105 | */ | 105 | */ |
106 | #define personality(pers) (pers & PER_MASK) | 106 | #define personality(pers) (pers & PER_MASK) |
107 | 107 | ||
108 | /* | ||
109 | * Personality of the currently running process. | ||
110 | */ | ||
111 | #define get_personality (current->personality) | ||
112 | 108 | ||
113 | /* | 109 | /* |
114 | * Change personality of the currently running process. | 110 | * Change personality of the currently running process. |
diff --git a/include/linux/phantom.h b/include/linux/phantom.h index 96f4048a6cc3..02268c54c250 100644 --- a/include/linux/phantom.h +++ b/include/linux/phantom.h | |||
@@ -27,14 +27,17 @@ struct phm_regs { | |||
27 | 27 | ||
28 | #define PH_IOC_MAGIC 'p' | 28 | #define PH_IOC_MAGIC 'p' |
29 | #define PHN_GET_REG _IOWR(PH_IOC_MAGIC, 0, struct phm_reg *) | 29 | #define PHN_GET_REG _IOWR(PH_IOC_MAGIC, 0, struct phm_reg *) |
30 | #define PHN_SET_REG _IOW (PH_IOC_MAGIC, 1, struct phm_reg *) | 30 | #define PHN_SET_REG _IOW(PH_IOC_MAGIC, 1, struct phm_reg *) |
31 | #define PHN_GET_REGS _IOWR(PH_IOC_MAGIC, 2, struct phm_regs *) | 31 | #define PHN_GET_REGS _IOWR(PH_IOC_MAGIC, 2, struct phm_regs *) |
32 | #define PHN_SET_REGS _IOW (PH_IOC_MAGIC, 3, struct phm_regs *) | 32 | #define PHN_SET_REGS _IOW(PH_IOC_MAGIC, 3, struct phm_regs *) |
33 | /* this ioctl tells the driver, that the caller is not OpenHaptics and might | 33 | /* this ioctl tells the driver, that the caller is not OpenHaptics and might |
34 | * use improved registers update (no more phantom switchoffs when using | 34 | * use improved registers update (no more phantom switchoffs when using |
35 | * libphantom) */ | 35 | * libphantom) */ |
36 | #define PHN_NOT_OH _IO (PH_IOC_MAGIC, 4) | 36 | #define PHN_NOT_OH _IO(PH_IOC_MAGIC, 4) |
37 | #define PH_IOC_MAXNR 4 | 37 | #define PHN_GETREG _IOWR(PH_IOC_MAGIC, 5, struct phm_reg) |
38 | #define PHN_SETREG _IOW(PH_IOC_MAGIC, 6, struct phm_reg) | ||
39 | #define PHN_GETREGS _IOWR(PH_IOC_MAGIC, 7, struct phm_regs) | ||
40 | #define PHN_SETREGS _IOW(PH_IOC_MAGIC, 8, struct phm_regs) | ||
38 | 41 | ||
39 | #define PHN_CONTROL 0x6 /* control byte in iaddr space */ | 42 | #define PHN_CONTROL 0x6 /* control byte in iaddr space */ |
40 | #define PHN_CTL_AMP 0x1 /* switch after torques change */ | 43 | #define PHN_CTL_AMP 0x1 /* switch after torques change */ |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 779cbcd65f62..02df20f085fe 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -379,6 +379,18 @@ struct phy_driver { | |||
379 | }; | 379 | }; |
380 | #define to_phy_driver(d) container_of(d, struct phy_driver, driver) | 380 | #define to_phy_driver(d) container_of(d, struct phy_driver, driver) |
381 | 381 | ||
382 | #define PHY_ANY_ID "MATCH ANY PHY" | ||
383 | #define PHY_ANY_UID 0xffffffff | ||
384 | |||
385 | /* A Structure for boards to register fixups with the PHY Lib */ | ||
386 | struct phy_fixup { | ||
387 | struct list_head list; | ||
388 | char bus_id[BUS_ID_SIZE]; | ||
389 | u32 phy_uid; | ||
390 | u32 phy_uid_mask; | ||
391 | int (*run)(struct phy_device *phydev); | ||
392 | }; | ||
393 | |||
382 | int phy_read(struct phy_device *phydev, u16 regnum); | 394 | int phy_read(struct phy_device *phydev, u16 regnum); |
383 | int phy_write(struct phy_device *phydev, u16 regnum, u16 val); | 395 | int phy_write(struct phy_device *phydev, u16 regnum, u16 val); |
384 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); | 396 | int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id); |
@@ -386,8 +398,8 @@ struct phy_device* get_phy_device(struct mii_bus *bus, int addr); | |||
386 | int phy_clear_interrupt(struct phy_device *phydev); | 398 | int phy_clear_interrupt(struct phy_device *phydev); |
387 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); | 399 | int phy_config_interrupt(struct phy_device *phydev, u32 interrupts); |
388 | struct phy_device * phy_attach(struct net_device *dev, | 400 | struct phy_device * phy_attach(struct net_device *dev, |
389 | const char *phy_id, u32 flags, phy_interface_t interface); | 401 | const char *bus_id, u32 flags, phy_interface_t interface); |
390 | struct phy_device * phy_connect(struct net_device *dev, const char *phy_id, | 402 | struct phy_device * phy_connect(struct net_device *dev, const char *bus_id, |
391 | void (*handler)(struct net_device *), u32 flags, | 403 | void (*handler)(struct net_device *), u32 flags, |
392 | phy_interface_t interface); | 404 | phy_interface_t interface); |
393 | void phy_disconnect(struct phy_device *phydev); | 405 | void phy_disconnect(struct phy_device *phydev); |
@@ -427,5 +439,13 @@ void phy_print_status(struct phy_device *phydev); | |||
427 | struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id); | 439 | struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id); |
428 | void phy_device_free(struct phy_device *phydev); | 440 | void phy_device_free(struct phy_device *phydev); |
429 | 441 | ||
442 | int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, | ||
443 | int (*run)(struct phy_device *)); | ||
444 | int phy_register_fixup_for_id(const char *bus_id, | ||
445 | int (*run)(struct phy_device *)); | ||
446 | int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask, | ||
447 | int (*run)(struct phy_device *)); | ||
448 | int phy_scan_fixups(struct phy_device *phydev); | ||
449 | |||
430 | extern struct bus_type mdio_bus_type; | 450 | extern struct bus_type mdio_bus_type; |
431 | #endif /* __PHY_H */ | 451 | #endif /* __PHY_H */ |
diff --git a/include/linux/prctl.h b/include/linux/prctl.h index 5c80b1939636..5ad79198d6f9 100644 --- a/include/linux/prctl.h +++ b/include/linux/prctl.h | |||
@@ -16,7 +16,8 @@ | |||
16 | # define PR_UNALIGN_NOPRINT 1 /* silently fix up unaligned user accesses */ | 16 | # define PR_UNALIGN_NOPRINT 1 /* silently fix up unaligned user accesses */ |
17 | # define PR_UNALIGN_SIGBUS 2 /* generate SIGBUS on unaligned user access */ | 17 | # define PR_UNALIGN_SIGBUS 2 /* generate SIGBUS on unaligned user access */ |
18 | 18 | ||
19 | /* Get/set whether or not to drop capabilities on setuid() away from uid 0 */ | 19 | /* Get/set whether or not to drop capabilities on setuid() away from |
20 | * uid 0 (as per security/commoncap.c) */ | ||
20 | #define PR_GET_KEEPCAPS 7 | 21 | #define PR_GET_KEEPCAPS 7 |
21 | #define PR_SET_KEEPCAPS 8 | 22 | #define PR_SET_KEEPCAPS 8 |
22 | 23 | ||
@@ -63,7 +64,7 @@ | |||
63 | #define PR_GET_SECCOMP 21 | 64 | #define PR_GET_SECCOMP 21 |
64 | #define PR_SET_SECCOMP 22 | 65 | #define PR_SET_SECCOMP 22 |
65 | 66 | ||
66 | /* Get/set the capability bounding set */ | 67 | /* Get/set the capability bounding set (as per security/commoncap.c) */ |
67 | #define PR_CAPBSET_READ 23 | 68 | #define PR_CAPBSET_READ 23 |
68 | #define PR_CAPBSET_DROP 24 | 69 | #define PR_CAPBSET_DROP 24 |
69 | 70 | ||
@@ -73,4 +74,8 @@ | |||
73 | # define PR_TSC_ENABLE 1 /* allow the use of the timestamp counter */ | 74 | # define PR_TSC_ENABLE 1 /* allow the use of the timestamp counter */ |
74 | # define PR_TSC_SIGSEGV 2 /* throw a SIGSEGV instead of reading the TSC */ | 75 | # define PR_TSC_SIGSEGV 2 /* throw a SIGSEGV instead of reading the TSC */ |
75 | 76 | ||
77 | /* Get/set securebits (as per security/commoncap.c) */ | ||
78 | #define PR_GET_SECUREBITS 27 | ||
79 | #define PR_SET_SECUREBITS 28 | ||
80 | |||
76 | #endif /* _LINUX_PRCTL_H */ | 81 | #endif /* _LINUX_PRCTL_H */ |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 9b6c935f69cf..9883bc942262 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h | |||
@@ -9,7 +9,6 @@ | |||
9 | 9 | ||
10 | struct net; | 10 | struct net; |
11 | struct completion; | 11 | struct completion; |
12 | |||
13 | /* | 12 | /* |
14 | * The proc filesystem constants/structures | 13 | * The proc filesystem constants/structures |
15 | */ | 14 | */ |
@@ -41,7 +40,7 @@ enum { | |||
41 | * /proc file has a parent, but "subdir" is NULL for all | 40 | * /proc file has a parent, but "subdir" is NULL for all |
42 | * non-directory entries). | 41 | * non-directory entries). |
43 | * | 42 | * |
44 | * "get_info" is called at "read", while "owner" is used to protect module | 43 | * "owner" is used to protect module |
45 | * from unloading while proc_dir_entry is in use | 44 | * from unloading while proc_dir_entry is in use |
46 | */ | 45 | */ |
47 | 46 | ||
@@ -49,7 +48,6 @@ typedef int (read_proc_t)(char *page, char **start, off_t off, | |||
49 | int count, int *eof, void *data); | 48 | int count, int *eof, void *data); |
50 | typedef int (write_proc_t)(struct file *file, const char __user *buffer, | 49 | typedef int (write_proc_t)(struct file *file, const char __user *buffer, |
51 | unsigned long count, void *data); | 50 | unsigned long count, void *data); |
52 | typedef int (get_info_t)(char *, char **, off_t, int); | ||
53 | 51 | ||
54 | struct proc_dir_entry { | 52 | struct proc_dir_entry { |
55 | unsigned int low_ino; | 53 | unsigned int low_ino; |
@@ -70,7 +68,6 @@ struct proc_dir_entry { | |||
70 | * somewhere. | 68 | * somewhere. |
71 | */ | 69 | */ |
72 | const struct file_operations *proc_fops; | 70 | const struct file_operations *proc_fops; |
73 | get_info_t *get_info; | ||
74 | struct module *owner; | 71 | struct module *owner; |
75 | struct proc_dir_entry *next, *parent, *subdir; | 72 | struct proc_dir_entry *next, *parent, *subdir; |
76 | void *data; | 73 | void *data; |
@@ -97,10 +94,6 @@ struct vmcore { | |||
97 | 94 | ||
98 | #ifdef CONFIG_PROC_FS | 95 | #ifdef CONFIG_PROC_FS |
99 | 96 | ||
100 | extern struct proc_dir_entry proc_root; | ||
101 | extern struct proc_dir_entry *proc_root_fs; | ||
102 | extern struct proc_dir_entry *proc_bus; | ||
103 | extern struct proc_dir_entry *proc_root_driver; | ||
104 | extern struct proc_dir_entry *proc_root_kcore; | 97 | extern struct proc_dir_entry *proc_root_kcore; |
105 | 98 | ||
106 | extern spinlock_t proc_subdir_lock; | 99 | extern spinlock_t proc_subdir_lock; |
@@ -123,9 +116,10 @@ void de_put(struct proc_dir_entry *de); | |||
123 | 116 | ||
124 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, | 117 | extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, |
125 | struct proc_dir_entry *parent); | 118 | struct proc_dir_entry *parent); |
126 | struct proc_dir_entry *proc_create(const char *name, mode_t mode, | 119 | struct proc_dir_entry *proc_create_data(const char *name, mode_t mode, |
127 | struct proc_dir_entry *parent, | 120 | struct proc_dir_entry *parent, |
128 | const struct file_operations *proc_fops); | 121 | const struct file_operations *proc_fops, |
122 | void *data); | ||
129 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); | 123 | extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent); |
130 | 124 | ||
131 | extern struct vfsmount *proc_mnt; | 125 | extern struct vfsmount *proc_mnt; |
@@ -180,6 +174,12 @@ extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *); | |||
180 | extern struct proc_dir_entry *proc_mkdir_mode(const char *name, mode_t mode, | 174 | extern struct proc_dir_entry *proc_mkdir_mode(const char *name, mode_t mode, |
181 | struct proc_dir_entry *parent); | 175 | struct proc_dir_entry *parent); |
182 | 176 | ||
177 | static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode, | ||
178 | struct proc_dir_entry *parent, const struct file_operations *proc_fops) | ||
179 | { | ||
180 | return proc_create_data(name, mode, parent, proc_fops, NULL); | ||
181 | } | ||
182 | |||
183 | static inline struct proc_dir_entry *create_proc_read_entry(const char *name, | 183 | static inline struct proc_dir_entry *create_proc_read_entry(const char *name, |
184 | mode_t mode, struct proc_dir_entry *base, | 184 | mode_t mode, struct proc_dir_entry *base, |
185 | read_proc_t *read_proc, void * data) | 185 | read_proc_t *read_proc, void * data) |
@@ -192,24 +192,19 @@ static inline struct proc_dir_entry *create_proc_read_entry(const char *name, | |||
192 | return res; | 192 | return res; |
193 | } | 193 | } |
194 | 194 | ||
195 | static inline struct proc_dir_entry *create_proc_info_entry(const char *name, | ||
196 | mode_t mode, struct proc_dir_entry *base, get_info_t *get_info) | ||
197 | { | ||
198 | struct proc_dir_entry *res=create_proc_entry(name,mode,base); | ||
199 | if (res) res->get_info=get_info; | ||
200 | return res; | ||
201 | } | ||
202 | |||
203 | extern struct proc_dir_entry *proc_net_fops_create(struct net *net, | 195 | extern struct proc_dir_entry *proc_net_fops_create(struct net *net, |
204 | const char *name, mode_t mode, const struct file_operations *fops); | 196 | const char *name, mode_t mode, const struct file_operations *fops); |
205 | extern void proc_net_remove(struct net *net, const char *name); | 197 | extern void proc_net_remove(struct net *net, const char *name); |
206 | extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, | 198 | extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, |
207 | struct proc_dir_entry *parent); | 199 | struct proc_dir_entry *parent); |
208 | 200 | ||
209 | #else | 201 | /* While the {get|set|dup}_mm_exe_file functions are for mm_structs, they are |
202 | * only needed to implement /proc/<pid>|self/exe so we define them here. */ | ||
203 | extern void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file); | ||
204 | extern struct file *get_mm_exe_file(struct mm_struct *mm); | ||
205 | extern void dup_mm_exe_file(struct mm_struct *oldmm, struct mm_struct *newmm); | ||
210 | 206 | ||
211 | #define proc_root_driver NULL | 207 | #else |
212 | #define proc_bus NULL | ||
213 | 208 | ||
214 | #define proc_net_fops_create(net, name, mode, fops) ({ (void)(mode), NULL; }) | 209 | #define proc_net_fops_create(net, name, mode, fops) ({ (void)(mode), NULL; }) |
215 | static inline void proc_net_remove(struct net *net, const char *name) {} | 210 | static inline void proc_net_remove(struct net *net, const char *name) {} |
@@ -226,6 +221,12 @@ static inline struct proc_dir_entry *proc_create(const char *name, | |||
226 | { | 221 | { |
227 | return NULL; | 222 | return NULL; |
228 | } | 223 | } |
224 | static inline struct proc_dir_entry *proc_create_data(const char *name, | ||
225 | mode_t mode, struct proc_dir_entry *parent, | ||
226 | const struct file_operations *proc_fops, void *data) | ||
227 | { | ||
228 | return NULL; | ||
229 | } | ||
229 | #define remove_proc_entry(name, parent) do {} while (0) | 230 | #define remove_proc_entry(name, parent) do {} while (0) |
230 | 231 | ||
231 | static inline struct proc_dir_entry *proc_symlink(const char *name, | 232 | static inline struct proc_dir_entry *proc_symlink(const char *name, |
@@ -236,16 +237,11 @@ static inline struct proc_dir_entry *proc_mkdir(const char *name, | |||
236 | static inline struct proc_dir_entry *create_proc_read_entry(const char *name, | 237 | static inline struct proc_dir_entry *create_proc_read_entry(const char *name, |
237 | mode_t mode, struct proc_dir_entry *base, | 238 | mode_t mode, struct proc_dir_entry *base, |
238 | read_proc_t *read_proc, void * data) { return NULL; } | 239 | read_proc_t *read_proc, void * data) { return NULL; } |
239 | static inline struct proc_dir_entry *create_proc_info_entry(const char *name, | ||
240 | mode_t mode, struct proc_dir_entry *base, get_info_t *get_info) | ||
241 | { return NULL; } | ||
242 | 240 | ||
243 | struct tty_driver; | 241 | struct tty_driver; |
244 | static inline void proc_tty_register_driver(struct tty_driver *driver) {}; | 242 | static inline void proc_tty_register_driver(struct tty_driver *driver) {}; |
245 | static inline void proc_tty_unregister_driver(struct tty_driver *driver) {}; | 243 | static inline void proc_tty_unregister_driver(struct tty_driver *driver) {}; |
246 | 244 | ||
247 | extern struct proc_dir_entry proc_root; | ||
248 | |||
249 | static inline int pid_ns_prepare_proc(struct pid_namespace *ns) | 245 | static inline int pid_ns_prepare_proc(struct pid_namespace *ns) |
250 | { | 246 | { |
251 | return 0; | 247 | return 0; |
@@ -255,6 +251,19 @@ static inline void pid_ns_release_proc(struct pid_namespace *ns) | |||
255 | { | 251 | { |
256 | } | 252 | } |
257 | 253 | ||
254 | static inline void set_mm_exe_file(struct mm_struct *mm, | ||
255 | struct file *new_exe_file) | ||
256 | {} | ||
257 | |||
258 | static inline struct file *get_mm_exe_file(struct mm_struct *mm) | ||
259 | { | ||
260 | return NULL; | ||
261 | } | ||
262 | |||
263 | static inline void dup_mm_exe_file(struct mm_struct *oldmm, | ||
264 | struct mm_struct *newmm) | ||
265 | {} | ||
266 | |||
258 | #endif /* CONFIG_PROC_FS */ | 267 | #endif /* CONFIG_PROC_FS */ |
259 | 268 | ||
260 | #if !defined(CONFIG_PROC_KCORE) | 269 | #if !defined(CONFIG_PROC_KCORE) |
diff --git a/include/linux/quota.h b/include/linux/quota.h index eb560d031acd..52e49dce6584 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
@@ -202,10 +202,14 @@ struct quota_format_type; | |||
202 | 202 | ||
203 | struct mem_dqinfo { | 203 | struct mem_dqinfo { |
204 | struct quota_format_type *dqi_format; | 204 | struct quota_format_type *dqi_format; |
205 | int dqi_fmt_id; /* Id of the dqi_format - used when turning | ||
206 | * quotas on after remount RW */ | ||
205 | struct list_head dqi_dirty_list; /* List of dirty dquots */ | 207 | struct list_head dqi_dirty_list; /* List of dirty dquots */ |
206 | unsigned long dqi_flags; | 208 | unsigned long dqi_flags; |
207 | unsigned int dqi_bgrace; | 209 | unsigned int dqi_bgrace; |
208 | unsigned int dqi_igrace; | 210 | unsigned int dqi_igrace; |
211 | qsize_t dqi_maxblimit; | ||
212 | qsize_t dqi_maxilimit; | ||
209 | union { | 213 | union { |
210 | struct v1_mem_dqinfo v1_i; | 214 | struct v1_mem_dqinfo v1_i; |
211 | struct v2_mem_dqinfo v2_i; | 215 | struct v2_mem_dqinfo v2_i; |
@@ -296,8 +300,8 @@ struct dquot_operations { | |||
296 | 300 | ||
297 | /* Operations handling requests from userspace */ | 301 | /* Operations handling requests from userspace */ |
298 | struct quotactl_ops { | 302 | struct quotactl_ops { |
299 | int (*quota_on)(struct super_block *, int, int, char *); | 303 | int (*quota_on)(struct super_block *, int, int, char *, int); |
300 | int (*quota_off)(struct super_block *, int); | 304 | int (*quota_off)(struct super_block *, int, int); |
301 | int (*quota_sync)(struct super_block *, int); | 305 | int (*quota_sync)(struct super_block *, int); |
302 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); | 306 | int (*get_info)(struct super_block *, int, struct if_dqinfo *); |
303 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); | 307 | int (*set_info)(struct super_block *, int, struct if_dqinfo *); |
@@ -318,6 +322,10 @@ struct quota_format_type { | |||
318 | 322 | ||
319 | #define DQUOT_USR_ENABLED 0x01 /* User diskquotas enabled */ | 323 | #define DQUOT_USR_ENABLED 0x01 /* User diskquotas enabled */ |
320 | #define DQUOT_GRP_ENABLED 0x02 /* Group diskquotas enabled */ | 324 | #define DQUOT_GRP_ENABLED 0x02 /* Group diskquotas enabled */ |
325 | #define DQUOT_USR_SUSPENDED 0x04 /* User diskquotas are off, but | ||
326 | * we have necessary info in | ||
327 | * memory to turn them on */ | ||
328 | #define DQUOT_GRP_SUSPENDED 0x08 /* The same for group quotas */ | ||
321 | 329 | ||
322 | struct quota_info { | 330 | struct quota_info { |
323 | unsigned int flags; /* Flags for diskquotas on this device */ | 331 | unsigned int flags; /* Flags for diskquotas on this device */ |
@@ -329,17 +337,16 @@ struct quota_info { | |||
329 | struct quota_format_ops *ops[MAXQUOTAS]; /* Operations for each type */ | 337 | struct quota_format_ops *ops[MAXQUOTAS]; /* Operations for each type */ |
330 | }; | 338 | }; |
331 | 339 | ||
332 | /* Inline would be better but we need to dereference super_block which is not defined yet */ | ||
333 | int mark_dquot_dirty(struct dquot *dquot); | ||
334 | |||
335 | #define dquot_dirty(dquot) test_bit(DQ_MOD_B, &(dquot)->dq_flags) | ||
336 | |||
337 | #define sb_has_quota_enabled(sb, type) ((type)==USRQUOTA ? \ | 340 | #define sb_has_quota_enabled(sb, type) ((type)==USRQUOTA ? \ |
338 | (sb_dqopt(sb)->flags & DQUOT_USR_ENABLED) : (sb_dqopt(sb)->flags & DQUOT_GRP_ENABLED)) | 341 | (sb_dqopt(sb)->flags & DQUOT_USR_ENABLED) : (sb_dqopt(sb)->flags & DQUOT_GRP_ENABLED)) |
339 | 342 | ||
340 | #define sb_any_quota_enabled(sb) (sb_has_quota_enabled(sb, USRQUOTA) | \ | 343 | #define sb_any_quota_enabled(sb) (sb_has_quota_enabled(sb, USRQUOTA) | \ |
341 | sb_has_quota_enabled(sb, GRPQUOTA)) | 344 | sb_has_quota_enabled(sb, GRPQUOTA)) |
342 | 345 | ||
346 | #define sb_has_quota_suspended(sb, type) \ | ||
347 | ((type) == USRQUOTA ? (sb_dqopt(sb)->flags & DQUOT_USR_SUSPENDED) : \ | ||
348 | (sb_dqopt(sb)->flags & DQUOT_GRP_SUSPENDED)) | ||
349 | |||
343 | int register_quota_format(struct quota_format_type *fmt); | 350 | int register_quota_format(struct quota_format_type *fmt); |
344 | void unregister_quota_format(struct quota_format_type *fmt); | 351 | void unregister_quota_format(struct quota_format_type *fmt); |
345 | 352 | ||
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 5110201a4159..f86702053853 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -37,11 +37,11 @@ extern int dquot_release(struct dquot *dquot); | |||
37 | extern int dquot_commit_info(struct super_block *sb, int type); | 37 | extern int dquot_commit_info(struct super_block *sb, int type); |
38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); | 38 | extern int dquot_mark_dquot_dirty(struct dquot *dquot); |
39 | 39 | ||
40 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, char *path); | 40 | extern int vfs_quota_on(struct super_block *sb, int type, int format_id, |
41 | char *path, int remount); | ||
41 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, | 42 | extern int vfs_quota_on_mount(struct super_block *sb, char *qf_name, |
42 | int format_id, int type); | 43 | int format_id, int type); |
43 | extern int vfs_quota_off(struct super_block *sb, int type); | 44 | extern int vfs_quota_off(struct super_block *sb, int type, int remount); |
44 | #define vfs_quota_off_mount(sb, type) vfs_quota_off(sb, type) | ||
45 | extern int vfs_quota_sync(struct super_block *sb, int type); | 45 | extern int vfs_quota_sync(struct super_block *sb, int type); |
46 | extern int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 46 | extern int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
47 | extern int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); | 47 | extern int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii); |
@@ -59,7 +59,7 @@ extern struct quotactl_ops vfs_quotactl_ops; | |||
59 | 59 | ||
60 | /* It is better to call this function outside of any transaction as it might | 60 | /* It is better to call this function outside of any transaction as it might |
61 | * need a lot of space in journal for dquot structure allocation. */ | 61 | * need a lot of space in journal for dquot structure allocation. */ |
62 | static __inline__ void DQUOT_INIT(struct inode *inode) | 62 | static inline void DQUOT_INIT(struct inode *inode) |
63 | { | 63 | { |
64 | BUG_ON(!inode->i_sb); | 64 | BUG_ON(!inode->i_sb); |
65 | if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) | 65 | if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) |
@@ -67,7 +67,7 @@ static __inline__ void DQUOT_INIT(struct inode *inode) | |||
67 | } | 67 | } |
68 | 68 | ||
69 | /* The same as with DQUOT_INIT */ | 69 | /* The same as with DQUOT_INIT */ |
70 | static __inline__ void DQUOT_DROP(struct inode *inode) | 70 | static inline void DQUOT_DROP(struct inode *inode) |
71 | { | 71 | { |
72 | /* Here we can get arbitrary inode from clear_inode() so we have | 72 | /* Here we can get arbitrary inode from clear_inode() so we have |
73 | * to be careful. OTOH we don't need locking as quota operations | 73 | * to be careful. OTOH we don't need locking as quota operations |
@@ -90,7 +90,7 @@ static __inline__ void DQUOT_DROP(struct inode *inode) | |||
90 | 90 | ||
91 | /* The following allocation/freeing/transfer functions *must* be called inside | 91 | /* The following allocation/freeing/transfer functions *must* be called inside |
92 | * a transaction (deadlocks possible otherwise) */ | 92 | * a transaction (deadlocks possible otherwise) */ |
93 | static __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | 93 | static inline int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
94 | { | 94 | { |
95 | if (sb_any_quota_enabled(inode->i_sb)) { | 95 | if (sb_any_quota_enabled(inode->i_sb)) { |
96 | /* Used space is updated in alloc_space() */ | 96 | /* Used space is updated in alloc_space() */ |
@@ -102,7 +102,7 @@ static __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t | |||
102 | return 0; | 102 | return 0; |
103 | } | 103 | } |
104 | 104 | ||
105 | static __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr) | 105 | static inline int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr) |
106 | { | 106 | { |
107 | int ret; | 107 | int ret; |
108 | if (!(ret = DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr))) | 108 | if (!(ret = DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr))) |
@@ -110,7 +110,7 @@ static __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr) | |||
110 | return ret; | 110 | return ret; |
111 | } | 111 | } |
112 | 112 | ||
113 | static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | 113 | static inline int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
114 | { | 114 | { |
115 | if (sb_any_quota_enabled(inode->i_sb)) { | 115 | if (sb_any_quota_enabled(inode->i_sb)) { |
116 | /* Used space is updated in alloc_space() */ | 116 | /* Used space is updated in alloc_space() */ |
@@ -122,7 +122,7 @@ static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | |||
122 | return 0; | 122 | return 0; |
123 | } | 123 | } |
124 | 124 | ||
125 | static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr) | 125 | static inline int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr) |
126 | { | 126 | { |
127 | int ret; | 127 | int ret; |
128 | if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr))) | 128 | if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr))) |
@@ -130,7 +130,7 @@ static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr) | |||
130 | return ret; | 130 | return ret; |
131 | } | 131 | } |
132 | 132 | ||
133 | static __inline__ int DQUOT_ALLOC_INODE(struct inode *inode) | 133 | static inline int DQUOT_ALLOC_INODE(struct inode *inode) |
134 | { | 134 | { |
135 | if (sb_any_quota_enabled(inode->i_sb)) { | 135 | if (sb_any_quota_enabled(inode->i_sb)) { |
136 | DQUOT_INIT(inode); | 136 | DQUOT_INIT(inode); |
@@ -140,7 +140,7 @@ static __inline__ int DQUOT_ALLOC_INODE(struct inode *inode) | |||
140 | return 0; | 140 | return 0; |
141 | } | 141 | } |
142 | 142 | ||
143 | static __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | 143 | static inline void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
144 | { | 144 | { |
145 | if (sb_any_quota_enabled(inode->i_sb)) | 145 | if (sb_any_quota_enabled(inode->i_sb)) |
146 | inode->i_sb->dq_op->free_space(inode, nr); | 146 | inode->i_sb->dq_op->free_space(inode, nr); |
@@ -148,19 +148,19 @@ static __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | |||
148 | inode_sub_bytes(inode, nr); | 148 | inode_sub_bytes(inode, nr); |
149 | } | 149 | } |
150 | 150 | ||
151 | static __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr) | 151 | static inline void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr) |
152 | { | 152 | { |
153 | DQUOT_FREE_SPACE_NODIRTY(inode, nr); | 153 | DQUOT_FREE_SPACE_NODIRTY(inode, nr); |
154 | mark_inode_dirty(inode); | 154 | mark_inode_dirty(inode); |
155 | } | 155 | } |
156 | 156 | ||
157 | static __inline__ void DQUOT_FREE_INODE(struct inode *inode) | 157 | static inline void DQUOT_FREE_INODE(struct inode *inode) |
158 | { | 158 | { |
159 | if (sb_any_quota_enabled(inode->i_sb)) | 159 | if (sb_any_quota_enabled(inode->i_sb)) |
160 | inode->i_sb->dq_op->free_inode(inode, 1); | 160 | inode->i_sb->dq_op->free_inode(inode, 1); |
161 | } | 161 | } |
162 | 162 | ||
163 | static __inline__ int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr) | 163 | static inline int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr) |
164 | { | 164 | { |
165 | if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) { | 165 | if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) { |
166 | DQUOT_INIT(inode); | 166 | DQUOT_INIT(inode); |
@@ -171,14 +171,32 @@ static __inline__ int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr) | |||
171 | } | 171 | } |
172 | 172 | ||
173 | /* The following two functions cannot be called inside a transaction */ | 173 | /* The following two functions cannot be called inside a transaction */ |
174 | #define DQUOT_SYNC(sb) sync_dquots(sb, -1) | 174 | static inline void DQUOT_SYNC(struct super_block *sb) |
175 | { | ||
176 | sync_dquots(sb, -1); | ||
177 | } | ||
175 | 178 | ||
176 | static __inline__ int DQUOT_OFF(struct super_block *sb) | 179 | static inline int DQUOT_OFF(struct super_block *sb, int remount) |
177 | { | 180 | { |
178 | int ret = -ENOSYS; | 181 | int ret = -ENOSYS; |
179 | 182 | ||
180 | if (sb_any_quota_enabled(sb) && sb->s_qcop && sb->s_qcop->quota_off) | 183 | if (sb->s_qcop && sb->s_qcop->quota_off) |
181 | ret = sb->s_qcop->quota_off(sb, -1); | 184 | ret = sb->s_qcop->quota_off(sb, -1, remount); |
185 | return ret; | ||
186 | } | ||
187 | |||
188 | static inline int DQUOT_ON_REMOUNT(struct super_block *sb) | ||
189 | { | ||
190 | int cnt; | ||
191 | int ret = 0, err; | ||
192 | |||
193 | if (!sb->s_qcop || !sb->s_qcop->quota_on) | ||
194 | return -ENOSYS; | ||
195 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { | ||
196 | err = sb->s_qcop->quota_on(sb, cnt, 0, NULL, 1); | ||
197 | if (err < 0 && !ret) | ||
198 | ret = err; | ||
199 | } | ||
182 | return ret; | 200 | return ret; |
183 | } | 201 | } |
184 | 202 | ||
@@ -189,13 +207,43 @@ static __inline__ int DQUOT_OFF(struct super_block *sb) | |||
189 | */ | 207 | */ |
190 | #define sb_dquot_ops (NULL) | 208 | #define sb_dquot_ops (NULL) |
191 | #define sb_quotactl_ops (NULL) | 209 | #define sb_quotactl_ops (NULL) |
192 | #define DQUOT_INIT(inode) do { } while(0) | 210 | |
193 | #define DQUOT_DROP(inode) do { } while(0) | 211 | static inline void DQUOT_INIT(struct inode *inode) |
194 | #define DQUOT_ALLOC_INODE(inode) (0) | 212 | { |
195 | #define DQUOT_FREE_INODE(inode) do { } while(0) | 213 | } |
196 | #define DQUOT_SYNC(sb) do { } while(0) | 214 | |
197 | #define DQUOT_OFF(sb) do { } while(0) | 215 | static inline void DQUOT_DROP(struct inode *inode) |
198 | #define DQUOT_TRANSFER(inode, iattr) (0) | 216 | { |
217 | } | ||
218 | |||
219 | static inline int DQUOT_ALLOC_INODE(struct inode *inode) | ||
220 | { | ||
221 | return 0; | ||
222 | } | ||
223 | |||
224 | static inline void DQUOT_FREE_INODE(struct inode *inode) | ||
225 | { | ||
226 | } | ||
227 | |||
228 | static inline void DQUOT_SYNC(struct super_block *sb) | ||
229 | { | ||
230 | } | ||
231 | |||
232 | static inline int DQUOT_OFF(struct super_block *sb, int remount) | ||
233 | { | ||
234 | return 0; | ||
235 | } | ||
236 | |||
237 | static inline int DQUOT_ON_REMOUNT(struct super_block *sb) | ||
238 | { | ||
239 | return 0; | ||
240 | } | ||
241 | |||
242 | static inline int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr) | ||
243 | { | ||
244 | return 0; | ||
245 | } | ||
246 | |||
199 | static inline int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) | 247 | static inline int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr) |
200 | { | 248 | { |
201 | inode_add_bytes(inode, nr); | 249 | inode_add_bytes(inode, nr); |
@@ -235,11 +283,38 @@ static inline void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr) | |||
235 | 283 | ||
236 | #endif /* CONFIG_QUOTA */ | 284 | #endif /* CONFIG_QUOTA */ |
237 | 285 | ||
238 | #define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr) DQUOT_PREALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 286 | static inline int DQUOT_PREALLOC_BLOCK_NODIRTY(struct inode *inode, qsize_t nr) |
239 | #define DQUOT_PREALLOC_BLOCK(inode, nr) DQUOT_PREALLOC_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 287 | { |
240 | #define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) DQUOT_ALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 288 | return DQUOT_PREALLOC_SPACE_NODIRTY(inode, |
241 | #define DQUOT_ALLOC_BLOCK(inode, nr) DQUOT_ALLOC_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 289 | nr << inode->i_sb->s_blocksize_bits); |
242 | #define DQUOT_FREE_BLOCK_NODIRTY(inode, nr) DQUOT_FREE_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 290 | } |
243 | #define DQUOT_FREE_BLOCK(inode, nr) DQUOT_FREE_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits) | 291 | |
292 | static inline int DQUOT_PREALLOC_BLOCK(struct inode *inode, qsize_t nr) | ||
293 | { | ||
294 | return DQUOT_PREALLOC_SPACE(inode, | ||
295 | nr << inode->i_sb->s_blocksize_bits); | ||
296 | } | ||
297 | |||
298 | static inline int DQUOT_ALLOC_BLOCK_NODIRTY(struct inode *inode, qsize_t nr) | ||
299 | { | ||
300 | return DQUOT_ALLOC_SPACE_NODIRTY(inode, | ||
301 | nr << inode->i_sb->s_blocksize_bits); | ||
302 | } | ||
303 | |||
304 | static inline int DQUOT_ALLOC_BLOCK(struct inode *inode, qsize_t nr) | ||
305 | { | ||
306 | return DQUOT_ALLOC_SPACE(inode, | ||
307 | nr << inode->i_sb->s_blocksize_bits); | ||
308 | } | ||
309 | |||
310 | static inline void DQUOT_FREE_BLOCK_NODIRTY(struct inode *inode, qsize_t nr) | ||
311 | { | ||
312 | DQUOT_FREE_SPACE_NODIRTY(inode, nr << inode->i_sb->s_blocksize_bits); | ||
313 | } | ||
314 | |||
315 | static inline void DQUOT_FREE_BLOCK(struct inode *inode, qsize_t nr) | ||
316 | { | ||
317 | DQUOT_FREE_SPACE(inode, nr << inode->i_sb->s_blocksize_bits); | ||
318 | } | ||
244 | 319 | ||
245 | #endif /* _LINUX_QUOTAOPS_ */ | 320 | #endif /* _LINUX_QUOTAOPS_ */ |
diff --git a/include/linux/raid/raid5.h b/include/linux/raid/raid5.h index 93678f57ccbe..f0827d31ae6f 100644 --- a/include/linux/raid/raid5.h +++ b/include/linux/raid/raid5.h | |||
@@ -252,6 +252,8 @@ struct r6_state { | |||
252 | #define STRIPE_EXPANDING 9 | 252 | #define STRIPE_EXPANDING 9 |
253 | #define STRIPE_EXPAND_SOURCE 10 | 253 | #define STRIPE_EXPAND_SOURCE 10 |
254 | #define STRIPE_EXPAND_READY 11 | 254 | #define STRIPE_EXPAND_READY 11 |
255 | #define STRIPE_IO_STARTED 12 /* do not count towards 'bypass_count' */ | ||
256 | #define STRIPE_FULL_WRITE 13 /* all blocks are set to be overwritten */ | ||
255 | /* | 257 | /* |
256 | * Operations flags (in issue order) | 258 | * Operations flags (in issue order) |
257 | */ | 259 | */ |
@@ -316,12 +318,17 @@ struct raid5_private_data { | |||
316 | int previous_raid_disks; | 318 | int previous_raid_disks; |
317 | 319 | ||
318 | struct list_head handle_list; /* stripes needing handling */ | 320 | struct list_head handle_list; /* stripes needing handling */ |
321 | struct list_head hold_list; /* preread ready stripes */ | ||
319 | struct list_head delayed_list; /* stripes that have plugged requests */ | 322 | struct list_head delayed_list; /* stripes that have plugged requests */ |
320 | struct list_head bitmap_list; /* stripes delaying awaiting bitmap update */ | 323 | struct list_head bitmap_list; /* stripes delaying awaiting bitmap update */ |
321 | struct bio *retry_read_aligned; /* currently retrying aligned bios */ | 324 | struct bio *retry_read_aligned; /* currently retrying aligned bios */ |
322 | struct bio *retry_read_aligned_list; /* aligned bios retry list */ | 325 | struct bio *retry_read_aligned_list; /* aligned bios retry list */ |
323 | atomic_t preread_active_stripes; /* stripes with scheduled io */ | 326 | atomic_t preread_active_stripes; /* stripes with scheduled io */ |
324 | atomic_t active_aligned_reads; | 327 | atomic_t active_aligned_reads; |
328 | atomic_t pending_full_writes; /* full write backlog */ | ||
329 | int bypass_count; /* bypassed prereads */ | ||
330 | int bypass_threshold; /* preread nice */ | ||
331 | struct list_head *last_hold; /* detect hold_list promotions */ | ||
325 | 332 | ||
326 | atomic_t reshape_stripes; /* stripes with pending writes for reshape */ | 333 | atomic_t reshape_stripes; /* stripes with pending writes for reshape */ |
327 | /* unfortunately we need two cache names as we temporarily have | 334 | /* unfortunately we need two cache names as we temporarily have |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index 8e7eff2cd0ab..4aacaeecb56f 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -2176,6 +2176,7 @@ int reiserfs_ioctl(struct inode *inode, struct file *filp, | |||
2176 | unsigned int cmd, unsigned long arg); | 2176 | unsigned int cmd, unsigned long arg); |
2177 | long reiserfs_compat_ioctl(struct file *filp, | 2177 | long reiserfs_compat_ioctl(struct file *filp, |
2178 | unsigned int cmd, unsigned long arg); | 2178 | unsigned int cmd, unsigned long arg); |
2179 | int reiserfs_unpack(struct inode *inode, struct file *filp); | ||
2179 | 2180 | ||
2180 | /* ioctl's command */ | 2181 | /* ioctl's command */ |
2181 | #define REISERFS_IOC_UNPACK _IOW(0xCD,1,long) | 2182 | #define REISERFS_IOC_UNPACK _IOW(0xCD,1,long) |
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index 61363ce896d5..6d9e1fca098c 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
@@ -9,6 +9,8 @@ | |||
9 | * | 9 | * |
10 | * Author: Pavel Emelianov <xemul@openvz.org> | 10 | * Author: Pavel Emelianov <xemul@openvz.org> |
11 | * | 11 | * |
12 | * See Documentation/controllers/resource_counter.txt for more | ||
13 | * info about what this counter is. | ||
12 | */ | 14 | */ |
13 | 15 | ||
14 | #include <linux/cgroup.h> | 16 | #include <linux/cgroup.h> |
@@ -25,6 +27,10 @@ struct res_counter { | |||
25 | */ | 27 | */ |
26 | unsigned long long usage; | 28 | unsigned long long usage; |
27 | /* | 29 | /* |
30 | * the maximal value of the usage from the counter creation | ||
31 | */ | ||
32 | unsigned long long max_usage; | ||
33 | /* | ||
28 | * the limit that usage cannot exceed | 34 | * the limit that usage cannot exceed |
29 | */ | 35 | */ |
30 | unsigned long long limit; | 36 | unsigned long long limit; |
@@ -39,8 +45,9 @@ struct res_counter { | |||
39 | spinlock_t lock; | 45 | spinlock_t lock; |
40 | }; | 46 | }; |
41 | 47 | ||
42 | /* | 48 | /** |
43 | * Helpers to interact with userspace | 49 | * Helpers to interact with userspace |
50 | * res_counter_read_u64() - returns the value of the specified member. | ||
44 | * res_counter_read/_write - put/get the specified fields from the | 51 | * res_counter_read/_write - put/get the specified fields from the |
45 | * res_counter struct to/from the user | 52 | * res_counter struct to/from the user |
46 | * | 53 | * |
@@ -51,6 +58,8 @@ struct res_counter { | |||
51 | * @pos: and the offset. | 58 | * @pos: and the offset. |
52 | */ | 59 | */ |
53 | 60 | ||
61 | u64 res_counter_read_u64(struct res_counter *counter, int member); | ||
62 | |||
54 | ssize_t res_counter_read(struct res_counter *counter, int member, | 63 | ssize_t res_counter_read(struct res_counter *counter, int member, |
55 | const char __user *buf, size_t nbytes, loff_t *pos, | 64 | const char __user *buf, size_t nbytes, loff_t *pos, |
56 | int (*read_strategy)(unsigned long long val, char *s)); | 65 | int (*read_strategy)(unsigned long long val, char *s)); |
@@ -64,6 +73,7 @@ ssize_t res_counter_write(struct res_counter *counter, int member, | |||
64 | 73 | ||
65 | enum { | 74 | enum { |
66 | RES_USAGE, | 75 | RES_USAGE, |
76 | RES_MAX_USAGE, | ||
67 | RES_LIMIT, | 77 | RES_LIMIT, |
68 | RES_FAILCNT, | 78 | RES_FAILCNT, |
69 | }; | 79 | }; |
@@ -124,4 +134,21 @@ static inline bool res_counter_check_under_limit(struct res_counter *cnt) | |||
124 | return ret; | 134 | return ret; |
125 | } | 135 | } |
126 | 136 | ||
137 | static inline void res_counter_reset_max(struct res_counter *cnt) | ||
138 | { | ||
139 | unsigned long flags; | ||
140 | |||
141 | spin_lock_irqsave(&cnt->lock, flags); | ||
142 | cnt->max_usage = cnt->usage; | ||
143 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
144 | } | ||
145 | |||
146 | static inline void res_counter_reset_failcnt(struct res_counter *cnt) | ||
147 | { | ||
148 | unsigned long flags; | ||
149 | |||
150 | spin_lock_irqsave(&cnt->lock, flags); | ||
151 | cnt->failcnt = 0; | ||
152 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
153 | } | ||
127 | #endif | 154 | #endif |
diff --git a/include/linux/resource.h b/include/linux/resource.h index ae13db714742..aaa423a6f3d9 100644 --- a/include/linux/resource.h +++ b/include/linux/resource.h | |||
@@ -19,6 +19,7 @@ struct task_struct; | |||
19 | #define RUSAGE_SELF 0 | 19 | #define RUSAGE_SELF 0 |
20 | #define RUSAGE_CHILDREN (-1) | 20 | #define RUSAGE_CHILDREN (-1) |
21 | #define RUSAGE_BOTH (-2) /* sys_wait4() uses this */ | 21 | #define RUSAGE_BOTH (-2) /* sys_wait4() uses this */ |
22 | #define RUSAGE_THREAD 1 /* only the calling thread */ | ||
22 | 23 | ||
23 | struct rusage { | 24 | struct rusage { |
24 | struct timeval ru_utime; /* user time used */ | 25 | struct timeval ru_utime; /* user time used */ |
diff --git a/include/linux/rio.h b/include/linux/rio.h index 68e3f6853fa6..cfb66bbc0f27 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
24 | #include <linux/rio_regs.h> | 24 | #include <linux/rio_regs.h> |
25 | 25 | ||
26 | #define RIO_ANY_DESTID 0xff | ||
27 | #define RIO_NO_HOPCOUNT -1 | 26 | #define RIO_NO_HOPCOUNT -1 |
28 | #define RIO_INVALID_DESTID 0xffff | 27 | #define RIO_INVALID_DESTID 0xffff |
29 | 28 | ||
@@ -39,11 +38,8 @@ | |||
39 | entry is invalid (no route | 38 | entry is invalid (no route |
40 | exists for the device ID) */ | 39 | exists for the device ID) */ |
41 | 40 | ||
42 | #ifdef CONFIG_RAPIDIO_8_BIT_TRANSPORT | 41 | #define RIO_MAX_ROUTE_ENTRIES(size) (size ? (1 << 16) : (1 << 8)) |
43 | #define RIO_MAX_ROUTE_ENTRIES (1 << 8) | 42 | #define RIO_ANY_DESTID(size) (size ? 0xffff : 0xff) |
44 | #else | ||
45 | #define RIO_MAX_ROUTE_ENTRIES (1 << 16) | ||
46 | #endif | ||
47 | 43 | ||
48 | #define RIO_MAX_MBOX 4 | 44 | #define RIO_MAX_MBOX 4 |
49 | #define RIO_MAX_MSG_SIZE 0x1000 | 45 | #define RIO_MAX_MSG_SIZE 0x1000 |
@@ -149,6 +145,11 @@ struct rio_dbell { | |||
149 | void *dev_id; | 145 | void *dev_id; |
150 | }; | 146 | }; |
151 | 147 | ||
148 | enum rio_phy_type { | ||
149 | RIO_PHY_PARALLEL, | ||
150 | RIO_PHY_SERIAL, | ||
151 | }; | ||
152 | |||
152 | /** | 153 | /** |
153 | * struct rio_mport - RIO master port info | 154 | * struct rio_mport - RIO master port info |
154 | * @dbells: List of doorbell events | 155 | * @dbells: List of doorbell events |
@@ -163,6 +164,7 @@ struct rio_dbell { | |||
163 | * @id: Port ID, unique among all ports | 164 | * @id: Port ID, unique among all ports |
164 | * @index: Port index, unique among all port interfaces of the same type | 165 | * @index: Port index, unique among all port interfaces of the same type |
165 | * @name: Port name string | 166 | * @name: Port name string |
167 | * @priv: Master port private data | ||
166 | */ | 168 | */ |
167 | struct rio_mport { | 169 | struct rio_mport { |
168 | struct list_head dbells; /* list of doorbell events */ | 170 | struct list_head dbells; /* list of doorbell events */ |
@@ -177,7 +179,13 @@ struct rio_mport { | |||
177 | unsigned char id; /* port ID, unique among all ports */ | 179 | unsigned char id; /* port ID, unique among all ports */ |
178 | unsigned char index; /* port index, unique among all port | 180 | unsigned char index; /* port index, unique among all port |
179 | interfaces of the same type */ | 181 | interfaces of the same type */ |
182 | unsigned int sys_size; /* RapidIO common transport system size. | ||
183 | * 0 - Small size. 256 devices. | ||
184 | * 1 - Large size, 65536 devices. | ||
185 | */ | ||
186 | enum rio_phy_type phy_type; /* RapidIO phy type */ | ||
180 | unsigned char name[40]; | 187 | unsigned char name[40]; |
188 | void *priv; /* Master port private data */ | ||
181 | }; | 189 | }; |
182 | 190 | ||
183 | /** | 191 | /** |
@@ -211,7 +219,7 @@ struct rio_switch { | |||
211 | u16 switchid; | 219 | u16 switchid; |
212 | u16 hopcount; | 220 | u16 hopcount; |
213 | u16 destid; | 221 | u16 destid; |
214 | u8 route_table[RIO_MAX_ROUTE_ENTRIES]; | 222 | u8 *route_table; |
215 | int (*add_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, | 223 | int (*add_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, |
216 | u16 table, u16 route_destid, u8 route_port); | 224 | u16 table, u16 route_destid, u8 route_port); |
217 | int (*get_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, | 225 | int (*get_entry) (struct rio_mport * mport, u16 destid, u8 hopcount, |
@@ -229,13 +237,15 @@ struct rio_switch { | |||
229 | * @dsend: Callback to send a doorbell message. | 237 | * @dsend: Callback to send a doorbell message. |
230 | */ | 238 | */ |
231 | struct rio_ops { | 239 | struct rio_ops { |
232 | int (*lcread) (int index, u32 offset, int len, u32 * data); | 240 | int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len, |
233 | int (*lcwrite) (int index, u32 offset, int len, u32 data); | 241 | u32 *data); |
234 | int (*cread) (int index, u16 destid, u8 hopcount, u32 offset, int len, | 242 | int (*lcwrite) (struct rio_mport *mport, int index, u32 offset, int len, |
235 | u32 * data); | 243 | u32 data); |
236 | int (*cwrite) (int index, u16 destid, u8 hopcount, u32 offset, int len, | 244 | int (*cread) (struct rio_mport *mport, int index, u16 destid, |
237 | u32 data); | 245 | u8 hopcount, u32 offset, int len, u32 *data); |
238 | int (*dsend) (int index, u16 destid, u16 data); | 246 | int (*cwrite) (struct rio_mport *mport, int index, u16 destid, |
247 | u8 hopcount, u32 offset, int len, u32 data); | ||
248 | int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data); | ||
239 | }; | 249 | }; |
240 | 250 | ||
241 | #define RIO_RESOURCE_MEM 0x00000100 | 251 | #define RIO_RESOURCE_MEM 0x00000100 |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index b9e174079002..44c81c744538 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -740,13 +740,13 @@ extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change); | |||
740 | extern void rtnl_lock(void); | 740 | extern void rtnl_lock(void); |
741 | extern void rtnl_unlock(void); | 741 | extern void rtnl_unlock(void); |
742 | extern int rtnl_trylock(void); | 742 | extern int rtnl_trylock(void); |
743 | extern int rtnl_is_locked(void); | ||
743 | 744 | ||
744 | extern void rtnetlink_init(void); | 745 | extern void rtnetlink_init(void); |
745 | extern void __rtnl_unlock(void); | 746 | extern void __rtnl_unlock(void); |
746 | 747 | ||
747 | #define ASSERT_RTNL() do { \ | 748 | #define ASSERT_RTNL() do { \ |
748 | if (unlikely(rtnl_trylock())) { \ | 749 | if (unlikely(!rtnl_is_locked())) { \ |
749 | rtnl_unlock(); \ | ||
750 | printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ | 750 | printk(KERN_ERR "RTNL: assertion failed at %s (%d)\n", \ |
751 | __FILE__, __LINE__); \ | 751 | __FILE__, __LINE__); \ |
752 | dump_stack(); \ | 752 | dump_stack(); \ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 311380e5fe89..1d02babdb2c7 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -68,7 +68,6 @@ struct sched_param { | |||
68 | #include <linux/smp.h> | 68 | #include <linux/smp.h> |
69 | #include <linux/sem.h> | 69 | #include <linux/sem.h> |
70 | #include <linux/signal.h> | 70 | #include <linux/signal.h> |
71 | #include <linux/securebits.h> | ||
72 | #include <linux/fs_struct.h> | 71 | #include <linux/fs_struct.h> |
73 | #include <linux/compiler.h> | 72 | #include <linux/compiler.h> |
74 | #include <linux/completion.h> | 73 | #include <linux/completion.h> |
@@ -1133,7 +1132,7 @@ struct task_struct { | |||
1133 | gid_t gid,egid,sgid,fsgid; | 1132 | gid_t gid,egid,sgid,fsgid; |
1134 | struct group_info *group_info; | 1133 | struct group_info *group_info; |
1135 | kernel_cap_t cap_effective, cap_inheritable, cap_permitted, cap_bset; | 1134 | kernel_cap_t cap_effective, cap_inheritable, cap_permitted, cap_bset; |
1136 | unsigned keep_capabilities:1; | 1135 | unsigned securebits; |
1137 | struct user_struct *user; | 1136 | struct user_struct *user; |
1138 | #ifdef CONFIG_KEYS | 1137 | #ifdef CONFIG_KEYS |
1139 | struct key *request_key_auth; /* assumed request_key authority */ | 1138 | struct key *request_key_auth; /* assumed request_key authority */ |
@@ -1798,6 +1797,8 @@ extern void mmput(struct mm_struct *); | |||
1798 | extern struct mm_struct *get_task_mm(struct task_struct *task); | 1797 | extern struct mm_struct *get_task_mm(struct task_struct *task); |
1799 | /* Remove the current tasks stale references to the old mm_struct */ | 1798 | /* Remove the current tasks stale references to the old mm_struct */ |
1800 | extern void mm_release(struct task_struct *, struct mm_struct *); | 1799 | extern void mm_release(struct task_struct *, struct mm_struct *); |
1800 | /* Allocate a new mm structure and copy contents from tsk->mm */ | ||
1801 | extern struct mm_struct *dup_mm(struct task_struct *tsk); | ||
1801 | 1802 | ||
1802 | extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *); | 1803 | extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *); |
1803 | extern void flush_thread(void); | 1804 | extern void flush_thread(void); |
@@ -1926,6 +1927,8 @@ static inline unsigned long *end_of_stack(struct task_struct *p) | |||
1926 | 1927 | ||
1927 | #endif | 1928 | #endif |
1928 | 1929 | ||
1930 | extern void thread_info_cache_init(void); | ||
1931 | |||
1929 | /* set thread flags in other task's structures | 1932 | /* set thread flags in other task's structures |
1930 | * - see asm/thread_info.h for TIF_xxxx flags available | 1933 | * - see asm/thread_info.h for TIF_xxxx flags available |
1931 | */ | 1934 | */ |
@@ -2145,6 +2148,19 @@ static inline void migration_init(void) | |||
2145 | #define TASK_SIZE_OF(tsk) TASK_SIZE | 2148 | #define TASK_SIZE_OF(tsk) TASK_SIZE |
2146 | #endif | 2149 | #endif |
2147 | 2150 | ||
2151 | #ifdef CONFIG_MM_OWNER | ||
2152 | extern void mm_update_next_owner(struct mm_struct *mm); | ||
2153 | extern void mm_init_owner(struct mm_struct *mm, struct task_struct *p); | ||
2154 | #else | ||
2155 | static inline void mm_update_next_owner(struct mm_struct *mm) | ||
2156 | { | ||
2157 | } | ||
2158 | |||
2159 | static inline void mm_init_owner(struct mm_struct *mm, struct task_struct *p) | ||
2160 | { | ||
2161 | } | ||
2162 | #endif /* CONFIG_MM_OWNER */ | ||
2163 | |||
2148 | #endif /* __KERNEL__ */ | 2164 | #endif /* __KERNEL__ */ |
2149 | 2165 | ||
2150 | #endif | 2166 | #endif |
diff --git a/include/linux/securebits.h b/include/linux/securebits.h index 5b0617840fa4..c1f19dbceb05 100644 --- a/include/linux/securebits.h +++ b/include/linux/securebits.h | |||
@@ -3,28 +3,39 @@ | |||
3 | 3 | ||
4 | #define SECUREBITS_DEFAULT 0x00000000 | 4 | #define SECUREBITS_DEFAULT 0x00000000 |
5 | 5 | ||
6 | extern unsigned securebits; | ||
7 | |||
8 | /* When set UID 0 has no special privileges. When unset, we support | 6 | /* When set UID 0 has no special privileges. When unset, we support |
9 | inheritance of root-permissions and suid-root executable under | 7 | inheritance of root-permissions and suid-root executable under |
10 | compatibility mode. We raise the effective and inheritable bitmasks | 8 | compatibility mode. We raise the effective and inheritable bitmasks |
11 | *of the executable file* if the effective uid of the new process is | 9 | *of the executable file* if the effective uid of the new process is |
12 | 0. If the real uid is 0, we raise the inheritable bitmask of the | 10 | 0. If the real uid is 0, we raise the inheritable bitmask of the |
13 | executable file. */ | 11 | executable file. */ |
14 | #define SECURE_NOROOT 0 | 12 | #define SECURE_NOROOT 0 |
13 | #define SECURE_NOROOT_LOCKED 1 /* make bit-0 immutable */ | ||
15 | 14 | ||
16 | /* When set, setuid to/from uid 0 does not trigger capability-"fixes" | 15 | /* When set, setuid to/from uid 0 does not trigger capability-"fixes" |
17 | to be compatible with old programs relying on set*uid to loose | 16 | to be compatible with old programs relying on set*uid to loose |
18 | privileges. When unset, setuid doesn't change privileges. */ | 17 | privileges. When unset, setuid doesn't change privileges. */ |
19 | #define SECURE_NO_SETUID_FIXUP 2 | 18 | #define SECURE_NO_SETUID_FIXUP 2 |
19 | #define SECURE_NO_SETUID_FIXUP_LOCKED 3 /* make bit-2 immutable */ | ||
20 | |||
21 | /* When set, a process can retain its capabilities even after | ||
22 | transitioning to a non-root user (the set-uid fixup suppressed by | ||
23 | bit 2). Bit-4 is cleared when a process calls exec(); setting both | ||
24 | bit 4 and 5 will create a barrier through exec that no exec()'d | ||
25 | child can use this feature again. */ | ||
26 | #define SECURE_KEEP_CAPS 4 | ||
27 | #define SECURE_KEEP_CAPS_LOCKED 5 /* make bit-4 immutable */ | ||
20 | 28 | ||
21 | /* Each securesetting is implemented using two bits. One bit specify | 29 | /* Each securesetting is implemented using two bits. One bit specify |
22 | whether the setting is on or off. The other bit specify whether the | 30 | whether the setting is on or off. The other bit specify whether the |
23 | setting is fixed or not. A setting which is fixed cannot be changed | 31 | setting is fixed or not. A setting which is fixed cannot be changed |
24 | from user-level. */ | 32 | from user-level. */ |
33 | #define issecure_mask(X) (1 << (X)) | ||
34 | #define issecure(X) (issecure_mask(X) & current->securebits) | ||
25 | 35 | ||
26 | #define issecure(X) ( (1 << (X+1)) & SECUREBITS_DEFAULT ? \ | 36 | #define SECURE_ALL_BITS (issecure_mask(SECURE_NOROOT) | \ |
27 | (1 << (X)) & SECUREBITS_DEFAULT : \ | 37 | issecure_mask(SECURE_NO_SETUID_FIXUP) | \ |
28 | (1 << (X)) & securebits ) | 38 | issecure_mask(SECURE_KEEP_CAPS)) |
39 | #define SECURE_ALL_LOCKS (SECURE_ALL_BITS << 1) | ||
29 | 40 | ||
30 | #endif /* !_LINUX_SECUREBITS_H */ | 41 | #endif /* !_LINUX_SECUREBITS_H */ |
diff --git a/include/linux/security.h b/include/linux/security.h index 53a34539382a..adb09d893ae0 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -34,8 +34,6 @@ | |||
34 | #include <linux/xfrm.h> | 34 | #include <linux/xfrm.h> |
35 | #include <net/flow.h> | 35 | #include <net/flow.h> |
36 | 36 | ||
37 | extern unsigned securebits; | ||
38 | |||
39 | /* Maximum number of letters for an LSM name string */ | 37 | /* Maximum number of letters for an LSM name string */ |
40 | #define SECURITY_NAME_MAX 10 | 38 | #define SECURITY_NAME_MAX 10 |
41 | 39 | ||
@@ -46,25 +44,28 @@ struct audit_krule; | |||
46 | * These functions are in security/capability.c and are used | 44 | * These functions are in security/capability.c and are used |
47 | * as the default capabilities functions | 45 | * as the default capabilities functions |
48 | */ | 46 | */ |
49 | extern int cap_capable (struct task_struct *tsk, int cap); | 47 | extern int cap_capable(struct task_struct *tsk, int cap); |
50 | extern int cap_settime (struct timespec *ts, struct timezone *tz); | 48 | extern int cap_settime(struct timespec *ts, struct timezone *tz); |
51 | extern int cap_ptrace (struct task_struct *parent, struct task_struct *child); | 49 | extern int cap_ptrace(struct task_struct *parent, struct task_struct *child); |
52 | extern int cap_capget (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 50 | extern int cap_capget(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
53 | extern int cap_capset_check (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 51 | extern int cap_capset_check(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
54 | extern void cap_capset_set (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); | 52 | extern void cap_capset_set(struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted); |
55 | extern int cap_bprm_set_security (struct linux_binprm *bprm); | 53 | extern int cap_bprm_set_security(struct linux_binprm *bprm); |
56 | extern void cap_bprm_apply_creds (struct linux_binprm *bprm, int unsafe); | 54 | extern void cap_bprm_apply_creds(struct linux_binprm *bprm, int unsafe); |
57 | extern int cap_bprm_secureexec(struct linux_binprm *bprm); | 55 | extern int cap_bprm_secureexec(struct linux_binprm *bprm); |
58 | extern int cap_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags); | 56 | extern int cap_inode_setxattr(struct dentry *dentry, const char *name, |
59 | extern int cap_inode_removexattr(struct dentry *dentry, char *name); | 57 | const void *value, size_t size, int flags); |
58 | extern int cap_inode_removexattr(struct dentry *dentry, const char *name); | ||
60 | extern int cap_inode_need_killpriv(struct dentry *dentry); | 59 | extern int cap_inode_need_killpriv(struct dentry *dentry); |
61 | extern int cap_inode_killpriv(struct dentry *dentry); | 60 | extern int cap_inode_killpriv(struct dentry *dentry); |
62 | extern int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags); | 61 | extern int cap_task_post_setuid(uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags); |
63 | extern void cap_task_reparent_to_init (struct task_struct *p); | 62 | extern void cap_task_reparent_to_init(struct task_struct *p); |
64 | extern int cap_task_setscheduler (struct task_struct *p, int policy, struct sched_param *lp); | 63 | extern int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3, |
65 | extern int cap_task_setioprio (struct task_struct *p, int ioprio); | 64 | unsigned long arg4, unsigned long arg5, long *rc_p); |
66 | extern int cap_task_setnice (struct task_struct *p, int nice); | 65 | extern int cap_task_setscheduler(struct task_struct *p, int policy, struct sched_param *lp); |
67 | extern int cap_syslog (int type); | 66 | extern int cap_task_setioprio(struct task_struct *p, int ioprio); |
67 | extern int cap_task_setnice(struct task_struct *p, int nice); | ||
68 | extern int cap_syslog(int type); | ||
68 | extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); | 69 | extern int cap_vm_enough_memory(struct mm_struct *mm, long pages); |
69 | 70 | ||
70 | struct msghdr; | 71 | struct msghdr; |
@@ -128,7 +129,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
128 | { | 129 | { |
129 | int i; | 130 | int i; |
130 | if (opts->mnt_opts) | 131 | if (opts->mnt_opts) |
131 | for(i = 0; i < opts->num_mnt_opts; i++) | 132 | for (i = 0; i < opts->num_mnt_opts; i++) |
132 | kfree(opts->mnt_opts[i]); | 133 | kfree(opts->mnt_opts[i]); |
133 | kfree(opts->mnt_opts); | 134 | kfree(opts->mnt_opts); |
134 | opts->mnt_opts = NULL; | 135 | opts->mnt_opts = NULL; |
@@ -190,21 +191,21 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
190 | * @bprm contains the linux_binprm structure. | 191 | * @bprm contains the linux_binprm structure. |
191 | * Return 0 if the hook is successful and permission is granted. | 192 | * Return 0 if the hook is successful and permission is granted. |
192 | * @bprm_check_security: | 193 | * @bprm_check_security: |
193 | * This hook mediates the point when a search for a binary handler will | 194 | * This hook mediates the point when a search for a binary handler will |
194 | * begin. It allows a check the @bprm->security value which is set in | 195 | * begin. It allows a check the @bprm->security value which is set in |
195 | * the preceding set_security call. The primary difference from | 196 | * the preceding set_security call. The primary difference from |
196 | * set_security is that the argv list and envp list are reliably | 197 | * set_security is that the argv list and envp list are reliably |
197 | * available in @bprm. This hook may be called multiple times | 198 | * available in @bprm. This hook may be called multiple times |
198 | * during a single execve; and in each pass set_security is called | 199 | * during a single execve; and in each pass set_security is called |
199 | * first. | 200 | * first. |
200 | * @bprm contains the linux_binprm structure. | 201 | * @bprm contains the linux_binprm structure. |
201 | * Return 0 if the hook is successful and permission is granted. | 202 | * Return 0 if the hook is successful and permission is granted. |
202 | * @bprm_secureexec: | 203 | * @bprm_secureexec: |
203 | * Return a boolean value (0 or 1) indicating whether a "secure exec" | 204 | * Return a boolean value (0 or 1) indicating whether a "secure exec" |
204 | * is required. The flag is passed in the auxiliary table | 205 | * is required. The flag is passed in the auxiliary table |
205 | * on the initial stack to the ELF interpreter to indicate whether libc | 206 | * on the initial stack to the ELF interpreter to indicate whether libc |
206 | * should enable secure mode. | 207 | * should enable secure mode. |
207 | * @bprm contains the linux_binprm structure. | 208 | * @bprm contains the linux_binprm structure. |
208 | * | 209 | * |
209 | * Security hooks for filesystem operations. | 210 | * Security hooks for filesystem operations. |
210 | * | 211 | * |
@@ -221,7 +222,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
221 | * Check permission before obtaining filesystem statistics for the @mnt | 222 | * Check permission before obtaining filesystem statistics for the @mnt |
222 | * mountpoint. | 223 | * mountpoint. |
223 | * @dentry is a handle on the superblock for the filesystem. | 224 | * @dentry is a handle on the superblock for the filesystem. |
224 | * Return 0 if permission is granted. | 225 | * Return 0 if permission is granted. |
225 | * @sb_mount: | 226 | * @sb_mount: |
226 | * Check permission before an object specified by @dev_name is mounted on | 227 | * Check permission before an object specified by @dev_name is mounted on |
227 | * the mount point named by @nd. For an ordinary mount, @dev_name | 228 | * the mount point named by @nd. For an ordinary mount, @dev_name |
@@ -282,12 +283,12 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
282 | * @sb_pivotroot: | 283 | * @sb_pivotroot: |
283 | * Check permission before pivoting the root filesystem. | 284 | * Check permission before pivoting the root filesystem. |
284 | * @old_path contains the path for the new location of the current root (put_old). | 285 | * @old_path contains the path for the new location of the current root (put_old). |
285 | * @new_path contains the path for the new root (new_root). | 286 | * @new_path contains the path for the new root (new_root). |
286 | * Return 0 if permission is granted. | 287 | * Return 0 if permission is granted. |
287 | * @sb_post_pivotroot: | 288 | * @sb_post_pivotroot: |
288 | * Update module state after a successful pivot. | 289 | * Update module state after a successful pivot. |
289 | * @old_path contains the path for the old root. | 290 | * @old_path contains the path for the old root. |
290 | * @new_path contains the path for the new root. | 291 | * @new_path contains the path for the new root. |
291 | * @sb_get_mnt_opts: | 292 | * @sb_get_mnt_opts: |
292 | * Get the security relevant mount options used for a superblock | 293 | * Get the security relevant mount options used for a superblock |
293 | * @sb the superblock to get security mount options from | 294 | * @sb the superblock to get security mount options from |
@@ -316,9 +317,9 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
316 | * @inode_free_security: | 317 | * @inode_free_security: |
317 | * @inode contains the inode structure. | 318 | * @inode contains the inode structure. |
318 | * Deallocate the inode security structure and set @inode->i_security to | 319 | * Deallocate the inode security structure and set @inode->i_security to |
319 | * NULL. | 320 | * NULL. |
320 | * @inode_init_security: | 321 | * @inode_init_security: |
321 | * Obtain the security attribute name suffix and value to set on a newly | 322 | * Obtain the security attribute name suffix and value to set on a newly |
322 | * created inode and set up the incore security field for the new inode. | 323 | * created inode and set up the incore security field for the new inode. |
323 | * This hook is called by the fs code as part of the inode creation | 324 | * This hook is called by the fs code as part of the inode creation |
324 | * transaction and provides for atomic labeling of the inode, unlike | 325 | * transaction and provides for atomic labeling of the inode, unlike |
@@ -349,7 +350,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
349 | * @new_dentry contains the dentry structure for the new link. | 350 | * @new_dentry contains the dentry structure for the new link. |
350 | * Return 0 if permission is granted. | 351 | * Return 0 if permission is granted. |
351 | * @inode_unlink: | 352 | * @inode_unlink: |
352 | * Check the permission to remove a hard link to a file. | 353 | * Check the permission to remove a hard link to a file. |
353 | * @dir contains the inode structure of parent directory of the file. | 354 | * @dir contains the inode structure of parent directory of the file. |
354 | * @dentry contains the dentry structure for file to be unlinked. | 355 | * @dentry contains the dentry structure for file to be unlinked. |
355 | * Return 0 if permission is granted. | 356 | * Return 0 if permission is granted. |
@@ -361,7 +362,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
361 | * Return 0 if permission is granted. | 362 | * Return 0 if permission is granted. |
362 | * @inode_mkdir: | 363 | * @inode_mkdir: |
363 | * Check permissions to create a new directory in the existing directory | 364 | * Check permissions to create a new directory in the existing directory |
364 | * associated with inode strcture @dir. | 365 | * associated with inode strcture @dir. |
365 | * @dir containst the inode structure of parent of the directory to be created. | 366 | * @dir containst the inode structure of parent of the directory to be created. |
366 | * @dentry contains the dentry structure of new directory. | 367 | * @dentry contains the dentry structure of new directory. |
367 | * @mode contains the mode of new directory. | 368 | * @mode contains the mode of new directory. |
@@ -406,7 +407,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
406 | * called when the actual read/write operations are performed. | 407 | * called when the actual read/write operations are performed. |
407 | * @inode contains the inode structure to check. | 408 | * @inode contains the inode structure to check. |
408 | * @mask contains the permission mask. | 409 | * @mask contains the permission mask. |
409 | * @nd contains the nameidata (may be NULL). | 410 | * @nd contains the nameidata (may be NULL). |
410 | * Return 0 if permission is granted. | 411 | * Return 0 if permission is granted. |
411 | * @inode_setattr: | 412 | * @inode_setattr: |
412 | * Check permission before setting file attributes. Note that the kernel | 413 | * Check permission before setting file attributes. Note that the kernel |
@@ -428,24 +429,24 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
428 | * can use this hook to release any persistent label associated with the | 429 | * can use this hook to release any persistent label associated with the |
429 | * inode. | 430 | * inode. |
430 | * @inode_setxattr: | 431 | * @inode_setxattr: |
431 | * Check permission before setting the extended attributes | 432 | * Check permission before setting the extended attributes |
432 | * @value identified by @name for @dentry. | 433 | * @value identified by @name for @dentry. |
433 | * Return 0 if permission is granted. | 434 | * Return 0 if permission is granted. |
434 | * @inode_post_setxattr: | 435 | * @inode_post_setxattr: |
435 | * Update inode security field after successful setxattr operation. | 436 | * Update inode security field after successful setxattr operation. |
436 | * @value identified by @name for @dentry. | 437 | * @value identified by @name for @dentry. |
437 | * @inode_getxattr: | 438 | * @inode_getxattr: |
438 | * Check permission before obtaining the extended attributes | 439 | * Check permission before obtaining the extended attributes |
439 | * identified by @name for @dentry. | 440 | * identified by @name for @dentry. |
440 | * Return 0 if permission is granted. | 441 | * Return 0 if permission is granted. |
441 | * @inode_listxattr: | 442 | * @inode_listxattr: |
442 | * Check permission before obtaining the list of extended attribute | 443 | * Check permission before obtaining the list of extended attribute |
443 | * names for @dentry. | 444 | * names for @dentry. |
444 | * Return 0 if permission is granted. | 445 | * Return 0 if permission is granted. |
445 | * @inode_removexattr: | 446 | * @inode_removexattr: |
446 | * Check permission before removing the extended attribute | 447 | * Check permission before removing the extended attribute |
447 | * identified by @name for @dentry. | 448 | * identified by @name for @dentry. |
448 | * Return 0 if permission is granted. | 449 | * Return 0 if permission is granted. |
449 | * @inode_getsecurity: | 450 | * @inode_getsecurity: |
450 | * Retrieve a copy of the extended attribute representation of the | 451 | * Retrieve a copy of the extended attribute representation of the |
451 | * security label associated with @name for @inode via @buffer. Note that | 452 | * security label associated with @name for @inode via @buffer. Note that |
@@ -457,7 +458,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
457 | * Set the security label associated with @name for @inode from the | 458 | * Set the security label associated with @name for @inode from the |
458 | * extended attribute value @value. @size indicates the size of the | 459 | * extended attribute value @value. @size indicates the size of the |
459 | * @value in bytes. @flags may be XATTR_CREATE, XATTR_REPLACE, or 0. | 460 | * @value in bytes. @flags may be XATTR_CREATE, XATTR_REPLACE, or 0. |
460 | * Note that @name is the remainder of the attribute name after the | 461 | * Note that @name is the remainder of the attribute name after the |
461 | * security. prefix has been removed. | 462 | * security. prefix has been removed. |
462 | * Return 0 on success. | 463 | * Return 0 on success. |
463 | * @inode_listsecurity: | 464 | * @inode_listsecurity: |
@@ -564,7 +565,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
564 | * struct file, so the file structure (and associated security information) | 565 | * struct file, so the file structure (and associated security information) |
565 | * can always be obtained: | 566 | * can always be obtained: |
566 | * container_of(fown, struct file, f_owner) | 567 | * container_of(fown, struct file, f_owner) |
567 | * @tsk contains the structure of task receiving signal. | 568 | * @tsk contains the structure of task receiving signal. |
568 | * @fown contains the file owner information. | 569 | * @fown contains the file owner information. |
569 | * @sig is the signal that will be sent. When 0, kernel sends SIGIO. | 570 | * @sig is the signal that will be sent. When 0, kernel sends SIGIO. |
570 | * Return 0 if permission is granted. | 571 | * Return 0 if permission is granted. |
@@ -720,14 +721,16 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
720 | * @arg3 contains a argument. | 721 | * @arg3 contains a argument. |
721 | * @arg4 contains a argument. | 722 | * @arg4 contains a argument. |
722 | * @arg5 contains a argument. | 723 | * @arg5 contains a argument. |
723 | * Return 0 if permission is granted. | 724 | * @rc_p contains a pointer to communicate back the forced return code |
725 | * Return 0 if permission is granted, and non-zero if the security module | ||
726 | * has taken responsibility (setting *rc_p) for the prctl call. | ||
724 | * @task_reparent_to_init: | 727 | * @task_reparent_to_init: |
725 | * Set the security attributes in @p->security for a kernel thread that | 728 | * Set the security attributes in @p->security for a kernel thread that |
726 | * is being reparented to the init task. | 729 | * is being reparented to the init task. |
727 | * @p contains the task_struct for the kernel thread. | 730 | * @p contains the task_struct for the kernel thread. |
728 | * @task_to_inode: | 731 | * @task_to_inode: |
729 | * Set the security attributes for an inode based on an associated task's | 732 | * Set the security attributes for an inode based on an associated task's |
730 | * security attributes, e.g. for /proc/pid inodes. | 733 | * security attributes, e.g. for /proc/pid inodes. |
731 | * @p contains the task_struct for the task. | 734 | * @p contains the task_struct for the task. |
732 | * @inode contains the inode structure for the inode. | 735 | * @inode contains the inode structure for the inode. |
733 | * | 736 | * |
@@ -737,7 +740,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
737 | * Save security information for a netlink message so that permission | 740 | * Save security information for a netlink message so that permission |
738 | * checking can be performed when the message is processed. The security | 741 | * checking can be performed when the message is processed. The security |
739 | * information can be saved using the eff_cap field of the | 742 | * information can be saved using the eff_cap field of the |
740 | * netlink_skb_parms structure. Also may be used to provide fine | 743 | * netlink_skb_parms structure. Also may be used to provide fine |
741 | * grained control over message transmission. | 744 | * grained control over message transmission. |
742 | * @sk associated sock of task sending the message., | 745 | * @sk associated sock of task sending the message., |
743 | * @skb contains the sk_buff structure for the netlink message. | 746 | * @skb contains the sk_buff structure for the netlink message. |
@@ -805,14 +808,14 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
805 | * @sock contains the socket structure. | 808 | * @sock contains the socket structure. |
806 | * @address contains the address to bind to. | 809 | * @address contains the address to bind to. |
807 | * @addrlen contains the length of address. | 810 | * @addrlen contains the length of address. |
808 | * Return 0 if permission is granted. | 811 | * Return 0 if permission is granted. |
809 | * @socket_connect: | 812 | * @socket_connect: |
810 | * Check permission before socket protocol layer connect operation | 813 | * Check permission before socket protocol layer connect operation |
811 | * attempts to connect socket @sock to a remote address, @address. | 814 | * attempts to connect socket @sock to a remote address, @address. |
812 | * @sock contains the socket structure. | 815 | * @sock contains the socket structure. |
813 | * @address contains the address of remote endpoint. | 816 | * @address contains the address of remote endpoint. |
814 | * @addrlen contains the length of address. | 817 | * @addrlen contains the length of address. |
815 | * Return 0 if permission is granted. | 818 | * Return 0 if permission is granted. |
816 | * @socket_listen: | 819 | * @socket_listen: |
817 | * Check permission before socket protocol layer listen operation. | 820 | * Check permission before socket protocol layer listen operation. |
818 | * @sock contains the socket structure. | 821 | * @sock contains the socket structure. |
@@ -842,7 +845,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
842 | * @msg contains the message structure. | 845 | * @msg contains the message structure. |
843 | * @size contains the size of message structure. | 846 | * @size contains the size of message structure. |
844 | * @flags contains the operational flags. | 847 | * @flags contains the operational flags. |
845 | * Return 0 if permission is granted. | 848 | * Return 0 if permission is granted. |
846 | * @socket_getsockname: | 849 | * @socket_getsockname: |
847 | * Check permission before the local address (name) of the socket object | 850 | * Check permission before the local address (name) of the socket object |
848 | * @sock is retrieved. | 851 | * @sock is retrieved. |
@@ -866,7 +869,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
866 | * @sock contains the socket structure. | 869 | * @sock contains the socket structure. |
867 | * @level contains the protocol level to set options for. | 870 | * @level contains the protocol level to set options for. |
868 | * @optname contains the name of the option to set. | 871 | * @optname contains the name of the option to set. |
869 | * Return 0 if permission is granted. | 872 | * Return 0 if permission is granted. |
870 | * @socket_shutdown: | 873 | * @socket_shutdown: |
871 | * Checks permission before all or part of a connection on the socket | 874 | * Checks permission before all or part of a connection on the socket |
872 | * @sock is shut down. | 875 | * @sock is shut down. |
@@ -893,19 +896,19 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
893 | * Return 0 if all is well, otherwise, typical getsockopt return | 896 | * Return 0 if all is well, otherwise, typical getsockopt return |
894 | * values. | 897 | * values. |
895 | * @socket_getpeersec_dgram: | 898 | * @socket_getpeersec_dgram: |
896 | * This hook allows the security module to provide peer socket security | 899 | * This hook allows the security module to provide peer socket security |
897 | * state for udp sockets on a per-packet basis to userspace via | 900 | * state for udp sockets on a per-packet basis to userspace via |
898 | * getsockopt SO_GETPEERSEC. The application must first have indicated | 901 | * getsockopt SO_GETPEERSEC. The application must first have indicated |
899 | * the IP_PASSSEC option via getsockopt. It can then retrieve the | 902 | * the IP_PASSSEC option via getsockopt. It can then retrieve the |
900 | * security state returned by this hook for a packet via the SCM_SECURITY | 903 | * security state returned by this hook for a packet via the SCM_SECURITY |
901 | * ancillary message type. | 904 | * ancillary message type. |
902 | * @skb is the skbuff for the packet being queried | 905 | * @skb is the skbuff for the packet being queried |
903 | * @secdata is a pointer to a buffer in which to copy the security data | 906 | * @secdata is a pointer to a buffer in which to copy the security data |
904 | * @seclen is the maximum length for @secdata | 907 | * @seclen is the maximum length for @secdata |
905 | * Return 0 on success, error on failure. | 908 | * Return 0 on success, error on failure. |
906 | * @sk_alloc_security: | 909 | * @sk_alloc_security: |
907 | * Allocate and attach a security structure to the sk->sk_security field, | 910 | * Allocate and attach a security structure to the sk->sk_security field, |
908 | * which is used to copy security attributes between local stream sockets. | 911 | * which is used to copy security attributes between local stream sockets. |
909 | * @sk_free_security: | 912 | * @sk_free_security: |
910 | * Deallocate security structure. | 913 | * Deallocate security structure. |
911 | * @sk_clone_security: | 914 | * @sk_clone_security: |
@@ -920,7 +923,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
920 | * @inet_csk_clone: | 923 | * @inet_csk_clone: |
921 | * Sets the new child socket's sid to the openreq sid. | 924 | * Sets the new child socket's sid to the openreq sid. |
922 | * @inet_conn_established: | 925 | * @inet_conn_established: |
923 | * Sets the connection's peersid to the secmark on skb. | 926 | * Sets the connection's peersid to the secmark on skb. |
924 | * @req_classify_flow: | 927 | * @req_classify_flow: |
925 | * Sets the flow's sid to the openreq sid. | 928 | * Sets the flow's sid to the openreq sid. |
926 | * | 929 | * |
@@ -999,13 +1002,24 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
999 | * No return value. | 1002 | * No return value. |
1000 | * @key_permission: | 1003 | * @key_permission: |
1001 | * See whether a specific operational right is granted to a process on a | 1004 | * See whether a specific operational right is granted to a process on a |
1002 | * key. | 1005 | * key. |
1003 | * @key_ref refers to the key (key pointer + possession attribute bit). | 1006 | * @key_ref refers to the key (key pointer + possession attribute bit). |
1004 | * @context points to the process to provide the context against which to | 1007 | * @context points to the process to provide the context against which to |
1005 | * evaluate the security data on the key. | 1008 | * evaluate the security data on the key. |
1006 | * @perm describes the combination of permissions required of this key. | 1009 | * @perm describes the combination of permissions required of this key. |
1007 | * Return 1 if permission granted, 0 if permission denied and -ve it the | 1010 | * Return 1 if permission granted, 0 if permission denied and -ve it the |
1008 | * normal permissions model should be effected. | 1011 | * normal permissions model should be effected. |
1012 | * @key_getsecurity: | ||
1013 | * Get a textual representation of the security context attached to a key | ||
1014 | * for the purposes of honouring KEYCTL_GETSECURITY. This function | ||
1015 | * allocates the storage for the NUL-terminated string and the caller | ||
1016 | * should free it. | ||
1017 | * @key points to the key to be queried. | ||
1018 | * @_buffer points to a pointer that should be set to point to the | ||
1019 | * resulting string (if no label or an error occurs). | ||
1020 | * Return the length of the string (including terminating NUL) or -ve if | ||
1021 | * an error. | ||
1022 | * May also return 0 (and a NULL buffer pointer) if there is no label. | ||
1009 | * | 1023 | * |
1010 | * Security hooks affecting all System V IPC operations. | 1024 | * Security hooks affecting all System V IPC operations. |
1011 | * | 1025 | * |
@@ -1056,7 +1070,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1056 | * The @msq may be NULL, e.g. for IPC_INFO or MSG_INFO. | 1070 | * The @msq may be NULL, e.g. for IPC_INFO or MSG_INFO. |
1057 | * @msq contains the message queue to act upon. May be NULL. | 1071 | * @msq contains the message queue to act upon. May be NULL. |
1058 | * @cmd contains the operation to be performed. | 1072 | * @cmd contains the operation to be performed. |
1059 | * Return 0 if permission is granted. | 1073 | * Return 0 if permission is granted. |
1060 | * @msg_queue_msgsnd: | 1074 | * @msg_queue_msgsnd: |
1061 | * Check permission before a message, @msg, is enqueued on the message | 1075 | * Check permission before a message, @msg, is enqueued on the message |
1062 | * queue, @msq. | 1076 | * queue, @msq. |
@@ -1066,8 +1080,8 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1066 | * Return 0 if permission is granted. | 1080 | * Return 0 if permission is granted. |
1067 | * @msg_queue_msgrcv: | 1081 | * @msg_queue_msgrcv: |
1068 | * Check permission before a message, @msg, is removed from the message | 1082 | * Check permission before a message, @msg, is removed from the message |
1069 | * queue, @msq. The @target task structure contains a pointer to the | 1083 | * queue, @msq. The @target task structure contains a pointer to the |
1070 | * process that will be receiving the message (not equal to the current | 1084 | * process that will be receiving the message (not equal to the current |
1071 | * process when inline receives are being performed). | 1085 | * process when inline receives are being performed). |
1072 | * @msq contains the message queue to retrieve message from. | 1086 | * @msq contains the message queue to retrieve message from. |
1073 | * @msg contains the message destination. | 1087 | * @msg contains the message destination. |
@@ -1132,15 +1146,15 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1132 | * Return 0 if permission is granted. | 1146 | * Return 0 if permission is granted. |
1133 | * @sem_semctl: | 1147 | * @sem_semctl: |
1134 | * Check permission when a semaphore operation specified by @cmd is to be | 1148 | * Check permission when a semaphore operation specified by @cmd is to be |
1135 | * performed on the semaphore @sma. The @sma may be NULL, e.g. for | 1149 | * performed on the semaphore @sma. The @sma may be NULL, e.g. for |
1136 | * IPC_INFO or SEM_INFO. | 1150 | * IPC_INFO or SEM_INFO. |
1137 | * @sma contains the semaphore structure. May be NULL. | 1151 | * @sma contains the semaphore structure. May be NULL. |
1138 | * @cmd contains the operation to be performed. | 1152 | * @cmd contains the operation to be performed. |
1139 | * Return 0 if permission is granted. | 1153 | * Return 0 if permission is granted. |
1140 | * @sem_semop | 1154 | * @sem_semop |
1141 | * Check permissions before performing operations on members of the | 1155 | * Check permissions before performing operations on members of the |
1142 | * semaphore set @sma. If the @alter flag is nonzero, the semaphore set | 1156 | * semaphore set @sma. If the @alter flag is nonzero, the semaphore set |
1143 | * may be modified. | 1157 | * may be modified. |
1144 | * @sma contains the semaphore structure. | 1158 | * @sma contains the semaphore structure. |
1145 | * @sops contains the operations to perform. | 1159 | * @sops contains the operations to perform. |
1146 | * @nsops contains the number of operations to perform. | 1160 | * @nsops contains the number of operations to perform. |
@@ -1211,7 +1225,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1211 | * @syslog: | 1225 | * @syslog: |
1212 | * Check permission before accessing the kernel message ring or changing | 1226 | * Check permission before accessing the kernel message ring or changing |
1213 | * logging to the console. | 1227 | * logging to the console. |
1214 | * See the syslog(2) manual page for an explanation of the @type values. | 1228 | * See the syslog(2) manual page for an explanation of the @type values. |
1215 | * @type contains the type of action. | 1229 | * @type contains the type of action. |
1216 | * Return 0 if permission is granted. | 1230 | * Return 0 if permission is granted. |
1217 | * @settime: | 1231 | * @settime: |
@@ -1223,22 +1237,22 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1223 | * @vm_enough_memory: | 1237 | * @vm_enough_memory: |
1224 | * Check permissions for allocating a new virtual mapping. | 1238 | * Check permissions for allocating a new virtual mapping. |
1225 | * @mm contains the mm struct it is being added to. | 1239 | * @mm contains the mm struct it is being added to. |
1226 | * @pages contains the number of pages. | 1240 | * @pages contains the number of pages. |
1227 | * Return 0 if permission is granted. | 1241 | * Return 0 if permission is granted. |
1228 | * | 1242 | * |
1229 | * @register_security: | 1243 | * @register_security: |
1230 | * allow module stacking. | 1244 | * allow module stacking. |
1231 | * @name contains the name of the security module being stacked. | 1245 | * @name contains the name of the security module being stacked. |
1232 | * @ops contains a pointer to the struct security_operations of the module to stack. | 1246 | * @ops contains a pointer to the struct security_operations of the module to stack. |
1233 | * | 1247 | * |
1234 | * @secid_to_secctx: | 1248 | * @secid_to_secctx: |
1235 | * Convert secid to security context. | 1249 | * Convert secid to security context. |
1236 | * @secid contains the security ID. | 1250 | * @secid contains the security ID. |
1237 | * @secdata contains the pointer that stores the converted security context. | 1251 | * @secdata contains the pointer that stores the converted security context. |
1238 | * @secctx_to_secid: | 1252 | * @secctx_to_secid: |
1239 | * Convert security context to secid. | 1253 | * Convert security context to secid. |
1240 | * @secid contains the pointer to the generated security ID. | 1254 | * @secid contains the pointer to the generated security ID. |
1241 | * @secdata contains the security context. | 1255 | * @secdata contains the security context. |
1242 | * | 1256 | * |
1243 | * @release_secctx: | 1257 | * @release_secctx: |
1244 | * Release the security context. | 1258 | * Release the security context. |
@@ -1281,49 +1295,49 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
1281 | struct security_operations { | 1295 | struct security_operations { |
1282 | char name[SECURITY_NAME_MAX + 1]; | 1296 | char name[SECURITY_NAME_MAX + 1]; |
1283 | 1297 | ||
1284 | int (*ptrace) (struct task_struct * parent, struct task_struct * child); | 1298 | int (*ptrace) (struct task_struct *parent, struct task_struct *child); |
1285 | int (*capget) (struct task_struct * target, | 1299 | int (*capget) (struct task_struct *target, |
1286 | kernel_cap_t * effective, | 1300 | kernel_cap_t *effective, |
1287 | kernel_cap_t * inheritable, kernel_cap_t * permitted); | 1301 | kernel_cap_t *inheritable, kernel_cap_t *permitted); |
1288 | int (*capset_check) (struct task_struct * target, | 1302 | int (*capset_check) (struct task_struct *target, |
1289 | kernel_cap_t * effective, | 1303 | kernel_cap_t *effective, |
1290 | kernel_cap_t * inheritable, | 1304 | kernel_cap_t *inheritable, |
1291 | kernel_cap_t * permitted); | 1305 | kernel_cap_t *permitted); |
1292 | void (*capset_set) (struct task_struct * target, | 1306 | void (*capset_set) (struct task_struct *target, |
1293 | kernel_cap_t * effective, | 1307 | kernel_cap_t *effective, |
1294 | kernel_cap_t * inheritable, | 1308 | kernel_cap_t *inheritable, |
1295 | kernel_cap_t * permitted); | 1309 | kernel_cap_t *permitted); |
1296 | int (*capable) (struct task_struct * tsk, int cap); | 1310 | int (*capable) (struct task_struct *tsk, int cap); |
1297 | int (*acct) (struct file * file); | 1311 | int (*acct) (struct file *file); |
1298 | int (*sysctl) (struct ctl_table * table, int op); | 1312 | int (*sysctl) (struct ctl_table *table, int op); |
1299 | int (*quotactl) (int cmds, int type, int id, struct super_block * sb); | 1313 | int (*quotactl) (int cmds, int type, int id, struct super_block *sb); |
1300 | int (*quota_on) (struct dentry * dentry); | 1314 | int (*quota_on) (struct dentry *dentry); |
1301 | int (*syslog) (int type); | 1315 | int (*syslog) (int type); |
1302 | int (*settime) (struct timespec *ts, struct timezone *tz); | 1316 | int (*settime) (struct timespec *ts, struct timezone *tz); |
1303 | int (*vm_enough_memory) (struct mm_struct *mm, long pages); | 1317 | int (*vm_enough_memory) (struct mm_struct *mm, long pages); |
1304 | 1318 | ||
1305 | int (*bprm_alloc_security) (struct linux_binprm * bprm); | 1319 | int (*bprm_alloc_security) (struct linux_binprm *bprm); |
1306 | void (*bprm_free_security) (struct linux_binprm * bprm); | 1320 | void (*bprm_free_security) (struct linux_binprm *bprm); |
1307 | void (*bprm_apply_creds) (struct linux_binprm * bprm, int unsafe); | 1321 | void (*bprm_apply_creds) (struct linux_binprm *bprm, int unsafe); |
1308 | void (*bprm_post_apply_creds) (struct linux_binprm * bprm); | 1322 | void (*bprm_post_apply_creds) (struct linux_binprm *bprm); |
1309 | int (*bprm_set_security) (struct linux_binprm * bprm); | 1323 | int (*bprm_set_security) (struct linux_binprm *bprm); |
1310 | int (*bprm_check_security) (struct linux_binprm * bprm); | 1324 | int (*bprm_check_security) (struct linux_binprm *bprm); |
1311 | int (*bprm_secureexec) (struct linux_binprm * bprm); | 1325 | int (*bprm_secureexec) (struct linux_binprm *bprm); |
1312 | 1326 | ||
1313 | int (*sb_alloc_security) (struct super_block * sb); | 1327 | int (*sb_alloc_security) (struct super_block *sb); |
1314 | void (*sb_free_security) (struct super_block * sb); | 1328 | void (*sb_free_security) (struct super_block *sb); |
1315 | int (*sb_copy_data)(char *orig, char *copy); | 1329 | int (*sb_copy_data) (char *orig, char *copy); |
1316 | int (*sb_kern_mount) (struct super_block *sb, void *data); | 1330 | int (*sb_kern_mount) (struct super_block *sb, void *data); |
1317 | int (*sb_statfs) (struct dentry *dentry); | 1331 | int (*sb_statfs) (struct dentry *dentry); |
1318 | int (*sb_mount) (char *dev_name, struct path *path, | 1332 | int (*sb_mount) (char *dev_name, struct path *path, |
1319 | char *type, unsigned long flags, void *data); | 1333 | char *type, unsigned long flags, void *data); |
1320 | int (*sb_check_sb) (struct vfsmount * mnt, struct path *path); | 1334 | int (*sb_check_sb) (struct vfsmount *mnt, struct path *path); |
1321 | int (*sb_umount) (struct vfsmount * mnt, int flags); | 1335 | int (*sb_umount) (struct vfsmount *mnt, int flags); |
1322 | void (*sb_umount_close) (struct vfsmount * mnt); | 1336 | void (*sb_umount_close) (struct vfsmount *mnt); |
1323 | void (*sb_umount_busy) (struct vfsmount * mnt); | 1337 | void (*sb_umount_busy) (struct vfsmount *mnt); |
1324 | void (*sb_post_remount) (struct vfsmount * mnt, | 1338 | void (*sb_post_remount) (struct vfsmount *mnt, |
1325 | unsigned long flags, void *data); | 1339 | unsigned long flags, void *data); |
1326 | void (*sb_post_addmount) (struct vfsmount * mnt, | 1340 | void (*sb_post_addmount) (struct vfsmount *mnt, |
1327 | struct path *mountpoint); | 1341 | struct path *mountpoint); |
1328 | int (*sb_pivotroot) (struct path *old_path, | 1342 | int (*sb_pivotroot) (struct path *old_path, |
1329 | struct path *new_path); | 1343 | struct path *new_path); |
@@ -1337,177 +1351,177 @@ struct security_operations { | |||
1337 | struct super_block *newsb); | 1351 | struct super_block *newsb); |
1338 | int (*sb_parse_opts_str) (char *options, struct security_mnt_opts *opts); | 1352 | int (*sb_parse_opts_str) (char *options, struct security_mnt_opts *opts); |
1339 | 1353 | ||
1340 | int (*inode_alloc_security) (struct inode *inode); | 1354 | int (*inode_alloc_security) (struct inode *inode); |
1341 | void (*inode_free_security) (struct inode *inode); | 1355 | void (*inode_free_security) (struct inode *inode); |
1342 | int (*inode_init_security) (struct inode *inode, struct inode *dir, | 1356 | int (*inode_init_security) (struct inode *inode, struct inode *dir, |
1343 | char **name, void **value, size_t *len); | 1357 | char **name, void **value, size_t *len); |
1344 | int (*inode_create) (struct inode *dir, | 1358 | int (*inode_create) (struct inode *dir, |
1345 | struct dentry *dentry, int mode); | 1359 | struct dentry *dentry, int mode); |
1346 | int (*inode_link) (struct dentry *old_dentry, | 1360 | int (*inode_link) (struct dentry *old_dentry, |
1347 | struct inode *dir, struct dentry *new_dentry); | 1361 | struct inode *dir, struct dentry *new_dentry); |
1348 | int (*inode_unlink) (struct inode *dir, struct dentry *dentry); | 1362 | int (*inode_unlink) (struct inode *dir, struct dentry *dentry); |
1349 | int (*inode_symlink) (struct inode *dir, | 1363 | int (*inode_symlink) (struct inode *dir, |
1350 | struct dentry *dentry, const char *old_name); | 1364 | struct dentry *dentry, const char *old_name); |
1351 | int (*inode_mkdir) (struct inode *dir, struct dentry *dentry, int mode); | 1365 | int (*inode_mkdir) (struct inode *dir, struct dentry *dentry, int mode); |
1352 | int (*inode_rmdir) (struct inode *dir, struct dentry *dentry); | 1366 | int (*inode_rmdir) (struct inode *dir, struct dentry *dentry); |
1353 | int (*inode_mknod) (struct inode *dir, struct dentry *dentry, | 1367 | int (*inode_mknod) (struct inode *dir, struct dentry *dentry, |
1354 | int mode, dev_t dev); | 1368 | int mode, dev_t dev); |
1355 | int (*inode_rename) (struct inode *old_dir, struct dentry *old_dentry, | 1369 | int (*inode_rename) (struct inode *old_dir, struct dentry *old_dentry, |
1356 | struct inode *new_dir, struct dentry *new_dentry); | 1370 | struct inode *new_dir, struct dentry *new_dentry); |
1357 | int (*inode_readlink) (struct dentry *dentry); | 1371 | int (*inode_readlink) (struct dentry *dentry); |
1358 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); | 1372 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); |
1359 | int (*inode_permission) (struct inode *inode, int mask, struct nameidata *nd); | 1373 | int (*inode_permission) (struct inode *inode, int mask, struct nameidata *nd); |
1360 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); | 1374 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); |
1361 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); | 1375 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); |
1362 | void (*inode_delete) (struct inode *inode); | 1376 | void (*inode_delete) (struct inode *inode); |
1363 | int (*inode_setxattr) (struct dentry *dentry, char *name, void *value, | 1377 | int (*inode_setxattr) (struct dentry *dentry, const char *name, |
1364 | size_t size, int flags); | 1378 | const void *value, size_t size, int flags); |
1365 | void (*inode_post_setxattr) (struct dentry *dentry, char *name, void *value, | 1379 | void (*inode_post_setxattr) (struct dentry *dentry, const char *name, |
1366 | size_t size, int flags); | 1380 | const void *value, size_t size, int flags); |
1367 | int (*inode_getxattr) (struct dentry *dentry, char *name); | 1381 | int (*inode_getxattr) (struct dentry *dentry, const char *name); |
1368 | int (*inode_listxattr) (struct dentry *dentry); | 1382 | int (*inode_listxattr) (struct dentry *dentry); |
1369 | int (*inode_removexattr) (struct dentry *dentry, char *name); | 1383 | int (*inode_removexattr) (struct dentry *dentry, const char *name); |
1370 | int (*inode_need_killpriv) (struct dentry *dentry); | 1384 | int (*inode_need_killpriv) (struct dentry *dentry); |
1371 | int (*inode_killpriv) (struct dentry *dentry); | 1385 | int (*inode_killpriv) (struct dentry *dentry); |
1372 | int (*inode_getsecurity)(const struct inode *inode, const char *name, void **buffer, bool alloc); | 1386 | int (*inode_getsecurity) (const struct inode *inode, const char *name, void **buffer, bool alloc); |
1373 | int (*inode_setsecurity)(struct inode *inode, const char *name, const void *value, size_t size, int flags); | 1387 | int (*inode_setsecurity) (struct inode *inode, const char *name, const void *value, size_t size, int flags); |
1374 | int (*inode_listsecurity)(struct inode *inode, char *buffer, size_t buffer_size); | 1388 | int (*inode_listsecurity) (struct inode *inode, char *buffer, size_t buffer_size); |
1375 | void (*inode_getsecid)(const struct inode *inode, u32 *secid); | 1389 | void (*inode_getsecid) (const struct inode *inode, u32 *secid); |
1376 | 1390 | ||
1377 | int (*file_permission) (struct file * file, int mask); | 1391 | int (*file_permission) (struct file *file, int mask); |
1378 | int (*file_alloc_security) (struct file * file); | 1392 | int (*file_alloc_security) (struct file *file); |
1379 | void (*file_free_security) (struct file * file); | 1393 | void (*file_free_security) (struct file *file); |
1380 | int (*file_ioctl) (struct file * file, unsigned int cmd, | 1394 | int (*file_ioctl) (struct file *file, unsigned int cmd, |
1381 | unsigned long arg); | 1395 | unsigned long arg); |
1382 | int (*file_mmap) (struct file * file, | 1396 | int (*file_mmap) (struct file *file, |
1383 | unsigned long reqprot, unsigned long prot, | 1397 | unsigned long reqprot, unsigned long prot, |
1384 | unsigned long flags, unsigned long addr, | 1398 | unsigned long flags, unsigned long addr, |
1385 | unsigned long addr_only); | 1399 | unsigned long addr_only); |
1386 | int (*file_mprotect) (struct vm_area_struct * vma, | 1400 | int (*file_mprotect) (struct vm_area_struct *vma, |
1387 | unsigned long reqprot, | 1401 | unsigned long reqprot, |
1388 | unsigned long prot); | 1402 | unsigned long prot); |
1389 | int (*file_lock) (struct file * file, unsigned int cmd); | 1403 | int (*file_lock) (struct file *file, unsigned int cmd); |
1390 | int (*file_fcntl) (struct file * file, unsigned int cmd, | 1404 | int (*file_fcntl) (struct file *file, unsigned int cmd, |
1391 | unsigned long arg); | 1405 | unsigned long arg); |
1392 | int (*file_set_fowner) (struct file * file); | 1406 | int (*file_set_fowner) (struct file *file); |
1393 | int (*file_send_sigiotask) (struct task_struct * tsk, | 1407 | int (*file_send_sigiotask) (struct task_struct *tsk, |
1394 | struct fown_struct * fown, int sig); | 1408 | struct fown_struct *fown, int sig); |
1395 | int (*file_receive) (struct file * file); | 1409 | int (*file_receive) (struct file *file); |
1396 | int (*dentry_open) (struct file *file); | 1410 | int (*dentry_open) (struct file *file); |
1397 | 1411 | ||
1398 | int (*task_create) (unsigned long clone_flags); | 1412 | int (*task_create) (unsigned long clone_flags); |
1399 | int (*task_alloc_security) (struct task_struct * p); | 1413 | int (*task_alloc_security) (struct task_struct *p); |
1400 | void (*task_free_security) (struct task_struct * p); | 1414 | void (*task_free_security) (struct task_struct *p); |
1401 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); | 1415 | int (*task_setuid) (uid_t id0, uid_t id1, uid_t id2, int flags); |
1402 | int (*task_post_setuid) (uid_t old_ruid /* or fsuid */ , | 1416 | int (*task_post_setuid) (uid_t old_ruid /* or fsuid */ , |
1403 | uid_t old_euid, uid_t old_suid, int flags); | 1417 | uid_t old_euid, uid_t old_suid, int flags); |
1404 | int (*task_setgid) (gid_t id0, gid_t id1, gid_t id2, int flags); | 1418 | int (*task_setgid) (gid_t id0, gid_t id1, gid_t id2, int flags); |
1405 | int (*task_setpgid) (struct task_struct * p, pid_t pgid); | 1419 | int (*task_setpgid) (struct task_struct *p, pid_t pgid); |
1406 | int (*task_getpgid) (struct task_struct * p); | 1420 | int (*task_getpgid) (struct task_struct *p); |
1407 | int (*task_getsid) (struct task_struct * p); | 1421 | int (*task_getsid) (struct task_struct *p); |
1408 | void (*task_getsecid) (struct task_struct * p, u32 * secid); | 1422 | void (*task_getsecid) (struct task_struct *p, u32 *secid); |
1409 | int (*task_setgroups) (struct group_info *group_info); | 1423 | int (*task_setgroups) (struct group_info *group_info); |
1410 | int (*task_setnice) (struct task_struct * p, int nice); | 1424 | int (*task_setnice) (struct task_struct *p, int nice); |
1411 | int (*task_setioprio) (struct task_struct * p, int ioprio); | 1425 | int (*task_setioprio) (struct task_struct *p, int ioprio); |
1412 | int (*task_getioprio) (struct task_struct * p); | 1426 | int (*task_getioprio) (struct task_struct *p); |
1413 | int (*task_setrlimit) (unsigned int resource, struct rlimit * new_rlim); | 1427 | int (*task_setrlimit) (unsigned int resource, struct rlimit *new_rlim); |
1414 | int (*task_setscheduler) (struct task_struct * p, int policy, | 1428 | int (*task_setscheduler) (struct task_struct *p, int policy, |
1415 | struct sched_param * lp); | 1429 | struct sched_param *lp); |
1416 | int (*task_getscheduler) (struct task_struct * p); | 1430 | int (*task_getscheduler) (struct task_struct *p); |
1417 | int (*task_movememory) (struct task_struct * p); | 1431 | int (*task_movememory) (struct task_struct *p); |
1418 | int (*task_kill) (struct task_struct * p, | 1432 | int (*task_kill) (struct task_struct *p, |
1419 | struct siginfo * info, int sig, u32 secid); | 1433 | struct siginfo *info, int sig, u32 secid); |
1420 | int (*task_wait) (struct task_struct * p); | 1434 | int (*task_wait) (struct task_struct *p); |
1421 | int (*task_prctl) (int option, unsigned long arg2, | 1435 | int (*task_prctl) (int option, unsigned long arg2, |
1422 | unsigned long arg3, unsigned long arg4, | 1436 | unsigned long arg3, unsigned long arg4, |
1423 | unsigned long arg5); | 1437 | unsigned long arg5, long *rc_p); |
1424 | void (*task_reparent_to_init) (struct task_struct * p); | 1438 | void (*task_reparent_to_init) (struct task_struct *p); |
1425 | void (*task_to_inode)(struct task_struct *p, struct inode *inode); | 1439 | void (*task_to_inode) (struct task_struct *p, struct inode *inode); |
1426 | 1440 | ||
1427 | int (*ipc_permission) (struct kern_ipc_perm * ipcp, short flag); | 1441 | int (*ipc_permission) (struct kern_ipc_perm *ipcp, short flag); |
1428 | void (*ipc_getsecid) (struct kern_ipc_perm *ipcp, u32 *secid); | 1442 | void (*ipc_getsecid) (struct kern_ipc_perm *ipcp, u32 *secid); |
1429 | 1443 | ||
1430 | int (*msg_msg_alloc_security) (struct msg_msg * msg); | 1444 | int (*msg_msg_alloc_security) (struct msg_msg *msg); |
1431 | void (*msg_msg_free_security) (struct msg_msg * msg); | 1445 | void (*msg_msg_free_security) (struct msg_msg *msg); |
1432 | 1446 | ||
1433 | int (*msg_queue_alloc_security) (struct msg_queue * msq); | 1447 | int (*msg_queue_alloc_security) (struct msg_queue *msq); |
1434 | void (*msg_queue_free_security) (struct msg_queue * msq); | 1448 | void (*msg_queue_free_security) (struct msg_queue *msq); |
1435 | int (*msg_queue_associate) (struct msg_queue * msq, int msqflg); | 1449 | int (*msg_queue_associate) (struct msg_queue *msq, int msqflg); |
1436 | int (*msg_queue_msgctl) (struct msg_queue * msq, int cmd); | 1450 | int (*msg_queue_msgctl) (struct msg_queue *msq, int cmd); |
1437 | int (*msg_queue_msgsnd) (struct msg_queue * msq, | 1451 | int (*msg_queue_msgsnd) (struct msg_queue *msq, |
1438 | struct msg_msg * msg, int msqflg); | 1452 | struct msg_msg *msg, int msqflg); |
1439 | int (*msg_queue_msgrcv) (struct msg_queue * msq, | 1453 | int (*msg_queue_msgrcv) (struct msg_queue *msq, |
1440 | struct msg_msg * msg, | 1454 | struct msg_msg *msg, |
1441 | struct task_struct * target, | 1455 | struct task_struct *target, |
1442 | long type, int mode); | 1456 | long type, int mode); |
1443 | 1457 | ||
1444 | int (*shm_alloc_security) (struct shmid_kernel * shp); | 1458 | int (*shm_alloc_security) (struct shmid_kernel *shp); |
1445 | void (*shm_free_security) (struct shmid_kernel * shp); | 1459 | void (*shm_free_security) (struct shmid_kernel *shp); |
1446 | int (*shm_associate) (struct shmid_kernel * shp, int shmflg); | 1460 | int (*shm_associate) (struct shmid_kernel *shp, int shmflg); |
1447 | int (*shm_shmctl) (struct shmid_kernel * shp, int cmd); | 1461 | int (*shm_shmctl) (struct shmid_kernel *shp, int cmd); |
1448 | int (*shm_shmat) (struct shmid_kernel * shp, | 1462 | int (*shm_shmat) (struct shmid_kernel *shp, |
1449 | char __user *shmaddr, int shmflg); | 1463 | char __user *shmaddr, int shmflg); |
1450 | 1464 | ||
1451 | int (*sem_alloc_security) (struct sem_array * sma); | 1465 | int (*sem_alloc_security) (struct sem_array *sma); |
1452 | void (*sem_free_security) (struct sem_array * sma); | 1466 | void (*sem_free_security) (struct sem_array *sma); |
1453 | int (*sem_associate) (struct sem_array * sma, int semflg); | 1467 | int (*sem_associate) (struct sem_array *sma, int semflg); |
1454 | int (*sem_semctl) (struct sem_array * sma, int cmd); | 1468 | int (*sem_semctl) (struct sem_array *sma, int cmd); |
1455 | int (*sem_semop) (struct sem_array * sma, | 1469 | int (*sem_semop) (struct sem_array *sma, |
1456 | struct sembuf * sops, unsigned nsops, int alter); | 1470 | struct sembuf *sops, unsigned nsops, int alter); |
1457 | 1471 | ||
1458 | int (*netlink_send) (struct sock * sk, struct sk_buff * skb); | 1472 | int (*netlink_send) (struct sock *sk, struct sk_buff *skb); |
1459 | int (*netlink_recv) (struct sk_buff * skb, int cap); | 1473 | int (*netlink_recv) (struct sk_buff *skb, int cap); |
1460 | 1474 | ||
1461 | /* allow module stacking */ | 1475 | /* allow module stacking */ |
1462 | int (*register_security) (const char *name, | 1476 | int (*register_security) (const char *name, |
1463 | struct security_operations *ops); | 1477 | struct security_operations *ops); |
1464 | 1478 | ||
1465 | void (*d_instantiate) (struct dentry *dentry, struct inode *inode); | 1479 | void (*d_instantiate) (struct dentry *dentry, struct inode *inode); |
1466 | 1480 | ||
1467 | int (*getprocattr)(struct task_struct *p, char *name, char **value); | 1481 | int (*getprocattr) (struct task_struct *p, char *name, char **value); |
1468 | int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); | 1482 | int (*setprocattr) (struct task_struct *p, char *name, void *value, size_t size); |
1469 | int (*secid_to_secctx)(u32 secid, char **secdata, u32 *seclen); | 1483 | int (*secid_to_secctx) (u32 secid, char **secdata, u32 *seclen); |
1470 | int (*secctx_to_secid)(char *secdata, u32 seclen, u32 *secid); | 1484 | int (*secctx_to_secid) (char *secdata, u32 seclen, u32 *secid); |
1471 | void (*release_secctx)(char *secdata, u32 seclen); | 1485 | void (*release_secctx) (char *secdata, u32 seclen); |
1472 | 1486 | ||
1473 | #ifdef CONFIG_SECURITY_NETWORK | 1487 | #ifdef CONFIG_SECURITY_NETWORK |
1474 | int (*unix_stream_connect) (struct socket * sock, | 1488 | int (*unix_stream_connect) (struct socket *sock, |
1475 | struct socket * other, struct sock * newsk); | 1489 | struct socket *other, struct sock *newsk); |
1476 | int (*unix_may_send) (struct socket * sock, struct socket * other); | 1490 | int (*unix_may_send) (struct socket *sock, struct socket *other); |
1477 | 1491 | ||
1478 | int (*socket_create) (int family, int type, int protocol, int kern); | 1492 | int (*socket_create) (int family, int type, int protocol, int kern); |
1479 | int (*socket_post_create) (struct socket * sock, int family, | 1493 | int (*socket_post_create) (struct socket *sock, int family, |
1480 | int type, int protocol, int kern); | 1494 | int type, int protocol, int kern); |
1481 | int (*socket_bind) (struct socket * sock, | 1495 | int (*socket_bind) (struct socket *sock, |
1482 | struct sockaddr * address, int addrlen); | 1496 | struct sockaddr *address, int addrlen); |
1483 | int (*socket_connect) (struct socket * sock, | 1497 | int (*socket_connect) (struct socket *sock, |
1484 | struct sockaddr * address, int addrlen); | 1498 | struct sockaddr *address, int addrlen); |
1485 | int (*socket_listen) (struct socket * sock, int backlog); | 1499 | int (*socket_listen) (struct socket *sock, int backlog); |
1486 | int (*socket_accept) (struct socket * sock, struct socket * newsock); | 1500 | int (*socket_accept) (struct socket *sock, struct socket *newsock); |
1487 | void (*socket_post_accept) (struct socket * sock, | 1501 | void (*socket_post_accept) (struct socket *sock, |
1488 | struct socket * newsock); | 1502 | struct socket *newsock); |
1489 | int (*socket_sendmsg) (struct socket * sock, | 1503 | int (*socket_sendmsg) (struct socket *sock, |
1490 | struct msghdr * msg, int size); | 1504 | struct msghdr *msg, int size); |
1491 | int (*socket_recvmsg) (struct socket * sock, | 1505 | int (*socket_recvmsg) (struct socket *sock, |
1492 | struct msghdr * msg, int size, int flags); | 1506 | struct msghdr *msg, int size, int flags); |
1493 | int (*socket_getsockname) (struct socket * sock); | 1507 | int (*socket_getsockname) (struct socket *sock); |
1494 | int (*socket_getpeername) (struct socket * sock); | 1508 | int (*socket_getpeername) (struct socket *sock); |
1495 | int (*socket_getsockopt) (struct socket * sock, int level, int optname); | 1509 | int (*socket_getsockopt) (struct socket *sock, int level, int optname); |
1496 | int (*socket_setsockopt) (struct socket * sock, int level, int optname); | 1510 | int (*socket_setsockopt) (struct socket *sock, int level, int optname); |
1497 | int (*socket_shutdown) (struct socket * sock, int how); | 1511 | int (*socket_shutdown) (struct socket *sock, int how); |
1498 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); | 1512 | int (*socket_sock_rcv_skb) (struct sock *sk, struct sk_buff *skb); |
1499 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); | 1513 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); |
1500 | int (*socket_getpeersec_dgram) (struct socket *sock, struct sk_buff *skb, u32 *secid); | 1514 | int (*socket_getpeersec_dgram) (struct socket *sock, struct sk_buff *skb, u32 *secid); |
1501 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); | 1515 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); |
1502 | void (*sk_free_security) (struct sock *sk); | 1516 | void (*sk_free_security) (struct sock *sk); |
1503 | void (*sk_clone_security) (const struct sock *sk, struct sock *newsk); | 1517 | void (*sk_clone_security) (const struct sock *sk, struct sock *newsk); |
1504 | void (*sk_getsecid) (struct sock *sk, u32 *secid); | 1518 | void (*sk_getsecid) (struct sock *sk, u32 *secid); |
1505 | void (*sock_graft)(struct sock* sk, struct socket *parent); | 1519 | void (*sock_graft) (struct sock *sk, struct socket *parent); |
1506 | int (*inet_conn_request)(struct sock *sk, struct sk_buff *skb, | 1520 | int (*inet_conn_request) (struct sock *sk, struct sk_buff *skb, |
1507 | struct request_sock *req); | 1521 | struct request_sock *req); |
1508 | void (*inet_csk_clone)(struct sock *newsk, const struct request_sock *req); | 1522 | void (*inet_csk_clone) (struct sock *newsk, const struct request_sock *req); |
1509 | void (*inet_conn_established)(struct sock *sk, struct sk_buff *skb); | 1523 | void (*inet_conn_established) (struct sock *sk, struct sk_buff *skb); |
1510 | void (*req_classify_flow)(const struct request_sock *req, struct flowi *fl); | 1524 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); |
1511 | #endif /* CONFIG_SECURITY_NETWORK */ | 1525 | #endif /* CONFIG_SECURITY_NETWORK */ |
1512 | 1526 | ||
1513 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 1527 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -1521,57 +1535,57 @@ struct security_operations { | |||
1521 | u32 secid); | 1535 | u32 secid); |
1522 | void (*xfrm_state_free_security) (struct xfrm_state *x); | 1536 | void (*xfrm_state_free_security) (struct xfrm_state *x); |
1523 | int (*xfrm_state_delete_security) (struct xfrm_state *x); | 1537 | int (*xfrm_state_delete_security) (struct xfrm_state *x); |
1524 | int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); | 1538 | int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); |
1525 | int (*xfrm_state_pol_flow_match)(struct xfrm_state *x, | 1539 | int (*xfrm_state_pol_flow_match) (struct xfrm_state *x, |
1526 | struct xfrm_policy *xp, struct flowi *fl); | 1540 | struct xfrm_policy *xp, |
1527 | int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall); | 1541 | struct flowi *fl); |
1542 | int (*xfrm_decode_session) (struct sk_buff *skb, u32 *secid, int ckall); | ||
1528 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ | 1543 | #endif /* CONFIG_SECURITY_NETWORK_XFRM */ |
1529 | 1544 | ||
1530 | /* key management security hooks */ | 1545 | /* key management security hooks */ |
1531 | #ifdef CONFIG_KEYS | 1546 | #ifdef CONFIG_KEYS |
1532 | int (*key_alloc)(struct key *key, struct task_struct *tsk, unsigned long flags); | 1547 | int (*key_alloc) (struct key *key, struct task_struct *tsk, unsigned long flags); |
1533 | void (*key_free)(struct key *key); | 1548 | void (*key_free) (struct key *key); |
1534 | int (*key_permission)(key_ref_t key_ref, | 1549 | int (*key_permission) (key_ref_t key_ref, |
1535 | struct task_struct *context, | 1550 | struct task_struct *context, |
1536 | key_perm_t perm); | 1551 | key_perm_t perm); |
1537 | 1552 | int (*key_getsecurity)(struct key *key, char **_buffer); | |
1538 | #endif /* CONFIG_KEYS */ | 1553 | #endif /* CONFIG_KEYS */ |
1539 | 1554 | ||
1540 | #ifdef CONFIG_AUDIT | 1555 | #ifdef CONFIG_AUDIT |
1541 | int (*audit_rule_init)(u32 field, u32 op, char *rulestr, void **lsmrule); | 1556 | int (*audit_rule_init) (u32 field, u32 op, char *rulestr, void **lsmrule); |
1542 | int (*audit_rule_known)(struct audit_krule *krule); | 1557 | int (*audit_rule_known) (struct audit_krule *krule); |
1543 | int (*audit_rule_match)(u32 secid, u32 field, u32 op, void *lsmrule, | 1558 | int (*audit_rule_match) (u32 secid, u32 field, u32 op, void *lsmrule, |
1544 | struct audit_context *actx); | 1559 | struct audit_context *actx); |
1545 | void (*audit_rule_free)(void *lsmrule); | 1560 | void (*audit_rule_free) (void *lsmrule); |
1546 | #endif /* CONFIG_AUDIT */ | 1561 | #endif /* CONFIG_AUDIT */ |
1547 | }; | 1562 | }; |
1548 | 1563 | ||
1549 | /* prototypes */ | 1564 | /* prototypes */ |
1550 | extern int security_init (void); | 1565 | extern int security_init(void); |
1551 | extern int security_module_enable(struct security_operations *ops); | 1566 | extern int security_module_enable(struct security_operations *ops); |
1552 | extern int register_security (struct security_operations *ops); | 1567 | extern int register_security(struct security_operations *ops); |
1553 | extern int mod_reg_security (const char *name, struct security_operations *ops); | 1568 | extern int mod_reg_security(const char *name, struct security_operations *ops); |
1554 | extern struct dentry *securityfs_create_file(const char *name, mode_t mode, | 1569 | extern struct dentry *securityfs_create_file(const char *name, mode_t mode, |
1555 | struct dentry *parent, void *data, | 1570 | struct dentry *parent, void *data, |
1556 | const struct file_operations *fops); | 1571 | const struct file_operations *fops); |
1557 | extern struct dentry *securityfs_create_dir(const char *name, struct dentry *parent); | 1572 | extern struct dentry *securityfs_create_dir(const char *name, struct dentry *parent); |
1558 | extern void securityfs_remove(struct dentry *dentry); | 1573 | extern void securityfs_remove(struct dentry *dentry); |
1559 | 1574 | ||
1560 | |||
1561 | /* Security operations */ | 1575 | /* Security operations */ |
1562 | int security_ptrace(struct task_struct *parent, struct task_struct *child); | 1576 | int security_ptrace(struct task_struct *parent, struct task_struct *child); |
1563 | int security_capget(struct task_struct *target, | 1577 | int security_capget(struct task_struct *target, |
1564 | kernel_cap_t *effective, | 1578 | kernel_cap_t *effective, |
1565 | kernel_cap_t *inheritable, | 1579 | kernel_cap_t *inheritable, |
1566 | kernel_cap_t *permitted); | 1580 | kernel_cap_t *permitted); |
1567 | int security_capset_check(struct task_struct *target, | 1581 | int security_capset_check(struct task_struct *target, |
1568 | kernel_cap_t *effective, | ||
1569 | kernel_cap_t *inheritable, | ||
1570 | kernel_cap_t *permitted); | ||
1571 | void security_capset_set(struct task_struct *target, | ||
1572 | kernel_cap_t *effective, | 1582 | kernel_cap_t *effective, |
1573 | kernel_cap_t *inheritable, | 1583 | kernel_cap_t *inheritable, |
1574 | kernel_cap_t *permitted); | 1584 | kernel_cap_t *permitted); |
1585 | void security_capset_set(struct task_struct *target, | ||
1586 | kernel_cap_t *effective, | ||
1587 | kernel_cap_t *inheritable, | ||
1588 | kernel_cap_t *permitted); | ||
1575 | int security_capable(struct task_struct *tsk, int cap); | 1589 | int security_capable(struct task_struct *tsk, int cap); |
1576 | int security_acct(struct file *file); | 1590 | int security_acct(struct file *file); |
1577 | int security_sysctl(struct ctl_table *table, int op); | 1591 | int security_sysctl(struct ctl_table *table, int op); |
@@ -1594,7 +1608,7 @@ int security_sb_copy_data(char *orig, char *copy); | |||
1594 | int security_sb_kern_mount(struct super_block *sb, void *data); | 1608 | int security_sb_kern_mount(struct super_block *sb, void *data); |
1595 | int security_sb_statfs(struct dentry *dentry); | 1609 | int security_sb_statfs(struct dentry *dentry); |
1596 | int security_sb_mount(char *dev_name, struct path *path, | 1610 | int security_sb_mount(char *dev_name, struct path *path, |
1597 | char *type, unsigned long flags, void *data); | 1611 | char *type, unsigned long flags, void *data); |
1598 | int security_sb_check_sb(struct vfsmount *mnt, struct path *path); | 1612 | int security_sb_check_sb(struct vfsmount *mnt, struct path *path); |
1599 | int security_sb_umount(struct vfsmount *mnt, int flags); | 1613 | int security_sb_umount(struct vfsmount *mnt, int flags); |
1600 | void security_sb_umount_close(struct vfsmount *mnt); | 1614 | void security_sb_umount_close(struct vfsmount *mnt); |
@@ -1619,25 +1633,25 @@ int security_inode_link(struct dentry *old_dentry, struct inode *dir, | |||
1619 | struct dentry *new_dentry); | 1633 | struct dentry *new_dentry); |
1620 | int security_inode_unlink(struct inode *dir, struct dentry *dentry); | 1634 | int security_inode_unlink(struct inode *dir, struct dentry *dentry); |
1621 | int security_inode_symlink(struct inode *dir, struct dentry *dentry, | 1635 | int security_inode_symlink(struct inode *dir, struct dentry *dentry, |
1622 | const char *old_name); | 1636 | const char *old_name); |
1623 | int security_inode_mkdir(struct inode *dir, struct dentry *dentry, int mode); | 1637 | int security_inode_mkdir(struct inode *dir, struct dentry *dentry, int mode); |
1624 | int security_inode_rmdir(struct inode *dir, struct dentry *dentry); | 1638 | int security_inode_rmdir(struct inode *dir, struct dentry *dentry); |
1625 | int security_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); | 1639 | int security_inode_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev); |
1626 | int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, | 1640 | int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, |
1627 | struct inode *new_dir, struct dentry *new_dentry); | 1641 | struct inode *new_dir, struct dentry *new_dentry); |
1628 | int security_inode_readlink(struct dentry *dentry); | 1642 | int security_inode_readlink(struct dentry *dentry); |
1629 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); | 1643 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); |
1630 | int security_inode_permission(struct inode *inode, int mask, struct nameidata *nd); | 1644 | int security_inode_permission(struct inode *inode, int mask, struct nameidata *nd); |
1631 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); | 1645 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); |
1632 | int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); | 1646 | int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); |
1633 | void security_inode_delete(struct inode *inode); | 1647 | void security_inode_delete(struct inode *inode); |
1634 | int security_inode_setxattr(struct dentry *dentry, char *name, | 1648 | int security_inode_setxattr(struct dentry *dentry, const char *name, |
1635 | void *value, size_t size, int flags); | 1649 | const void *value, size_t size, int flags); |
1636 | void security_inode_post_setxattr(struct dentry *dentry, char *name, | 1650 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, |
1637 | void *value, size_t size, int flags); | 1651 | const void *value, size_t size, int flags); |
1638 | int security_inode_getxattr(struct dentry *dentry, char *name); | 1652 | int security_inode_getxattr(struct dentry *dentry, const char *name); |
1639 | int security_inode_listxattr(struct dentry *dentry); | 1653 | int security_inode_listxattr(struct dentry *dentry); |
1640 | int security_inode_removexattr(struct dentry *dentry, char *name); | 1654 | int security_inode_removexattr(struct dentry *dentry, const char *name); |
1641 | int security_inode_need_killpriv(struct dentry *dentry); | 1655 | int security_inode_need_killpriv(struct dentry *dentry); |
1642 | int security_inode_killpriv(struct dentry *dentry); | 1656 | int security_inode_killpriv(struct dentry *dentry); |
1643 | int security_inode_getsecurity(const struct inode *inode, const char *name, void **buffer, bool alloc); | 1657 | int security_inode_getsecurity(const struct inode *inode, const char *name, void **buffer, bool alloc); |
@@ -1652,12 +1666,12 @@ int security_file_mmap(struct file *file, unsigned long reqprot, | |||
1652 | unsigned long prot, unsigned long flags, | 1666 | unsigned long prot, unsigned long flags, |
1653 | unsigned long addr, unsigned long addr_only); | 1667 | unsigned long addr, unsigned long addr_only); |
1654 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, | 1668 | int security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, |
1655 | unsigned long prot); | 1669 | unsigned long prot); |
1656 | int security_file_lock(struct file *file, unsigned int cmd); | 1670 | int security_file_lock(struct file *file, unsigned int cmd); |
1657 | int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg); | 1671 | int security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg); |
1658 | int security_file_set_fowner(struct file *file); | 1672 | int security_file_set_fowner(struct file *file); |
1659 | int security_file_send_sigiotask(struct task_struct *tsk, | 1673 | int security_file_send_sigiotask(struct task_struct *tsk, |
1660 | struct fown_struct *fown, int sig); | 1674 | struct fown_struct *fown, int sig); |
1661 | int security_file_receive(struct file *file); | 1675 | int security_file_receive(struct file *file); |
1662 | int security_dentry_open(struct file *file); | 1676 | int security_dentry_open(struct file *file); |
1663 | int security_task_create(unsigned long clone_flags); | 1677 | int security_task_create(unsigned long clone_flags); |
@@ -1665,7 +1679,7 @@ int security_task_alloc(struct task_struct *p); | |||
1665 | void security_task_free(struct task_struct *p); | 1679 | void security_task_free(struct task_struct *p); |
1666 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); | 1680 | int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, int flags); |
1667 | int security_task_post_setuid(uid_t old_ruid, uid_t old_euid, | 1681 | int security_task_post_setuid(uid_t old_ruid, uid_t old_euid, |
1668 | uid_t old_suid, int flags); | 1682 | uid_t old_suid, int flags); |
1669 | int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags); | 1683 | int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, int flags); |
1670 | int security_task_setpgid(struct task_struct *p, pid_t pgid); | 1684 | int security_task_setpgid(struct task_struct *p, pid_t pgid); |
1671 | int security_task_getpgid(struct task_struct *p); | 1685 | int security_task_getpgid(struct task_struct *p); |
@@ -1684,7 +1698,7 @@ int security_task_kill(struct task_struct *p, struct siginfo *info, | |||
1684 | int sig, u32 secid); | 1698 | int sig, u32 secid); |
1685 | int security_task_wait(struct task_struct *p); | 1699 | int security_task_wait(struct task_struct *p); |
1686 | int security_task_prctl(int option, unsigned long arg2, unsigned long arg3, | 1700 | int security_task_prctl(int option, unsigned long arg2, unsigned long arg3, |
1687 | unsigned long arg4, unsigned long arg5); | 1701 | unsigned long arg4, unsigned long arg5, long *rc_p); |
1688 | void security_task_reparent_to_init(struct task_struct *p); | 1702 | void security_task_reparent_to_init(struct task_struct *p); |
1689 | void security_task_to_inode(struct task_struct *p, struct inode *inode); | 1703 | void security_task_to_inode(struct task_struct *p, struct inode *inode); |
1690 | int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag); | 1704 | int security_ipc_permission(struct kern_ipc_perm *ipcp, short flag); |
@@ -1696,9 +1710,9 @@ void security_msg_queue_free(struct msg_queue *msq); | |||
1696 | int security_msg_queue_associate(struct msg_queue *msq, int msqflg); | 1710 | int security_msg_queue_associate(struct msg_queue *msq, int msqflg); |
1697 | int security_msg_queue_msgctl(struct msg_queue *msq, int cmd); | 1711 | int security_msg_queue_msgctl(struct msg_queue *msq, int cmd); |
1698 | int security_msg_queue_msgsnd(struct msg_queue *msq, | 1712 | int security_msg_queue_msgsnd(struct msg_queue *msq, |
1699 | struct msg_msg *msg, int msqflg); | 1713 | struct msg_msg *msg, int msqflg); |
1700 | int security_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg, | 1714 | int security_msg_queue_msgrcv(struct msg_queue *msq, struct msg_msg *msg, |
1701 | struct task_struct *target, long type, int mode); | 1715 | struct task_struct *target, long type, int mode); |
1702 | int security_shm_alloc(struct shmid_kernel *shp); | 1716 | int security_shm_alloc(struct shmid_kernel *shp); |
1703 | void security_shm_free(struct shmid_kernel *shp); | 1717 | void security_shm_free(struct shmid_kernel *shp); |
1704 | int security_shm_associate(struct shmid_kernel *shp, int shmflg); | 1718 | int security_shm_associate(struct shmid_kernel *shp, int shmflg); |
@@ -1710,7 +1724,7 @@ int security_sem_associate(struct sem_array *sma, int semflg); | |||
1710 | int security_sem_semctl(struct sem_array *sma, int cmd); | 1724 | int security_sem_semctl(struct sem_array *sma, int cmd); |
1711 | int security_sem_semop(struct sem_array *sma, struct sembuf *sops, | 1725 | int security_sem_semop(struct sem_array *sma, struct sembuf *sops, |
1712 | unsigned nsops, int alter); | 1726 | unsigned nsops, int alter); |
1713 | void security_d_instantiate (struct dentry *dentry, struct inode *inode); | 1727 | void security_d_instantiate(struct dentry *dentry, struct inode *inode); |
1714 | int security_getprocattr(struct task_struct *p, char *name, char **value); | 1728 | int security_getprocattr(struct task_struct *p, char *name, char **value); |
1715 | int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size); | 1729 | int security_setprocattr(struct task_struct *p, char *name, void *value, size_t size); |
1716 | int security_netlink_send(struct sock *sk, struct sk_buff *skb); | 1730 | int security_netlink_send(struct sock *sk, struct sk_buff *skb); |
@@ -1741,33 +1755,33 @@ static inline int security_init(void) | |||
1741 | return 0; | 1755 | return 0; |
1742 | } | 1756 | } |
1743 | 1757 | ||
1744 | static inline int security_ptrace (struct task_struct *parent, struct task_struct * child) | 1758 | static inline int security_ptrace(struct task_struct *parent, struct task_struct *child) |
1745 | { | 1759 | { |
1746 | return cap_ptrace (parent, child); | 1760 | return cap_ptrace(parent, child); |
1747 | } | 1761 | } |
1748 | 1762 | ||
1749 | static inline int security_capget (struct task_struct *target, | 1763 | static inline int security_capget(struct task_struct *target, |
1750 | kernel_cap_t *effective, | 1764 | kernel_cap_t *effective, |
1751 | kernel_cap_t *inheritable, | 1765 | kernel_cap_t *inheritable, |
1752 | kernel_cap_t *permitted) | 1766 | kernel_cap_t *permitted) |
1753 | { | 1767 | { |
1754 | return cap_capget (target, effective, inheritable, permitted); | 1768 | return cap_capget(target, effective, inheritable, permitted); |
1755 | } | 1769 | } |
1756 | 1770 | ||
1757 | static inline int security_capset_check (struct task_struct *target, | 1771 | static inline int security_capset_check(struct task_struct *target, |
1758 | kernel_cap_t *effective, | 1772 | kernel_cap_t *effective, |
1759 | kernel_cap_t *inheritable, | 1773 | kernel_cap_t *inheritable, |
1760 | kernel_cap_t *permitted) | 1774 | kernel_cap_t *permitted) |
1761 | { | 1775 | { |
1762 | return cap_capset_check (target, effective, inheritable, permitted); | 1776 | return cap_capset_check(target, effective, inheritable, permitted); |
1763 | } | 1777 | } |
1764 | 1778 | ||
1765 | static inline void security_capset_set (struct task_struct *target, | 1779 | static inline void security_capset_set(struct task_struct *target, |
1766 | kernel_cap_t *effective, | 1780 | kernel_cap_t *effective, |
1767 | kernel_cap_t *inheritable, | 1781 | kernel_cap_t *inheritable, |
1768 | kernel_cap_t *permitted) | 1782 | kernel_cap_t *permitted) |
1769 | { | 1783 | { |
1770 | cap_capset_set (target, effective, inheritable, permitted); | 1784 | cap_capset_set(target, effective, inheritable, permitted); |
1771 | } | 1785 | } |
1772 | 1786 | ||
1773 | static inline int security_capable(struct task_struct *tsk, int cap) | 1787 | static inline int security_capable(struct task_struct *tsk, int cap) |
@@ -1775,7 +1789,7 @@ static inline int security_capable(struct task_struct *tsk, int cap) | |||
1775 | return cap_capable(tsk, cap); | 1789 | return cap_capable(tsk, cap); |
1776 | } | 1790 | } |
1777 | 1791 | ||
1778 | static inline int security_acct (struct file *file) | 1792 | static inline int security_acct(struct file *file) |
1779 | { | 1793 | { |
1780 | return 0; | 1794 | return 0; |
1781 | } | 1795 | } |
@@ -1785,13 +1799,13 @@ static inline int security_sysctl(struct ctl_table *table, int op) | |||
1785 | return 0; | 1799 | return 0; |
1786 | } | 1800 | } |
1787 | 1801 | ||
1788 | static inline int security_quotactl (int cmds, int type, int id, | 1802 | static inline int security_quotactl(int cmds, int type, int id, |
1789 | struct super_block * sb) | 1803 | struct super_block *sb) |
1790 | { | 1804 | { |
1791 | return 0; | 1805 | return 0; |
1792 | } | 1806 | } |
1793 | 1807 | ||
1794 | static inline int security_quota_on (struct dentry * dentry) | 1808 | static inline int security_quota_on(struct dentry *dentry) |
1795 | { | 1809 | { |
1796 | return 0; | 1810 | return 0; |
1797 | } | 1811 | } |
@@ -1816,102 +1830,102 @@ static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages) | |||
1816 | return cap_vm_enough_memory(mm, pages); | 1830 | return cap_vm_enough_memory(mm, pages); |
1817 | } | 1831 | } |
1818 | 1832 | ||
1819 | static inline int security_bprm_alloc (struct linux_binprm *bprm) | 1833 | static inline int security_bprm_alloc(struct linux_binprm *bprm) |
1820 | { | 1834 | { |
1821 | return 0; | 1835 | return 0; |
1822 | } | 1836 | } |
1823 | 1837 | ||
1824 | static inline void security_bprm_free (struct linux_binprm *bprm) | 1838 | static inline void security_bprm_free(struct linux_binprm *bprm) |
1825 | { } | 1839 | { } |
1826 | 1840 | ||
1827 | static inline void security_bprm_apply_creds (struct linux_binprm *bprm, int unsafe) | 1841 | static inline void security_bprm_apply_creds(struct linux_binprm *bprm, int unsafe) |
1828 | { | 1842 | { |
1829 | cap_bprm_apply_creds (bprm, unsafe); | 1843 | cap_bprm_apply_creds(bprm, unsafe); |
1830 | } | 1844 | } |
1831 | 1845 | ||
1832 | static inline void security_bprm_post_apply_creds (struct linux_binprm *bprm) | 1846 | static inline void security_bprm_post_apply_creds(struct linux_binprm *bprm) |
1833 | { | 1847 | { |
1834 | return; | 1848 | return; |
1835 | } | 1849 | } |
1836 | 1850 | ||
1837 | static inline int security_bprm_set (struct linux_binprm *bprm) | 1851 | static inline int security_bprm_set(struct linux_binprm *bprm) |
1838 | { | 1852 | { |
1839 | return cap_bprm_set_security (bprm); | 1853 | return cap_bprm_set_security(bprm); |
1840 | } | 1854 | } |
1841 | 1855 | ||
1842 | static inline int security_bprm_check (struct linux_binprm *bprm) | 1856 | static inline int security_bprm_check(struct linux_binprm *bprm) |
1843 | { | 1857 | { |
1844 | return 0; | 1858 | return 0; |
1845 | } | 1859 | } |
1846 | 1860 | ||
1847 | static inline int security_bprm_secureexec (struct linux_binprm *bprm) | 1861 | static inline int security_bprm_secureexec(struct linux_binprm *bprm) |
1848 | { | 1862 | { |
1849 | return cap_bprm_secureexec(bprm); | 1863 | return cap_bprm_secureexec(bprm); |
1850 | } | 1864 | } |
1851 | 1865 | ||
1852 | static inline int security_sb_alloc (struct super_block *sb) | 1866 | static inline int security_sb_alloc(struct super_block *sb) |
1853 | { | 1867 | { |
1854 | return 0; | 1868 | return 0; |
1855 | } | 1869 | } |
1856 | 1870 | ||
1857 | static inline void security_sb_free (struct super_block *sb) | 1871 | static inline void security_sb_free(struct super_block *sb) |
1858 | { } | 1872 | { } |
1859 | 1873 | ||
1860 | static inline int security_sb_copy_data (char *orig, char *copy) | 1874 | static inline int security_sb_copy_data(char *orig, char *copy) |
1861 | { | 1875 | { |
1862 | return 0; | 1876 | return 0; |
1863 | } | 1877 | } |
1864 | 1878 | ||
1865 | static inline int security_sb_kern_mount (struct super_block *sb, void *data) | 1879 | static inline int security_sb_kern_mount(struct super_block *sb, void *data) |
1866 | { | 1880 | { |
1867 | return 0; | 1881 | return 0; |
1868 | } | 1882 | } |
1869 | 1883 | ||
1870 | static inline int security_sb_statfs (struct dentry *dentry) | 1884 | static inline int security_sb_statfs(struct dentry *dentry) |
1871 | { | 1885 | { |
1872 | return 0; | 1886 | return 0; |
1873 | } | 1887 | } |
1874 | 1888 | ||
1875 | static inline int security_sb_mount (char *dev_name, struct path *path, | 1889 | static inline int security_sb_mount(char *dev_name, struct path *path, |
1876 | char *type, unsigned long flags, | 1890 | char *type, unsigned long flags, |
1877 | void *data) | 1891 | void *data) |
1878 | { | 1892 | { |
1879 | return 0; | 1893 | return 0; |
1880 | } | 1894 | } |
1881 | 1895 | ||
1882 | static inline int security_sb_check_sb (struct vfsmount *mnt, | 1896 | static inline int security_sb_check_sb(struct vfsmount *mnt, |
1883 | struct path *path) | 1897 | struct path *path) |
1884 | { | 1898 | { |
1885 | return 0; | 1899 | return 0; |
1886 | } | 1900 | } |
1887 | 1901 | ||
1888 | static inline int security_sb_umount (struct vfsmount *mnt, int flags) | 1902 | static inline int security_sb_umount(struct vfsmount *mnt, int flags) |
1889 | { | 1903 | { |
1890 | return 0; | 1904 | return 0; |
1891 | } | 1905 | } |
1892 | 1906 | ||
1893 | static inline void security_sb_umount_close (struct vfsmount *mnt) | 1907 | static inline void security_sb_umount_close(struct vfsmount *mnt) |
1894 | { } | 1908 | { } |
1895 | 1909 | ||
1896 | static inline void security_sb_umount_busy (struct vfsmount *mnt) | 1910 | static inline void security_sb_umount_busy(struct vfsmount *mnt) |
1897 | { } | 1911 | { } |
1898 | 1912 | ||
1899 | static inline void security_sb_post_remount (struct vfsmount *mnt, | 1913 | static inline void security_sb_post_remount(struct vfsmount *mnt, |
1900 | unsigned long flags, void *data) | 1914 | unsigned long flags, void *data) |
1901 | { } | 1915 | { } |
1902 | 1916 | ||
1903 | static inline void security_sb_post_addmount (struct vfsmount *mnt, | 1917 | static inline void security_sb_post_addmount(struct vfsmount *mnt, |
1904 | struct path *mountpoint) | 1918 | struct path *mountpoint) |
1905 | { } | 1919 | { } |
1906 | 1920 | ||
1907 | static inline int security_sb_pivotroot (struct path *old_path, | 1921 | static inline int security_sb_pivotroot(struct path *old_path, |
1908 | struct path *new_path) | 1922 | struct path *new_path) |
1909 | { | 1923 | { |
1910 | return 0; | 1924 | return 0; |
1911 | } | 1925 | } |
1912 | 1926 | ||
1913 | static inline void security_sb_post_pivotroot (struct path *old_path, | 1927 | static inline void security_sb_post_pivotroot(struct path *old_path, |
1914 | struct path *new_path) | 1928 | struct path *new_path) |
1915 | { } | 1929 | { } |
1916 | static inline int security_sb_get_mnt_opts(const struct super_block *sb, | 1930 | static inline int security_sb_get_mnt_opts(const struct super_block *sb, |
1917 | struct security_mnt_opts *opts) | 1931 | struct security_mnt_opts *opts) |
@@ -1935,15 +1949,15 @@ static inline int security_sb_parse_opts_str(char *options, struct security_mnt_ | |||
1935 | return 0; | 1949 | return 0; |
1936 | } | 1950 | } |
1937 | 1951 | ||
1938 | static inline int security_inode_alloc (struct inode *inode) | 1952 | static inline int security_inode_alloc(struct inode *inode) |
1939 | { | 1953 | { |
1940 | return 0; | 1954 | return 0; |
1941 | } | 1955 | } |
1942 | 1956 | ||
1943 | static inline void security_inode_free (struct inode *inode) | 1957 | static inline void security_inode_free(struct inode *inode) |
1944 | { } | 1958 | { } |
1945 | 1959 | ||
1946 | static inline int security_inode_init_security (struct inode *inode, | 1960 | static inline int security_inode_init_security(struct inode *inode, |
1947 | struct inode *dir, | 1961 | struct inode *dir, |
1948 | char **name, | 1962 | char **name, |
1949 | void **value, | 1963 | void **value, |
@@ -1951,55 +1965,55 @@ static inline int security_inode_init_security (struct inode *inode, | |||
1951 | { | 1965 | { |
1952 | return -EOPNOTSUPP; | 1966 | return -EOPNOTSUPP; |
1953 | } | 1967 | } |
1954 | 1968 | ||
1955 | static inline int security_inode_create (struct inode *dir, | 1969 | static inline int security_inode_create(struct inode *dir, |
1956 | struct dentry *dentry, | 1970 | struct dentry *dentry, |
1957 | int mode) | 1971 | int mode) |
1958 | { | 1972 | { |
1959 | return 0; | 1973 | return 0; |
1960 | } | 1974 | } |
1961 | 1975 | ||
1962 | static inline int security_inode_link (struct dentry *old_dentry, | 1976 | static inline int security_inode_link(struct dentry *old_dentry, |
1963 | struct inode *dir, | 1977 | struct inode *dir, |
1964 | struct dentry *new_dentry) | 1978 | struct dentry *new_dentry) |
1965 | { | 1979 | { |
1966 | return 0; | 1980 | return 0; |
1967 | } | 1981 | } |
1968 | 1982 | ||
1969 | static inline int security_inode_unlink (struct inode *dir, | 1983 | static inline int security_inode_unlink(struct inode *dir, |
1970 | struct dentry *dentry) | 1984 | struct dentry *dentry) |
1971 | { | 1985 | { |
1972 | return 0; | 1986 | return 0; |
1973 | } | 1987 | } |
1974 | 1988 | ||
1975 | static inline int security_inode_symlink (struct inode *dir, | 1989 | static inline int security_inode_symlink(struct inode *dir, |
1976 | struct dentry *dentry, | 1990 | struct dentry *dentry, |
1977 | const char *old_name) | 1991 | const char *old_name) |
1978 | { | 1992 | { |
1979 | return 0; | 1993 | return 0; |
1980 | } | 1994 | } |
1981 | 1995 | ||
1982 | static inline int security_inode_mkdir (struct inode *dir, | 1996 | static inline int security_inode_mkdir(struct inode *dir, |
1983 | struct dentry *dentry, | 1997 | struct dentry *dentry, |
1984 | int mode) | 1998 | int mode) |
1985 | { | 1999 | { |
1986 | return 0; | 2000 | return 0; |
1987 | } | 2001 | } |
1988 | 2002 | ||
1989 | static inline int security_inode_rmdir (struct inode *dir, | 2003 | static inline int security_inode_rmdir(struct inode *dir, |
1990 | struct dentry *dentry) | 2004 | struct dentry *dentry) |
1991 | { | 2005 | { |
1992 | return 0; | 2006 | return 0; |
1993 | } | 2007 | } |
1994 | 2008 | ||
1995 | static inline int security_inode_mknod (struct inode *dir, | 2009 | static inline int security_inode_mknod(struct inode *dir, |
1996 | struct dentry *dentry, | 2010 | struct dentry *dentry, |
1997 | int mode, dev_t dev) | 2011 | int mode, dev_t dev) |
1998 | { | 2012 | { |
1999 | return 0; | 2013 | return 0; |
2000 | } | 2014 | } |
2001 | 2015 | ||
2002 | static inline int security_inode_rename (struct inode *old_dir, | 2016 | static inline int security_inode_rename(struct inode *old_dir, |
2003 | struct dentry *old_dentry, | 2017 | struct dentry *old_dentry, |
2004 | struct inode *new_dir, | 2018 | struct inode *new_dir, |
2005 | struct dentry *new_dentry) | 2019 | struct dentry *new_dentry) |
@@ -2007,59 +2021,61 @@ static inline int security_inode_rename (struct inode *old_dir, | |||
2007 | return 0; | 2021 | return 0; |
2008 | } | 2022 | } |
2009 | 2023 | ||
2010 | static inline int security_inode_readlink (struct dentry *dentry) | 2024 | static inline int security_inode_readlink(struct dentry *dentry) |
2011 | { | 2025 | { |
2012 | return 0; | 2026 | return 0; |
2013 | } | 2027 | } |
2014 | 2028 | ||
2015 | static inline int security_inode_follow_link (struct dentry *dentry, | 2029 | static inline int security_inode_follow_link(struct dentry *dentry, |
2016 | struct nameidata *nd) | 2030 | struct nameidata *nd) |
2017 | { | 2031 | { |
2018 | return 0; | 2032 | return 0; |
2019 | } | 2033 | } |
2020 | 2034 | ||
2021 | static inline int security_inode_permission (struct inode *inode, int mask, | 2035 | static inline int security_inode_permission(struct inode *inode, int mask, |
2022 | struct nameidata *nd) | 2036 | struct nameidata *nd) |
2023 | { | 2037 | { |
2024 | return 0; | 2038 | return 0; |
2025 | } | 2039 | } |
2026 | 2040 | ||
2027 | static inline int security_inode_setattr (struct dentry *dentry, | 2041 | static inline int security_inode_setattr(struct dentry *dentry, |
2028 | struct iattr *attr) | 2042 | struct iattr *attr) |
2029 | { | 2043 | { |
2030 | return 0; | 2044 | return 0; |
2031 | } | 2045 | } |
2032 | 2046 | ||
2033 | static inline int security_inode_getattr (struct vfsmount *mnt, | 2047 | static inline int security_inode_getattr(struct vfsmount *mnt, |
2034 | struct dentry *dentry) | 2048 | struct dentry *dentry) |
2035 | { | 2049 | { |
2036 | return 0; | 2050 | return 0; |
2037 | } | 2051 | } |
2038 | 2052 | ||
2039 | static inline void security_inode_delete (struct inode *inode) | 2053 | static inline void security_inode_delete(struct inode *inode) |
2040 | { } | 2054 | { } |
2041 | 2055 | ||
2042 | static inline int security_inode_setxattr (struct dentry *dentry, char *name, | 2056 | static inline int security_inode_setxattr(struct dentry *dentry, |
2043 | void *value, size_t size, int flags) | 2057 | const char *name, const void *value, size_t size, int flags) |
2044 | { | 2058 | { |
2045 | return cap_inode_setxattr(dentry, name, value, size, flags); | 2059 | return cap_inode_setxattr(dentry, name, value, size, flags); |
2046 | } | 2060 | } |
2047 | 2061 | ||
2048 | static inline void security_inode_post_setxattr (struct dentry *dentry, char *name, | 2062 | static inline void security_inode_post_setxattr(struct dentry *dentry, |
2049 | void *value, size_t size, int flags) | 2063 | const char *name, const void *value, size_t size, int flags) |
2050 | { } | 2064 | { } |
2051 | 2065 | ||
2052 | static inline int security_inode_getxattr (struct dentry *dentry, char *name) | 2066 | static inline int security_inode_getxattr(struct dentry *dentry, |
2067 | const char *name) | ||
2053 | { | 2068 | { |
2054 | return 0; | 2069 | return 0; |
2055 | } | 2070 | } |
2056 | 2071 | ||
2057 | static inline int security_inode_listxattr (struct dentry *dentry) | 2072 | static inline int security_inode_listxattr(struct dentry *dentry) |
2058 | { | 2073 | { |
2059 | return 0; | 2074 | return 0; |
2060 | } | 2075 | } |
2061 | 2076 | ||
2062 | static inline int security_inode_removexattr (struct dentry *dentry, char *name) | 2077 | static inline int security_inode_removexattr(struct dentry *dentry, |
2078 | const char *name) | ||
2063 | { | 2079 | { |
2064 | return cap_inode_removexattr(dentry, name); | 2080 | return cap_inode_removexattr(dentry, name); |
2065 | } | 2081 | } |
@@ -2094,198 +2110,198 @@ static inline void security_inode_getsecid(const struct inode *inode, u32 *secid | |||
2094 | *secid = 0; | 2110 | *secid = 0; |
2095 | } | 2111 | } |
2096 | 2112 | ||
2097 | static inline int security_file_permission (struct file *file, int mask) | 2113 | static inline int security_file_permission(struct file *file, int mask) |
2098 | { | 2114 | { |
2099 | return 0; | 2115 | return 0; |
2100 | } | 2116 | } |
2101 | 2117 | ||
2102 | static inline int security_file_alloc (struct file *file) | 2118 | static inline int security_file_alloc(struct file *file) |
2103 | { | 2119 | { |
2104 | return 0; | 2120 | return 0; |
2105 | } | 2121 | } |
2106 | 2122 | ||
2107 | static inline void security_file_free (struct file *file) | 2123 | static inline void security_file_free(struct file *file) |
2108 | { } | 2124 | { } |
2109 | 2125 | ||
2110 | static inline int security_file_ioctl (struct file *file, unsigned int cmd, | 2126 | static inline int security_file_ioctl(struct file *file, unsigned int cmd, |
2111 | unsigned long arg) | 2127 | unsigned long arg) |
2112 | { | 2128 | { |
2113 | return 0; | 2129 | return 0; |
2114 | } | 2130 | } |
2115 | 2131 | ||
2116 | static inline int security_file_mmap (struct file *file, unsigned long reqprot, | 2132 | static inline int security_file_mmap(struct file *file, unsigned long reqprot, |
2117 | unsigned long prot, | 2133 | unsigned long prot, |
2118 | unsigned long flags, | 2134 | unsigned long flags, |
2119 | unsigned long addr, | 2135 | unsigned long addr, |
2120 | unsigned long addr_only) | 2136 | unsigned long addr_only) |
2121 | { | 2137 | { |
2122 | return 0; | 2138 | return 0; |
2123 | } | 2139 | } |
2124 | 2140 | ||
2125 | static inline int security_file_mprotect (struct vm_area_struct *vma, | 2141 | static inline int security_file_mprotect(struct vm_area_struct *vma, |
2126 | unsigned long reqprot, | 2142 | unsigned long reqprot, |
2127 | unsigned long prot) | 2143 | unsigned long prot) |
2128 | { | 2144 | { |
2129 | return 0; | 2145 | return 0; |
2130 | } | 2146 | } |
2131 | 2147 | ||
2132 | static inline int security_file_lock (struct file *file, unsigned int cmd) | 2148 | static inline int security_file_lock(struct file *file, unsigned int cmd) |
2133 | { | 2149 | { |
2134 | return 0; | 2150 | return 0; |
2135 | } | 2151 | } |
2136 | 2152 | ||
2137 | static inline int security_file_fcntl (struct file *file, unsigned int cmd, | 2153 | static inline int security_file_fcntl(struct file *file, unsigned int cmd, |
2138 | unsigned long arg) | 2154 | unsigned long arg) |
2139 | { | 2155 | { |
2140 | return 0; | 2156 | return 0; |
2141 | } | 2157 | } |
2142 | 2158 | ||
2143 | static inline int security_file_set_fowner (struct file *file) | 2159 | static inline int security_file_set_fowner(struct file *file) |
2144 | { | 2160 | { |
2145 | return 0; | 2161 | return 0; |
2146 | } | 2162 | } |
2147 | 2163 | ||
2148 | static inline int security_file_send_sigiotask (struct task_struct *tsk, | 2164 | static inline int security_file_send_sigiotask(struct task_struct *tsk, |
2149 | struct fown_struct *fown, | 2165 | struct fown_struct *fown, |
2150 | int sig) | 2166 | int sig) |
2151 | { | 2167 | { |
2152 | return 0; | 2168 | return 0; |
2153 | } | 2169 | } |
2154 | 2170 | ||
2155 | static inline int security_file_receive (struct file *file) | 2171 | static inline int security_file_receive(struct file *file) |
2156 | { | 2172 | { |
2157 | return 0; | 2173 | return 0; |
2158 | } | 2174 | } |
2159 | 2175 | ||
2160 | static inline int security_dentry_open (struct file *file) | 2176 | static inline int security_dentry_open(struct file *file) |
2161 | { | 2177 | { |
2162 | return 0; | 2178 | return 0; |
2163 | } | 2179 | } |
2164 | 2180 | ||
2165 | static inline int security_task_create (unsigned long clone_flags) | 2181 | static inline int security_task_create(unsigned long clone_flags) |
2166 | { | 2182 | { |
2167 | return 0; | 2183 | return 0; |
2168 | } | 2184 | } |
2169 | 2185 | ||
2170 | static inline int security_task_alloc (struct task_struct *p) | 2186 | static inline int security_task_alloc(struct task_struct *p) |
2171 | { | 2187 | { |
2172 | return 0; | 2188 | return 0; |
2173 | } | 2189 | } |
2174 | 2190 | ||
2175 | static inline void security_task_free (struct task_struct *p) | 2191 | static inline void security_task_free(struct task_struct *p) |
2176 | { } | 2192 | { } |
2177 | 2193 | ||
2178 | static inline int security_task_setuid (uid_t id0, uid_t id1, uid_t id2, | 2194 | static inline int security_task_setuid(uid_t id0, uid_t id1, uid_t id2, |
2179 | int flags) | 2195 | int flags) |
2180 | { | 2196 | { |
2181 | return 0; | 2197 | return 0; |
2182 | } | 2198 | } |
2183 | 2199 | ||
2184 | static inline int security_task_post_setuid (uid_t old_ruid, uid_t old_euid, | 2200 | static inline int security_task_post_setuid(uid_t old_ruid, uid_t old_euid, |
2185 | uid_t old_suid, int flags) | 2201 | uid_t old_suid, int flags) |
2186 | { | 2202 | { |
2187 | return cap_task_post_setuid (old_ruid, old_euid, old_suid, flags); | 2203 | return cap_task_post_setuid(old_ruid, old_euid, old_suid, flags); |
2188 | } | 2204 | } |
2189 | 2205 | ||
2190 | static inline int security_task_setgid (gid_t id0, gid_t id1, gid_t id2, | 2206 | static inline int security_task_setgid(gid_t id0, gid_t id1, gid_t id2, |
2191 | int flags) | 2207 | int flags) |
2192 | { | 2208 | { |
2193 | return 0; | 2209 | return 0; |
2194 | } | 2210 | } |
2195 | 2211 | ||
2196 | static inline int security_task_setpgid (struct task_struct *p, pid_t pgid) | 2212 | static inline int security_task_setpgid(struct task_struct *p, pid_t pgid) |
2197 | { | 2213 | { |
2198 | return 0; | 2214 | return 0; |
2199 | } | 2215 | } |
2200 | 2216 | ||
2201 | static inline int security_task_getpgid (struct task_struct *p) | 2217 | static inline int security_task_getpgid(struct task_struct *p) |
2202 | { | 2218 | { |
2203 | return 0; | 2219 | return 0; |
2204 | } | 2220 | } |
2205 | 2221 | ||
2206 | static inline int security_task_getsid (struct task_struct *p) | 2222 | static inline int security_task_getsid(struct task_struct *p) |
2207 | { | 2223 | { |
2208 | return 0; | 2224 | return 0; |
2209 | } | 2225 | } |
2210 | 2226 | ||
2211 | static inline void security_task_getsecid (struct task_struct *p, u32 *secid) | 2227 | static inline void security_task_getsecid(struct task_struct *p, u32 *secid) |
2212 | { | 2228 | { |
2213 | *secid = 0; | 2229 | *secid = 0; |
2214 | } | 2230 | } |
2215 | 2231 | ||
2216 | static inline int security_task_setgroups (struct group_info *group_info) | 2232 | static inline int security_task_setgroups(struct group_info *group_info) |
2217 | { | 2233 | { |
2218 | return 0; | 2234 | return 0; |
2219 | } | 2235 | } |
2220 | 2236 | ||
2221 | static inline int security_task_setnice (struct task_struct *p, int nice) | 2237 | static inline int security_task_setnice(struct task_struct *p, int nice) |
2222 | { | 2238 | { |
2223 | return cap_task_setnice(p, nice); | 2239 | return cap_task_setnice(p, nice); |
2224 | } | 2240 | } |
2225 | 2241 | ||
2226 | static inline int security_task_setioprio (struct task_struct *p, int ioprio) | 2242 | static inline int security_task_setioprio(struct task_struct *p, int ioprio) |
2227 | { | 2243 | { |
2228 | return cap_task_setioprio(p, ioprio); | 2244 | return cap_task_setioprio(p, ioprio); |
2229 | } | 2245 | } |
2230 | 2246 | ||
2231 | static inline int security_task_getioprio (struct task_struct *p) | 2247 | static inline int security_task_getioprio(struct task_struct *p) |
2232 | { | 2248 | { |
2233 | return 0; | 2249 | return 0; |
2234 | } | 2250 | } |
2235 | 2251 | ||
2236 | static inline int security_task_setrlimit (unsigned int resource, | 2252 | static inline int security_task_setrlimit(unsigned int resource, |
2237 | struct rlimit *new_rlim) | 2253 | struct rlimit *new_rlim) |
2238 | { | 2254 | { |
2239 | return 0; | 2255 | return 0; |
2240 | } | 2256 | } |
2241 | 2257 | ||
2242 | static inline int security_task_setscheduler (struct task_struct *p, | 2258 | static inline int security_task_setscheduler(struct task_struct *p, |
2243 | int policy, | 2259 | int policy, |
2244 | struct sched_param *lp) | 2260 | struct sched_param *lp) |
2245 | { | 2261 | { |
2246 | return cap_task_setscheduler(p, policy, lp); | 2262 | return cap_task_setscheduler(p, policy, lp); |
2247 | } | 2263 | } |
2248 | 2264 | ||
2249 | static inline int security_task_getscheduler (struct task_struct *p) | 2265 | static inline int security_task_getscheduler(struct task_struct *p) |
2250 | { | 2266 | { |
2251 | return 0; | 2267 | return 0; |
2252 | } | 2268 | } |
2253 | 2269 | ||
2254 | static inline int security_task_movememory (struct task_struct *p) | 2270 | static inline int security_task_movememory(struct task_struct *p) |
2255 | { | 2271 | { |
2256 | return 0; | 2272 | return 0; |
2257 | } | 2273 | } |
2258 | 2274 | ||
2259 | static inline int security_task_kill (struct task_struct *p, | 2275 | static inline int security_task_kill(struct task_struct *p, |
2260 | struct siginfo *info, int sig, | 2276 | struct siginfo *info, int sig, |
2261 | u32 secid) | 2277 | u32 secid) |
2262 | { | 2278 | { |
2263 | return 0; | 2279 | return 0; |
2264 | } | 2280 | } |
2265 | 2281 | ||
2266 | static inline int security_task_wait (struct task_struct *p) | 2282 | static inline int security_task_wait(struct task_struct *p) |
2267 | { | 2283 | { |
2268 | return 0; | 2284 | return 0; |
2269 | } | 2285 | } |
2270 | 2286 | ||
2271 | static inline int security_task_prctl (int option, unsigned long arg2, | 2287 | static inline int security_task_prctl(int option, unsigned long arg2, |
2272 | unsigned long arg3, | 2288 | unsigned long arg3, |
2273 | unsigned long arg4, | 2289 | unsigned long arg4, |
2274 | unsigned long arg5) | 2290 | unsigned long arg5, long *rc_p) |
2275 | { | 2291 | { |
2276 | return 0; | 2292 | return cap_task_prctl(option, arg2, arg3, arg3, arg5, rc_p); |
2277 | } | 2293 | } |
2278 | 2294 | ||
2279 | static inline void security_task_reparent_to_init (struct task_struct *p) | 2295 | static inline void security_task_reparent_to_init(struct task_struct *p) |
2280 | { | 2296 | { |
2281 | cap_task_reparent_to_init (p); | 2297 | cap_task_reparent_to_init(p); |
2282 | } | 2298 | } |
2283 | 2299 | ||
2284 | static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) | 2300 | static inline void security_task_to_inode(struct task_struct *p, struct inode *inode) |
2285 | { } | 2301 | { } |
2286 | 2302 | ||
2287 | static inline int security_ipc_permission (struct kern_ipc_perm *ipcp, | 2303 | static inline int security_ipc_permission(struct kern_ipc_perm *ipcp, |
2288 | short flag) | 2304 | short flag) |
2289 | { | 2305 | { |
2290 | return 0; | 2306 | return 0; |
2291 | } | 2307 | } |
@@ -2295,98 +2311,98 @@ static inline void security_ipc_getsecid(struct kern_ipc_perm *ipcp, u32 *secid) | |||
2295 | *secid = 0; | 2311 | *secid = 0; |
2296 | } | 2312 | } |
2297 | 2313 | ||
2298 | static inline int security_msg_msg_alloc (struct msg_msg * msg) | 2314 | static inline int security_msg_msg_alloc(struct msg_msg *msg) |
2299 | { | 2315 | { |
2300 | return 0; | 2316 | return 0; |
2301 | } | 2317 | } |
2302 | 2318 | ||
2303 | static inline void security_msg_msg_free (struct msg_msg * msg) | 2319 | static inline void security_msg_msg_free(struct msg_msg *msg) |
2304 | { } | 2320 | { } |
2305 | 2321 | ||
2306 | static inline int security_msg_queue_alloc (struct msg_queue *msq) | 2322 | static inline int security_msg_queue_alloc(struct msg_queue *msq) |
2307 | { | 2323 | { |
2308 | return 0; | 2324 | return 0; |
2309 | } | 2325 | } |
2310 | 2326 | ||
2311 | static inline void security_msg_queue_free (struct msg_queue *msq) | 2327 | static inline void security_msg_queue_free(struct msg_queue *msq) |
2312 | { } | 2328 | { } |
2313 | 2329 | ||
2314 | static inline int security_msg_queue_associate (struct msg_queue * msq, | 2330 | static inline int security_msg_queue_associate(struct msg_queue *msq, |
2315 | int msqflg) | 2331 | int msqflg) |
2316 | { | 2332 | { |
2317 | return 0; | 2333 | return 0; |
2318 | } | 2334 | } |
2319 | 2335 | ||
2320 | static inline int security_msg_queue_msgctl (struct msg_queue * msq, int cmd) | 2336 | static inline int security_msg_queue_msgctl(struct msg_queue *msq, int cmd) |
2321 | { | 2337 | { |
2322 | return 0; | 2338 | return 0; |
2323 | } | 2339 | } |
2324 | 2340 | ||
2325 | static inline int security_msg_queue_msgsnd (struct msg_queue * msq, | 2341 | static inline int security_msg_queue_msgsnd(struct msg_queue *msq, |
2326 | struct msg_msg * msg, int msqflg) | 2342 | struct msg_msg *msg, int msqflg) |
2327 | { | 2343 | { |
2328 | return 0; | 2344 | return 0; |
2329 | } | 2345 | } |
2330 | 2346 | ||
2331 | static inline int security_msg_queue_msgrcv (struct msg_queue * msq, | 2347 | static inline int security_msg_queue_msgrcv(struct msg_queue *msq, |
2332 | struct msg_msg * msg, | 2348 | struct msg_msg *msg, |
2333 | struct task_struct * target, | 2349 | struct task_struct *target, |
2334 | long type, int mode) | 2350 | long type, int mode) |
2335 | { | 2351 | { |
2336 | return 0; | 2352 | return 0; |
2337 | } | 2353 | } |
2338 | 2354 | ||
2339 | static inline int security_shm_alloc (struct shmid_kernel *shp) | 2355 | static inline int security_shm_alloc(struct shmid_kernel *shp) |
2340 | { | 2356 | { |
2341 | return 0; | 2357 | return 0; |
2342 | } | 2358 | } |
2343 | 2359 | ||
2344 | static inline void security_shm_free (struct shmid_kernel *shp) | 2360 | static inline void security_shm_free(struct shmid_kernel *shp) |
2345 | { } | 2361 | { } |
2346 | 2362 | ||
2347 | static inline int security_shm_associate (struct shmid_kernel * shp, | 2363 | static inline int security_shm_associate(struct shmid_kernel *shp, |
2348 | int shmflg) | 2364 | int shmflg) |
2349 | { | 2365 | { |
2350 | return 0; | 2366 | return 0; |
2351 | } | 2367 | } |
2352 | 2368 | ||
2353 | static inline int security_shm_shmctl (struct shmid_kernel * shp, int cmd) | 2369 | static inline int security_shm_shmctl(struct shmid_kernel *shp, int cmd) |
2354 | { | 2370 | { |
2355 | return 0; | 2371 | return 0; |
2356 | } | 2372 | } |
2357 | 2373 | ||
2358 | static inline int security_shm_shmat (struct shmid_kernel * shp, | 2374 | static inline int security_shm_shmat(struct shmid_kernel *shp, |
2359 | char __user *shmaddr, int shmflg) | 2375 | char __user *shmaddr, int shmflg) |
2360 | { | 2376 | { |
2361 | return 0; | 2377 | return 0; |
2362 | } | 2378 | } |
2363 | 2379 | ||
2364 | static inline int security_sem_alloc (struct sem_array *sma) | 2380 | static inline int security_sem_alloc(struct sem_array *sma) |
2365 | { | 2381 | { |
2366 | return 0; | 2382 | return 0; |
2367 | } | 2383 | } |
2368 | 2384 | ||
2369 | static inline void security_sem_free (struct sem_array *sma) | 2385 | static inline void security_sem_free(struct sem_array *sma) |
2370 | { } | 2386 | { } |
2371 | 2387 | ||
2372 | static inline int security_sem_associate (struct sem_array * sma, int semflg) | 2388 | static inline int security_sem_associate(struct sem_array *sma, int semflg) |
2373 | { | 2389 | { |
2374 | return 0; | 2390 | return 0; |
2375 | } | 2391 | } |
2376 | 2392 | ||
2377 | static inline int security_sem_semctl (struct sem_array * sma, int cmd) | 2393 | static inline int security_sem_semctl(struct sem_array *sma, int cmd) |
2378 | { | 2394 | { |
2379 | return 0; | 2395 | return 0; |
2380 | } | 2396 | } |
2381 | 2397 | ||
2382 | static inline int security_sem_semop (struct sem_array * sma, | 2398 | static inline int security_sem_semop(struct sem_array *sma, |
2383 | struct sembuf * sops, unsigned nsops, | 2399 | struct sembuf *sops, unsigned nsops, |
2384 | int alter) | 2400 | int alter) |
2385 | { | 2401 | { |
2386 | return 0; | 2402 | return 0; |
2387 | } | 2403 | } |
2388 | 2404 | ||
2389 | static inline void security_d_instantiate (struct dentry *dentry, struct inode *inode) | 2405 | static inline void security_d_instantiate(struct dentry *dentry, struct inode *inode) |
2390 | { } | 2406 | { } |
2391 | 2407 | ||
2392 | static inline int security_getprocattr(struct task_struct *p, char *name, char **value) | 2408 | static inline int security_getprocattr(struct task_struct *p, char *name, char **value) |
@@ -2399,14 +2415,14 @@ static inline int security_setprocattr(struct task_struct *p, char *name, void * | |||
2399 | return -EINVAL; | 2415 | return -EINVAL; |
2400 | } | 2416 | } |
2401 | 2417 | ||
2402 | static inline int security_netlink_send (struct sock *sk, struct sk_buff *skb) | 2418 | static inline int security_netlink_send(struct sock *sk, struct sk_buff *skb) |
2403 | { | 2419 | { |
2404 | return cap_netlink_send (sk, skb); | 2420 | return cap_netlink_send(sk, skb); |
2405 | } | 2421 | } |
2406 | 2422 | ||
2407 | static inline int security_netlink_recv (struct sk_buff *skb, int cap) | 2423 | static inline int security_netlink_recv(struct sk_buff *skb, int cap) |
2408 | { | 2424 | { |
2409 | return cap_netlink_recv (skb, cap); | 2425 | return cap_netlink_recv(skb, cap); |
2410 | } | 2426 | } |
2411 | 2427 | ||
2412 | static inline struct dentry *securityfs_create_dir(const char *name, | 2428 | static inline struct dentry *securityfs_create_dir(const char *name, |
@@ -2484,26 +2500,26 @@ void security_inet_conn_established(struct sock *sk, | |||
2484 | struct sk_buff *skb); | 2500 | struct sk_buff *skb); |
2485 | 2501 | ||
2486 | #else /* CONFIG_SECURITY_NETWORK */ | 2502 | #else /* CONFIG_SECURITY_NETWORK */ |
2487 | static inline int security_unix_stream_connect(struct socket * sock, | 2503 | static inline int security_unix_stream_connect(struct socket *sock, |
2488 | struct socket * other, | 2504 | struct socket *other, |
2489 | struct sock * newsk) | 2505 | struct sock *newsk) |
2490 | { | 2506 | { |
2491 | return 0; | 2507 | return 0; |
2492 | } | 2508 | } |
2493 | 2509 | ||
2494 | static inline int security_unix_may_send(struct socket * sock, | 2510 | static inline int security_unix_may_send(struct socket *sock, |
2495 | struct socket * other) | 2511 | struct socket *other) |
2496 | { | 2512 | { |
2497 | return 0; | 2513 | return 0; |
2498 | } | 2514 | } |
2499 | 2515 | ||
2500 | static inline int security_socket_create (int family, int type, | 2516 | static inline int security_socket_create(int family, int type, |
2501 | int protocol, int kern) | 2517 | int protocol, int kern) |
2502 | { | 2518 | { |
2503 | return 0; | 2519 | return 0; |
2504 | } | 2520 | } |
2505 | 2521 | ||
2506 | static inline int security_socket_post_create(struct socket * sock, | 2522 | static inline int security_socket_post_create(struct socket *sock, |
2507 | int family, | 2523 | int family, |
2508 | int type, | 2524 | int type, |
2509 | int protocol, int kern) | 2525 | int protocol, int kern) |
@@ -2511,77 +2527,77 @@ static inline int security_socket_post_create(struct socket * sock, | |||
2511 | return 0; | 2527 | return 0; |
2512 | } | 2528 | } |
2513 | 2529 | ||
2514 | static inline int security_socket_bind(struct socket * sock, | 2530 | static inline int security_socket_bind(struct socket *sock, |
2515 | struct sockaddr * address, | 2531 | struct sockaddr *address, |
2516 | int addrlen) | 2532 | int addrlen) |
2517 | { | 2533 | { |
2518 | return 0; | 2534 | return 0; |
2519 | } | 2535 | } |
2520 | 2536 | ||
2521 | static inline int security_socket_connect(struct socket * sock, | 2537 | static inline int security_socket_connect(struct socket *sock, |
2522 | struct sockaddr * address, | 2538 | struct sockaddr *address, |
2523 | int addrlen) | 2539 | int addrlen) |
2524 | { | 2540 | { |
2525 | return 0; | 2541 | return 0; |
2526 | } | 2542 | } |
2527 | 2543 | ||
2528 | static inline int security_socket_listen(struct socket * sock, int backlog) | 2544 | static inline int security_socket_listen(struct socket *sock, int backlog) |
2529 | { | 2545 | { |
2530 | return 0; | 2546 | return 0; |
2531 | } | 2547 | } |
2532 | 2548 | ||
2533 | static inline int security_socket_accept(struct socket * sock, | 2549 | static inline int security_socket_accept(struct socket *sock, |
2534 | struct socket * newsock) | 2550 | struct socket *newsock) |
2535 | { | 2551 | { |
2536 | return 0; | 2552 | return 0; |
2537 | } | 2553 | } |
2538 | 2554 | ||
2539 | static inline void security_socket_post_accept(struct socket * sock, | 2555 | static inline void security_socket_post_accept(struct socket *sock, |
2540 | struct socket * newsock) | 2556 | struct socket *newsock) |
2541 | { | 2557 | { |
2542 | } | 2558 | } |
2543 | 2559 | ||
2544 | static inline int security_socket_sendmsg(struct socket * sock, | 2560 | static inline int security_socket_sendmsg(struct socket *sock, |
2545 | struct msghdr * msg, int size) | 2561 | struct msghdr *msg, int size) |
2546 | { | 2562 | { |
2547 | return 0; | 2563 | return 0; |
2548 | } | 2564 | } |
2549 | 2565 | ||
2550 | static inline int security_socket_recvmsg(struct socket * sock, | 2566 | static inline int security_socket_recvmsg(struct socket *sock, |
2551 | struct msghdr * msg, int size, | 2567 | struct msghdr *msg, int size, |
2552 | int flags) | 2568 | int flags) |
2553 | { | 2569 | { |
2554 | return 0; | 2570 | return 0; |
2555 | } | 2571 | } |
2556 | 2572 | ||
2557 | static inline int security_socket_getsockname(struct socket * sock) | 2573 | static inline int security_socket_getsockname(struct socket *sock) |
2558 | { | 2574 | { |
2559 | return 0; | 2575 | return 0; |
2560 | } | 2576 | } |
2561 | 2577 | ||
2562 | static inline int security_socket_getpeername(struct socket * sock) | 2578 | static inline int security_socket_getpeername(struct socket *sock) |
2563 | { | 2579 | { |
2564 | return 0; | 2580 | return 0; |
2565 | } | 2581 | } |
2566 | 2582 | ||
2567 | static inline int security_socket_getsockopt(struct socket * sock, | 2583 | static inline int security_socket_getsockopt(struct socket *sock, |
2568 | int level, int optname) | 2584 | int level, int optname) |
2569 | { | 2585 | { |
2570 | return 0; | 2586 | return 0; |
2571 | } | 2587 | } |
2572 | 2588 | ||
2573 | static inline int security_socket_setsockopt(struct socket * sock, | 2589 | static inline int security_socket_setsockopt(struct socket *sock, |
2574 | int level, int optname) | 2590 | int level, int optname) |
2575 | { | 2591 | { |
2576 | return 0; | 2592 | return 0; |
2577 | } | 2593 | } |
2578 | 2594 | ||
2579 | static inline int security_socket_shutdown(struct socket * sock, int how) | 2595 | static inline int security_socket_shutdown(struct socket *sock, int how) |
2580 | { | 2596 | { |
2581 | return 0; | 2597 | return 0; |
2582 | } | 2598 | } |
2583 | static inline int security_sock_rcv_skb (struct sock * sk, | 2599 | static inline int security_sock_rcv_skb(struct sock *sk, |
2584 | struct sk_buff * skb) | 2600 | struct sk_buff *skb) |
2585 | { | 2601 | { |
2586 | return 0; | 2602 | return 0; |
2587 | } | 2603 | } |
@@ -2618,7 +2634,7 @@ static inline void security_req_classify_flow(const struct request_sock *req, st | |||
2618 | { | 2634 | { |
2619 | } | 2635 | } |
2620 | 2636 | ||
2621 | static inline void security_sock_graft(struct sock* sk, struct socket *parent) | 2637 | static inline void security_sock_graft(struct sock *sk, struct socket *parent) |
2622 | { | 2638 | { |
2623 | } | 2639 | } |
2624 | 2640 | ||
@@ -2727,6 +2743,7 @@ int security_key_alloc(struct key *key, struct task_struct *tsk, unsigned long f | |||
2727 | void security_key_free(struct key *key); | 2743 | void security_key_free(struct key *key); |
2728 | int security_key_permission(key_ref_t key_ref, | 2744 | int security_key_permission(key_ref_t key_ref, |
2729 | struct task_struct *context, key_perm_t perm); | 2745 | struct task_struct *context, key_perm_t perm); |
2746 | int security_key_getsecurity(struct key *key, char **_buffer); | ||
2730 | 2747 | ||
2731 | #else | 2748 | #else |
2732 | 2749 | ||
@@ -2748,6 +2765,12 @@ static inline int security_key_permission(key_ref_t key_ref, | |||
2748 | return 0; | 2765 | return 0; |
2749 | } | 2766 | } |
2750 | 2767 | ||
2768 | static inline int security_key_getsecurity(struct key *key, char **_buffer) | ||
2769 | { | ||
2770 | *_buffer = NULL; | ||
2771 | return 0; | ||
2772 | } | ||
2773 | |||
2751 | #endif | 2774 | #endif |
2752 | #endif /* CONFIG_KEYS */ | 2775 | #endif /* CONFIG_KEYS */ |
2753 | 2776 | ||
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h index 26e4925bc35b..632205ccc25d 100644 --- a/include/linux/seqlock.h +++ b/include/linux/seqlock.h | |||
@@ -85,23 +85,29 @@ static inline int write_tryseqlock(seqlock_t *sl) | |||
85 | /* Start of read calculation -- fetch last complete writer token */ | 85 | /* Start of read calculation -- fetch last complete writer token */ |
86 | static __always_inline unsigned read_seqbegin(const seqlock_t *sl) | 86 | static __always_inline unsigned read_seqbegin(const seqlock_t *sl) |
87 | { | 87 | { |
88 | unsigned ret = sl->sequence; | 88 | unsigned ret; |
89 | |||
90 | repeat: | ||
91 | ret = sl->sequence; | ||
89 | smp_rmb(); | 92 | smp_rmb(); |
93 | if (unlikely(ret & 1)) { | ||
94 | cpu_relax(); | ||
95 | goto repeat; | ||
96 | } | ||
97 | |||
90 | return ret; | 98 | return ret; |
91 | } | 99 | } |
92 | 100 | ||
93 | /* Test if reader processed invalid data. | 101 | /* |
94 | * If initial values is odd, | 102 | * Test if reader processed invalid data. |
95 | * then writer had already started when section was entered | 103 | * |
96 | * If sequence value changed | 104 | * If sequence value changed then writer changed data while in section. |
97 | * then writer changed data while in section | ||
98 | * | ||
99 | * Using xor saves one conditional branch. | ||
100 | */ | 105 | */ |
101 | static __always_inline int read_seqretry(const seqlock_t *sl, unsigned iv) | 106 | static __always_inline int read_seqretry(const seqlock_t *sl, unsigned start) |
102 | { | 107 | { |
103 | smp_rmb(); | 108 | smp_rmb(); |
104 | return (iv & 1) | (sl->sequence ^ iv); | 109 | |
110 | return (sl->sequence != start); | ||
105 | } | 111 | } |
106 | 112 | ||
107 | 113 | ||
@@ -122,20 +128,26 @@ typedef struct seqcount { | |||
122 | /* Start of read using pointer to a sequence counter only. */ | 128 | /* Start of read using pointer to a sequence counter only. */ |
123 | static inline unsigned read_seqcount_begin(const seqcount_t *s) | 129 | static inline unsigned read_seqcount_begin(const seqcount_t *s) |
124 | { | 130 | { |
125 | unsigned ret = s->sequence; | 131 | unsigned ret; |
132 | |||
133 | repeat: | ||
134 | ret = s->sequence; | ||
126 | smp_rmb(); | 135 | smp_rmb(); |
136 | if (unlikely(ret & 1)) { | ||
137 | cpu_relax(); | ||
138 | goto repeat; | ||
139 | } | ||
127 | return ret; | 140 | return ret; |
128 | } | 141 | } |
129 | 142 | ||
130 | /* Test if reader processed invalid data. | 143 | /* |
131 | * Equivalent to: iv is odd or sequence number has changed. | 144 | * Test if reader processed invalid data because sequence number has changed. |
132 | * (iv & 1) || (*s != iv) | ||
133 | * Using xor saves one conditional branch. | ||
134 | */ | 145 | */ |
135 | static inline int read_seqcount_retry(const seqcount_t *s, unsigned iv) | 146 | static inline int read_seqcount_retry(const seqcount_t *s, unsigned start) |
136 | { | 147 | { |
137 | smp_rmb(); | 148 | smp_rmb(); |
138 | return (iv & 1) | (s->sequence ^ iv); | 149 | |
150 | return s->sequence != start; | ||
139 | } | 151 | } |
140 | 152 | ||
141 | 153 | ||
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index 00b65c0a82ca..3d37c94abbc8 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h | |||
@@ -46,6 +46,7 @@ enum { | |||
46 | PLAT8250_DEV_HUB6, | 46 | PLAT8250_DEV_HUB6, |
47 | PLAT8250_DEV_MCA, | 47 | PLAT8250_DEV_MCA, |
48 | PLAT8250_DEV_AU1X00, | 48 | PLAT8250_DEV_AU1X00, |
49 | PLAT8250_DEV_SM501, | ||
49 | }; | 50 | }; |
50 | 51 | ||
51 | /* | 52 | /* |
diff --git a/include/linux/serio.h b/include/linux/serio.h index 9f3825014674..95674d97dabd 100644 --- a/include/linux/serio.h +++ b/include/linux/serio.h | |||
@@ -211,5 +211,6 @@ static inline void serio_unpin_driver(struct serio *serio) | |||
211 | #define SERIO_TOUCHWIN 0x33 | 211 | #define SERIO_TOUCHWIN 0x33 |
212 | #define SERIO_TAOSEVM 0x34 | 212 | #define SERIO_TAOSEVM 0x34 |
213 | #define SERIO_FUJITSU 0x35 | 213 | #define SERIO_FUJITSU 0x35 |
214 | #define SERIO_ZHENHUA 0x36 | ||
214 | 215 | ||
215 | #endif | 216 | #endif |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index 8d5fb36ea047..f2d12d5a21b8 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
@@ -34,8 +34,7 @@ struct shmem_sb_info { | |||
34 | uid_t uid; /* Mount uid for root directory */ | 34 | uid_t uid; /* Mount uid for root directory */ |
35 | gid_t gid; /* Mount gid for root directory */ | 35 | gid_t gid; /* Mount gid for root directory */ |
36 | mode_t mode; /* Mount mode for root directory */ | 36 | mode_t mode; /* Mount mode for root directory */ |
37 | int policy; /* Default NUMA memory alloc policy */ | 37 | struct mempolicy *mpol; /* default memory policy for mappings */ |
38 | nodemask_t policy_nodes; /* nodemask for preferred and bind */ | ||
39 | }; | 38 | }; |
40 | 39 | ||
41 | static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) | 40 | static inline struct shmem_inode_info *SHMEM_I(struct inode *inode) |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 79d59c937fac..71e43a12ebbb 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -29,6 +29,7 @@ enum stat_item { | |||
29 | DEACTIVATE_TO_HEAD, /* Cpu slab was moved to the head of partials */ | 29 | DEACTIVATE_TO_HEAD, /* Cpu slab was moved to the head of partials */ |
30 | DEACTIVATE_TO_TAIL, /* Cpu slab was moved to the tail of partials */ | 30 | DEACTIVATE_TO_TAIL, /* Cpu slab was moved to the tail of partials */ |
31 | DEACTIVATE_REMOTE_FREES,/* Slab contained remotely freed objects */ | 31 | DEACTIVATE_REMOTE_FREES,/* Slab contained remotely freed objects */ |
32 | ORDER_FALLBACK, /* Number of times fallback was necessary */ | ||
32 | NR_SLUB_STAT_ITEMS }; | 33 | NR_SLUB_STAT_ITEMS }; |
33 | 34 | ||
34 | struct kmem_cache_cpu { | 35 | struct kmem_cache_cpu { |
@@ -48,11 +49,21 @@ struct kmem_cache_node { | |||
48 | struct list_head partial; | 49 | struct list_head partial; |
49 | #ifdef CONFIG_SLUB_DEBUG | 50 | #ifdef CONFIG_SLUB_DEBUG |
50 | atomic_long_t nr_slabs; | 51 | atomic_long_t nr_slabs; |
52 | atomic_long_t total_objects; | ||
51 | struct list_head full; | 53 | struct list_head full; |
52 | #endif | 54 | #endif |
53 | }; | 55 | }; |
54 | 56 | ||
55 | /* | 57 | /* |
58 | * Word size structure that can be atomically updated or read and that | ||
59 | * contains both the order and the number of objects that a slab of the | ||
60 | * given order would contain. | ||
61 | */ | ||
62 | struct kmem_cache_order_objects { | ||
63 | unsigned long x; | ||
64 | }; | ||
65 | |||
66 | /* | ||
56 | * Slab cache management. | 67 | * Slab cache management. |
57 | */ | 68 | */ |
58 | struct kmem_cache { | 69 | struct kmem_cache { |
@@ -61,7 +72,7 @@ struct kmem_cache { | |||
61 | int size; /* The size of an object including meta data */ | 72 | int size; /* The size of an object including meta data */ |
62 | int objsize; /* The size of an object without meta data */ | 73 | int objsize; /* The size of an object without meta data */ |
63 | int offset; /* Free pointer offset. */ | 74 | int offset; /* Free pointer offset. */ |
64 | int order; /* Current preferred allocation order */ | 75 | struct kmem_cache_order_objects oo; |
65 | 76 | ||
66 | /* | 77 | /* |
67 | * Avoid an extra cache line for UP, SMP and for the node local to | 78 | * Avoid an extra cache line for UP, SMP and for the node local to |
@@ -70,7 +81,8 @@ struct kmem_cache { | |||
70 | struct kmem_cache_node local_node; | 81 | struct kmem_cache_node local_node; |
71 | 82 | ||
72 | /* Allocation and freeing of slabs */ | 83 | /* Allocation and freeing of slabs */ |
73 | int objects; /* Number of objects in slab */ | 84 | struct kmem_cache_order_objects max; |
85 | struct kmem_cache_order_objects min; | ||
74 | gfp_t allocflags; /* gfp flags to use on each alloc */ | 86 | gfp_t allocflags; /* gfp flags to use on each alloc */ |
75 | int refcount; /* Refcount for slab cache destroy */ | 87 | int refcount; /* Refcount for slab cache destroy */ |
76 | void (*ctor)(struct kmem_cache *, void *); | 88 | void (*ctor)(struct kmem_cache *, void *); |
diff --git a/include/linux/smb.h b/include/linux/smb.h index f098dff93f6b..caa43b2370cb 100644 --- a/include/linux/smb.h +++ b/include/linux/smb.h | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/types.h> | 12 | #include <linux/types.h> |
13 | #include <linux/magic.h> | 13 | #include <linux/magic.h> |
14 | #include <linux/time.h> | ||
14 | 15 | ||
15 | enum smb_protocol { | 16 | enum smb_protocol { |
16 | SMB_PROTOCOL_NONE, | 17 | SMB_PROTOCOL_NONE, |
diff --git a/include/linux/spi/ads7846.h b/include/linux/spi/ads7846.h index 334d31411629..daf744017a31 100644 --- a/include/linux/spi/ads7846.h +++ b/include/linux/spi/ads7846.h | |||
@@ -14,7 +14,8 @@ enum ads7846_filter { | |||
14 | struct ads7846_platform_data { | 14 | struct ads7846_platform_data { |
15 | u16 model; /* 7843, 7845, 7846. */ | 15 | u16 model; /* 7843, 7845, 7846. */ |
16 | u16 vref_delay_usecs; /* 0 for external vref; etc */ | 16 | u16 vref_delay_usecs; /* 0 for external vref; etc */ |
17 | int keep_vref_on:1; /* set to keep vref on for differential | 17 | u16 vref_mv; /* external vref value, milliVolts */ |
18 | bool keep_vref_on; /* set to keep vref on for differential | ||
18 | * measurements as well */ | 19 | * measurements as well */ |
19 | 20 | ||
20 | /* Settling time of the analog signals; a function of Vcc and the | 21 | /* Settling time of the analog signals; a function of Vcc and the |
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index 7a69ca3bebaf..3f632182d8eb 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h | |||
@@ -26,6 +26,7 @@ struct auth_cred { | |||
26 | uid_t uid; | 26 | uid_t uid; |
27 | gid_t gid; | 27 | gid_t gid; |
28 | struct group_info *group_info; | 28 | struct group_info *group_info; |
29 | unsigned char machine_cred : 1; | ||
29 | }; | 30 | }; |
30 | 31 | ||
31 | /* | 32 | /* |
@@ -59,8 +60,8 @@ struct rpc_cred { | |||
59 | /* | 60 | /* |
60 | * Client authentication handle | 61 | * Client authentication handle |
61 | */ | 62 | */ |
62 | #define RPC_CREDCACHE_NR 8 | 63 | #define RPC_CREDCACHE_HASHBITS 4 |
63 | #define RPC_CREDCACHE_MASK (RPC_CREDCACHE_NR - 1) | 64 | #define RPC_CREDCACHE_NR (1 << RPC_CREDCACHE_HASHBITS) |
64 | struct rpc_cred_cache { | 65 | struct rpc_cred_cache { |
65 | struct hlist_head hashtable[RPC_CREDCACHE_NR]; | 66 | struct hlist_head hashtable[RPC_CREDCACHE_NR]; |
66 | spinlock_t lock; | 67 | spinlock_t lock; |
@@ -89,7 +90,6 @@ struct rpc_auth { | |||
89 | 90 | ||
90 | /* Flags for rpcauth_lookupcred() */ | 91 | /* Flags for rpcauth_lookupcred() */ |
91 | #define RPCAUTH_LOOKUP_NEW 0x01 /* Accept an uninitialised cred */ | 92 | #define RPCAUTH_LOOKUP_NEW 0x01 /* Accept an uninitialised cred */ |
92 | #define RPCAUTH_LOOKUP_ROOTCREDS 0x02 /* This really ought to go! */ | ||
93 | 93 | ||
94 | /* | 94 | /* |
95 | * Client authentication ops | 95 | * Client authentication ops |
@@ -97,9 +97,7 @@ struct rpc_auth { | |||
97 | struct rpc_authops { | 97 | struct rpc_authops { |
98 | struct module *owner; | 98 | struct module *owner; |
99 | rpc_authflavor_t au_flavor; /* flavor (RPC_AUTH_*) */ | 99 | rpc_authflavor_t au_flavor; /* flavor (RPC_AUTH_*) */ |
100 | #ifdef RPC_DEBUG | ||
101 | char * au_name; | 100 | char * au_name; |
102 | #endif | ||
103 | struct rpc_auth * (*create)(struct rpc_clnt *, rpc_authflavor_t); | 101 | struct rpc_auth * (*create)(struct rpc_clnt *, rpc_authflavor_t); |
104 | void (*destroy)(struct rpc_auth *); | 102 | void (*destroy)(struct rpc_auth *); |
105 | 103 | ||
@@ -113,6 +111,7 @@ struct rpc_credops { | |||
113 | void (*crdestroy)(struct rpc_cred *); | 111 | void (*crdestroy)(struct rpc_cred *); |
114 | 112 | ||
115 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); | 113 | int (*crmatch)(struct auth_cred *, struct rpc_cred *, int); |
114 | void (*crbind)(struct rpc_task *, struct rpc_cred *); | ||
116 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); | 115 | __be32 * (*crmarshal)(struct rpc_task *, __be32 *); |
117 | int (*crrefresh)(struct rpc_task *); | 116 | int (*crrefresh)(struct rpc_task *); |
118 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); | 117 | __be32 * (*crvalidate)(struct rpc_task *, __be32 *); |
@@ -126,9 +125,13 @@ extern const struct rpc_authops authunix_ops; | |||
126 | extern const struct rpc_authops authnull_ops; | 125 | extern const struct rpc_authops authnull_ops; |
127 | 126 | ||
128 | void __init rpc_init_authunix(void); | 127 | void __init rpc_init_authunix(void); |
128 | void __init rpc_init_generic_auth(void); | ||
129 | void __init rpcauth_init_module(void); | 129 | void __init rpcauth_init_module(void); |
130 | void __exit rpcauth_remove_module(void); | 130 | void __exit rpcauth_remove_module(void); |
131 | void __exit rpc_destroy_generic_auth(void); | ||
131 | 132 | ||
133 | struct rpc_cred * rpc_lookup_cred(void); | ||
134 | struct rpc_cred * rpc_lookup_machine_cred(void); | ||
132 | int rpcauth_register(const struct rpc_authops *); | 135 | int rpcauth_register(const struct rpc_authops *); |
133 | int rpcauth_unregister(const struct rpc_authops *); | 136 | int rpcauth_unregister(const struct rpc_authops *); |
134 | struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *); | 137 | struct rpc_auth * rpcauth_create(rpc_authflavor_t, struct rpc_clnt *); |
@@ -136,8 +139,8 @@ void rpcauth_release(struct rpc_auth *); | |||
136 | struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); | 139 | struct rpc_cred * rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); |
137 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); | 140 | void rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *); |
138 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); | 141 | struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int); |
139 | struct rpc_cred * rpcauth_bindcred(struct rpc_task *); | 142 | void rpcauth_bindcred(struct rpc_task *, struct rpc_cred *, int); |
140 | void rpcauth_holdcred(struct rpc_task *); | 143 | void rpcauth_generic_bind_cred(struct rpc_task *, struct rpc_cred *); |
141 | void put_rpccred(struct rpc_cred *); | 144 | void put_rpccred(struct rpc_cred *); |
142 | void rpcauth_unbindcred(struct rpc_task *); | 145 | void rpcauth_unbindcred(struct rpc_task *); |
143 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); | 146 | __be32 * rpcauth_marshcred(struct rpc_task *, __be32 *); |
diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h index 67658e17a375..fec6899bf355 100644 --- a/include/linux/sunrpc/auth_gss.h +++ b/include/linux/sunrpc/auth_gss.h | |||
@@ -84,6 +84,7 @@ struct gss_cred { | |||
84 | enum rpc_gss_svc gc_service; | 84 | enum rpc_gss_svc gc_service; |
85 | struct gss_cl_ctx *gc_ctx; | 85 | struct gss_cl_ctx *gc_ctx; |
86 | struct gss_upcall_msg *gc_upcall; | 86 | struct gss_upcall_msg *gc_upcall; |
87 | unsigned char gc_machine_cred : 1; | ||
87 | }; | 88 | }; |
88 | 89 | ||
89 | #endif /* __KERNEL__ */ | 90 | #endif /* __KERNEL__ */ |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 03547d6abee5..2d8b211b9324 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
@@ -120,7 +120,6 @@ struct cache_deferred_req { | |||
120 | struct list_head hash; /* on hash chain */ | 120 | struct list_head hash; /* on hash chain */ |
121 | struct list_head recent; /* on fifo */ | 121 | struct list_head recent; /* on fifo */ |
122 | struct cache_head *item; /* cache item we wait on */ | 122 | struct cache_head *item; /* cache item we wait on */ |
123 | time_t recv_time; | ||
124 | void *owner; /* we might need to discard all defered requests | 123 | void *owner; /* we might need to discard all defered requests |
125 | * owned by someone */ | 124 | * owned by someone */ |
126 | void (*revisit)(struct cache_deferred_req *req, | 125 | void (*revisit)(struct cache_deferred_req *req, |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 129a86e25d29..6fff7f82ef12 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
@@ -127,11 +127,12 @@ int rpcb_getport_sync(struct sockaddr_in *, u32, u32, int); | |||
127 | void rpcb_getport_async(struct rpc_task *); | 127 | void rpcb_getport_async(struct rpc_task *); |
128 | 128 | ||
129 | void rpc_call_start(struct rpc_task *); | 129 | void rpc_call_start(struct rpc_task *); |
130 | int rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, | 130 | int rpc_call_async(struct rpc_clnt *clnt, |
131 | int flags, const struct rpc_call_ops *tk_ops, | 131 | const struct rpc_message *msg, int flags, |
132 | const struct rpc_call_ops *tk_ops, | ||
132 | void *calldata); | 133 | void *calldata); |
133 | int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, | 134 | int rpc_call_sync(struct rpc_clnt *clnt, |
134 | int flags); | 135 | const struct rpc_message *msg, int flags); |
135 | struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, | 136 | struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, |
136 | int flags); | 137 | int flags); |
137 | void rpc_restart_call(struct rpc_task *); | 138 | void rpc_restart_call(struct rpc_task *); |
diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index 5a4b1e0206e3..a10f1fb0bf7c 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h | |||
@@ -70,8 +70,6 @@ enum seal_alg { | |||
70 | SEAL_ALG_DES3KD = 0x0002 | 70 | SEAL_ALG_DES3KD = 0x0002 |
71 | }; | 71 | }; |
72 | 72 | ||
73 | #define KRB5_CKSUM_LENGTH 8 | ||
74 | |||
75 | #define CKSUMTYPE_CRC32 0x0001 | 73 | #define CKSUMTYPE_CRC32 0x0001 |
76 | #define CKSUMTYPE_RSA_MD4 0x0002 | 74 | #define CKSUMTYPE_RSA_MD4 0x0002 |
77 | #define CKSUMTYPE_RSA_MD4_DES 0x0003 | 75 | #define CKSUMTYPE_RSA_MD4_DES 0x0003 |
@@ -150,9 +148,9 @@ gss_decrypt_xdr_buf(struct crypto_blkcipher *tfm, struct xdr_buf *inbuf, | |||
150 | s32 | 148 | s32 |
151 | krb5_make_seq_num(struct crypto_blkcipher *key, | 149 | krb5_make_seq_num(struct crypto_blkcipher *key, |
152 | int direction, | 150 | int direction, |
153 | s32 seqnum, unsigned char *cksum, unsigned char *buf); | 151 | u32 seqnum, unsigned char *cksum, unsigned char *buf); |
154 | 152 | ||
155 | s32 | 153 | s32 |
156 | krb5_get_seq_num(struct crypto_blkcipher *key, | 154 | krb5_get_seq_num(struct crypto_blkcipher *key, |
157 | unsigned char *cksum, | 155 | unsigned char *cksum, |
158 | unsigned char *buf, int *direction, s32 * seqnum); | 156 | unsigned char *buf, int *direction, u32 *seqnum); |
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index f689f02e6793..d1a5c8c1a0f1 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
@@ -11,7 +11,6 @@ | |||
11 | 11 | ||
12 | #include <linux/timer.h> | 12 | #include <linux/timer.h> |
13 | #include <linux/sunrpc/types.h> | 13 | #include <linux/sunrpc/types.h> |
14 | #include <linux/rcupdate.h> | ||
15 | #include <linux/spinlock.h> | 14 | #include <linux/spinlock.h> |
16 | #include <linux/wait.h> | 15 | #include <linux/wait.h> |
17 | #include <linux/workqueue.h> | 16 | #include <linux/workqueue.h> |
@@ -33,7 +32,8 @@ struct rpc_wait_queue; | |||
33 | struct rpc_wait { | 32 | struct rpc_wait { |
34 | struct list_head list; /* wait queue links */ | 33 | struct list_head list; /* wait queue links */ |
35 | struct list_head links; /* Links to related tasks */ | 34 | struct list_head links; /* Links to related tasks */ |
36 | struct rpc_wait_queue * rpc_waitq; /* RPC wait queue we're on */ | 35 | struct list_head timer_list; /* Timer list */ |
36 | unsigned long expires; | ||
37 | }; | 37 | }; |
38 | 38 | ||
39 | /* | 39 | /* |
@@ -57,33 +57,25 @@ struct rpc_task { | |||
57 | __u8 tk_cred_retry; | 57 | __u8 tk_cred_retry; |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * timeout_fn to be executed by timer bottom half | ||
61 | * callback to be executed after waking up | 60 | * callback to be executed after waking up |
62 | * action next procedure for async tasks | 61 | * action next procedure for async tasks |
63 | * tk_ops caller callbacks | 62 | * tk_ops caller callbacks |
64 | */ | 63 | */ |
65 | void (*tk_timeout_fn)(struct rpc_task *); | ||
66 | void (*tk_callback)(struct rpc_task *); | 64 | void (*tk_callback)(struct rpc_task *); |
67 | void (*tk_action)(struct rpc_task *); | 65 | void (*tk_action)(struct rpc_task *); |
68 | const struct rpc_call_ops *tk_ops; | 66 | const struct rpc_call_ops *tk_ops; |
69 | void * tk_calldata; | 67 | void * tk_calldata; |
70 | 68 | ||
71 | /* | ||
72 | * tk_timer is used for async processing by the RPC scheduling | ||
73 | * primitives. You should not access this directly unless | ||
74 | * you have a pathological interest in kernel oopses. | ||
75 | */ | ||
76 | struct timer_list tk_timer; /* kernel timer */ | ||
77 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ | 69 | unsigned long tk_timeout; /* timeout for rpc_sleep() */ |
78 | unsigned short tk_flags; /* misc flags */ | 70 | unsigned short tk_flags; /* misc flags */ |
79 | unsigned long tk_runstate; /* Task run status */ | 71 | unsigned long tk_runstate; /* Task run status */ |
80 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could | 72 | struct workqueue_struct *tk_workqueue; /* Normally rpciod, but could |
81 | * be any workqueue | 73 | * be any workqueue |
82 | */ | 74 | */ |
75 | struct rpc_wait_queue *tk_waitqueue; /* RPC wait queue we're on */ | ||
83 | union { | 76 | union { |
84 | struct work_struct tk_work; /* Async task work queue */ | 77 | struct work_struct tk_work; /* Async task work queue */ |
85 | struct rpc_wait tk_wait; /* RPC wait */ | 78 | struct rpc_wait tk_wait; /* RPC wait */ |
86 | struct rcu_head tk_rcu; /* for task deletion */ | ||
87 | } u; | 79 | } u; |
88 | 80 | ||
89 | unsigned short tk_timeouts; /* maj timeouts */ | 81 | unsigned short tk_timeouts; /* maj timeouts */ |
@@ -123,6 +115,7 @@ struct rpc_task_setup { | |||
123 | const struct rpc_message *rpc_message; | 115 | const struct rpc_message *rpc_message; |
124 | const struct rpc_call_ops *callback_ops; | 116 | const struct rpc_call_ops *callback_ops; |
125 | void *callback_data; | 117 | void *callback_data; |
118 | struct workqueue_struct *workqueue; | ||
126 | unsigned short flags; | 119 | unsigned short flags; |
127 | signed char priority; | 120 | signed char priority; |
128 | }; | 121 | }; |
@@ -147,9 +140,7 @@ struct rpc_task_setup { | |||
147 | 140 | ||
148 | #define RPC_TASK_RUNNING 0 | 141 | #define RPC_TASK_RUNNING 0 |
149 | #define RPC_TASK_QUEUED 1 | 142 | #define RPC_TASK_QUEUED 1 |
150 | #define RPC_TASK_WAKEUP 2 | 143 | #define RPC_TASK_ACTIVE 2 |
151 | #define RPC_TASK_HAS_TIMER 3 | ||
152 | #define RPC_TASK_ACTIVE 4 | ||
153 | 144 | ||
154 | #define RPC_IS_RUNNING(t) test_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) | 145 | #define RPC_IS_RUNNING(t) test_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) |
155 | #define rpc_set_running(t) set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) | 146 | #define rpc_set_running(t) set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) |
@@ -171,15 +162,6 @@ struct rpc_task_setup { | |||
171 | smp_mb__after_clear_bit(); \ | 162 | smp_mb__after_clear_bit(); \ |
172 | } while (0) | 163 | } while (0) |
173 | 164 | ||
174 | #define rpc_start_wakeup(t) \ | ||
175 | (test_and_set_bit(RPC_TASK_WAKEUP, &(t)->tk_runstate) == 0) | ||
176 | #define rpc_finish_wakeup(t) \ | ||
177 | do { \ | ||
178 | smp_mb__before_clear_bit(); \ | ||
179 | clear_bit(RPC_TASK_WAKEUP, &(t)->tk_runstate); \ | ||
180 | smp_mb__after_clear_bit(); \ | ||
181 | } while (0) | ||
182 | |||
183 | #define RPC_IS_ACTIVATED(t) test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate) | 165 | #define RPC_IS_ACTIVATED(t) test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate) |
184 | 166 | ||
185 | /* | 167 | /* |
@@ -192,6 +174,12 @@ struct rpc_task_setup { | |||
192 | #define RPC_PRIORITY_HIGH (1) | 174 | #define RPC_PRIORITY_HIGH (1) |
193 | #define RPC_NR_PRIORITY (1 + RPC_PRIORITY_HIGH - RPC_PRIORITY_LOW) | 175 | #define RPC_NR_PRIORITY (1 + RPC_PRIORITY_HIGH - RPC_PRIORITY_LOW) |
194 | 176 | ||
177 | struct rpc_timer { | ||
178 | struct timer_list timer; | ||
179 | struct list_head list; | ||
180 | unsigned long expires; | ||
181 | }; | ||
182 | |||
195 | /* | 183 | /* |
196 | * RPC synchronization objects | 184 | * RPC synchronization objects |
197 | */ | 185 | */ |
@@ -204,6 +192,7 @@ struct rpc_wait_queue { | |||
204 | unsigned char count; /* # task groups remaining serviced so far */ | 192 | unsigned char count; /* # task groups remaining serviced so far */ |
205 | unsigned char nr; /* # tasks remaining for cookie */ | 193 | unsigned char nr; /* # tasks remaining for cookie */ |
206 | unsigned short qlen; /* total # tasks waiting in queue */ | 194 | unsigned short qlen; /* total # tasks waiting in queue */ |
195 | struct rpc_timer timer_list; | ||
207 | #ifdef RPC_DEBUG | 196 | #ifdef RPC_DEBUG |
208 | const char * name; | 197 | const char * name; |
209 | #endif | 198 | #endif |
@@ -229,9 +218,11 @@ void rpc_killall_tasks(struct rpc_clnt *); | |||
229 | void rpc_execute(struct rpc_task *); | 218 | void rpc_execute(struct rpc_task *); |
230 | void rpc_init_priority_wait_queue(struct rpc_wait_queue *, const char *); | 219 | void rpc_init_priority_wait_queue(struct rpc_wait_queue *, const char *); |
231 | void rpc_init_wait_queue(struct rpc_wait_queue *, const char *); | 220 | void rpc_init_wait_queue(struct rpc_wait_queue *, const char *); |
221 | void rpc_destroy_wait_queue(struct rpc_wait_queue *); | ||
232 | void rpc_sleep_on(struct rpc_wait_queue *, struct rpc_task *, | 222 | void rpc_sleep_on(struct rpc_wait_queue *, struct rpc_task *, |
233 | rpc_action action, rpc_action timer); | 223 | rpc_action action); |
234 | void rpc_wake_up_task(struct rpc_task *); | 224 | void rpc_wake_up_queued_task(struct rpc_wait_queue *, |
225 | struct rpc_task *); | ||
235 | void rpc_wake_up(struct rpc_wait_queue *); | 226 | void rpc_wake_up(struct rpc_wait_queue *); |
236 | struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *); | 227 | struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *); |
237 | void rpc_wake_up_status(struct rpc_wait_queue *, int); | 228 | void rpc_wake_up_status(struct rpc_wait_queue *, int); |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 64c97552964a..4b54c5fdcfd9 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -386,7 +386,6 @@ struct svc_serv * svc_create(struct svc_program *, unsigned int, | |||
386 | void (*shutdown)(struct svc_serv*)); | 386 | void (*shutdown)(struct svc_serv*)); |
387 | struct svc_rqst *svc_prepare_thread(struct svc_serv *serv, | 387 | struct svc_rqst *svc_prepare_thread(struct svc_serv *serv, |
388 | struct svc_pool *pool); | 388 | struct svc_pool *pool); |
389 | int svc_create_thread(svc_thread_fn, struct svc_serv *); | ||
390 | void svc_exit_thread(struct svc_rqst *); | 389 | void svc_exit_thread(struct svc_rqst *); |
391 | struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int, | 390 | struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int, |
392 | void (*shutdown)(struct svc_serv*), | 391 | void (*shutdown)(struct svc_serv*), |
diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h index 22e1ef8e200e..d39dbdc7b10f 100644 --- a/include/linux/sunrpc/svcauth.h +++ b/include/linux/sunrpc/svcauth.h | |||
@@ -24,6 +24,7 @@ struct svc_cred { | |||
24 | }; | 24 | }; |
25 | 25 | ||
26 | struct svc_rqst; /* forward decl */ | 26 | struct svc_rqst; /* forward decl */ |
27 | struct in6_addr; | ||
27 | 28 | ||
28 | /* Authentication is done in the context of a domain. | 29 | /* Authentication is done in the context of a domain. |
29 | * | 30 | * |
@@ -120,10 +121,10 @@ extern void svc_auth_unregister(rpc_authflavor_t flavor); | |||
120 | 121 | ||
121 | extern struct auth_domain *unix_domain_find(char *name); | 122 | extern struct auth_domain *unix_domain_find(char *name); |
122 | extern void auth_domain_put(struct auth_domain *item); | 123 | extern void auth_domain_put(struct auth_domain *item); |
123 | extern int auth_unix_add_addr(struct in_addr addr, struct auth_domain *dom); | 124 | extern int auth_unix_add_addr(struct in6_addr *addr, struct auth_domain *dom); |
124 | extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *new); | 125 | extern struct auth_domain *auth_domain_lookup(char *name, struct auth_domain *new); |
125 | extern struct auth_domain *auth_domain_find(char *name); | 126 | extern struct auth_domain *auth_domain_find(char *name); |
126 | extern struct auth_domain *auth_unix_lookup(struct in_addr addr); | 127 | extern struct auth_domain *auth_unix_lookup(struct in6_addr *addr); |
127 | extern int auth_unix_forget_old(struct auth_domain *dom); | 128 | extern int auth_unix_forget_old(struct auth_domain *dom); |
128 | extern void svcauth_unix_purge(void); | 129 | extern void svcauth_unix_purge(void); |
129 | extern void svcauth_unix_info_release(void *); | 130 | extern void svcauth_unix_info_release(void *); |
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h index 206f092ad4c7..8cff696dedf5 100644 --- a/include/linux/sunrpc/svcsock.h +++ b/include/linux/sunrpc/svcsock.h | |||
@@ -26,8 +26,8 @@ struct svc_sock { | |||
26 | void (*sk_owspace)(struct sock *); | 26 | void (*sk_owspace)(struct sock *); |
27 | 27 | ||
28 | /* private TCP part */ | 28 | /* private TCP part */ |
29 | int sk_reclen; /* length of record */ | 29 | u32 sk_reclen; /* length of record */ |
30 | int sk_tcplen; /* current read length */ | 30 | u32 sk_tcplen; /* current read length */ |
31 | }; | 31 | }; |
32 | 32 | ||
33 | /* | 33 | /* |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index b3ff9a815e6f..4d80a118d538 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
@@ -86,6 +86,10 @@ struct rpc_rqst { | |||
86 | unsigned long rq_majortimeo; /* major timeout alarm */ | 86 | unsigned long rq_majortimeo; /* major timeout alarm */ |
87 | unsigned long rq_timeout; /* Current timeout value */ | 87 | unsigned long rq_timeout; /* Current timeout value */ |
88 | unsigned int rq_retries; /* # of retries */ | 88 | unsigned int rq_retries; /* # of retries */ |
89 | unsigned int rq_connect_cookie; | ||
90 | /* A cookie used to track the | ||
91 | state of the transport | ||
92 | connection */ | ||
89 | 93 | ||
90 | /* | 94 | /* |
91 | * Partial send handling | 95 | * Partial send handling |
@@ -152,6 +156,9 @@ struct rpc_xprt { | |||
152 | unsigned long connect_timeout, | 156 | unsigned long connect_timeout, |
153 | bind_timeout, | 157 | bind_timeout, |
154 | reestablish_timeout; | 158 | reestablish_timeout; |
159 | unsigned int connect_cookie; /* A cookie that gets bumped | ||
160 | every time the transport | ||
161 | is reconnected */ | ||
155 | 162 | ||
156 | /* | 163 | /* |
157 | * Disconnection of idle transports | 164 | * Disconnection of idle transports |
@@ -232,7 +239,7 @@ int xprt_unregister_transport(struct xprt_class *type); | |||
232 | void xprt_set_retrans_timeout_def(struct rpc_task *task); | 239 | void xprt_set_retrans_timeout_def(struct rpc_task *task); |
233 | void xprt_set_retrans_timeout_rtt(struct rpc_task *task); | 240 | void xprt_set_retrans_timeout_rtt(struct rpc_task *task); |
234 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status); | 241 | void xprt_wake_pending_tasks(struct rpc_xprt *xprt, int status); |
235 | void xprt_wait_for_buffer_space(struct rpc_task *task); | 242 | void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action); |
236 | void xprt_write_space(struct rpc_xprt *xprt); | 243 | void xprt_write_space(struct rpc_xprt *xprt); |
237 | void xprt_update_rtt(struct rpc_task *task); | 244 | void xprt_update_rtt(struct rpc_task *task); |
238 | void xprt_adjust_cwnd(struct rpc_task *task, int result); | 245 | void xprt_adjust_cwnd(struct rpc_task *task, int result); |
@@ -241,6 +248,7 @@ void xprt_complete_rqst(struct rpc_task *task, int copied); | |||
241 | void xprt_release_rqst_cong(struct rpc_task *task); | 248 | void xprt_release_rqst_cong(struct rpc_task *task); |
242 | void xprt_disconnect_done(struct rpc_xprt *xprt); | 249 | void xprt_disconnect_done(struct rpc_xprt *xprt); |
243 | void xprt_force_disconnect(struct rpc_xprt *xprt); | 250 | void xprt_force_disconnect(struct rpc_xprt *xprt); |
251 | void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie); | ||
244 | 252 | ||
245 | /* | 253 | /* |
246 | * Reserved bit positions in xprt->state | 254 | * Reserved bit positions in xprt->state |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 1d7d4c5797ee..a6977423baf7 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
@@ -12,11 +12,22 @@ | |||
12 | #include <asm/errno.h> | 12 | #include <asm/errno.h> |
13 | 13 | ||
14 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) | 14 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) |
15 | extern void pm_set_vt_switch(int); | ||
15 | extern int pm_prepare_console(void); | 16 | extern int pm_prepare_console(void); |
16 | extern void pm_restore_console(void); | 17 | extern void pm_restore_console(void); |
17 | #else | 18 | #else |
18 | static inline int pm_prepare_console(void) { return 0; } | 19 | static inline void pm_set_vt_switch(int do_switch) |
19 | static inline void pm_restore_console(void) {} | 20 | { |
21 | } | ||
22 | |||
23 | static inline int pm_prepare_console(void) | ||
24 | { | ||
25 | return 0; | ||
26 | } | ||
27 | |||
28 | static inline void pm_restore_console(void) | ||
29 | { | ||
30 | } | ||
20 | #endif | 31 | #endif |
21 | 32 | ||
22 | typedef int __bitwise suspend_state_t; | 33 | typedef int __bitwise suspend_state_t; |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 878459ae0454..0b3377650c85 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -177,11 +177,11 @@ extern void activate_page(struct page *); | |||
177 | extern void mark_page_accessed(struct page *); | 177 | extern void mark_page_accessed(struct page *); |
178 | extern void lru_add_drain(void); | 178 | extern void lru_add_drain(void); |
179 | extern int lru_add_drain_all(void); | 179 | extern int lru_add_drain_all(void); |
180 | extern int rotate_reclaimable_page(struct page *page); | 180 | extern void rotate_reclaimable_page(struct page *page); |
181 | extern void swap_setup(void); | 181 | extern void swap_setup(void); |
182 | 182 | ||
183 | /* linux/mm/vmscan.c */ | 183 | /* linux/mm/vmscan.c */ |
184 | extern unsigned long try_to_free_pages(struct zone **zones, int order, | 184 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
185 | gfp_t gfp_mask); | 185 | gfp_t gfp_mask); |
186 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, | 186 | extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem, |
187 | gfp_t gfp_mask); | 187 | gfp_t gfp_mask); |
diff --git a/include/linux/synclink.h b/include/linux/synclink.h index 5562fbf72095..45f6bc82d317 100644 --- a/include/linux/synclink.h +++ b/include/linux/synclink.h | |||
@@ -13,10 +13,6 @@ | |||
13 | #define _SYNCLINK_H_ | 13 | #define _SYNCLINK_H_ |
14 | #define SYNCLINK_H_VERSION 3.6 | 14 | #define SYNCLINK_H_VERSION 3.6 |
15 | 15 | ||
16 | #define BOOLEAN int | ||
17 | #define TRUE 1 | ||
18 | #define FALSE 0 | ||
19 | |||
20 | #define BIT0 0x0001 | 16 | #define BIT0 0x0001 |
21 | #define BIT1 0x0002 | 17 | #define BIT1 0x0002 |
22 | #define BIT2 0x0004 | 18 | #define BIT2 0x0004 |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 8df6d1382ac8..0522f368f9d7 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -240,26 +240,28 @@ asmlinkage long sys_truncate64(const char __user *path, loff_t length); | |||
240 | asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length); | 240 | asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length); |
241 | #endif | 241 | #endif |
242 | 242 | ||
243 | asmlinkage long sys_setxattr(char __user *path, char __user *name, | 243 | asmlinkage long sys_setxattr(const char __user *path, const char __user *name, |
244 | void __user *value, size_t size, int flags); | 244 | const void __user *value, size_t size, int flags); |
245 | asmlinkage long sys_lsetxattr(char __user *path, char __user *name, | 245 | asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name, |
246 | void __user *value, size_t size, int flags); | 246 | const void __user *value, size_t size, int flags); |
247 | asmlinkage long sys_fsetxattr(int fd, char __user *name, void __user *value, | 247 | asmlinkage long sys_fsetxattr(int fd, const char __user *name, |
248 | size_t size, int flags); | 248 | const void __user *value, size_t size, int flags); |
249 | asmlinkage ssize_t sys_getxattr(char __user *path, char __user *name, | 249 | asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name, |
250 | void __user *value, size_t size); | 250 | void __user *value, size_t size); |
251 | asmlinkage ssize_t sys_lgetxattr(char __user *path, char __user *name, | 251 | asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name, |
252 | void __user *value, size_t size); | 252 | void __user *value, size_t size); |
253 | asmlinkage ssize_t sys_fgetxattr(int fd, char __user *name, | 253 | asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name, |
254 | void __user *value, size_t size); | 254 | void __user *value, size_t size); |
255 | asmlinkage ssize_t sys_listxattr(char __user *path, char __user *list, | 255 | asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list, |
256 | size_t size); | 256 | size_t size); |
257 | asmlinkage ssize_t sys_llistxattr(char __user *path, char __user *list, | 257 | asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list, |
258 | size_t size); | 258 | size_t size); |
259 | asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); | 259 | asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); |
260 | asmlinkage long sys_removexattr(char __user *path, char __user *name); | 260 | asmlinkage long sys_removexattr(const char __user *path, |
261 | asmlinkage long sys_lremovexattr(char __user *path, char __user *name); | 261 | const char __user *name); |
262 | asmlinkage long sys_fremovexattr(int fd, char __user *name); | 262 | asmlinkage long sys_lremovexattr(const char __user *path, |
263 | const char __user *name); | ||
264 | asmlinkage long sys_fremovexattr(int fd, const char __user *name); | ||
263 | 265 | ||
264 | asmlinkage unsigned long sys_brk(unsigned long brk); | 266 | asmlinkage unsigned long sys_brk(unsigned long brk); |
265 | asmlinkage long sys_mprotect(unsigned long start, size_t len, | 267 | asmlinkage long sys_mprotect(unsigned long start, size_t len, |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 571f01d20a86..24141b4d1a11 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -945,11 +945,14 @@ enum | |||
945 | /* For the /proc/sys support */ | 945 | /* For the /proc/sys support */ |
946 | struct ctl_table; | 946 | struct ctl_table; |
947 | struct nsproxy; | 947 | struct nsproxy; |
948 | struct ctl_table_root; | ||
949 | |||
948 | extern struct ctl_table_header *sysctl_head_next(struct ctl_table_header *prev); | 950 | extern struct ctl_table_header *sysctl_head_next(struct ctl_table_header *prev); |
949 | extern struct ctl_table_header *__sysctl_head_next(struct nsproxy *namespaces, | 951 | extern struct ctl_table_header *__sysctl_head_next(struct nsproxy *namespaces, |
950 | struct ctl_table_header *prev); | 952 | struct ctl_table_header *prev); |
951 | extern void sysctl_head_finish(struct ctl_table_header *prev); | 953 | extern void sysctl_head_finish(struct ctl_table_header *prev); |
952 | extern int sysctl_perm(struct ctl_table *table, int op); | 954 | extern int sysctl_perm(struct ctl_table_root *root, |
955 | struct ctl_table *table, int op); | ||
953 | 956 | ||
954 | typedef struct ctl_table ctl_table; | 957 | typedef struct ctl_table ctl_table; |
955 | 958 | ||
@@ -981,11 +984,6 @@ extern int do_sysctl (int __user *name, int nlen, | |||
981 | void __user *oldval, size_t __user *oldlenp, | 984 | void __user *oldval, size_t __user *oldlenp, |
982 | void __user *newval, size_t newlen); | 985 | void __user *newval, size_t newlen); |
983 | 986 | ||
984 | extern int do_sysctl_strategy (struct ctl_table *table, | ||
985 | int __user *name, int nlen, | ||
986 | void __user *oldval, size_t __user *oldlenp, | ||
987 | void __user *newval, size_t newlen); | ||
988 | |||
989 | extern ctl_handler sysctl_data; | 987 | extern ctl_handler sysctl_data; |
990 | extern ctl_handler sysctl_string; | 988 | extern ctl_handler sysctl_string; |
991 | extern ctl_handler sysctl_intvec; | 989 | extern ctl_handler sysctl_intvec; |
@@ -1054,6 +1052,8 @@ struct ctl_table_root { | |||
1054 | struct list_head header_list; | 1052 | struct list_head header_list; |
1055 | struct list_head *(*lookup)(struct ctl_table_root *root, | 1053 | struct list_head *(*lookup)(struct ctl_table_root *root, |
1056 | struct nsproxy *namespaces); | 1054 | struct nsproxy *namespaces); |
1055 | int (*permissions)(struct ctl_table_root *root, | ||
1056 | struct nsproxy *namespaces, struct ctl_table *table); | ||
1057 | }; | 1057 | }; |
1058 | 1058 | ||
1059 | /* struct ctl_table_header is used to maintain dynamic lists of | 1059 | /* struct ctl_table_header is used to maintain dynamic lists of |
@@ -1085,8 +1085,6 @@ struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path, | |||
1085 | void unregister_sysctl_table(struct ctl_table_header * table); | 1085 | void unregister_sysctl_table(struct ctl_table_header * table); |
1086 | int sysctl_check_table(struct nsproxy *namespaces, struct ctl_table *table); | 1086 | int sysctl_check_table(struct nsproxy *namespaces, struct ctl_table *table); |
1087 | 1087 | ||
1088 | #else /* __KERNEL__ */ | ||
1089 | |||
1090 | #endif /* __KERNEL__ */ | 1088 | #endif /* __KERNEL__ */ |
1091 | 1089 | ||
1092 | #endif /* _LINUX_SYSCTL_H */ | 1090 | #endif /* _LINUX_SYSCTL_H */ |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 03378e3515b3..add3c5a40827 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
@@ -32,7 +32,7 @@ struct attribute { | |||
32 | 32 | ||
33 | struct attribute_group { | 33 | struct attribute_group { |
34 | const char *name; | 34 | const char *name; |
35 | int (*is_visible)(struct kobject *, | 35 | mode_t (*is_visible)(struct kobject *, |
36 | struct attribute *, int); | 36 | struct attribute *, int); |
37 | struct attribute **attrs; | 37 | struct attribute **attrs; |
38 | }; | 38 | }; |
@@ -105,6 +105,8 @@ void sysfs_remove_link(struct kobject *kobj, const char *name); | |||
105 | 105 | ||
106 | int __must_check sysfs_create_group(struct kobject *kobj, | 106 | int __must_check sysfs_create_group(struct kobject *kobj, |
107 | const struct attribute_group *grp); | 107 | const struct attribute_group *grp); |
108 | int sysfs_update_group(struct kobject *kobj, | ||
109 | const struct attribute_group *grp); | ||
108 | void sysfs_remove_group(struct kobject *kobj, | 110 | void sysfs_remove_group(struct kobject *kobj, |
109 | const struct attribute_group *grp); | 111 | const struct attribute_group *grp); |
110 | int sysfs_add_file_to_group(struct kobject *kobj, | 112 | int sysfs_add_file_to_group(struct kobject *kobj, |
diff --git a/include/linux/sysv_fs.h b/include/linux/sysv_fs.h index e0248631e461..96411306eec6 100644 --- a/include/linux/sysv_fs.h +++ b/include/linux/sysv_fs.h | |||
@@ -1,11 +1,7 @@ | |||
1 | #ifndef _LINUX_SYSV_FS_H | 1 | #ifndef _LINUX_SYSV_FS_H |
2 | #define _LINUX_SYSV_FS_H | 2 | #define _LINUX_SYSV_FS_H |
3 | 3 | ||
4 | #if defined(__GNUC__) | 4 | #define __packed2__ __attribute__((packed, aligned(2))) |
5 | # define __packed2__ __attribute__((packed, aligned(2))) | ||
6 | #else | ||
7 | >> I want to scream! << | ||
8 | #endif | ||
9 | 5 | ||
10 | 6 | ||
11 | #ifndef __KERNEL__ | 7 | #ifndef __KERNEL__ |
diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h new file mode 100644 index 000000000000..99c1b4d20b0f --- /dev/null +++ b/include/linux/unaligned/access_ok.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_ACCESS_OK_H | ||
2 | #define _LINUX_UNALIGNED_ACCESS_OK_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | #include <asm/byteorder.h> | ||
6 | |||
7 | static inline u16 get_unaligned_le16(const void *p) | ||
8 | { | ||
9 | return le16_to_cpup((__le16 *)p); | ||
10 | } | ||
11 | |||
12 | static inline u32 get_unaligned_le32(const void *p) | ||
13 | { | ||
14 | return le32_to_cpup((__le32 *)p); | ||
15 | } | ||
16 | |||
17 | static inline u64 get_unaligned_le64(const void *p) | ||
18 | { | ||
19 | return le64_to_cpup((__le64 *)p); | ||
20 | } | ||
21 | |||
22 | static inline u16 get_unaligned_be16(const void *p) | ||
23 | { | ||
24 | return be16_to_cpup((__be16 *)p); | ||
25 | } | ||
26 | |||
27 | static inline u32 get_unaligned_be32(const void *p) | ||
28 | { | ||
29 | return be32_to_cpup((__be32 *)p); | ||
30 | } | ||
31 | |||
32 | static inline u64 get_unaligned_be64(const void *p) | ||
33 | { | ||
34 | return be64_to_cpup((__be64 *)p); | ||
35 | } | ||
36 | |||
37 | static inline void put_unaligned_le16(u16 val, void *p) | ||
38 | { | ||
39 | *((__le16 *)p) = cpu_to_le16(val); | ||
40 | } | ||
41 | |||
42 | static inline void put_unaligned_le32(u32 val, void *p) | ||
43 | { | ||
44 | *((__le32 *)p) = cpu_to_le32(val); | ||
45 | } | ||
46 | |||
47 | static inline void put_unaligned_le64(u64 val, void *p) | ||
48 | { | ||
49 | *((__le64 *)p) = cpu_to_le64(val); | ||
50 | } | ||
51 | |||
52 | static inline void put_unaligned_be16(u16 val, void *p) | ||
53 | { | ||
54 | *((__be16 *)p) = cpu_to_be16(val); | ||
55 | } | ||
56 | |||
57 | static inline void put_unaligned_be32(u32 val, void *p) | ||
58 | { | ||
59 | *((__be32 *)p) = cpu_to_be32(val); | ||
60 | } | ||
61 | |||
62 | static inline void put_unaligned_be64(u64 val, void *p) | ||
63 | { | ||
64 | *((__be64 *)p) = cpu_to_be64(val); | ||
65 | } | ||
66 | |||
67 | #endif /* _LINUX_UNALIGNED_ACCESS_OK_H */ | ||
diff --git a/include/linux/unaligned/be_byteshift.h b/include/linux/unaligned/be_byteshift.h new file mode 100644 index 000000000000..46dd12c5709e --- /dev/null +++ b/include/linux/unaligned/be_byteshift.h | |||
@@ -0,0 +1,70 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H | ||
2 | #define _LINUX_UNALIGNED_BE_BYTESHIFT_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | |||
6 | static inline u16 __get_unaligned_be16(const u8 *p) | ||
7 | { | ||
8 | return p[0] << 8 | p[1]; | ||
9 | } | ||
10 | |||
11 | static inline u32 __get_unaligned_be32(const u8 *p) | ||
12 | { | ||
13 | return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; | ||
14 | } | ||
15 | |||
16 | static inline u64 __get_unaligned_be64(const u8 *p) | ||
17 | { | ||
18 | return (u64)__get_unaligned_be32(p) << 32 | | ||
19 | __get_unaligned_be32(p + 4); | ||
20 | } | ||
21 | |||
22 | static inline void __put_unaligned_be16(u16 val, u8 *p) | ||
23 | { | ||
24 | *p++ = val >> 8; | ||
25 | *p++ = val; | ||
26 | } | ||
27 | |||
28 | static inline void __put_unaligned_be32(u32 val, u8 *p) | ||
29 | { | ||
30 | __put_unaligned_be16(val >> 16, p); | ||
31 | __put_unaligned_be16(val, p + 2); | ||
32 | } | ||
33 | |||
34 | static inline void __put_unaligned_be64(u64 val, u8 *p) | ||
35 | { | ||
36 | __put_unaligned_be32(val >> 32, p); | ||
37 | __put_unaligned_be32(val, p + 4); | ||
38 | } | ||
39 | |||
40 | static inline u16 get_unaligned_be16(const void *p) | ||
41 | { | ||
42 | return __get_unaligned_be16((const u8 *)p); | ||
43 | } | ||
44 | |||
45 | static inline u32 get_unaligned_be32(const void *p) | ||
46 | { | ||
47 | return __get_unaligned_be32((const u8 *)p); | ||
48 | } | ||
49 | |||
50 | static inline u64 get_unaligned_be64(const void *p) | ||
51 | { | ||
52 | return __get_unaligned_be64((const u8 *)p); | ||
53 | } | ||
54 | |||
55 | static inline void put_unaligned_be16(u16 val, void *p) | ||
56 | { | ||
57 | __put_unaligned_be16(val, p); | ||
58 | } | ||
59 | |||
60 | static inline void put_unaligned_be32(u32 val, void *p) | ||
61 | { | ||
62 | __put_unaligned_be32(val, p); | ||
63 | } | ||
64 | |||
65 | static inline void put_unaligned_be64(u64 val, void *p) | ||
66 | { | ||
67 | __put_unaligned_be64(val, p); | ||
68 | } | ||
69 | |||
70 | #endif /* _LINUX_UNALIGNED_BE_BYTESHIFT_H */ | ||
diff --git a/include/linux/unaligned/be_memmove.h b/include/linux/unaligned/be_memmove.h new file mode 100644 index 000000000000..c2a76c5c9ed0 --- /dev/null +++ b/include/linux/unaligned/be_memmove.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_BE_MEMMOVE_H | ||
2 | #define _LINUX_UNALIGNED_BE_MEMMOVE_H | ||
3 | |||
4 | #include <linux/unaligned/memmove.h> | ||
5 | |||
6 | static inline u16 get_unaligned_be16(const void *p) | ||
7 | { | ||
8 | return __get_unaligned_memmove16((const u8 *)p); | ||
9 | } | ||
10 | |||
11 | static inline u32 get_unaligned_be32(const void *p) | ||
12 | { | ||
13 | return __get_unaligned_memmove32((const u8 *)p); | ||
14 | } | ||
15 | |||
16 | static inline u64 get_unaligned_be64(const void *p) | ||
17 | { | ||
18 | return __get_unaligned_memmove64((const u8 *)p); | ||
19 | } | ||
20 | |||
21 | static inline void put_unaligned_be16(u16 val, void *p) | ||
22 | { | ||
23 | __put_unaligned_memmove16(val, p); | ||
24 | } | ||
25 | |||
26 | static inline void put_unaligned_be32(u32 val, void *p) | ||
27 | { | ||
28 | __put_unaligned_memmove32(val, p); | ||
29 | } | ||
30 | |||
31 | static inline void put_unaligned_be64(u64 val, void *p) | ||
32 | { | ||
33 | __put_unaligned_memmove64(val, p); | ||
34 | } | ||
35 | |||
36 | #endif /* _LINUX_UNALIGNED_LE_MEMMOVE_H */ | ||
diff --git a/include/linux/unaligned/be_struct.h b/include/linux/unaligned/be_struct.h new file mode 100644 index 000000000000..132415836c50 --- /dev/null +++ b/include/linux/unaligned/be_struct.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_BE_STRUCT_H | ||
2 | #define _LINUX_UNALIGNED_BE_STRUCT_H | ||
3 | |||
4 | #include <linux/unaligned/packed_struct.h> | ||
5 | |||
6 | static inline u16 get_unaligned_be16(const void *p) | ||
7 | { | ||
8 | return __get_unaligned_cpu16((const u8 *)p); | ||
9 | } | ||
10 | |||
11 | static inline u32 get_unaligned_be32(const void *p) | ||
12 | { | ||
13 | return __get_unaligned_cpu32((const u8 *)p); | ||
14 | } | ||
15 | |||
16 | static inline u64 get_unaligned_be64(const void *p) | ||
17 | { | ||
18 | return __get_unaligned_cpu64((const u8 *)p); | ||
19 | } | ||
20 | |||
21 | static inline void put_unaligned_be16(u16 val, void *p) | ||
22 | { | ||
23 | __put_unaligned_cpu16(val, p); | ||
24 | } | ||
25 | |||
26 | static inline void put_unaligned_be32(u32 val, void *p) | ||
27 | { | ||
28 | __put_unaligned_cpu32(val, p); | ||
29 | } | ||
30 | |||
31 | static inline void put_unaligned_be64(u64 val, void *p) | ||
32 | { | ||
33 | __put_unaligned_cpu64(val, p); | ||
34 | } | ||
35 | |||
36 | #endif /* _LINUX_UNALIGNED_BE_STRUCT_H */ | ||
diff --git a/include/linux/unaligned/generic.h b/include/linux/unaligned/generic.h new file mode 100644 index 000000000000..02d97ff3df70 --- /dev/null +++ b/include/linux/unaligned/generic.h | |||
@@ -0,0 +1,68 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_GENERIC_H | ||
2 | #define _LINUX_UNALIGNED_GENERIC_H | ||
3 | |||
4 | /* | ||
5 | * Cause a link-time error if we try an unaligned access other than | ||
6 | * 1,2,4 or 8 bytes long | ||
7 | */ | ||
8 | extern void __bad_unaligned_access_size(void); | ||
9 | |||
10 | #define __get_unaligned_le(ptr) ((__force typeof(*(ptr)))({ \ | ||
11 | __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr), \ | ||
12 | __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_le16((ptr)), \ | ||
13 | __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_le32((ptr)), \ | ||
14 | __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_le64((ptr)), \ | ||
15 | __bad_unaligned_access_size())))); \ | ||
16 | })) | ||
17 | |||
18 | #define __get_unaligned_be(ptr) ((__force typeof(*(ptr)))({ \ | ||
19 | __builtin_choose_expr(sizeof(*(ptr)) == 1, *(ptr), \ | ||
20 | __builtin_choose_expr(sizeof(*(ptr)) == 2, get_unaligned_be16((ptr)), \ | ||
21 | __builtin_choose_expr(sizeof(*(ptr)) == 4, get_unaligned_be32((ptr)), \ | ||
22 | __builtin_choose_expr(sizeof(*(ptr)) == 8, get_unaligned_be64((ptr)), \ | ||
23 | __bad_unaligned_access_size())))); \ | ||
24 | })) | ||
25 | |||
26 | #define __put_unaligned_le(val, ptr) ({ \ | ||
27 | void *__gu_p = (ptr); \ | ||
28 | switch (sizeof(*(ptr))) { \ | ||
29 | case 1: \ | ||
30 | *(u8 *)__gu_p = (__force u8)(val); \ | ||
31 | break; \ | ||
32 | case 2: \ | ||
33 | put_unaligned_le16((__force u16)(val), __gu_p); \ | ||
34 | break; \ | ||
35 | case 4: \ | ||
36 | put_unaligned_le32((__force u32)(val), __gu_p); \ | ||
37 | break; \ | ||
38 | case 8: \ | ||
39 | put_unaligned_le64((__force u64)(val), __gu_p); \ | ||
40 | break; \ | ||
41 | default: \ | ||
42 | __bad_unaligned_access_size(); \ | ||
43 | break; \ | ||
44 | } \ | ||
45 | (void)0; }) | ||
46 | |||
47 | #define __put_unaligned_be(val, ptr) ({ \ | ||
48 | void *__gu_p = (ptr); \ | ||
49 | switch (sizeof(*(ptr))) { \ | ||
50 | case 1: \ | ||
51 | *(u8 *)__gu_p = (__force u8)(val); \ | ||
52 | break; \ | ||
53 | case 2: \ | ||
54 | put_unaligned_be16((__force u16)(val), __gu_p); \ | ||
55 | break; \ | ||
56 | case 4: \ | ||
57 | put_unaligned_be32((__force u32)(val), __gu_p); \ | ||
58 | break; \ | ||
59 | case 8: \ | ||
60 | put_unaligned_be64((__force u64)(val), __gu_p); \ | ||
61 | break; \ | ||
62 | default: \ | ||
63 | __bad_unaligned_access_size(); \ | ||
64 | break; \ | ||
65 | } \ | ||
66 | (void)0; }) | ||
67 | |||
68 | #endif /* _LINUX_UNALIGNED_GENERIC_H */ | ||
diff --git a/include/linux/unaligned/le_byteshift.h b/include/linux/unaligned/le_byteshift.h new file mode 100644 index 000000000000..59777e951baf --- /dev/null +++ b/include/linux/unaligned/le_byteshift.h | |||
@@ -0,0 +1,70 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_LE_BYTESHIFT_H | ||
2 | #define _LINUX_UNALIGNED_LE_BYTESHIFT_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | |||
6 | static inline u16 __get_unaligned_le16(const u8 *p) | ||
7 | { | ||
8 | return p[0] | p[1] << 8; | ||
9 | } | ||
10 | |||
11 | static inline u32 __get_unaligned_le32(const u8 *p) | ||
12 | { | ||
13 | return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; | ||
14 | } | ||
15 | |||
16 | static inline u64 __get_unaligned_le64(const u8 *p) | ||
17 | { | ||
18 | return (u64)__get_unaligned_le32(p + 4) << 32 | | ||
19 | __get_unaligned_le32(p); | ||
20 | } | ||
21 | |||
22 | static inline void __put_unaligned_le16(u16 val, u8 *p) | ||
23 | { | ||
24 | *p++ = val; | ||
25 | *p++ = val >> 8; | ||
26 | } | ||
27 | |||
28 | static inline void __put_unaligned_le32(u32 val, u8 *p) | ||
29 | { | ||
30 | __put_unaligned_le16(val >> 16, p + 2); | ||
31 | __put_unaligned_le16(val, p); | ||
32 | } | ||
33 | |||
34 | static inline void __put_unaligned_le64(u64 val, u8 *p) | ||
35 | { | ||
36 | __put_unaligned_le32(val >> 32, p + 4); | ||
37 | __put_unaligned_le32(val, p); | ||
38 | } | ||
39 | |||
40 | static inline u16 get_unaligned_le16(const void *p) | ||
41 | { | ||
42 | return __get_unaligned_le16((const u8 *)p); | ||
43 | } | ||
44 | |||
45 | static inline u32 get_unaligned_le32(const void *p) | ||
46 | { | ||
47 | return __get_unaligned_le32((const u8 *)p); | ||
48 | } | ||
49 | |||
50 | static inline u64 get_unaligned_le64(const void *p) | ||
51 | { | ||
52 | return __get_unaligned_le64((const u8 *)p); | ||
53 | } | ||
54 | |||
55 | static inline void put_unaligned_le16(u16 val, void *p) | ||
56 | { | ||
57 | __put_unaligned_le16(val, p); | ||
58 | } | ||
59 | |||
60 | static inline void put_unaligned_le32(u32 val, void *p) | ||
61 | { | ||
62 | __put_unaligned_le32(val, p); | ||
63 | } | ||
64 | |||
65 | static inline void put_unaligned_le64(u64 val, void *p) | ||
66 | { | ||
67 | __put_unaligned_le64(val, p); | ||
68 | } | ||
69 | |||
70 | #endif /* _LINUX_UNALIGNED_LE_BYTESHIFT_H */ | ||
diff --git a/include/linux/unaligned/le_memmove.h b/include/linux/unaligned/le_memmove.h new file mode 100644 index 000000000000..269849bee4ec --- /dev/null +++ b/include/linux/unaligned/le_memmove.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_LE_MEMMOVE_H | ||
2 | #define _LINUX_UNALIGNED_LE_MEMMOVE_H | ||
3 | |||
4 | #include <linux/unaligned/memmove.h> | ||
5 | |||
6 | static inline u16 get_unaligned_le16(const void *p) | ||
7 | { | ||
8 | return __get_unaligned_memmove16((const u8 *)p); | ||
9 | } | ||
10 | |||
11 | static inline u32 get_unaligned_le32(const void *p) | ||
12 | { | ||
13 | return __get_unaligned_memmove32((const u8 *)p); | ||
14 | } | ||
15 | |||
16 | static inline u64 get_unaligned_le64(const void *p) | ||
17 | { | ||
18 | return __get_unaligned_memmove64((const u8 *)p); | ||
19 | } | ||
20 | |||
21 | static inline void put_unaligned_le16(u16 val, void *p) | ||
22 | { | ||
23 | __put_unaligned_memmove16(val, p); | ||
24 | } | ||
25 | |||
26 | static inline void put_unaligned_le32(u32 val, void *p) | ||
27 | { | ||
28 | __put_unaligned_memmove32(val, p); | ||
29 | } | ||
30 | |||
31 | static inline void put_unaligned_le64(u64 val, void *p) | ||
32 | { | ||
33 | __put_unaligned_memmove64(val, p); | ||
34 | } | ||
35 | |||
36 | #endif /* _LINUX_UNALIGNED_LE_MEMMOVE_H */ | ||
diff --git a/include/linux/unaligned/le_struct.h b/include/linux/unaligned/le_struct.h new file mode 100644 index 000000000000..088c4572faa8 --- /dev/null +++ b/include/linux/unaligned/le_struct.h | |||
@@ -0,0 +1,36 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_LE_STRUCT_H | ||
2 | #define _LINUX_UNALIGNED_LE_STRUCT_H | ||
3 | |||
4 | #include <linux/unaligned/packed_struct.h> | ||
5 | |||
6 | static inline u16 get_unaligned_le16(const void *p) | ||
7 | { | ||
8 | return __get_unaligned_cpu16((const u8 *)p); | ||
9 | } | ||
10 | |||
11 | static inline u32 get_unaligned_le32(const void *p) | ||
12 | { | ||
13 | return __get_unaligned_cpu32((const u8 *)p); | ||
14 | } | ||
15 | |||
16 | static inline u64 get_unaligned_le64(const void *p) | ||
17 | { | ||
18 | return __get_unaligned_cpu64((const u8 *)p); | ||
19 | } | ||
20 | |||
21 | static inline void put_unaligned_le16(u16 val, void *p) | ||
22 | { | ||
23 | __put_unaligned_cpu16(val, p); | ||
24 | } | ||
25 | |||
26 | static inline void put_unaligned_le32(u32 val, void *p) | ||
27 | { | ||
28 | __put_unaligned_cpu32(val, p); | ||
29 | } | ||
30 | |||
31 | static inline void put_unaligned_le64(u64 val, void *p) | ||
32 | { | ||
33 | __put_unaligned_cpu64(val, p); | ||
34 | } | ||
35 | |||
36 | #endif /* _LINUX_UNALIGNED_LE_STRUCT_H */ | ||
diff --git a/include/linux/unaligned/memmove.h b/include/linux/unaligned/memmove.h new file mode 100644 index 000000000000..eeb5a779a4fd --- /dev/null +++ b/include/linux/unaligned/memmove.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_MEMMOVE_H | ||
2 | #define _LINUX_UNALIGNED_MEMMOVE_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | #include <linux/string.h> | ||
6 | |||
7 | /* Use memmove here, so gcc does not insert a __builtin_memcpy. */ | ||
8 | |||
9 | static inline u16 __get_unaligned_memmove16(const void *p) | ||
10 | { | ||
11 | u16 tmp; | ||
12 | memmove(&tmp, p, 2); | ||
13 | return tmp; | ||
14 | } | ||
15 | |||
16 | static inline u32 __get_unaligned_memmove32(const void *p) | ||
17 | { | ||
18 | u32 tmp; | ||
19 | memmove(&tmp, p, 4); | ||
20 | return tmp; | ||
21 | } | ||
22 | |||
23 | static inline u64 __get_unaligned_memmove64(const void *p) | ||
24 | { | ||
25 | u64 tmp; | ||
26 | memmove(&tmp, p, 8); | ||
27 | return tmp; | ||
28 | } | ||
29 | |||
30 | static inline void __put_unaligned_memmove16(u16 val, void *p) | ||
31 | { | ||
32 | memmove(p, &val, 2); | ||
33 | } | ||
34 | |||
35 | static inline void __put_unaligned_memmove32(u32 val, void *p) | ||
36 | { | ||
37 | memmove(p, &val, 4); | ||
38 | } | ||
39 | |||
40 | static inline void __put_unaligned_memmove64(u64 val, void *p) | ||
41 | { | ||
42 | memmove(p, &val, 8); | ||
43 | } | ||
44 | |||
45 | #endif /* _LINUX_UNALIGNED_MEMMOVE_H */ | ||
diff --git a/include/linux/unaligned/packed_struct.h b/include/linux/unaligned/packed_struct.h new file mode 100644 index 000000000000..2498bb9fe002 --- /dev/null +++ b/include/linux/unaligned/packed_struct.h | |||
@@ -0,0 +1,46 @@ | |||
1 | #ifndef _LINUX_UNALIGNED_PACKED_STRUCT_H | ||
2 | #define _LINUX_UNALIGNED_PACKED_STRUCT_H | ||
3 | |||
4 | #include <linux/kernel.h> | ||
5 | |||
6 | struct __una_u16 { u16 x __attribute__((packed)); }; | ||
7 | struct __una_u32 { u32 x __attribute__((packed)); }; | ||
8 | struct __una_u64 { u64 x __attribute__((packed)); }; | ||
9 | |||
10 | static inline u16 __get_unaligned_cpu16(const void *p) | ||
11 | { | ||
12 | const struct __una_u16 *ptr = (const struct __una_u16 *)p; | ||
13 | return ptr->x; | ||
14 | } | ||
15 | |||
16 | static inline u32 __get_unaligned_cpu32(const void *p) | ||
17 | { | ||
18 | const struct __una_u32 *ptr = (const struct __una_u32 *)p; | ||
19 | return ptr->x; | ||
20 | } | ||
21 | |||
22 | static inline u64 __get_unaligned_cpu64(const void *p) | ||
23 | { | ||
24 | const struct __una_u64 *ptr = (const struct __una_u64 *)p; | ||
25 | return ptr->x; | ||
26 | } | ||
27 | |||
28 | static inline void __put_unaligned_cpu16(u16 val, void *p) | ||
29 | { | ||
30 | struct __una_u16 *ptr = (struct __una_u16 *)p; | ||
31 | ptr->x = val; | ||
32 | } | ||
33 | |||
34 | static inline void __put_unaligned_cpu32(u32 val, void *p) | ||
35 | { | ||
36 | struct __una_u32 *ptr = (struct __una_u32 *)p; | ||
37 | ptr->x = val; | ||
38 | } | ||
39 | |||
40 | static inline void __put_unaligned_cpu64(u64 val, void *p) | ||
41 | { | ||
42 | struct __una_u64 *ptr = (struct __una_u64 *)p; | ||
43 | ptr->x = val; | ||
44 | } | ||
45 | |||
46 | #endif /* _LINUX_UNALIGNED_PACKED_STRUCT_H */ | ||
diff --git a/include/linux/usb.h b/include/linux/usb.h index 583e0481dfa0..c08689ea9b4b 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | struct usb_device; | 24 | struct usb_device; |
25 | struct usb_driver; | 25 | struct usb_driver; |
26 | struct wusb_dev; | ||
26 | 27 | ||
27 | /*-------------------------------------------------------------------------*/ | 28 | /*-------------------------------------------------------------------------*/ |
28 | 29 | ||
@@ -341,103 +342,146 @@ struct usb_bus { | |||
341 | 342 | ||
342 | struct usb_tt; | 343 | struct usb_tt; |
343 | 344 | ||
344 | /* | 345 | /** |
345 | * struct usb_device - kernel's representation of a USB device | 346 | * struct usb_device - kernel's representation of a USB device |
346 | * | 347 | * @devnum: device number; address on a USB bus |
347 | * FIXME: Write the kerneldoc! | 348 | * @devpath: device ID string for use in messages (e.g., /port/...) |
348 | * | 349 | * @state: device state: configured, not attached, etc. |
350 | * @speed: device speed: high/full/low (or error) | ||
351 | * @tt: Transaction Translator info; used with low/full speed dev, highspeed hub | ||
352 | * @ttport: device port on that tt hub | ||
353 | * @toggle: one bit for each endpoint, with ([0] = IN, [1] = OUT) endpoints | ||
354 | * @parent: our hub, unless we're the root | ||
355 | * @bus: bus we're part of | ||
356 | * @ep0: endpoint 0 data (default control pipe) | ||
357 | * @dev: generic device interface | ||
358 | * @descriptor: USB device descriptor | ||
359 | * @config: all of the device's configs | ||
360 | * @actconfig: the active configuration | ||
361 | * @ep_in: array of IN endpoints | ||
362 | * @ep_out: array of OUT endpoints | ||
363 | * @rawdescriptors: raw descriptors for each config | ||
364 | * @bus_mA: Current available from the bus | ||
365 | * @portnum: parent port number (origin 1) | ||
366 | * @level: number of USB hub ancestors | ||
367 | * @can_submit: URBs may be submitted | ||
368 | * @discon_suspended: disconnected while suspended | ||
369 | * @persist_enabled: USB_PERSIST enabled for this device | ||
370 | * @have_langid: whether string_langid is valid | ||
371 | * @authorized: policy has said we can use it; | ||
372 | * (user space) policy determines if we authorize this device to be | ||
373 | * used or not. By default, wired USB devices are authorized. | ||
374 | * WUSB devices are not, until we authorize them from user space. | ||
375 | * FIXME -- complete doc | ||
376 | * @authenticated: Crypto authentication passed | ||
377 | * @wusb: device is Wireless USB | ||
378 | * @string_langid: language ID for strings | ||
379 | * @product: iProduct string, if present (static) | ||
380 | * @manufacturer: iManufacturer string, if present (static) | ||
381 | * @serial: iSerialNumber string, if present (static) | ||
382 | * @filelist: usbfs files that are open to this device | ||
383 | * @usb_classdev: USB class device that was created for usbfs device | ||
384 | * access from userspace | ||
385 | * @usbfs_dentry: usbfs dentry entry for the device | ||
386 | * @maxchild: number of ports if hub | ||
387 | * @children: child devices - USB devices that are attached to this hub | ||
388 | * @pm_usage_cnt: usage counter for autosuspend | ||
389 | * @quirks: quirks of the whole device | ||
390 | * @urbnum: number of URBs submitted for the whole device | ||
391 | * @active_duration: total time device is not suspended | ||
392 | * @autosuspend: for delayed autosuspends | ||
393 | * @pm_mutex: protects PM operations | ||
394 | * @last_busy: time of last use | ||
395 | * @autosuspend_delay: in jiffies | ||
396 | * @connect_time: time device was first connected | ||
397 | * @auto_pm: autosuspend/resume in progress | ||
398 | * @do_remote_wakeup: remote wakeup should be enabled | ||
399 | * @reset_resume: needs reset instead of resume | ||
400 | * @autosuspend_disabled: autosuspend disabled by the user | ||
401 | * @autoresume_disabled: autoresume disabled by the user | ||
402 | * @skip_sys_resume: skip the next system resume | ||
403 | * | ||
404 | * Notes: | ||
349 | * Usbcore drivers should not set usbdev->state directly. Instead use | 405 | * Usbcore drivers should not set usbdev->state directly. Instead use |
350 | * usb_set_device_state(). | 406 | * usb_set_device_state(). |
351 | * | ||
352 | * @authorized: (user space) policy determines if we authorize this | ||
353 | * device to be used or not. By default, wired USB | ||
354 | * devices are authorized. WUSB devices are not, until we | ||
355 | * authorize them from user space. FIXME -- complete doc | ||
356 | */ | 407 | */ |
357 | struct usb_device { | 408 | struct usb_device { |
358 | int devnum; /* Address on USB bus */ | 409 | int devnum; |
359 | char devpath [16]; /* Use in messages: /port/port/... */ | 410 | char devpath [16]; |
360 | enum usb_device_state state; /* configured, not attached, etc */ | 411 | enum usb_device_state state; |
361 | enum usb_device_speed speed; /* high/full/low (or error) */ | 412 | enum usb_device_speed speed; |
362 | 413 | ||
363 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ | 414 | struct usb_tt *tt; |
364 | int ttport; /* device port on that tt hub */ | 415 | int ttport; |
365 | 416 | ||
366 | unsigned int toggle[2]; /* one bit for each endpoint | 417 | unsigned int toggle[2]; |
367 | * ([0] = IN, [1] = OUT) */ | ||
368 | 418 | ||
369 | struct usb_device *parent; /* our hub, unless we're the root */ | 419 | struct usb_device *parent; |
370 | struct usb_bus *bus; /* Bus we're part of */ | 420 | struct usb_bus *bus; |
371 | struct usb_host_endpoint ep0; | 421 | struct usb_host_endpoint ep0; |
372 | 422 | ||
373 | struct device dev; /* Generic device interface */ | 423 | struct device dev; |
374 | 424 | ||
375 | struct usb_device_descriptor descriptor;/* Descriptor */ | 425 | struct usb_device_descriptor descriptor; |
376 | struct usb_host_config *config; /* All of the configs */ | 426 | struct usb_host_config *config; |
377 | 427 | ||
378 | struct usb_host_config *actconfig;/* the active configuration */ | 428 | struct usb_host_config *actconfig; |
379 | struct usb_host_endpoint *ep_in[16]; | 429 | struct usb_host_endpoint *ep_in[16]; |
380 | struct usb_host_endpoint *ep_out[16]; | 430 | struct usb_host_endpoint *ep_out[16]; |
381 | 431 | ||
382 | char **rawdescriptors; /* Raw descriptors for each config */ | 432 | char **rawdescriptors; |
383 | 433 | ||
384 | unsigned short bus_mA; /* Current available from the bus */ | 434 | unsigned short bus_mA; |
385 | u8 portnum; /* Parent port number (origin 1) */ | 435 | u8 portnum; |
386 | u8 level; /* Number of USB hub ancestors */ | 436 | u8 level; |
387 | 437 | ||
388 | unsigned can_submit:1; /* URBs may be submitted */ | 438 | unsigned can_submit:1; |
389 | unsigned discon_suspended:1; /* Disconnected while suspended */ | 439 | unsigned discon_suspended:1; |
390 | unsigned have_langid:1; /* whether string_langid is valid */ | 440 | unsigned persist_enabled:1; |
391 | unsigned authorized:1; /* Policy has said we can use it */ | 441 | unsigned have_langid:1; |
392 | unsigned wusb:1; /* Device is Wireless USB */ | 442 | unsigned authorized:1; |
393 | int string_langid; /* language ID for strings */ | 443 | unsigned authenticated:1; |
444 | unsigned wusb:1; | ||
445 | int string_langid; | ||
394 | 446 | ||
395 | /* static strings from the device */ | 447 | /* static strings from the device */ |
396 | char *product; /* iProduct string, if present */ | 448 | char *product; |
397 | char *manufacturer; /* iManufacturer string, if present */ | 449 | char *manufacturer; |
398 | char *serial; /* iSerialNumber string, if present */ | 450 | char *serial; |
399 | 451 | ||
400 | struct list_head filelist; | 452 | struct list_head filelist; |
401 | #ifdef CONFIG_USB_DEVICE_CLASS | 453 | #ifdef CONFIG_USB_DEVICE_CLASS |
402 | struct device *usb_classdev; | 454 | struct device *usb_classdev; |
403 | #endif | 455 | #endif |
404 | #ifdef CONFIG_USB_DEVICEFS | 456 | #ifdef CONFIG_USB_DEVICEFS |
405 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ | 457 | struct dentry *usbfs_dentry; |
406 | #endif | 458 | #endif |
407 | /* | ||
408 | * Child devices - these can be either new devices | ||
409 | * (if this is a hub device), or different instances | ||
410 | * of this same device. | ||
411 | * | ||
412 | * Each instance needs its own set of data structures. | ||
413 | */ | ||
414 | 459 | ||
415 | int maxchild; /* Number of ports if hub */ | 460 | int maxchild; |
416 | struct usb_device *children[USB_MAXCHILDREN]; | 461 | struct usb_device *children[USB_MAXCHILDREN]; |
417 | 462 | ||
418 | int pm_usage_cnt; /* usage counter for autosuspend */ | 463 | int pm_usage_cnt; |
419 | u32 quirks; /* quirks of the whole device */ | 464 | u32 quirks; |
420 | atomic_t urbnum; /* number of URBs submitted for | 465 | atomic_t urbnum; |
421 | the whole device */ | ||
422 | 466 | ||
423 | unsigned long active_duration; /* total time device is not suspended */ | 467 | unsigned long active_duration; |
424 | 468 | ||
425 | #ifdef CONFIG_PM | 469 | #ifdef CONFIG_PM |
426 | struct delayed_work autosuspend; /* for delayed autosuspends */ | 470 | struct delayed_work autosuspend; |
427 | struct mutex pm_mutex; /* protects PM operations */ | 471 | struct mutex pm_mutex; |
428 | 472 | ||
429 | unsigned long last_busy; /* time of last use */ | 473 | unsigned long last_busy; |
430 | int autosuspend_delay; /* in jiffies */ | 474 | int autosuspend_delay; |
431 | unsigned long connect_time; /* time device was first connected */ | 475 | unsigned long connect_time; |
432 | 476 | ||
433 | unsigned auto_pm:1; /* autosuspend/resume in progress */ | 477 | unsigned auto_pm:1; |
434 | unsigned do_remote_wakeup:1; /* remote wakeup should be enabled */ | 478 | unsigned do_remote_wakeup:1; |
435 | unsigned reset_resume:1; /* needs reset instead of resume */ | 479 | unsigned reset_resume:1; |
436 | unsigned persist_enabled:1; /* USB_PERSIST enabled for this dev */ | 480 | unsigned autosuspend_disabled:1; |
437 | unsigned autosuspend_disabled:1; /* autosuspend and autoresume */ | 481 | unsigned autoresume_disabled:1; |
438 | unsigned autoresume_disabled:1; /* disabled by the user */ | 482 | unsigned skip_sys_resume:1; |
439 | unsigned skip_sys_resume:1; /* skip the next system resume */ | ||
440 | #endif | 483 | #endif |
484 | struct wusb_dev *wusb_dev; | ||
441 | }; | 485 | }; |
442 | #define to_usb_device(d) container_of(d, struct usb_device, dev) | 486 | #define to_usb_device(d) container_of(d, struct usb_device, dev) |
443 | 487 | ||
@@ -898,10 +942,11 @@ struct usbdrv_wrap { | |||
898 | * and should normally be the same as the module name. | 942 | * and should normally be the same as the module name. |
899 | * @probe: Called to see if the driver is willing to manage a particular | 943 | * @probe: Called to see if the driver is willing to manage a particular |
900 | * interface on a device. If it is, probe returns zero and uses | 944 | * interface on a device. If it is, probe returns zero and uses |
901 | * dev_set_drvdata() to associate driver-specific data with the | 945 | * usb_set_intfdata() to associate driver-specific data with the |
902 | * interface. It may also use usb_set_interface() to specify the | 946 | * interface. It may also use usb_set_interface() to specify the |
903 | * appropriate altsetting. If unwilling to manage the interface, | 947 | * appropriate altsetting. If unwilling to manage the interface, |
904 | * return a negative errno value. | 948 | * return -ENODEV, if genuine IO errors occured, an appropriate |
949 | * negative errno value. | ||
905 | * @disconnect: Called when the interface is no longer accessible, usually | 950 | * @disconnect: Called when the interface is no longer accessible, usually |
906 | * because its device has been (or is being) disconnected or the | 951 | * because its device has been (or is being) disconnected or the |
907 | * driver module is being unloaded. | 952 | * driver module is being unloaded. |
@@ -916,10 +961,7 @@ struct usbdrv_wrap { | |||
916 | * @pre_reset: Called by usb_reset_composite_device() when the device | 961 | * @pre_reset: Called by usb_reset_composite_device() when the device |
917 | * is about to be reset. | 962 | * is about to be reset. |
918 | * @post_reset: Called by usb_reset_composite_device() after the device | 963 | * @post_reset: Called by usb_reset_composite_device() after the device |
919 | * has been reset, or in lieu of @resume following a reset-resume | 964 | * has been reset |
920 | * (i.e., the device is reset instead of being resumed, as might | ||
921 | * happen if power was lost). The second argument tells which is | ||
922 | * the reason. | ||
923 | * @id_table: USB drivers use ID table to support hotplugging. | 965 | * @id_table: USB drivers use ID table to support hotplugging. |
924 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set | 966 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set |
925 | * or your driver's probe function will never get called. | 967 | * or your driver's probe function will never get called. |
@@ -1411,6 +1453,7 @@ extern int usb_submit_urb(struct urb *urb, gfp_t mem_flags); | |||
1411 | extern int usb_unlink_urb(struct urb *urb); | 1453 | extern int usb_unlink_urb(struct urb *urb); |
1412 | extern void usb_kill_urb(struct urb *urb); | 1454 | extern void usb_kill_urb(struct urb *urb); |
1413 | extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); | 1455 | extern void usb_kill_anchored_urbs(struct usb_anchor *anchor); |
1456 | extern void usb_unlink_anchored_urbs(struct usb_anchor *anchor); | ||
1414 | extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor); | 1457 | extern void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor); |
1415 | extern void usb_unanchor_urb(struct urb *urb); | 1458 | extern void usb_unanchor_urb(struct urb *urb); |
1416 | extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, | 1459 | extern int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, |
@@ -1661,13 +1704,12 @@ extern void usb_unregister_notify(struct notifier_block *nb); | |||
1661 | #define dbg(format, arg...) do {} while (0) | 1704 | #define dbg(format, arg...) do {} while (0) |
1662 | #endif | 1705 | #endif |
1663 | 1706 | ||
1664 | #define err(format, arg...) printk(KERN_ERR "%s: " format "\n" , \ | 1707 | #define err(format, arg...) printk(KERN_ERR KBUILD_MODNAME ": " \ |
1665 | __FILE__ , ## arg) | 1708 | format "\n" , ## arg) |
1666 | #define info(format, arg...) printk(KERN_INFO "%s: " format "\n" , \ | 1709 | #define info(format, arg...) printk(KERN_INFO KBUILD_MODNAME ": " \ |
1667 | __FILE__ , ## arg) | 1710 | format "\n" , ## arg) |
1668 | #define warn(format, arg...) printk(KERN_WARNING "%s: " format "\n" , \ | 1711 | #define warn(format, arg...) printk(KERN_WARNING KBUILD_MODNAME ": " \ |
1669 | __FILE__ , ## arg) | 1712 | format "\n" , ## arg) |
1670 | |||
1671 | 1713 | ||
1672 | #endif /* __KERNEL__ */ | 1714 | #endif /* __KERNEL__ */ |
1673 | 1715 | ||
diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index 2dfeef16b221..8cb025fef634 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h | |||
@@ -50,4 +50,4 @@ struct usb_ac_header_descriptor_##n { \ | |||
50 | __u8 baInterfaceNr[n]; \ | 50 | __u8 baInterfaceNr[n]; \ |
51 | } __attribute__ ((packed)) | 51 | } __attribute__ ((packed)) |
52 | 52 | ||
53 | #endif | 53 | #endif /* __LINUX_USB_AUDIO_H */ |
diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h index 94ee4ecf0564..71e52f2f6a38 100644 --- a/include/linux/usb/cdc.h +++ b/include/linux/usb/cdc.h | |||
@@ -6,6 +6,9 @@ | |||
6 | * firmware based USB peripherals. | 6 | * firmware based USB peripherals. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __LINUX_USB_CDC_H | ||
10 | #define __LINUX_USB_CDC_H | ||
11 | |||
9 | #define USB_CDC_SUBCLASS_ACM 0x02 | 12 | #define USB_CDC_SUBCLASS_ACM 0x02 |
10 | #define USB_CDC_SUBCLASS_ETHERNET 0x06 | 13 | #define USB_CDC_SUBCLASS_ETHERNET 0x06 |
11 | #define USB_CDC_SUBCLASS_WHCM 0x08 | 14 | #define USB_CDC_SUBCLASS_WHCM 0x08 |
@@ -221,3 +224,4 @@ struct usb_cdc_notification { | |||
221 | __le16 wLength; | 224 | __le16 wLength; |
222 | } __attribute__ ((packed)); | 225 | } __attribute__ ((packed)); |
223 | 226 | ||
227 | #endif /* __LINUX_USB_CDC_H */ | ||
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index 6169438ec5a2..7e0d3084f76c 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
@@ -66,8 +66,8 @@ | |||
66 | #define USB_RECIP_ENDPOINT 0x02 | 66 | #define USB_RECIP_ENDPOINT 0x02 |
67 | #define USB_RECIP_OTHER 0x03 | 67 | #define USB_RECIP_OTHER 0x03 |
68 | /* From Wireless USB 1.0 */ | 68 | /* From Wireless USB 1.0 */ |
69 | #define USB_RECIP_PORT 0x04 | 69 | #define USB_RECIP_PORT 0x04 |
70 | #define USB_RECIP_RPIPE 0x05 | 70 | #define USB_RECIP_RPIPE 0x05 |
71 | 71 | ||
72 | /* | 72 | /* |
73 | * Standard requests, for the bRequest field of a SETUP packet. | 73 | * Standard requests, for the bRequest field of a SETUP packet. |
@@ -102,10 +102,16 @@ | |||
102 | #define USB_REQ_LOOPBACK_DATA_READ 0x16 | 102 | #define USB_REQ_LOOPBACK_DATA_READ 0x16 |
103 | #define USB_REQ_SET_INTERFACE_DS 0x17 | 103 | #define USB_REQ_SET_INTERFACE_DS 0x17 |
104 | 104 | ||
105 | /* The Link Power Mangement (LPM) ECN defines USB_REQ_TEST_AND_SET command, | ||
106 | * used by hubs to put ports into a new L1 suspend state, except that it | ||
107 | * forgot to define its number ... | ||
108 | */ | ||
109 | |||
105 | /* | 110 | /* |
106 | * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and | 111 | * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and |
107 | * are read as a bit array returned by USB_REQ_GET_STATUS. (So there | 112 | * are read as a bit array returned by USB_REQ_GET_STATUS. (So there |
108 | * are at most sixteen features of each type.) | 113 | * are at most sixteen features of each type.) Hubs may also support a |
114 | * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend. | ||
109 | */ | 115 | */ |
110 | #define USB_DEVICE_SELF_POWERED 0 /* (read only) */ | 116 | #define USB_DEVICE_SELF_POWERED 0 /* (read only) */ |
111 | #define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ | 117 | #define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */ |
@@ -180,6 +186,7 @@ struct usb_ctrlrequest { | |||
180 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 | 186 | #define USB_DT_WIRELESS_ENDPOINT_COMP 0x11 |
181 | #define USB_DT_WIRE_ADAPTER 0x21 | 187 | #define USB_DT_WIRE_ADAPTER 0x21 |
182 | #define USB_DT_RPIPE 0x22 | 188 | #define USB_DT_RPIPE 0x22 |
189 | #define USB_DT_CS_RADIO_CONTROL 0x23 | ||
183 | 190 | ||
184 | /* Conventional codes for class-specific descriptors. The convention is | 191 | /* Conventional codes for class-specific descriptors. The convention is |
185 | * defined in the USB "Common Class" Spec (3.11). Individual class specs | 192 | * defined in the USB "Common Class" Spec (3.11). Individual class specs |
@@ -574,7 +581,9 @@ enum usb_device_state { | |||
574 | /* NOTE: there are actually four different SUSPENDED | 581 | /* NOTE: there are actually four different SUSPENDED |
575 | * states, returning to POWERED, DEFAULT, ADDRESS, or | 582 | * states, returning to POWERED, DEFAULT, ADDRESS, or |
576 | * CONFIGURED respectively when SOF tokens flow again. | 583 | * CONFIGURED respectively when SOF tokens flow again. |
584 | * At this level there's no difference between L1 and L2 | ||
585 | * suspend states. (L2 being original USB 1.1 suspend.) | ||
577 | */ | 586 | */ |
578 | }; | 587 | }; |
579 | 588 | ||
580 | #endif /* __LINUX_USB_CH9_H */ | 589 | #endif /* __LINUX_USB_CH9_H */ |
diff --git a/include/linux/usb/g_printer.h b/include/linux/usb/g_printer.h index 0c5ea1e3eb98..6178fde50f74 100644 --- a/include/linux/usb/g_printer.h +++ b/include/linux/usb/g_printer.h | |||
@@ -18,6 +18,8 @@ | |||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef __LINUX_USB_G_PRINTER_H | ||
22 | #define __LINUX_USB_G_PRINTER_H | ||
21 | 23 | ||
22 | #define PRINTER_NOT_ERROR 0x08 | 24 | #define PRINTER_NOT_ERROR 0x08 |
23 | #define PRINTER_SELECTED 0x10 | 25 | #define PRINTER_SELECTED 0x10 |
@@ -29,3 +31,5 @@ | |||
29 | */ | 31 | */ |
30 | #define GADGET_GET_PRINTER_STATUS _IOR('g', 0x21, unsigned char) | 32 | #define GADGET_GET_PRINTER_STATUS _IOR('g', 0x21, unsigned char) |
31 | #define GADGET_SET_PRINTER_STATUS _IOWR('g', 0x22, unsigned char) | 33 | #define GADGET_SET_PRINTER_STATUS _IOWR('g', 0x22, unsigned char) |
34 | |||
35 | #endif /* __LINUX_USB_G_PRINTER_H */ | ||
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index f3295296b435..d8128f7102c9 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
@@ -846,4 +846,4 @@ extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *, | |||
846 | 846 | ||
847 | extern void usb_ep_autoconfig_reset(struct usb_gadget *) __devinit; | 847 | extern void usb_ep_autoconfig_reset(struct usb_gadget *) __devinit; |
848 | 848 | ||
849 | #endif /* __LINUX_USB_GADGET_H */ | 849 | #endif /* __LINUX_USB_GADGET_H */ |
diff --git a/include/linux/usb/gadgetfs.h b/include/linux/usb/gadgetfs.h index c291ab1af747..ea45f265ec05 100644 --- a/include/linux/usb/gadgetfs.h +++ b/include/linux/usb/gadgetfs.h | |||
@@ -1,11 +1,3 @@ | |||
1 | #ifndef __LINUX_USB_GADGETFS_H | ||
2 | #define __LINUX_USB_GADGETFS_H | ||
3 | |||
4 | #include <asm/types.h> | ||
5 | #include <asm/ioctl.h> | ||
6 | |||
7 | #include <linux/usb/ch9.h> | ||
8 | |||
9 | /* | 1 | /* |
10 | * Filesystem based user-mode API to USB Gadget controller hardware | 2 | * Filesystem based user-mode API to USB Gadget controller hardware |
11 | * | 3 | * |
@@ -23,6 +15,14 @@ | |||
23 | * then performing data transfers by reading or writing. | 15 | * then performing data transfers by reading or writing. |
24 | */ | 16 | */ |
25 | 17 | ||
18 | #ifndef __LINUX_USB_GADGETFS_H | ||
19 | #define __LINUX_USB_GADGETFS_H | ||
20 | |||
21 | #include <asm/types.h> | ||
22 | #include <asm/ioctl.h> | ||
23 | |||
24 | #include <linux/usb/ch9.h> | ||
25 | |||
26 | /* | 26 | /* |
27 | * Events are delivered on the ep0 file descriptor, when the user mode driver | 27 | * Events are delivered on the ep0 file descriptor, when the user mode driver |
28 | * reads from this file descriptor after writing the descriptors. Don't | 28 | * reads from this file descriptor after writing the descriptors. Don't |
diff --git a/include/linux/usb/input.h b/include/linux/usb/input.h index 716e0cc16043..0e010b220e85 100644 --- a/include/linux/usb/input.h +++ b/include/linux/usb/input.h | |||
@@ -1,6 +1,3 @@ | |||
1 | #ifndef __USB_INPUT_H | ||
2 | #define __USB_INPUT_H | ||
3 | |||
4 | /* | 1 | /* |
5 | * Copyright (C) 2005 Dmitry Torokhov | 2 | * Copyright (C) 2005 Dmitry Torokhov |
6 | * | 3 | * |
@@ -9,6 +6,9 @@ | |||
9 | * the Free Software Foundation. | 6 | * the Free Software Foundation. |
10 | */ | 7 | */ |
11 | 8 | ||
9 | #ifndef __LINUX_USB_INPUT_H | ||
10 | #define __LINUX_USB_INPUT_H | ||
11 | |||
12 | #include <linux/usb.h> | 12 | #include <linux/usb.h> |
13 | #include <linux/input.h> | 13 | #include <linux/input.h> |
14 | #include <asm/byteorder.h> | 14 | #include <asm/byteorder.h> |
@@ -22,4 +22,4 @@ usb_to_input_id(const struct usb_device *dev, struct input_id *id) | |||
22 | id->version = le16_to_cpu(dev->descriptor.bcdDevice); | 22 | id->version = le16_to_cpu(dev->descriptor.bcdDevice); |
23 | } | 23 | } |
24 | 24 | ||
25 | #endif | 25 | #endif /* __LINUX_USB_INPUT_H */ |
diff --git a/include/linux/usb/iowarrior.h b/include/linux/usb/iowarrior.h index de6f380e17a2..4fd6513d564c 100644 --- a/include/linux/usb/iowarrior.h +++ b/include/linux/usb/iowarrior.h | |||
@@ -1,5 +1,5 @@ | |||
1 | #ifndef _IOWARRIOR_H_ | 1 | #ifndef __LINUX_USB_IOWARRIOR_H |
2 | #define _IOWARRIOR_H_ | 2 | #define __LINUX_USB_IOWARRIOR_H |
3 | 3 | ||
4 | #define CODEMERCS_MAGIC_NUMBER 0xC0 /* like COde Mercenaries */ | 4 | #define CODEMERCS_MAGIC_NUMBER 0xC0 /* like COde Mercenaries */ |
5 | 5 | ||
@@ -39,4 +39,4 @@ struct iowarrior_info { | |||
39 | */ | 39 | */ |
40 | #define IOW_GETINFO _IOR(CODEMERCS_MAGIC_NUMBER, 3, struct iowarrior_info) | 40 | #define IOW_GETINFO _IOR(CODEMERCS_MAGIC_NUMBER, 3, struct iowarrior_info) |
41 | 41 | ||
42 | #endif /* _IOWARRIOR_H_ */ | 42 | #endif /* __LINUX_USB_IOWARRIOR_H */ |
diff --git a/include/linux/usb/isp116x.h b/include/linux/usb/isp116x.h index 67d2826f34fe..96ca114e88d0 100644 --- a/include/linux/usb/isp116x.h +++ b/include/linux/usb/isp116x.h | |||
@@ -1,9 +1,11 @@ | |||
1 | |||
2 | /* | 1 | /* |
3 | * Board initialization code should put one of these into dev->platform_data | 2 | * Board initialization code should put one of these into dev->platform_data |
4 | * and place the isp116x onto platform_bus. | 3 | * and place the isp116x onto platform_bus. |
5 | */ | 4 | */ |
6 | 5 | ||
6 | #ifndef __LINUX_USB_ISP116X_H | ||
7 | #define __LINUX_USB_ISP116X_H | ||
8 | |||
7 | struct isp116x_platform_data { | 9 | struct isp116x_platform_data { |
8 | /* Enable internal resistors on downstream ports */ | 10 | /* Enable internal resistors on downstream ports */ |
9 | unsigned sel15Kres:1; | 11 | unsigned sel15Kres:1; |
@@ -27,3 +29,5 @@ struct isp116x_platform_data { | |||
27 | */ | 29 | */ |
28 | void (*delay) (struct device *dev, int delay); | 30 | void (*delay) (struct device *dev, int delay); |
29 | }; | 31 | }; |
32 | |||
33 | #endif /* __LINUX_USB_ISP116X_H */ | ||
diff --git a/include/linux/usb/midi.h b/include/linux/usb/midi.h index 80624c562921..1d1040865661 100644 --- a/include/linux/usb/midi.h +++ b/include/linux/usb/midi.h | |||
@@ -109,4 +109,4 @@ struct usb_ms_endpoint_descriptor_##n { \ | |||
109 | __u8 baAssocJackID[n]; \ | 109 | __u8 baAssocJackID[n]; \ |
110 | } __attribute__ ((packed)) | 110 | } __attribute__ ((packed)) |
111 | 111 | ||
112 | #endif | 112 | #endif /* __LINUX_USB_MIDI_H */ |
diff --git a/include/linux/usb/net2280.h b/include/linux/usb/net2280.h index ec897cb844ab..96ca549a778d 100644 --- a/include/linux/usb/net2280.h +++ b/include/linux/usb/net2280.h | |||
@@ -1,11 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * NetChip 2280 high/full speed USB device controller. | 2 | * NetChip 2280 high/full speed USB device controller. |
3 | * Unlike many such controllers, this one talks PCI. | 3 | * Unlike many such controllers, this one talks PCI. |
4 | */ | 4 | * |
5 | #ifndef __LINUX_USB_NET2280_H | ||
6 | #define __LINUX_USB_NET2280_H | ||
7 | |||
8 | /* | ||
9 | * Copyright (C) 2002 NetChip Technology, Inc. (http://www.netchip.com) | 5 | * Copyright (C) 2002 NetChip Technology, Inc. (http://www.netchip.com) |
10 | * Copyright (C) 2003 David Brownell | 6 | * Copyright (C) 2003 David Brownell |
11 | * | 7 | * |
@@ -24,6 +20,9 @@ | |||
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
25 | */ | 21 | */ |
26 | 22 | ||
23 | #ifndef __LINUX_USB_NET2280_H | ||
24 | #define __LINUX_USB_NET2280_H | ||
25 | |||
27 | /*-------------------------------------------------------------------------*/ | 26 | /*-------------------------------------------------------------------------*/ |
28 | 27 | ||
29 | /* NET2280 MEMORY MAPPED REGISTERS | 28 | /* NET2280 MEMORY MAPPED REGISTERS |
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h index e007074ebe41..1db25d152ad8 100644 --- a/include/linux/usb/otg.h +++ b/include/linux/usb/otg.h | |||
@@ -1,11 +1,13 @@ | |||
1 | /* USB OTG (On The Go) defines */ | 1 | /* USB OTG (On The Go) defines */ |
2 | |||
3 | /* | 2 | /* |
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 |
5 | * (for either host or peripheral roles) don't use these calls; they | 5 | * (for either host or peripheral roles) don't use these calls; they |
6 | * continue to use just usb_device and usb_gadget. | 6 | * continue to use just usb_device and usb_gadget. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __LINUX_USB_OTG_H | ||
10 | #define __LINUX_USB_OTG_H | ||
9 | 11 | ||
10 | /* OTG defines lots of enumeration states before device reset */ | 12 | /* OTG defines lots of enumeration states before device reset */ |
11 | enum usb_otg_state { | 13 | enum usb_otg_state { |
@@ -129,3 +131,5 @@ otg_start_srp(struct otg_transceiver *otg) | |||
129 | 131 | ||
130 | /* for OTG controller drivers (and maybe other stuff) */ | 132 | /* for OTG controller drivers (and maybe other stuff) */ |
131 | extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num); | 133 | extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num); |
134 | |||
135 | #endif /* __LINUX_USB_OTG_H */ | ||
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h index 1f999ec8d08c..7f6c603db654 100644 --- a/include/linux/usb/quirks.h +++ b/include/linux/usb/quirks.h | |||
@@ -4,6 +4,9 @@ | |||
4 | * belong here. | 4 | * belong here. |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef __LINUX_USB_QUIRKS_H | ||
8 | #define __LINUX_USB_QUIRKS_H | ||
9 | |||
7 | /* string descriptors must not be fetched using a 255-byte read */ | 10 | /* string descriptors must not be fetched using a 255-byte read */ |
8 | #define USB_QUIRK_STRING_FETCH_255 0x00000001 | 11 | #define USB_QUIRK_STRING_FETCH_255 0x00000001 |
9 | 12 | ||
@@ -12,3 +15,5 @@ | |||
12 | 15 | ||
13 | /* device can't handle Set-Interface requests */ | 16 | /* device can't handle Set-Interface requests */ |
14 | #define USB_QUIRK_NO_SET_INTF 0x00000004 | 17 | #define USB_QUIRK_NO_SET_INTF 0x00000004 |
18 | |||
19 | #endif /* __LINUX_USB_QUIRKS_H */ | ||
diff --git a/include/linux/usb/rndis_host.h b/include/linux/usb/rndis_host.h index edc1d4a0e272..29d6458ecb8d 100644 --- a/include/linux/usb/rndis_host.h +++ b/include/linux/usb/rndis_host.h | |||
@@ -17,10 +17,8 @@ | |||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ | 18 | */ |
19 | 19 | ||
20 | 20 | #ifndef __LINUX_USB_RNDIS_HOST_H | |
21 | #ifndef __RNDIS_HOST_H | 21 | #define __LINUX_USB_RNDIS_HOST_H |
22 | #define __RNDIS_HOST_H | ||
23 | |||
24 | 22 | ||
25 | /* | 23 | /* |
26 | * CONTROL uses CDC "encapsulated commands" with funky notifications. | 24 | * CONTROL uses CDC "encapsulated commands" with funky notifications. |
@@ -270,5 +268,4 @@ extern int rndis_rx_fixup(struct usbnet *dev, struct sk_buff *skb); | |||
270 | extern struct sk_buff * | 268 | extern struct sk_buff * |
271 | rndis_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags); | 269 | rndis_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags); |
272 | 270 | ||
273 | #endif /* __RNDIS_HOST_H */ | 271 | #endif /* __LINUX_USB_RNDIS_HOST_H */ |
274 | |||
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 21b4a1c6f585..8f891cbaf9ab 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h | |||
@@ -10,7 +10,6 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | 12 | ||
13 | |||
14 | #ifndef __LINUX_USB_SERIAL_H | 13 | #ifndef __LINUX_USB_SERIAL_H |
15 | #define __LINUX_USB_SERIAL_H | 14 | #define __LINUX_USB_SERIAL_H |
16 | 15 | ||
@@ -146,8 +145,6 @@ struct usb_serial { | |||
146 | }; | 145 | }; |
147 | #define to_usb_serial(d) container_of(d, struct usb_serial, kref) | 146 | #define to_usb_serial(d) container_of(d, struct usb_serial, kref) |
148 | 147 | ||
149 | #define NUM_DONT_CARE 99 | ||
150 | |||
151 | /* get and set the serial private data pointer helper functions */ | 148 | /* get and set the serial private data pointer helper functions */ |
152 | static inline void *usb_get_serial_data(struct usb_serial *serial) | 149 | static inline void *usb_get_serial_data(struct usb_serial *serial) |
153 | { | 150 | { |
@@ -165,18 +162,6 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data) | |||
165 | * used in the syslog messages when a device is inserted or removed. | 162 | * used in the syslog messages when a device is inserted or removed. |
166 | * @id_table: pointer to a list of usb_device_id structures that define all | 163 | * @id_table: pointer to a list of usb_device_id structures that define all |
167 | * of the devices this structure can support. | 164 | * of the devices this structure can support. |
168 | * @num_interrupt_in: If a device doesn't have this many interrupt-in | ||
169 | * endpoints, it won't be sent to the driver's attach() method. | ||
170 | * (But it might still be sent to the probe() method.) | ||
171 | * @num_interrupt_out: If a device doesn't have this many interrupt-out | ||
172 | * endpoints, it won't be sent to the driver's attach() method. | ||
173 | * (But it might still be sent to the probe() method.) | ||
174 | * @num_bulk_in: If a device doesn't have this many bulk-in | ||
175 | * endpoints, it won't be sent to the driver's attach() method. | ||
176 | * (But it might still be sent to the probe() method.) | ||
177 | * @num_bulk_out: If a device doesn't have this many bulk-out | ||
178 | * endpoints, it won't be sent to the driver's attach() method. | ||
179 | * (But it might still be sent to the probe() method.) | ||
180 | * @num_ports: the number of different ports this device will have. | 165 | * @num_ports: the number of different ports this device will have. |
181 | * @calc_num_ports: pointer to a function to determine how many ports this | 166 | * @calc_num_ports: pointer to a function to determine how many ports this |
182 | * device has dynamically. It will be called after the probe() | 167 | * device has dynamically. It will be called after the probe() |
@@ -212,10 +197,6 @@ static inline void usb_set_serial_data(struct usb_serial *serial, void *data) | |||
212 | struct usb_serial_driver { | 197 | struct usb_serial_driver { |
213 | const char *description; | 198 | const char *description; |
214 | const struct usb_device_id *id_table; | 199 | const struct usb_device_id *id_table; |
215 | char num_interrupt_in; | ||
216 | char num_interrupt_out; | ||
217 | char num_bulk_in; | ||
218 | char num_bulk_out; | ||
219 | char num_ports; | 200 | char num_ports; |
220 | 201 | ||
221 | struct list_head driver_list; | 202 | struct list_head driver_list; |
@@ -340,5 +321,5 @@ static inline void usb_serial_debug_data(int debug, | |||
340 | 321 | ||
341 | 322 | ||
342 | 323 | ||
343 | #endif /* ifdef __LINUX_USB_SERIAL_H */ | 324 | #endif /* __LINUX_USB_SERIAL_H */ |
344 | 325 | ||
diff --git a/include/linux/usb/sl811.h b/include/linux/usb/sl811.h index 877373da410d..3afe4d16fcef 100644 --- a/include/linux/usb/sl811.h +++ b/include/linux/usb/sl811.h | |||
@@ -1,9 +1,11 @@ | |||
1 | |||
2 | /* | 1 | /* |
3 | * board initialization should put one of these into dev->platform_data | 2 | * board initialization should put one of these into dev->platform_data |
4 | * and place the sl811hs onto platform_bus named "sl811-hcd". | 3 | * and place the sl811hs onto platform_bus named "sl811-hcd". |
5 | */ | 4 | */ |
6 | 5 | ||
6 | #ifndef __LINUX_USB_SL811_H | ||
7 | #define __LINUX_USB_SL811_H | ||
8 | |||
7 | struct sl811_platform_data { | 9 | struct sl811_platform_data { |
8 | unsigned can_wakeup:1; | 10 | unsigned can_wakeup:1; |
9 | 11 | ||
@@ -24,3 +26,4 @@ struct sl811_platform_data { | |||
24 | /* void (*clock_enable)(struct device *dev, int is_on); */ | 26 | /* void (*clock_enable)(struct device *dev, int is_on); */ |
25 | }; | 27 | }; |
26 | 28 | ||
29 | #endif /* __LINUX_USB_SL811_H */ | ||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index e0501da3dd11..ba09fe88adda 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -19,10 +19,8 @@ | |||
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
20 | */ | 20 | */ |
21 | 21 | ||
22 | 22 | #ifndef __LINUX_USB_USBNET_H | |
23 | #ifndef __USBNET_H | 23 | #define __LINUX_USB_USBNET_H |
24 | #define __USBNET_H | ||
25 | |||
26 | 24 | ||
27 | /* interface from usbnet core to each USB networking link we handle */ | 25 | /* interface from usbnet core to each USB networking link we handle */ |
28 | struct usbnet { | 26 | struct usbnet { |
@@ -211,4 +209,4 @@ extern int usbnet_nway_reset(struct net_device *net); | |||
211 | printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net->name , ## arg); \ | 209 | printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net->name , ## arg); \ |
212 | 210 | ||
213 | 211 | ||
214 | #endif /* __USBNET_H */ | 212 | #endif /* __LINUX_USB_USBNET_H */ |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index 0a40dfa44c9f..d9a3bbe38e6b 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
@@ -85,6 +85,7 @@ enum { US_DO_ALL_FLAGS }; | |||
85 | #define US_SC_LOCKABLE 0x07 /* Password-protected */ | 85 | #define US_SC_LOCKABLE 0x07 /* Password-protected */ |
86 | 86 | ||
87 | #define US_SC_ISD200 0xf0 /* ISD200 ATA */ | 87 | #define US_SC_ISD200 0xf0 /* ISD200 ATA */ |
88 | #define US_SC_CYP_ATACB 0xf1 /* Cypress ATACB */ | ||
88 | #define US_SC_DEVICE 0xff /* Use device's value */ | 89 | #define US_SC_DEVICE 0xff /* Use device's value */ |
89 | 90 | ||
90 | /* Protocols */ | 91 | /* Protocols */ |
diff --git a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h index 17cb108b7db0..3118ede2c67b 100644 --- a/include/linux/usbdevice_fs.h +++ b/include/linux/usbdevice_fs.h | |||
@@ -77,8 +77,11 @@ struct usbdevfs_connectinfo { | |||
77 | unsigned char slow; | 77 | unsigned char slow; |
78 | }; | 78 | }; |
79 | 79 | ||
80 | #define USBDEVFS_URB_SHORT_NOT_OK 1 | 80 | #define USBDEVFS_URB_SHORT_NOT_OK 0x01 |
81 | #define USBDEVFS_URB_ISO_ASAP 2 | 81 | #define USBDEVFS_URB_ISO_ASAP 0x02 |
82 | #define USBDEVFS_URB_NO_FSBR 0x20 | ||
83 | #define USBDEVFS_URB_ZERO_PACKET 0x40 | ||
84 | #define USBDEVFS_URB_NO_INTERRUPT 0x80 | ||
82 | 85 | ||
83 | #define USBDEVFS_URB_TYPE_ISO 0 | 86 | #define USBDEVFS_URB_TYPE_ISO 0 |
84 | #define USBDEVFS_URB_TYPE_INTERRUPT 1 | 87 | #define USBDEVFS_URB_TYPE_INTERRUPT 1 |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 17a80177a674..c1411189ba6c 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -282,6 +282,7 @@ struct v4l2_pix_format | |||
282 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */ | 282 | #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */ |
283 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */ | 283 | #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */ |
284 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */ | 284 | #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */ |
285 | #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y','1','6',' ') /* 16 Greyscale */ | ||
285 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P','A','L','8') /* 8 8-bit palette */ | 286 | #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P','A','L','8') /* 8 8-bit palette */ |
286 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */ | 287 | #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */ |
287 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */ | 288 | #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */ |
@@ -308,6 +309,7 @@ struct v4l2_pix_format | |||
308 | 309 | ||
309 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ | 310 | /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ |
310 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ | 311 | #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ |
312 | #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B','Y','R','2') /* 16 BGBG.. GRGR.. */ | ||
311 | 313 | ||
312 | /* compressed formats */ | 314 | /* compressed formats */ |
313 | #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */ | 315 | #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */ |
@@ -793,6 +795,7 @@ struct v4l2_ext_controls | |||
793 | /* Values for ctrl_class field */ | 795 | /* Values for ctrl_class field */ |
794 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ | 796 | #define V4L2_CTRL_CLASS_USER 0x00980000 /* Old-style 'user' controls */ |
795 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ | 797 | #define V4L2_CTRL_CLASS_MPEG 0x00990000 /* MPEG-compression controls */ |
798 | #define V4L2_CTRL_CLASS_CAMERA 0x009a0000 /* Camera class controls */ | ||
796 | 799 | ||
797 | #define V4L2_CTRL_ID_MASK (0x0fffffff) | 800 | #define V4L2_CTRL_ID_MASK (0x0fffffff) |
798 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) | 801 | #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) |
@@ -849,21 +852,37 @@ struct v4l2_querymenu | |||
849 | #define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8) | 852 | #define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8) |
850 | #define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9) | 853 | #define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9) |
851 | #define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10) | 854 | #define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10) |
852 | #define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11) | 855 | #define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11) /* Deprecated */ |
853 | #define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12) | 856 | #define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12) |
854 | #define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13) | 857 | #define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13) |
855 | #define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14) | 858 | #define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14) |
856 | #define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15) | 859 | #define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15) |
857 | #define V4L2_CID_GAMMA (V4L2_CID_BASE+16) | 860 | #define V4L2_CID_GAMMA (V4L2_CID_BASE+16) |
858 | #define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* ? Not sure */ | 861 | #define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* Deprecated */ |
859 | #define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17) | 862 | #define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17) |
860 | #define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18) | 863 | #define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18) |
861 | #define V4L2_CID_GAIN (V4L2_CID_BASE+19) | 864 | #define V4L2_CID_GAIN (V4L2_CID_BASE+19) |
862 | #define V4L2_CID_HFLIP (V4L2_CID_BASE+20) | 865 | #define V4L2_CID_HFLIP (V4L2_CID_BASE+20) |
863 | #define V4L2_CID_VFLIP (V4L2_CID_BASE+21) | 866 | #define V4L2_CID_VFLIP (V4L2_CID_BASE+21) |
864 | #define V4L2_CID_HCENTER (V4L2_CID_BASE+22) | 867 | |
865 | #define V4L2_CID_VCENTER (V4L2_CID_BASE+23) | 868 | /* Deprecated, use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */ |
866 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */ | 869 | #define V4L2_CID_HCENTER_DEPRECATED (V4L2_CID_BASE+22) |
870 | #define V4L2_CID_VCENTER_DEPRECATED (V4L2_CID_BASE+23) | ||
871 | |||
872 | #define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) | ||
873 | enum v4l2_power_line_frequency { | ||
874 | V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0, | ||
875 | V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1, | ||
876 | V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2, | ||
877 | }; | ||
878 | #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) | ||
879 | #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) | ||
880 | #define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27) | ||
881 | #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) | ||
882 | #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) | ||
883 | #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) | ||
884 | /* last CID + 1 */ | ||
885 | #define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) | ||
867 | 886 | ||
868 | /* MPEG-class control IDs defined by V4L2 */ | 887 | /* MPEG-class control IDs defined by V4L2 */ |
869 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) | 888 | #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) |
@@ -1051,6 +1070,32 @@ enum v4l2_mpeg_cx2341x_video_median_filter_type { | |||
1051 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) | 1070 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) |
1052 | #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) | 1071 | #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) |
1053 | 1072 | ||
1073 | /* Camera class control IDs */ | ||
1074 | #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) | ||
1075 | #define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) | ||
1076 | |||
1077 | #define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1) | ||
1078 | enum v4l2_exposure_auto_type { | ||
1079 | V4L2_EXPOSURE_AUTO = 0, | ||
1080 | V4L2_EXPOSURE_MANUAL = 1, | ||
1081 | V4L2_EXPOSURE_SHUTTER_PRIORITY = 2, | ||
1082 | V4L2_EXPOSURE_APERTURE_PRIORITY = 3 | ||
1083 | }; | ||
1084 | #define V4L2_CID_EXPOSURE_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+2) | ||
1085 | #define V4L2_CID_EXPOSURE_AUTO_PRIORITY (V4L2_CID_CAMERA_CLASS_BASE+3) | ||
1086 | |||
1087 | #define V4L2_CID_PAN_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+4) | ||
1088 | #define V4L2_CID_TILT_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+5) | ||
1089 | #define V4L2_CID_PAN_RESET (V4L2_CID_CAMERA_CLASS_BASE+6) | ||
1090 | #define V4L2_CID_TILT_RESET (V4L2_CID_CAMERA_CLASS_BASE+7) | ||
1091 | |||
1092 | #define V4L2_CID_PAN_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+8) | ||
1093 | #define V4L2_CID_TILT_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+9) | ||
1094 | |||
1095 | #define V4L2_CID_FOCUS_ABSOLUTE (V4L2_CID_CAMERA_CLASS_BASE+10) | ||
1096 | #define V4L2_CID_FOCUS_RELATIVE (V4L2_CID_CAMERA_CLASS_BASE+11) | ||
1097 | #define V4L2_CID_FOCUS_AUTO (V4L2_CID_CAMERA_CLASS_BASE+12) | ||
1098 | |||
1054 | /* | 1099 | /* |
1055 | * T U N I N G | 1100 | * T U N I N G |
1056 | */ | 1101 | */ |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index ce8e7da05807..364789aae9f3 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
@@ -31,6 +31,7 @@ struct vm_struct { | |||
31 | struct page **pages; | 31 | struct page **pages; |
32 | unsigned int nr_pages; | 32 | unsigned int nr_pages; |
33 | unsigned long phys_addr; | 33 | unsigned long phys_addr; |
34 | void *caller; | ||
34 | }; | 35 | }; |
35 | 36 | ||
36 | /* | 37 | /* |
@@ -66,6 +67,8 @@ static inline size_t get_vm_area_size(const struct vm_struct *area) | |||
66 | } | 67 | } |
67 | 68 | ||
68 | extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); | 69 | extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags); |
70 | extern struct vm_struct *get_vm_area_caller(unsigned long size, | ||
71 | unsigned long flags, void *caller); | ||
69 | extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, | 72 | extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, |
70 | unsigned long start, unsigned long end); | 73 | unsigned long start, unsigned long end); |
71 | extern struct vm_struct *get_vm_area_node(unsigned long size, | 74 | extern struct vm_struct *get_vm_area_node(unsigned long size, |
@@ -87,4 +90,6 @@ extern void free_vm_area(struct vm_struct *area); | |||
87 | extern rwlock_t vmlist_lock; | 90 | extern rwlock_t vmlist_lock; |
88 | extern struct vm_struct *vmlist; | 91 | extern struct vm_struct *vmlist; |
89 | 92 | ||
93 | extern const struct seq_operations vmalloc_op; | ||
94 | |||
90 | #endif /* _LINUX_VMALLOC_H */ | 95 | #endif /* _LINUX_VMALLOC_H */ |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 9f1b4b46151e..e83b69346d23 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define HIGHMEM_ZONE(xx) | 25 | #define HIGHMEM_ZONE(xx) |
26 | #endif | 26 | #endif |
27 | 27 | ||
28 | |||
28 | #define FOR_ALL_ZONES(xx) DMA_ZONE(xx) DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx) , xx##_MOVABLE | 29 | #define FOR_ALL_ZONES(xx) DMA_ZONE(xx) DMA32_ZONE(xx) xx##_NORMAL HIGHMEM_ZONE(xx) , xx##_MOVABLE |
29 | 30 | ||
30 | enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, | 31 | enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, |
@@ -37,6 +38,9 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, | |||
37 | FOR_ALL_ZONES(PGSCAN_DIRECT), | 38 | FOR_ALL_ZONES(PGSCAN_DIRECT), |
38 | PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, | 39 | PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, |
39 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, | 40 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, |
41 | #ifdef CONFIG_HUGETLB_PAGE | ||
42 | HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, | ||
43 | #endif | ||
40 | NR_VM_EVENT_ITEMS | 44 | NR_VM_EVENT_ITEMS |
41 | }; | 45 | }; |
42 | 46 | ||
@@ -174,7 +178,7 @@ static inline unsigned long node_page_state(int node, | |||
174 | zone_page_state(&zones[ZONE_MOVABLE], item); | 178 | zone_page_state(&zones[ZONE_MOVABLE], item); |
175 | } | 179 | } |
176 | 180 | ||
177 | extern void zone_statistics(struct zonelist *, struct zone *); | 181 | extern void zone_statistics(struct zone *, struct zone *); |
178 | 182 | ||
179 | #else | 183 | #else |
180 | 184 | ||
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h new file mode 100644 index 000000000000..4d13732e9cf0 --- /dev/null +++ b/include/linux/wm97xx.h | |||
@@ -0,0 +1,314 @@ | |||
1 | |||
2 | /* | ||
3 | * Register bits and API for Wolfson WM97xx series of codecs | ||
4 | */ | ||
5 | |||
6 | #ifndef _LINUX_WM97XX_H | ||
7 | #define _LINUX_WM97XX_H | ||
8 | |||
9 | #include <sound/core.h> | ||
10 | #include <sound/pcm.h> | ||
11 | #include <sound/ac97_codec.h> | ||
12 | #include <sound/initval.h> | ||
13 | #include <linux/types.h> | ||
14 | #include <linux/list.h> | ||
15 | #include <linux/input.h> /* Input device layer */ | ||
16 | #include <linux/platform_device.h> | ||
17 | |||
18 | /* | ||
19 | * WM97xx AC97 Touchscreen registers | ||
20 | */ | ||
21 | #define AC97_WM97XX_DIGITISER1 0x76 | ||
22 | #define AC97_WM97XX_DIGITISER2 0x78 | ||
23 | #define AC97_WM97XX_DIGITISER_RD 0x7a | ||
24 | #define AC97_WM9713_DIG1 0x74 | ||
25 | #define AC97_WM9713_DIG2 AC97_WM97XX_DIGITISER1 | ||
26 | #define AC97_WM9713_DIG3 AC97_WM97XX_DIGITISER2 | ||
27 | |||
28 | /* | ||
29 | * WM97xx register bits | ||
30 | */ | ||
31 | #define WM97XX_POLL 0x8000 /* initiate a polling measurement */ | ||
32 | #define WM97XX_ADCSEL_X 0x1000 /* x coord measurement */ | ||
33 | #define WM97XX_ADCSEL_Y 0x2000 /* y coord measurement */ | ||
34 | #define WM97XX_ADCSEL_PRES 0x3000 /* pressure measurement */ | ||
35 | #define WM97XX_ADCSEL_MASK 0x7000 | ||
36 | #define WM97XX_COO 0x0800 /* enable coordinate mode */ | ||
37 | #define WM97XX_CTC 0x0400 /* enable continuous mode */ | ||
38 | #define WM97XX_CM_RATE_93 0x0000 /* 93.75Hz continuous rate */ | ||
39 | #define WM97XX_CM_RATE_187 0x0100 /* 187.5Hz continuous rate */ | ||
40 | #define WM97XX_CM_RATE_375 0x0200 /* 375Hz continuous rate */ | ||
41 | #define WM97XX_CM_RATE_750 0x0300 /* 750Hz continuous rate */ | ||
42 | #define WM97XX_CM_RATE_8K 0x00f0 /* 8kHz continuous rate */ | ||
43 | #define WM97XX_CM_RATE_12K 0x01f0 /* 12kHz continuous rate */ | ||
44 | #define WM97XX_CM_RATE_24K 0x02f0 /* 24kHz continuous rate */ | ||
45 | #define WM97XX_CM_RATE_48K 0x03f0 /* 48kHz continuous rate */ | ||
46 | #define WM97XX_CM_RATE_MASK 0x03f0 | ||
47 | #define WM97XX_RATE(i) (((i & 3) << 8) | ((i & 4) ? 0xf0 : 0)) | ||
48 | #define WM97XX_DELAY(i) ((i << 4) & 0x00f0) /* sample delay times */ | ||
49 | #define WM97XX_DELAY_MASK 0x00f0 | ||
50 | #define WM97XX_SLEN 0x0008 /* slot read back enable */ | ||
51 | #define WM97XX_SLT(i) ((i - 5) & 0x7) /* panel slot (5-11) */ | ||
52 | #define WM97XX_SLT_MASK 0x0007 | ||
53 | #define WM97XX_PRP_DETW 0x4000 /* detect on, digitise off, wake */ | ||
54 | #define WM97XX_PRP_DET 0x8000 /* detect on, digitise off, no wake */ | ||
55 | #define WM97XX_PRP_DET_DIG 0xc000 /* setect on, digitise on */ | ||
56 | #define WM97XX_RPR 0x2000 /* wake up on pen down */ | ||
57 | #define WM97XX_PEN_DOWN 0x8000 /* pen is down */ | ||
58 | #define WM97XX_ADCSRC_MASK 0x7000 /* ADC source mask */ | ||
59 | |||
60 | #define WM97XX_AUX_ID1 0x8001 | ||
61 | #define WM97XX_AUX_ID2 0x8002 | ||
62 | #define WM97XX_AUX_ID3 0x8003 | ||
63 | #define WM97XX_AUX_ID4 0x8004 | ||
64 | |||
65 | |||
66 | /* WM9712 Bits */ | ||
67 | #define WM9712_45W 0x1000 /* set for 5-wire touchscreen */ | ||
68 | #define WM9712_PDEN 0x0800 /* measure only when pen down */ | ||
69 | #define WM9712_WAIT 0x0200 /* wait until adc is read before next sample */ | ||
70 | #define WM9712_PIL 0x0100 /* current used for pressure measurement. set 400uA else 200uA */ | ||
71 | #define WM9712_MASK_HI 0x0040 /* hi on mask pin (47) stops conversions */ | ||
72 | #define WM9712_MASK_EDGE 0x0080 /* rising/falling edge on pin delays sample */ | ||
73 | #define WM9712_MASK_SYNC 0x00c0 /* rising/falling edge on mask initiates sample */ | ||
74 | #define WM9712_RPU(i) (i&0x3f) /* internal pull up on pen detect (64k / rpu) */ | ||
75 | #define WM9712_PD(i) (0x1 << i) /* power management */ | ||
76 | |||
77 | /* WM9712 Registers */ | ||
78 | #define AC97_WM9712_POWER 0x24 | ||
79 | #define AC97_WM9712_REV 0x58 | ||
80 | |||
81 | /* WM9705 Bits */ | ||
82 | #define WM9705_PDEN 0x1000 /* measure only when pen is down */ | ||
83 | #define WM9705_PINV 0x0800 /* inverts sense of pen down output */ | ||
84 | #define WM9705_BSEN 0x0400 /* BUSY flag enable, pin47 is 1 when busy */ | ||
85 | #define WM9705_BINV 0x0200 /* invert BUSY (pin47) output */ | ||
86 | #define WM9705_WAIT 0x0100 /* wait until adc is read before next sample */ | ||
87 | #define WM9705_PIL 0x0080 /* current used for pressure measurement. set 400uA else 200uA */ | ||
88 | #define WM9705_PHIZ 0x0040 /* set PHONE and PCBEEP inputs to high impedance */ | ||
89 | #define WM9705_MASK_HI 0x0010 /* hi on mask stops conversions */ | ||
90 | #define WM9705_MASK_EDGE 0x0020 /* rising/falling edge on pin delays sample */ | ||
91 | #define WM9705_MASK_SYNC 0x0030 /* rising/falling edge on mask initiates sample */ | ||
92 | #define WM9705_PDD(i) (i & 0x000f) /* pen detect comparator threshold */ | ||
93 | |||
94 | |||
95 | /* WM9713 Bits */ | ||
96 | #define WM9713_PDPOL 0x0400 /* Pen down polarity */ | ||
97 | #define WM9713_POLL 0x0200 /* initiate a polling measurement */ | ||
98 | #define WM9713_CTC 0x0100 /* enable continuous mode */ | ||
99 | #define WM9713_ADCSEL_X 0x0002 /* X measurement */ | ||
100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ | ||
101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ | ||
102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ | ||
103 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ | ||
104 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ | ||
105 | #define WM9713_WAIT 0x0200 /* coordinate wait */ | ||
106 | |||
107 | /* AUX ADC ID's */ | ||
108 | #define TS_COMP1 0x0 | ||
109 | #define TS_COMP2 0x1 | ||
110 | #define TS_BMON 0x2 | ||
111 | #define TS_WIPER 0x3 | ||
112 | |||
113 | /* ID numbers */ | ||
114 | #define WM97XX_ID1 0x574d | ||
115 | #define WM9712_ID2 0x4c12 | ||
116 | #define WM9705_ID2 0x4c05 | ||
117 | #define WM9713_ID2 0x4c13 | ||
118 | |||
119 | /* Codec GPIO's */ | ||
120 | #define WM97XX_MAX_GPIO 16 | ||
121 | #define WM97XX_GPIO_1 (1 << 1) | ||
122 | #define WM97XX_GPIO_2 (1 << 2) | ||
123 | #define WM97XX_GPIO_3 (1 << 3) | ||
124 | #define WM97XX_GPIO_4 (1 << 4) | ||
125 | #define WM97XX_GPIO_5 (1 << 5) | ||
126 | #define WM97XX_GPIO_6 (1 << 6) | ||
127 | #define WM97XX_GPIO_7 (1 << 7) | ||
128 | #define WM97XX_GPIO_8 (1 << 8) | ||
129 | #define WM97XX_GPIO_9 (1 << 9) | ||
130 | #define WM97XX_GPIO_10 (1 << 10) | ||
131 | #define WM97XX_GPIO_11 (1 << 11) | ||
132 | #define WM97XX_GPIO_12 (1 << 12) | ||
133 | #define WM97XX_GPIO_13 (1 << 13) | ||
134 | #define WM97XX_GPIO_14 (1 << 14) | ||
135 | #define WM97XX_GPIO_15 (1 << 15) | ||
136 | |||
137 | |||
138 | #define AC97_LINK_FRAME 21 /* time in uS for AC97 link frame */ | ||
139 | |||
140 | |||
141 | /*---------------- Return codes from sample reading functions ---------------*/ | ||
142 | |||
143 | /* More data is available; call the sample gathering function again */ | ||
144 | #define RC_AGAIN 0x00000001 | ||
145 | /* The returned sample is valid */ | ||
146 | #define RC_VALID 0x00000002 | ||
147 | /* The pen is up (the first RC_VALID without RC_PENUP means pen is down) */ | ||
148 | #define RC_PENUP 0x00000004 | ||
149 | /* The pen is down (RC_VALID implies RC_PENDOWN, but sometimes it is helpful | ||
150 | to tell the handler that the pen is down but we don't know yet his coords, | ||
151 | so the handler should not sleep or wait for pendown irq) */ | ||
152 | #define RC_PENDOWN 0x00000008 | ||
153 | |||
154 | /* | ||
155 | * The wm97xx driver provides a private API for writing platform-specific | ||
156 | * drivers. | ||
157 | */ | ||
158 | |||
159 | /* The structure used to return arch specific sampled data into */ | ||
160 | struct wm97xx_data { | ||
161 | int x; | ||
162 | int y; | ||
163 | int p; | ||
164 | }; | ||
165 | |||
166 | /* | ||
167 | * Codec GPIO status | ||
168 | */ | ||
169 | enum wm97xx_gpio_status { | ||
170 | WM97XX_GPIO_HIGH, | ||
171 | WM97XX_GPIO_LOW | ||
172 | }; | ||
173 | |||
174 | /* | ||
175 | * Codec GPIO direction | ||
176 | */ | ||
177 | enum wm97xx_gpio_dir { | ||
178 | WM97XX_GPIO_IN, | ||
179 | WM97XX_GPIO_OUT | ||
180 | }; | ||
181 | |||
182 | /* | ||
183 | * Codec GPIO polarity | ||
184 | */ | ||
185 | enum wm97xx_gpio_pol { | ||
186 | WM97XX_GPIO_POL_HIGH, | ||
187 | WM97XX_GPIO_POL_LOW | ||
188 | }; | ||
189 | |||
190 | /* | ||
191 | * Codec GPIO sticky | ||
192 | */ | ||
193 | enum wm97xx_gpio_sticky { | ||
194 | WM97XX_GPIO_STICKY, | ||
195 | WM97XX_GPIO_NOTSTICKY | ||
196 | }; | ||
197 | |||
198 | /* | ||
199 | * Codec GPIO wake | ||
200 | */ | ||
201 | enum wm97xx_gpio_wake { | ||
202 | WM97XX_GPIO_WAKE, | ||
203 | WM97XX_GPIO_NOWAKE | ||
204 | }; | ||
205 | |||
206 | /* | ||
207 | * Digitiser ioctl commands | ||
208 | */ | ||
209 | #define WM97XX_DIG_START 0x1 | ||
210 | #define WM97XX_DIG_STOP 0x2 | ||
211 | #define WM97XX_PHY_INIT 0x3 | ||
212 | #define WM97XX_AUX_PREPARE 0x4 | ||
213 | #define WM97XX_DIG_RESTORE 0x5 | ||
214 | |||
215 | struct wm97xx; | ||
216 | |||
217 | extern struct wm97xx_codec_drv wm9705_codec; | ||
218 | extern struct wm97xx_codec_drv wm9712_codec; | ||
219 | extern struct wm97xx_codec_drv wm9713_codec; | ||
220 | |||
221 | /* | ||
222 | * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs | ||
223 | */ | ||
224 | struct wm97xx_codec_drv { | ||
225 | u16 id; | ||
226 | char *name; | ||
227 | |||
228 | /* read 1 sample */ | ||
229 | int (*poll_sample) (struct wm97xx *, int adcsel, int *sample); | ||
230 | |||
231 | /* read X,Y,[P] in poll */ | ||
232 | int (*poll_touch) (struct wm97xx *, struct wm97xx_data *); | ||
233 | |||
234 | int (*acc_enable) (struct wm97xx *, int enable); | ||
235 | void (*phy_init) (struct wm97xx *); | ||
236 | void (*dig_enable) (struct wm97xx *, int enable); | ||
237 | void (*dig_restore) (struct wm97xx *); | ||
238 | void (*aux_prepare) (struct wm97xx *); | ||
239 | }; | ||
240 | |||
241 | |||
242 | /* Machine specific and accelerated touch operations */ | ||
243 | struct wm97xx_mach_ops { | ||
244 | |||
245 | /* accelerated touch readback - coords are transmited on AC97 link */ | ||
246 | int acc_enabled; | ||
247 | void (*acc_pen_up) (struct wm97xx *); | ||
248 | int (*acc_pen_down) (struct wm97xx *); | ||
249 | int (*acc_startup) (struct wm97xx *); | ||
250 | void (*acc_shutdown) (struct wm97xx *); | ||
251 | |||
252 | /* interrupt mask control - required for accelerated operation */ | ||
253 | void (*irq_enable) (struct wm97xx *, int enable); | ||
254 | |||
255 | /* GPIO pin used for accelerated operation */ | ||
256 | int irq_gpio; | ||
257 | |||
258 | /* pre and post sample - can be used to minimise any analog noise */ | ||
259 | void (*pre_sample) (int); /* function to run before sampling */ | ||
260 | void (*post_sample) (int); /* function to run after sampling */ | ||
261 | }; | ||
262 | |||
263 | struct wm97xx { | ||
264 | u16 dig[3], id, gpio[6], misc; /* Cached codec registers */ | ||
265 | u16 dig_save[3]; /* saved during aux reading */ | ||
266 | struct wm97xx_codec_drv *codec; /* attached codec driver*/ | ||
267 | struct input_dev *input_dev; /* touchscreen input device */ | ||
268 | struct snd_ac97 *ac97; /* ALSA codec access */ | ||
269 | struct device *dev; /* ALSA device */ | ||
270 | struct platform_device *battery_dev; | ||
271 | struct platform_device *touch_dev; | ||
272 | struct wm97xx_mach_ops *mach_ops; | ||
273 | struct mutex codec_mutex; | ||
274 | struct delayed_work ts_reader; /* Used to poll touchscreen */ | ||
275 | unsigned long ts_reader_interval; /* Current interval for timer */ | ||
276 | unsigned long ts_reader_min_interval; /* Minimum interval */ | ||
277 | unsigned int pen_irq; /* Pen IRQ number in use */ | ||
278 | struct workqueue_struct *ts_workq; | ||
279 | struct work_struct pen_event_work; | ||
280 | u16 acc_slot; /* AC97 slot used for acc touch data */ | ||
281 | u16 acc_rate; /* acc touch data rate */ | ||
282 | unsigned pen_is_down:1; /* Pen is down */ | ||
283 | unsigned aux_waiting:1; /* aux measurement waiting */ | ||
284 | unsigned pen_probably_down:1; /* used in polling mode */ | ||
285 | u16 suspend_mode; /* PRP in suspend mode */ | ||
286 | }; | ||
287 | |||
288 | /* | ||
289 | * Codec GPIO access (not supported on WM9705) | ||
290 | * This can be used to set/get codec GPIO and Virtual GPIO status. | ||
291 | */ | ||
292 | enum wm97xx_gpio_status wm97xx_get_gpio(struct wm97xx *wm, u32 gpio); | ||
293 | void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio, | ||
294 | enum wm97xx_gpio_status status); | ||
295 | void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, | ||
296 | enum wm97xx_gpio_dir dir, | ||
297 | enum wm97xx_gpio_pol pol, | ||
298 | enum wm97xx_gpio_sticky sticky, | ||
299 | enum wm97xx_gpio_wake wake); | ||
300 | |||
301 | void wm97xx_set_suspend_mode(struct wm97xx *wm, u16 mode); | ||
302 | |||
303 | /* codec AC97 IO access */ | ||
304 | int wm97xx_reg_read(struct wm97xx *wm, u16 reg); | ||
305 | void wm97xx_reg_write(struct wm97xx *wm, u16 reg, u16 val); | ||
306 | |||
307 | /* aux adc readback */ | ||
308 | int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel); | ||
309 | |||
310 | /* machine ops */ | ||
311 | int wm97xx_register_mach_ops(struct wm97xx *, struct wm97xx_mach_ops *); | ||
312 | void wm97xx_unregister_mach_ops(struct wm97xx *); | ||
313 | |||
314 | #endif | ||
diff --git a/include/linux/xattr.h b/include/linux/xattr.h index df6b95d2218e..d131e352cfe1 100644 --- a/include/linux/xattr.h +++ b/include/linux/xattr.h | |||
@@ -47,10 +47,10 @@ struct xattr_handler { | |||
47 | }; | 47 | }; |
48 | 48 | ||
49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); | 49 | ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t); |
50 | ssize_t vfs_getxattr(struct dentry *, char *, void *, size_t); | 50 | ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t); |
51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); | 51 | ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size); |
52 | int vfs_setxattr(struct dentry *, char *, void *, size_t, int); | 52 | int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int); |
53 | int vfs_removexattr(struct dentry *, char *); | 53 | int vfs_removexattr(struct dentry *, const char *); |
54 | 54 | ||
55 | ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size); | 55 | ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size); |
56 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); | 56 | ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size); |
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h index 0c82c80b277f..2ca6bae88721 100644 --- a/include/linux/xfrm.h +++ b/include/linux/xfrm.h | |||
@@ -97,10 +97,10 @@ struct xfrm_algo { | |||
97 | }; | 97 | }; |
98 | 98 | ||
99 | struct xfrm_algo_aead { | 99 | struct xfrm_algo_aead { |
100 | char alg_name[64]; | 100 | char alg_name[64]; |
101 | int alg_key_len; /* in bits */ | 101 | unsigned int alg_key_len; /* in bits */ |
102 | int alg_icv_len; /* in bits */ | 102 | unsigned int alg_icv_len; /* in bits */ |
103 | char alg_key[0]; | 103 | char alg_key[0]; |
104 | }; | 104 | }; |
105 | 105 | ||
106 | struct xfrm_stats { | 106 | struct xfrm_stats { |
diff --git a/include/media/ir-common.h b/include/media/ir-common.h index a4274203f252..bfee8be5d63f 100644 --- a/include/media/ir-common.h +++ b/include/media/ir-common.h | |||
@@ -107,6 +107,7 @@ extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; | |||
107 | extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; | 107 | extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; |
108 | extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; | 108 | extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; |
109 | extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; | 109 | extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE]; |
110 | extern IR_KEYTAB_TYPE ir_codes_pixelview_new[IR_KEYTAB_SIZE]; | ||
110 | extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE]; | 111 | extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE]; |
111 | extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE]; | 112 | extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE]; |
112 | extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE]; | 113 | extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE]; |
@@ -141,8 +142,10 @@ extern IR_KEYTAB_TYPE ir_codes_encore_enltv[IR_KEYTAB_SIZE]; | |||
141 | extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE]; | 142 | extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE]; |
142 | extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE]; | 143 | extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE]; |
143 | extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE]; | 144 | extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE]; |
145 | extern IR_KEYTAB_TYPE ir_codes_behold_columbus[IR_KEYTAB_SIZE]; | ||
144 | extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE]; | 146 | extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE]; |
145 | extern IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE]; | 147 | extern IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE]; |
148 | extern IR_KEYTAB_TYPE ir_codes_powercolor_real_angel[IR_KEYTAB_SIZE]; | ||
146 | 149 | ||
147 | #endif | 150 | #endif |
148 | 151 | ||
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h new file mode 100644 index 000000000000..6a8c8be7a1ae --- /dev/null +++ b/include/media/soc_camera.h | |||
@@ -0,0 +1,179 @@ | |||
1 | /* | ||
2 | * camera image capture (abstract) bus driver header | ||
3 | * | ||
4 | * Copyright (C) 2006, Sascha Hauer, Pengutronix | ||
5 | * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef SOC_CAMERA_H | ||
13 | #define SOC_CAMERA_H | ||
14 | |||
15 | #include <linux/videodev2.h> | ||
16 | #include <media/videobuf-dma-sg.h> | ||
17 | |||
18 | struct soc_camera_device { | ||
19 | struct list_head list; | ||
20 | struct device dev; | ||
21 | struct device *control; | ||
22 | unsigned short width; /* Current window */ | ||
23 | unsigned short height; /* sizes */ | ||
24 | unsigned short x_min; /* Camera capabilities */ | ||
25 | unsigned short y_min; | ||
26 | unsigned short x_current; /* Current window location */ | ||
27 | unsigned short y_current; | ||
28 | unsigned short width_min; | ||
29 | unsigned short width_max; | ||
30 | unsigned short height_min; | ||
31 | unsigned short height_max; | ||
32 | unsigned short y_skip_top; /* Lines to skip at the top */ | ||
33 | unsigned short gain; | ||
34 | unsigned short exposure; | ||
35 | unsigned char iface; /* Host number */ | ||
36 | unsigned char devnum; /* Device number per host */ | ||
37 | unsigned char buswidth; /* See comment in .c */ | ||
38 | struct soc_camera_ops *ops; | ||
39 | struct video_device *vdev; | ||
40 | const struct soc_camera_data_format *current_fmt; | ||
41 | const struct soc_camera_data_format *formats; | ||
42 | int num_formats; | ||
43 | struct module *owner; | ||
44 | /* soc_camera.c private count. Only accessed with video_lock held */ | ||
45 | int use_count; | ||
46 | }; | ||
47 | |||
48 | struct soc_camera_file { | ||
49 | struct soc_camera_device *icd; | ||
50 | struct videobuf_queue vb_vidq; | ||
51 | spinlock_t *lock; | ||
52 | }; | ||
53 | |||
54 | struct soc_camera_host { | ||
55 | struct list_head list; | ||
56 | struct device dev; | ||
57 | unsigned char nr; /* Host number */ | ||
58 | size_t msize; | ||
59 | struct videobuf_queue_ops *vbq_ops; | ||
60 | void *priv; | ||
61 | char *drv_name; | ||
62 | struct soc_camera_host_ops *ops; | ||
63 | }; | ||
64 | |||
65 | struct soc_camera_host_ops { | ||
66 | struct module *owner; | ||
67 | int (*add)(struct soc_camera_device *); | ||
68 | void (*remove)(struct soc_camera_device *); | ||
69 | int (*set_fmt_cap)(struct soc_camera_device *, __u32, | ||
70 | struct v4l2_rect *); | ||
71 | int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); | ||
72 | int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *); | ||
73 | int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); | ||
74 | int (*try_bus_param)(struct soc_camera_device *, __u32); | ||
75 | int (*set_bus_param)(struct soc_camera_device *, __u32); | ||
76 | unsigned int (*poll)(struct file *, poll_table *); | ||
77 | spinlock_t* (*spinlock_alloc)(struct soc_camera_file *); | ||
78 | void (*spinlock_free)(spinlock_t *); | ||
79 | }; | ||
80 | |||
81 | struct soc_camera_link { | ||
82 | /* Camera bus id, used to match a camera and a bus */ | ||
83 | int bus_id; | ||
84 | /* GPIO number to switch between 8 and 10 bit modes */ | ||
85 | unsigned int gpio; | ||
86 | }; | ||
87 | |||
88 | static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev) | ||
89 | { | ||
90 | return container_of(dev, struct soc_camera_device, dev); | ||
91 | } | ||
92 | |||
93 | static inline struct soc_camera_host *to_soc_camera_host(struct device *dev) | ||
94 | { | ||
95 | return container_of(dev, struct soc_camera_host, dev); | ||
96 | } | ||
97 | |||
98 | extern int soc_camera_host_register(struct soc_camera_host *ici); | ||
99 | extern void soc_camera_host_unregister(struct soc_camera_host *ici); | ||
100 | extern int soc_camera_device_register(struct soc_camera_device *icd); | ||
101 | extern void soc_camera_device_unregister(struct soc_camera_device *icd); | ||
102 | |||
103 | extern int soc_camera_video_start(struct soc_camera_device *icd); | ||
104 | extern void soc_camera_video_stop(struct soc_camera_device *icd); | ||
105 | |||
106 | struct soc_camera_data_format { | ||
107 | char *name; | ||
108 | unsigned int depth; | ||
109 | __u32 fourcc; | ||
110 | enum v4l2_colorspace colorspace; | ||
111 | }; | ||
112 | |||
113 | struct soc_camera_ops { | ||
114 | struct module *owner; | ||
115 | int (*probe)(struct soc_camera_device *); | ||
116 | void (*remove)(struct soc_camera_device *); | ||
117 | int (*init)(struct soc_camera_device *); | ||
118 | int (*release)(struct soc_camera_device *); | ||
119 | int (*start_capture)(struct soc_camera_device *); | ||
120 | int (*stop_capture)(struct soc_camera_device *); | ||
121 | int (*set_fmt_cap)(struct soc_camera_device *, __u32, | ||
122 | struct v4l2_rect *); | ||
123 | int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *); | ||
124 | unsigned long (*query_bus_param)(struct soc_camera_device *); | ||
125 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); | ||
126 | int (*get_chip_id)(struct soc_camera_device *, | ||
127 | struct v4l2_chip_ident *); | ||
128 | #ifdef CONFIG_VIDEO_ADV_DEBUG | ||
129 | int (*get_register)(struct soc_camera_device *, struct v4l2_register *); | ||
130 | int (*set_register)(struct soc_camera_device *, struct v4l2_register *); | ||
131 | #endif | ||
132 | int (*get_control)(struct soc_camera_device *, struct v4l2_control *); | ||
133 | int (*set_control)(struct soc_camera_device *, struct v4l2_control *); | ||
134 | const struct v4l2_queryctrl *controls; | ||
135 | int num_controls; | ||
136 | }; | ||
137 | |||
138 | static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( | ||
139 | struct soc_camera_ops *ops, int id) | ||
140 | { | ||
141 | int i; | ||
142 | |||
143 | for (i = 0; i < ops->num_controls; i++) | ||
144 | if (ops->controls[i].id == id) | ||
145 | return &ops->controls[i]; | ||
146 | |||
147 | return NULL; | ||
148 | } | ||
149 | |||
150 | #define SOCAM_MASTER (1 << 0) | ||
151 | #define SOCAM_SLAVE (1 << 1) | ||
152 | #define SOCAM_HSYNC_ACTIVE_HIGH (1 << 2) | ||
153 | #define SOCAM_HSYNC_ACTIVE_LOW (1 << 3) | ||
154 | #define SOCAM_VSYNC_ACTIVE_HIGH (1 << 4) | ||
155 | #define SOCAM_VSYNC_ACTIVE_LOW (1 << 5) | ||
156 | #define SOCAM_DATAWIDTH_8 (1 << 6) | ||
157 | #define SOCAM_DATAWIDTH_9 (1 << 7) | ||
158 | #define SOCAM_DATAWIDTH_10 (1 << 8) | ||
159 | #define SOCAM_PCLK_SAMPLE_RISING (1 << 9) | ||
160 | #define SOCAM_PCLK_SAMPLE_FALLING (1 << 10) | ||
161 | |||
162 | #define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_8 | SOCAM_DATAWIDTH_9 | \ | ||
163 | SOCAM_DATAWIDTH_10) | ||
164 | |||
165 | static inline unsigned long soc_camera_bus_param_compatible( | ||
166 | unsigned long camera_flags, unsigned long bus_flags) | ||
167 | { | ||
168 | unsigned long common_flags, hsync, vsync, pclk; | ||
169 | |||
170 | common_flags = camera_flags & bus_flags; | ||
171 | |||
172 | hsync = common_flags & (SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_LOW); | ||
173 | vsync = common_flags & (SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW); | ||
174 | pclk = common_flags & (SOCAM_PCLK_SAMPLE_RISING | SOCAM_PCLK_SAMPLE_FALLING); | ||
175 | |||
176 | return (!hsync || !vsync || !pclk) ? 0 : common_flags; | ||
177 | } | ||
178 | |||
179 | #endif | ||
diff --git a/include/media/tuner-types.h b/include/media/tuner-types.h index b201371416a0..ab03c5344209 100644 --- a/include/media/tuner-types.h +++ b/include/media/tuner-types.h | |||
@@ -6,10 +6,11 @@ | |||
6 | #define __TUNER_TYPES_H__ | 6 | #define __TUNER_TYPES_H__ |
7 | 7 | ||
8 | enum param_type { | 8 | enum param_type { |
9 | TUNER_PARAM_TYPE_RADIO, \ | 9 | TUNER_PARAM_TYPE_RADIO, |
10 | TUNER_PARAM_TYPE_PAL, \ | 10 | TUNER_PARAM_TYPE_PAL, |
11 | TUNER_PARAM_TYPE_SECAM, \ | 11 | TUNER_PARAM_TYPE_SECAM, |
12 | TUNER_PARAM_TYPE_NTSC | 12 | TUNER_PARAM_TYPE_NTSC, |
13 | TUNER_PARAM_TYPE_DIGITAL, | ||
13 | }; | 14 | }; |
14 | 15 | ||
15 | struct tuner_range { | 16 | struct tuner_range { |
@@ -105,6 +106,7 @@ struct tuner_params { | |||
105 | the SECAM-L/L' standards. Range: -16:+15 */ | 106 | the SECAM-L/L' standards. Range: -16:+15 */ |
106 | signed int default_top_secam_high:5; | 107 | signed int default_top_secam_high:5; |
107 | 108 | ||
109 | u16 iffreq; | ||
108 | 110 | ||
109 | unsigned int count; | 111 | unsigned int count; |
110 | struct tuner_range *ranges; | 112 | struct tuner_range *ranges; |
@@ -114,6 +116,13 @@ struct tunertype { | |||
114 | char *name; | 116 | char *name; |
115 | unsigned int count; | 117 | unsigned int count; |
116 | struct tuner_params *params; | 118 | struct tuner_params *params; |
119 | |||
120 | u16 min; | ||
121 | u16 max; | ||
122 | u32 stepsize; | ||
123 | |||
124 | u8 *initdata; | ||
125 | u8 *sleepdata; | ||
117 | }; | 126 | }; |
118 | 127 | ||
119 | extern struct tunertype tuners[]; | 128 | extern struct tunertype tuners[]; |
diff --git a/include/media/tuner.h b/include/media/tuner.h index 1bf24a6ed8f1..77068fcc86bd 100644 --- a/include/media/tuner.h +++ b/include/media/tuner.h | |||
@@ -78,7 +78,7 @@ | |||
78 | 78 | ||
79 | #define TUNER_HITACHI_NTSC 40 | 79 | #define TUNER_HITACHI_NTSC 40 |
80 | #define TUNER_PHILIPS_PAL_MK 41 | 80 | #define TUNER_PHILIPS_PAL_MK 41 |
81 | #define TUNER_PHILIPS_ATSC 42 | 81 | #define TUNER_PHILIPS_FCV1236D 42 |
82 | #define TUNER_PHILIPS_FM1236_MK3 43 | 82 | #define TUNER_PHILIPS_FM1236_MK3 43 |
83 | 83 | ||
84 | #define TUNER_PHILIPS_4IN1 44 /* ATI TV Wonder Pro - Conexant */ | 84 | #define TUNER_PHILIPS_4IN1 44 /* ATI TV Wonder Pro - Conexant */ |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index 032bb75f69c2..0ea0bd85c036 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
@@ -153,6 +153,12 @@ enum { | |||
153 | V4L2_IDENT_MSP4428G = 44287, | 153 | V4L2_IDENT_MSP4428G = 44287, |
154 | V4L2_IDENT_MSP4448G = 44487, | 154 | V4L2_IDENT_MSP4448G = 44487, |
155 | V4L2_IDENT_MSP4458G = 44587, | 155 | V4L2_IDENT_MSP4458G = 44587, |
156 | |||
157 | /* Micron CMOS sensor chips: 45000-45099 */ | ||
158 | V4L2_IDENT_MT9M001C12ST = 45000, | ||
159 | V4L2_IDENT_MT9M001C12STM = 45005, | ||
160 | V4L2_IDENT_MT9V022IX7ATC = 45010, /* No way to detect "normal" I77ATx */ | ||
161 | V4L2_IDENT_MT9V022IX7ATM = 45015, /* and "lead free" IA7ATx chips */ | ||
156 | }; | 162 | }; |
157 | 163 | ||
158 | #endif | 164 | #endif |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index f2114459995d..a807d2f86ee8 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
@@ -318,6 +318,10 @@ struct video_device | |||
318 | int (*vidioc_g_chip_ident) (struct file *file, void *fh, | 318 | int (*vidioc_g_chip_ident) (struct file *file, void *fh, |
319 | struct v4l2_chip_ident *chip); | 319 | struct v4l2_chip_ident *chip); |
320 | 320 | ||
321 | /* For other private ioctls */ | ||
322 | int (*vidioc_default) (struct file *file, void *fh, | ||
323 | int cmd, void *arg); | ||
324 | |||
321 | 325 | ||
322 | #ifdef OBSOLETE_OWNER /* to be removed soon */ | 326 | #ifdef OBSOLETE_OWNER /* to be removed soon */ |
323 | /* obsolete -- fops->owner is used instead */ | 327 | /* obsolete -- fops->owner is used instead */ |
diff --git a/include/media/videobuf-core.h b/include/media/videobuf-core.h index 99033945cdee..5b39a22533fe 100644 --- a/include/media/videobuf-core.h +++ b/include/media/videobuf-core.h | |||
@@ -13,6 +13,9 @@ | |||
13 | * the Free Software Foundation; either version 2 | 13 | * the Free Software Foundation; either version 2 |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #ifndef _VIDEOBUF_CORE_H | ||
17 | #define _VIDEOBUF_CORE_H | ||
18 | |||
16 | #include <linux/poll.h> | 19 | #include <linux/poll.h> |
17 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | 20 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
18 | #include <linux/videodev.h> | 21 | #include <linux/videodev.h> |
@@ -123,7 +126,8 @@ struct videobuf_queue_ops { | |||
123 | struct videobuf_qtype_ops { | 126 | struct videobuf_qtype_ops { |
124 | u32 magic; | 127 | u32 magic; |
125 | 128 | ||
126 | void* (*alloc) (size_t size); | 129 | void *(*alloc) (size_t size); |
130 | void *(*vmalloc) (struct videobuf_buffer *buf); | ||
127 | int (*iolock) (struct videobuf_queue* q, | 131 | int (*iolock) (struct videobuf_queue* q, |
128 | struct videobuf_buffer *vb, | 132 | struct videobuf_buffer *vb, |
129 | struct v4l2_framebuffer *fbuf); | 133 | struct v4l2_framebuffer *fbuf); |
@@ -151,7 +155,9 @@ struct videobuf_qtype_ops { | |||
151 | struct videobuf_queue { | 155 | struct videobuf_queue { |
152 | struct mutex vb_lock; | 156 | struct mutex vb_lock; |
153 | spinlock_t *irqlock; | 157 | spinlock_t *irqlock; |
154 | void *dev; /* on pci, points to struct pci_dev */ | 158 | struct device *dev; |
159 | |||
160 | wait_queue_head_t wait; /* wait if queue is empty */ | ||
155 | 161 | ||
156 | enum v4l2_buf_type type; | 162 | enum v4l2_buf_type type; |
157 | unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */ | 163 | unsigned int inputs; /* for V4L2_BUF_FLAG_INPUT */ |
@@ -183,9 +189,13 @@ int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb, | |||
183 | 189 | ||
184 | void *videobuf_alloc(struct videobuf_queue* q); | 190 | void *videobuf_alloc(struct videobuf_queue* q); |
185 | 191 | ||
192 | /* Used on videobuf-dvb */ | ||
193 | void *videobuf_queue_to_vmalloc (struct videobuf_queue* q, | ||
194 | struct videobuf_buffer *buf); | ||
195 | |||
186 | void videobuf_queue_core_init(struct videobuf_queue *q, | 196 | void videobuf_queue_core_init(struct videobuf_queue *q, |
187 | struct videobuf_queue_ops *ops, | 197 | struct videobuf_queue_ops *ops, |
188 | void *dev, | 198 | struct device *dev, |
189 | spinlock_t *irqlock, | 199 | spinlock_t *irqlock, |
190 | enum v4l2_buf_type type, | 200 | enum v4l2_buf_type type, |
191 | enum v4l2_field field, | 201 | enum v4l2_field field, |
@@ -231,10 +241,4 @@ int videobuf_mmap_free(struct videobuf_queue *q); | |||
231 | int videobuf_mmap_mapper(struct videobuf_queue *q, | 241 | int videobuf_mmap_mapper(struct videobuf_queue *q, |
232 | struct vm_area_struct *vma); | 242 | struct vm_area_struct *vma); |
233 | 243 | ||
234 | /* --------------------------------------------------------------------- */ | 244 | #endif |
235 | |||
236 | /* | ||
237 | * Local variables: | ||
238 | * c-basic-offset: 8 | ||
239 | * End: | ||
240 | */ | ||
diff --git a/include/media/videobuf-dma-sg.h b/include/media/videobuf-dma-sg.h index 38105031db23..be8da269ee33 100644 --- a/include/media/videobuf-dma-sg.h +++ b/include/media/videobuf-dma-sg.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * helper functions for PCI DMA video4linux capture buffers | 2 | * helper functions for SG DMA video4linux capture buffers |
3 | * | 3 | * |
4 | * The functions expect the hardware being able to scatter gatter | 4 | * The functions expect the hardware being able to scatter gatter |
5 | * (i.e. the buffers are not linear in physical memory, but fragmented | 5 | * (i.e. the buffers are not linear in physical memory, but fragmented |
@@ -68,9 +68,6 @@ struct videobuf_dmabuf { | |||
68 | /* for kernel buffers */ | 68 | /* for kernel buffers */ |
69 | void *vmalloc; | 69 | void *vmalloc; |
70 | 70 | ||
71 | /* Stores the userspace pointer to vmalloc area */ | ||
72 | void *varea; | ||
73 | |||
74 | /* for overlay buffers (pci-pci dma) */ | 71 | /* for overlay buffers (pci-pci dma) */ |
75 | dma_addr_t bus_addr; | 72 | dma_addr_t bus_addr; |
76 | 73 | ||
@@ -81,7 +78,7 @@ struct videobuf_dmabuf { | |||
81 | int direction; | 78 | int direction; |
82 | }; | 79 | }; |
83 | 80 | ||
84 | struct videbuf_pci_sg_memory | 81 | struct videobuf_dma_sg_memory |
85 | { | 82 | { |
86 | u32 magic; | 83 | u32 magic; |
87 | 84 | ||
@@ -103,11 +100,11 @@ int videobuf_dma_sync(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | |||
103 | int videobuf_dma_unmap(struct videobuf_queue* q,struct videobuf_dmabuf *dma); | 100 | int videobuf_dma_unmap(struct videobuf_queue* q,struct videobuf_dmabuf *dma); |
104 | struct videobuf_dmabuf *videobuf_to_dma (struct videobuf_buffer *buf); | 101 | struct videobuf_dmabuf *videobuf_to_dma (struct videobuf_buffer *buf); |
105 | 102 | ||
106 | void *videobuf_pci_alloc (size_t size); | 103 | void *videobuf_sg_alloc(size_t size); |
107 | 104 | ||
108 | void videobuf_queue_pci_init(struct videobuf_queue* q, | 105 | void videobuf_queue_sg_init(struct videobuf_queue* q, |
109 | struct videobuf_queue_ops *ops, | 106 | struct videobuf_queue_ops *ops, |
110 | void *dev, | 107 | struct device *dev, |
111 | spinlock_t *irqlock, | 108 | spinlock_t *irqlock, |
112 | enum v4l2_buf_type type, | 109 | enum v4l2_buf_type type, |
113 | enum v4l2_field field, | 110 | enum v4l2_field field, |
@@ -117,6 +114,6 @@ void videobuf_queue_pci_init(struct videobuf_queue* q, | |||
117 | /*FIXME: these variants are used only on *-alsa code, where videobuf is | 114 | /*FIXME: these variants are used only on *-alsa code, where videobuf is |
118 | * used without queue | 115 | * used without queue |
119 | */ | 116 | */ |
120 | int videobuf_pci_dma_map(struct pci_dev *pci,struct videobuf_dmabuf *dma); | 117 | int videobuf_sg_dma_map(struct device *dev, struct videobuf_dmabuf *dma); |
121 | int videobuf_pci_dma_unmap(struct pci_dev *pci,struct videobuf_dmabuf *dma); | 118 | int videobuf_sg_dma_unmap(struct device *dev, struct videobuf_dmabuf *dma); |
122 | 119 | ||
diff --git a/include/media/videobuf-dvb.h b/include/media/videobuf-dvb.h index 8233cafdeef6..b77748696329 100644 --- a/include/media/videobuf-dvb.h +++ b/include/media/videobuf-dvb.h | |||
@@ -27,7 +27,8 @@ struct videobuf_dvb { | |||
27 | int videobuf_dvb_register(struct videobuf_dvb *dvb, | 27 | int videobuf_dvb_register(struct videobuf_dvb *dvb, |
28 | struct module *module, | 28 | struct module *module, |
29 | void *adapter_priv, | 29 | void *adapter_priv, |
30 | struct device *device); | 30 | struct device *device, |
31 | short *adapter_nr); | ||
31 | void videobuf_dvb_unregister(struct videobuf_dvb *dvb); | 32 | void videobuf_dvb_unregister(struct videobuf_dvb *dvb); |
32 | 33 | ||
33 | /* | 34 | /* |
diff --git a/include/media/videobuf-vmalloc.h b/include/media/videobuf-vmalloc.h index ec63ab0fab93..aed39460c154 100644 --- a/include/media/videobuf-vmalloc.h +++ b/include/media/videobuf-vmalloc.h | |||
@@ -12,6 +12,8 @@ | |||
12 | * it under the terms of the GNU General Public License as published by | 12 | * it under the terms of the GNU General Public License as published by |
13 | * the Free Software Foundation; either version 2 | 13 | * the Free Software Foundation; either version 2 |
14 | */ | 14 | */ |
15 | #ifndef _VIDEOBUF_VMALLOC_H | ||
16 | #define _VIDEOBUF_VMALLOC_H | ||
15 | 17 | ||
16 | #include <media/videobuf-core.h> | 18 | #include <media/videobuf-core.h> |
17 | 19 | ||
@@ -39,3 +41,5 @@ void videobuf_queue_vmalloc_init(struct videobuf_queue* q, | |||
39 | void *videobuf_to_vmalloc (struct videobuf_buffer *buf); | 41 | void *videobuf_to_vmalloc (struct videobuf_buffer *buf); |
40 | 42 | ||
41 | void videobuf_vmalloc_free (struct videobuf_buffer *buf); | 43 | void videobuf_vmalloc_free (struct videobuf_buffer *buf); |
44 | |||
45 | #endif | ||
diff --git a/include/mtd/Kbuild b/include/mtd/Kbuild index 4d46b3bdebd8..8eb018f96002 100644 --- a/include/mtd/Kbuild +++ b/include/mtd/Kbuild | |||
@@ -3,5 +3,4 @@ header-y += jffs2-user.h | |||
3 | header-y += mtd-abi.h | 3 | header-y += mtd-abi.h |
4 | header-y += mtd-user.h | 4 | header-y += mtd-user.h |
5 | header-y += nftl-user.h | 5 | header-y += nftl-user.h |
6 | header-y += ubi-header.h | ||
7 | header-y += ubi-user.h | 6 | header-y += ubi-user.h |
diff --git a/include/mtd/ubi-header.h b/include/mtd/ubi-header.h deleted file mode 100644 index 292f916ea564..000000000000 --- a/include/mtd/ubi-header.h +++ /dev/null | |||
@@ -1,372 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) International Business Machines Corp., 2006 | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | ||
12 | * the 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 | * Authors: Artem Bityutskiy (Битюцкий Артём) | ||
19 | * Thomas Gleixner | ||
20 | * Frank Haverkamp | ||
21 | * Oliver Lohmann | ||
22 | * Andreas Arnez | ||
23 | */ | ||
24 | |||
25 | /* | ||
26 | * This file defines the layout of UBI headers and all the other UBI on-flash | ||
27 | * data structures. May be included by user-space. | ||
28 | */ | ||
29 | |||
30 | #ifndef __UBI_HEADER_H__ | ||
31 | #define __UBI_HEADER_H__ | ||
32 | |||
33 | #include <asm/byteorder.h> | ||
34 | |||
35 | /* The version of UBI images supported by this implementation */ | ||
36 | #define UBI_VERSION 1 | ||
37 | |||
38 | /* The highest erase counter value supported by this implementation */ | ||
39 | #define UBI_MAX_ERASECOUNTER 0x7FFFFFFF | ||
40 | |||
41 | /* The initial CRC32 value used when calculating CRC checksums */ | ||
42 | #define UBI_CRC32_INIT 0xFFFFFFFFU | ||
43 | |||
44 | /* Erase counter header magic number (ASCII "UBI#") */ | ||
45 | #define UBI_EC_HDR_MAGIC 0x55424923 | ||
46 | /* Volume identifier header magic number (ASCII "UBI!") */ | ||
47 | #define UBI_VID_HDR_MAGIC 0x55424921 | ||
48 | |||
49 | /* | ||
50 | * Volume type constants used in the volume identifier header. | ||
51 | * | ||
52 | * @UBI_VID_DYNAMIC: dynamic volume | ||
53 | * @UBI_VID_STATIC: static volume | ||
54 | */ | ||
55 | enum { | ||
56 | UBI_VID_DYNAMIC = 1, | ||
57 | UBI_VID_STATIC = 2 | ||
58 | }; | ||
59 | |||
60 | /* | ||
61 | * Volume flags used in the volume table record. | ||
62 | * | ||
63 | * @UBI_VTBL_AUTORESIZE_FLG: auto-resize this volume | ||
64 | * | ||
65 | * %UBI_VTBL_AUTORESIZE_FLG flag can be set only for one volume in the volume | ||
66 | * table. UBI automatically re-sizes the volume which has this flag and makes | ||
67 | * the volume to be of largest possible size. This means that if after the | ||
68 | * initialization UBI finds out that there are available physical eraseblocks | ||
69 | * present on the device, it automatically appends all of them to the volume | ||
70 | * (the physical eraseblocks reserved for bad eraseblocks handling and other | ||
71 | * reserved physical eraseblocks are not taken). So, if there is a volume with | ||
72 | * the %UBI_VTBL_AUTORESIZE_FLG flag set, the amount of available logical | ||
73 | * eraseblocks will be zero after UBI is loaded, because all of them will be | ||
74 | * reserved for this volume. Note, the %UBI_VTBL_AUTORESIZE_FLG bit is cleared | ||
75 | * after the volume had been initialized. | ||
76 | * | ||
77 | * The auto-resize feature is useful for device production purposes. For | ||
78 | * example, different NAND flash chips may have different amount of initial bad | ||
79 | * eraseblocks, depending of particular chip instance. Manufacturers of NAND | ||
80 | * chips usually guarantee that the amount of initial bad eraseblocks does not | ||
81 | * exceed certain percent, e.g. 2%. When one creates an UBI image which will be | ||
82 | * flashed to the end devices in production, he does not know the exact amount | ||
83 | * of good physical eraseblocks the NAND chip on the device will have, but this | ||
84 | * number is required to calculate the volume sized and put them to the volume | ||
85 | * table of the UBI image. In this case, one of the volumes (e.g., the one | ||
86 | * which will store the root file system) is marked as "auto-resizable", and | ||
87 | * UBI will adjust its size on the first boot if needed. | ||
88 | * | ||
89 | * Note, first UBI reserves some amount of physical eraseblocks for bad | ||
90 | * eraseblock handling, and then re-sizes the volume, not vice-versa. This | ||
91 | * means that the pool of reserved physical eraseblocks will always be present. | ||
92 | */ | ||
93 | enum { | ||
94 | UBI_VTBL_AUTORESIZE_FLG = 0x01, | ||
95 | }; | ||
96 | |||
97 | /* | ||
98 | * Compatibility constants used by internal volumes. | ||
99 | * | ||
100 | * @UBI_COMPAT_DELETE: delete this internal volume before anything is written | ||
101 | * to the flash | ||
102 | * @UBI_COMPAT_RO: attach this device in read-only mode | ||
103 | * @UBI_COMPAT_PRESERVE: preserve this internal volume - do not touch its | ||
104 | * physical eraseblocks, don't allow the wear-leveling unit to move them | ||
105 | * @UBI_COMPAT_REJECT: reject this UBI image | ||
106 | */ | ||
107 | enum { | ||
108 | UBI_COMPAT_DELETE = 1, | ||
109 | UBI_COMPAT_RO = 2, | ||
110 | UBI_COMPAT_PRESERVE = 4, | ||
111 | UBI_COMPAT_REJECT = 5 | ||
112 | }; | ||
113 | |||
114 | /* Sizes of UBI headers */ | ||
115 | #define UBI_EC_HDR_SIZE sizeof(struct ubi_ec_hdr) | ||
116 | #define UBI_VID_HDR_SIZE sizeof(struct ubi_vid_hdr) | ||
117 | |||
118 | /* Sizes of UBI headers without the ending CRC */ | ||
119 | #define UBI_EC_HDR_SIZE_CRC (UBI_EC_HDR_SIZE - sizeof(__be32)) | ||
120 | #define UBI_VID_HDR_SIZE_CRC (UBI_VID_HDR_SIZE - sizeof(__be32)) | ||
121 | |||
122 | /** | ||
123 | * struct ubi_ec_hdr - UBI erase counter header. | ||
124 | * @magic: erase counter header magic number (%UBI_EC_HDR_MAGIC) | ||
125 | * @version: version of UBI implementation which is supposed to accept this | ||
126 | * UBI image | ||
127 | * @padding1: reserved for future, zeroes | ||
128 | * @ec: the erase counter | ||
129 | * @vid_hdr_offset: where the VID header starts | ||
130 | * @data_offset: where the user data start | ||
131 | * @padding2: reserved for future, zeroes | ||
132 | * @hdr_crc: erase counter header CRC checksum | ||
133 | * | ||
134 | * The erase counter header takes 64 bytes and has a plenty of unused space for | ||
135 | * future usage. The unused fields are zeroed. The @version field is used to | ||
136 | * indicate the version of UBI implementation which is supposed to be able to | ||
137 | * work with this UBI image. If @version is greater then the current UBI | ||
138 | * version, the image is rejected. This may be useful in future if something | ||
139 | * is changed radically. This field is duplicated in the volume identifier | ||
140 | * header. | ||
141 | * | ||
142 | * The @vid_hdr_offset and @data_offset fields contain the offset of the the | ||
143 | * volume identifier header and user data, relative to the beginning of the | ||
144 | * physical eraseblock. These values have to be the same for all physical | ||
145 | * eraseblocks. | ||
146 | */ | ||
147 | struct ubi_ec_hdr { | ||
148 | __be32 magic; | ||
149 | __u8 version; | ||
150 | __u8 padding1[3]; | ||
151 | __be64 ec; /* Warning: the current limit is 31-bit anyway! */ | ||
152 | __be32 vid_hdr_offset; | ||
153 | __be32 data_offset; | ||
154 | __u8 padding2[36]; | ||
155 | __be32 hdr_crc; | ||
156 | } __attribute__ ((packed)); | ||
157 | |||
158 | /** | ||
159 | * struct ubi_vid_hdr - on-flash UBI volume identifier header. | ||
160 | * @magic: volume identifier header magic number (%UBI_VID_HDR_MAGIC) | ||
161 | * @version: UBI implementation version which is supposed to accept this UBI | ||
162 | * image (%UBI_VERSION) | ||
163 | * @vol_type: volume type (%UBI_VID_DYNAMIC or %UBI_VID_STATIC) | ||
164 | * @copy_flag: if this logical eraseblock was copied from another physical | ||
165 | * eraseblock (for wear-leveling reasons) | ||
166 | * @compat: compatibility of this volume (%0, %UBI_COMPAT_DELETE, | ||
167 | * %UBI_COMPAT_IGNORE, %UBI_COMPAT_PRESERVE, or %UBI_COMPAT_REJECT) | ||
168 | * @vol_id: ID of this volume | ||
169 | * @lnum: logical eraseblock number | ||
170 | * @leb_ver: version of this logical eraseblock (IMPORTANT: obsolete, to be | ||
171 | * removed, kept only for not breaking older UBI users) | ||
172 | * @data_size: how many bytes of data this logical eraseblock contains | ||
173 | * @used_ebs: total number of used logical eraseblocks in this volume | ||
174 | * @data_pad: how many bytes at the end of this physical eraseblock are not | ||
175 | * used | ||
176 | * @data_crc: CRC checksum of the data stored in this logical eraseblock | ||
177 | * @padding1: reserved for future, zeroes | ||
178 | * @sqnum: sequence number | ||
179 | * @padding2: reserved for future, zeroes | ||
180 | * @hdr_crc: volume identifier header CRC checksum | ||
181 | * | ||
182 | * The @sqnum is the value of the global sequence counter at the time when this | ||
183 | * VID header was created. The global sequence counter is incremented each time | ||
184 | * UBI writes a new VID header to the flash, i.e. when it maps a logical | ||
185 | * eraseblock to a new physical eraseblock. The global sequence counter is an | ||
186 | * unsigned 64-bit integer and we assume it never overflows. The @sqnum | ||
187 | * (sequence number) is used to distinguish between older and newer versions of | ||
188 | * logical eraseblocks. | ||
189 | * | ||
190 | * There are 2 situations when there may be more then one physical eraseblock | ||
191 | * corresponding to the same logical eraseblock, i.e., having the same @vol_id | ||
192 | * and @lnum values in the volume identifier header. Suppose we have a logical | ||
193 | * eraseblock L and it is mapped to the physical eraseblock P. | ||
194 | * | ||
195 | * 1. Because UBI may erase physical eraseblocks asynchronously, the following | ||
196 | * situation is possible: L is asynchronously erased, so P is scheduled for | ||
197 | * erasure, then L is written to,i.e. mapped to another physical eraseblock P1, | ||
198 | * so P1 is written to, then an unclean reboot happens. Result - there are 2 | ||
199 | * physical eraseblocks P and P1 corresponding to the same logical eraseblock | ||
200 | * L. But P1 has greater sequence number, so UBI picks P1 when it attaches the | ||
201 | * flash. | ||
202 | * | ||
203 | * 2. From time to time UBI moves logical eraseblocks to other physical | ||
204 | * eraseblocks for wear-leveling reasons. If, for example, UBI moves L from P | ||
205 | * to P1, and an unclean reboot happens before P is physically erased, there | ||
206 | * are two physical eraseblocks P and P1 corresponding to L and UBI has to | ||
207 | * select one of them when the flash is attached. The @sqnum field says which | ||
208 | * PEB is the original (obviously P will have lower @sqnum) and the copy. But | ||
209 | * it is not enough to select the physical eraseblock with the higher sequence | ||
210 | * number, because the unclean reboot could have happen in the middle of the | ||
211 | * copying process, so the data in P is corrupted. It is also not enough to | ||
212 | * just select the physical eraseblock with lower sequence number, because the | ||
213 | * data there may be old (consider a case if more data was added to P1 after | ||
214 | * the copying). Moreover, the unclean reboot may happen when the erasure of P | ||
215 | * was just started, so it result in unstable P, which is "mostly" OK, but | ||
216 | * still has unstable bits. | ||
217 | * | ||
218 | * UBI uses the @copy_flag field to indicate that this logical eraseblock is a | ||
219 | * copy. UBI also calculates data CRC when the data is moved and stores it at | ||
220 | * the @data_crc field of the copy (P1). So when UBI needs to pick one physical | ||
221 | * eraseblock of two (P or P1), the @copy_flag of the newer one (P1) is | ||
222 | * examined. If it is cleared, the situation* is simple and the newer one is | ||
223 | * picked. If it is set, the data CRC of the copy (P1) is examined. If the CRC | ||
224 | * checksum is correct, this physical eraseblock is selected (P1). Otherwise | ||
225 | * the older one (P) is selected. | ||
226 | * | ||
227 | * Note, there is an obsolete @leb_ver field which was used instead of @sqnum | ||
228 | * in the past. But it is not used anymore and we keep it in order to be able | ||
229 | * to deal with old UBI images. It will be removed at some point. | ||
230 | * | ||
231 | * There are 2 sorts of volumes in UBI: user volumes and internal volumes. | ||
232 | * Internal volumes are not seen from outside and are used for various internal | ||
233 | * UBI purposes. In this implementation there is only one internal volume - the | ||
234 | * layout volume. Internal volumes are the main mechanism of UBI extensions. | ||
235 | * For example, in future one may introduce a journal internal volume. Internal | ||
236 | * volumes have their own reserved range of IDs. | ||
237 | * | ||
238 | * The @compat field is only used for internal volumes and contains the "degree | ||
239 | * of their compatibility". It is always zero for user volumes. This field | ||
240 | * provides a mechanism to introduce UBI extensions and to be still compatible | ||
241 | * with older UBI binaries. For example, if someone introduced a journal in | ||
242 | * future, he would probably use %UBI_COMPAT_DELETE compatibility for the | ||
243 | * journal volume. And in this case, older UBI binaries, which know nothing | ||
244 | * about the journal volume, would just delete this volume and work perfectly | ||
245 | * fine. This is similar to what Ext2fs does when it is fed by an Ext3fs image | ||
246 | * - it just ignores the Ext3fs journal. | ||
247 | * | ||
248 | * The @data_crc field contains the CRC checksum of the contents of the logical | ||
249 | * eraseblock if this is a static volume. In case of dynamic volumes, it does | ||
250 | * not contain the CRC checksum as a rule. The only exception is when the | ||
251 | * data of the physical eraseblock was moved by the wear-leveling unit, then | ||
252 | * the wear-leveling unit calculates the data CRC and stores it in the | ||
253 | * @data_crc field. And of course, the @copy_flag is %in this case. | ||
254 | * | ||
255 | * The @data_size field is used only for static volumes because UBI has to know | ||
256 | * how many bytes of data are stored in this eraseblock. For dynamic volumes, | ||
257 | * this field usually contains zero. The only exception is when the data of the | ||
258 | * physical eraseblock was moved to another physical eraseblock for | ||
259 | * wear-leveling reasons. In this case, UBI calculates CRC checksum of the | ||
260 | * contents and uses both @data_crc and @data_size fields. In this case, the | ||
261 | * @data_size field contains data size. | ||
262 | * | ||
263 | * The @used_ebs field is used only for static volumes and indicates how many | ||
264 | * eraseblocks the data of the volume takes. For dynamic volumes this field is | ||
265 | * not used and always contains zero. | ||
266 | * | ||
267 | * The @data_pad is calculated when volumes are created using the alignment | ||
268 | * parameter. So, effectively, the @data_pad field reduces the size of logical | ||
269 | * eraseblocks of this volume. This is very handy when one uses block-oriented | ||
270 | * software (say, cramfs) on top of the UBI volume. | ||
271 | */ | ||
272 | struct ubi_vid_hdr { | ||
273 | __be32 magic; | ||
274 | __u8 version; | ||
275 | __u8 vol_type; | ||
276 | __u8 copy_flag; | ||
277 | __u8 compat; | ||
278 | __be32 vol_id; | ||
279 | __be32 lnum; | ||
280 | __be32 leb_ver; /* obsolete, to be removed, don't use */ | ||
281 | __be32 data_size; | ||
282 | __be32 used_ebs; | ||
283 | __be32 data_pad; | ||
284 | __be32 data_crc; | ||
285 | __u8 padding1[4]; | ||
286 | __be64 sqnum; | ||
287 | __u8 padding2[12]; | ||
288 | __be32 hdr_crc; | ||
289 | } __attribute__ ((packed)); | ||
290 | |||
291 | /* Internal UBI volumes count */ | ||
292 | #define UBI_INT_VOL_COUNT 1 | ||
293 | |||
294 | /* | ||
295 | * Starting ID of internal volumes. There is reserved room for 4096 internal | ||
296 | * volumes. | ||
297 | */ | ||
298 | #define UBI_INTERNAL_VOL_START (0x7FFFFFFF - 4096) | ||
299 | |||
300 | /* The layout volume contains the volume table */ | ||
301 | |||
302 | #define UBI_LAYOUT_VOLUME_ID UBI_INTERNAL_VOL_START | ||
303 | #define UBI_LAYOUT_VOLUME_TYPE UBI_VID_DYNAMIC | ||
304 | #define UBI_LAYOUT_VOLUME_ALIGN 1 | ||
305 | #define UBI_LAYOUT_VOLUME_EBS 2 | ||
306 | #define UBI_LAYOUT_VOLUME_NAME "layout volume" | ||
307 | #define UBI_LAYOUT_VOLUME_COMPAT UBI_COMPAT_REJECT | ||
308 | |||
309 | /* The maximum number of volumes per one UBI device */ | ||
310 | #define UBI_MAX_VOLUMES 128 | ||
311 | |||
312 | /* The maximum volume name length */ | ||
313 | #define UBI_VOL_NAME_MAX 127 | ||
314 | |||
315 | /* Size of the volume table record */ | ||
316 | #define UBI_VTBL_RECORD_SIZE sizeof(struct ubi_vtbl_record) | ||
317 | |||
318 | /* Size of the volume table record without the ending CRC */ | ||
319 | #define UBI_VTBL_RECORD_SIZE_CRC (UBI_VTBL_RECORD_SIZE - sizeof(__be32)) | ||
320 | |||
321 | /** | ||
322 | * struct ubi_vtbl_record - a record in the volume table. | ||
323 | * @reserved_pebs: how many physical eraseblocks are reserved for this volume | ||
324 | * @alignment: volume alignment | ||
325 | * @data_pad: how many bytes are unused at the end of the each physical | ||
326 | * eraseblock to satisfy the requested alignment | ||
327 | * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME) | ||
328 | * @upd_marker: if volume update was started but not finished | ||
329 | * @name_len: volume name length | ||
330 | * @name: the volume name | ||
331 | * @flags: volume flags (%UBI_VTBL_AUTORESIZE_FLG) | ||
332 | * @padding: reserved, zeroes | ||
333 | * @crc: a CRC32 checksum of the record | ||
334 | * | ||
335 | * The volume table records are stored in the volume table, which is stored in | ||
336 | * the layout volume. The layout volume consists of 2 logical eraseblock, each | ||
337 | * of which contains a copy of the volume table (i.e., the volume table is | ||
338 | * duplicated). The volume table is an array of &struct ubi_vtbl_record | ||
339 | * objects indexed by the volume ID. | ||
340 | * | ||
341 | * If the size of the logical eraseblock is large enough to fit | ||
342 | * %UBI_MAX_VOLUMES records, the volume table contains %UBI_MAX_VOLUMES | ||
343 | * records. Otherwise, it contains as many records as it can fit (i.e., size of | ||
344 | * logical eraseblock divided by sizeof(struct ubi_vtbl_record)). | ||
345 | * | ||
346 | * The @upd_marker flag is used to implement volume update. It is set to %1 | ||
347 | * before update and set to %0 after the update. So if the update operation was | ||
348 | * interrupted, UBI knows that the volume is corrupted. | ||
349 | * | ||
350 | * The @alignment field is specified when the volume is created and cannot be | ||
351 | * later changed. It may be useful, for example, when a block-oriented file | ||
352 | * system works on top of UBI. The @data_pad field is calculated using the | ||
353 | * logical eraseblock size and @alignment. The alignment must be multiple to the | ||
354 | * minimal flash I/O unit. If @alignment is 1, all the available space of | ||
355 | * the physical eraseblocks is used. | ||
356 | * | ||
357 | * Empty records contain all zeroes and the CRC checksum of those zeroes. | ||
358 | */ | ||
359 | struct ubi_vtbl_record { | ||
360 | __be32 reserved_pebs; | ||
361 | __be32 alignment; | ||
362 | __be32 data_pad; | ||
363 | __u8 vol_type; | ||
364 | __u8 upd_marker; | ||
365 | __be16 name_len; | ||
366 | __u8 name[UBI_VOL_NAME_MAX+1]; | ||
367 | __u8 flags; | ||
368 | __u8 padding[23]; | ||
369 | __be32 crc; | ||
370 | } __attribute__ ((packed)); | ||
371 | |||
372 | #endif /* !__UBI_HEADER_H__ */ | ||
diff --git a/include/net/compat.h b/include/net/compat.h index 406db242f73a..05fa5d0254ab 100644 --- a/include/net/compat.h +++ b/include/net/compat.h | |||
@@ -40,4 +40,7 @@ extern int put_cmsg_compat(struct msghdr*, int, int, int, void *); | |||
40 | 40 | ||
41 | extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *, unsigned char *, int); | 41 | extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *, unsigned char *, int); |
42 | 42 | ||
43 | extern int compat_mc_setsockopt(struct sock *, int, int, char __user *, int, | ||
44 | int (*)(struct sock *, int, int, char __user *, int)); | ||
45 | |||
43 | #endif /* NET_COMPAT_H */ | 46 | #endif /* NET_COMPAT_H */ |
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 49c48983019f..e0a612bc9c4e 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
@@ -383,6 +383,15 @@ static inline int ipv6_addr_orchid(const struct in6_addr *a) | |||
383 | == htonl(0x20010010)); | 383 | == htonl(0x20010010)); |
384 | } | 384 | } |
385 | 385 | ||
386 | static inline void ipv6_addr_set_v4mapped(const __be32 addr, | ||
387 | struct in6_addr *v4mapped) | ||
388 | { | ||
389 | ipv6_addr_set(v4mapped, | ||
390 | 0, 0, | ||
391 | htonl(0x0000FFFF), | ||
392 | addr); | ||
393 | } | ||
394 | |||
386 | /* | 395 | /* |
387 | * find the first different bit between two addresses | 396 | * find the first different bit between two addresses |
388 | * length of address must be a multiple of 32bits | 397 | * length of address must be a multiple of 32bits |
diff --git a/include/rdma/ib_umem.h b/include/rdma/ib_umem.h index 22298423cf0b..9ee0d2e51b16 100644 --- a/include/rdma/ib_umem.h +++ b/include/rdma/ib_umem.h | |||
@@ -62,7 +62,7 @@ struct ib_umem_chunk { | |||
62 | #ifdef CONFIG_INFINIBAND_USER_MEM | 62 | #ifdef CONFIG_INFINIBAND_USER_MEM |
63 | 63 | ||
64 | struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, | 64 | struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, |
65 | size_t size, int access); | 65 | size_t size, int access, int dmasync); |
66 | void ib_umem_release(struct ib_umem *umem); | 66 | void ib_umem_release(struct ib_umem *umem); |
67 | int ib_umem_page_count(struct ib_umem *umem); | 67 | int ib_umem_page_count(struct ib_umem *umem); |
68 | 68 | ||
@@ -72,7 +72,7 @@ int ib_umem_page_count(struct ib_umem *umem); | |||
72 | 72 | ||
73 | static inline struct ib_umem *ib_umem_get(struct ib_ucontext *context, | 73 | static inline struct ib_umem *ib_umem_get(struct ib_ucontext *context, |
74 | unsigned long addr, size_t size, | 74 | unsigned long addr, size_t size, |
75 | int access) { | 75 | int access, int dmasync) { |
76 | return ERR_PTR(-EINVAL); | 76 | return ERR_PTR(-EINVAL); |
77 | } | 77 | } |
78 | static inline void ib_umem_release(struct ib_umem *umem) { } | 78 | static inline void ib_umem_release(struct ib_umem *umem) { } |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 2dcbecce3f61..911a661b7278 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
@@ -1542,6 +1542,24 @@ static inline void ib_dma_unmap_single(struct ib_device *dev, | |||
1542 | dma_unmap_single(dev->dma_device, addr, size, direction); | 1542 | dma_unmap_single(dev->dma_device, addr, size, direction); |
1543 | } | 1543 | } |
1544 | 1544 | ||
1545 | static inline u64 ib_dma_map_single_attrs(struct ib_device *dev, | ||
1546 | void *cpu_addr, size_t size, | ||
1547 | enum dma_data_direction direction, | ||
1548 | struct dma_attrs *attrs) | ||
1549 | { | ||
1550 | return dma_map_single_attrs(dev->dma_device, cpu_addr, size, | ||
1551 | direction, attrs); | ||
1552 | } | ||
1553 | |||
1554 | static inline void ib_dma_unmap_single_attrs(struct ib_device *dev, | ||
1555 | u64 addr, size_t size, | ||
1556 | enum dma_data_direction direction, | ||
1557 | struct dma_attrs *attrs) | ||
1558 | { | ||
1559 | return dma_unmap_single_attrs(dev->dma_device, addr, size, | ||
1560 | direction, attrs); | ||
1561 | } | ||
1562 | |||
1545 | /** | 1563 | /** |
1546 | * ib_dma_map_page - Map a physical page to DMA address | 1564 | * ib_dma_map_page - Map a physical page to DMA address |
1547 | * @dev: The device for which the dma_addr is to be created | 1565 | * @dev: The device for which the dma_addr is to be created |
@@ -1611,6 +1629,21 @@ static inline void ib_dma_unmap_sg(struct ib_device *dev, | |||
1611 | dma_unmap_sg(dev->dma_device, sg, nents, direction); | 1629 | dma_unmap_sg(dev->dma_device, sg, nents, direction); |
1612 | } | 1630 | } |
1613 | 1631 | ||
1632 | static inline int ib_dma_map_sg_attrs(struct ib_device *dev, | ||
1633 | struct scatterlist *sg, int nents, | ||
1634 | enum dma_data_direction direction, | ||
1635 | struct dma_attrs *attrs) | ||
1636 | { | ||
1637 | return dma_map_sg_attrs(dev->dma_device, sg, nents, direction, attrs); | ||
1638 | } | ||
1639 | |||
1640 | static inline void ib_dma_unmap_sg_attrs(struct ib_device *dev, | ||
1641 | struct scatterlist *sg, int nents, | ||
1642 | enum dma_data_direction direction, | ||
1643 | struct dma_attrs *attrs) | ||
1644 | { | ||
1645 | dma_unmap_sg_attrs(dev->dma_device, sg, nents, direction, attrs); | ||
1646 | } | ||
1614 | /** | 1647 | /** |
1615 | * ib_sg_dma_address - Return the DMA address from a scatter/gather entry | 1648 | * ib_sg_dma_address - Return the DMA address from a scatter/gather entry |
1616 | * @dev: The device for which the DMA addresses were created | 1649 | * @dev: The device for which the DMA addresses were created |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index b8b19e2f57bb..f6a9fe0ef09c 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
@@ -181,7 +181,8 @@ struct scsi_device { | |||
181 | sdev_printk(prefix, (scmd)->device, fmt, ##a) | 181 | sdev_printk(prefix, (scmd)->device, fmt, ##a) |
182 | 182 | ||
183 | enum scsi_target_state { | 183 | enum scsi_target_state { |
184 | STARGET_RUNNING = 1, | 184 | STARGET_CREATED = 1, |
185 | STARGET_RUNNING, | ||
185 | STARGET_DEL, | 186 | STARGET_DEL, |
186 | }; | 187 | }; |
187 | 188 | ||
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h index 01480581f825..049edc5e6461 100644 --- a/include/sound/ac97_codec.h +++ b/include/sound/ac97_codec.h | |||
@@ -397,6 +397,7 @@ | |||
397 | #define AC97_HAS_NO_TONE (1<<16) /* no Tone volume */ | 397 | #define AC97_HAS_NO_TONE (1<<16) /* no Tone volume */ |
398 | #define AC97_HAS_NO_STD_PCM (1<<17) /* no standard AC97 PCM volume and mute */ | 398 | #define AC97_HAS_NO_STD_PCM (1<<17) /* no standard AC97 PCM volume and mute */ |
399 | #define AC97_HAS_NO_AUX (1<<18) /* no standard AC97 AUX volume and mute */ | 399 | #define AC97_HAS_NO_AUX (1<<18) /* no standard AC97 AUX volume and mute */ |
400 | #define AC97_HAS_8CH (1<<19) /* supports 8-channel output */ | ||
400 | 401 | ||
401 | /* rates indexes */ | 402 | /* rates indexes */ |
402 | #define AC97_RATES_FRONT_DAC 0 | 403 | #define AC97_RATES_FRONT_DAC 0 |
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h index 4e80d3fe7381..d293d36a66b8 100644 --- a/include/sound/ak4114.h +++ b/include/sound/ak4114.h | |||
@@ -182,6 +182,7 @@ struct ak4114 { | |||
182 | unsigned char rcs0; | 182 | unsigned char rcs0; |
183 | unsigned char rcs1; | 183 | unsigned char rcs1; |
184 | struct delayed_work work; | 184 | struct delayed_work work; |
185 | unsigned int check_flags; | ||
185 | void *change_callback_private; | 186 | void *change_callback_private; |
186 | void (*change_callback)(struct ak4114 *ak4114, unsigned char c0, unsigned char c1); | 187 | void (*change_callback)(struct ak4114 *ak4114, unsigned char c0, unsigned char c1); |
187 | }; | 188 | }; |
diff --git a/include/sound/ak4xxx-adda.h b/include/sound/ak4xxx-adda.h index 6153b91cdc3e..891cf1aea8b1 100644 --- a/include/sound/ak4xxx-adda.h +++ b/include/sound/ak4xxx-adda.h | |||
@@ -68,7 +68,7 @@ struct snd_akm4xxx { | |||
68 | enum { | 68 | enum { |
69 | SND_AK4524, SND_AK4528, SND_AK4529, | 69 | SND_AK4524, SND_AK4528, SND_AK4529, |
70 | SND_AK4355, SND_AK4358, SND_AK4381, | 70 | SND_AK4355, SND_AK4358, SND_AK4381, |
71 | SND_AK5365, NON_AKM | 71 | SND_AK5365 |
72 | } type; | 72 | } type; |
73 | 73 | ||
74 | /* (array) information of combined codecs */ | 74 | /* (array) information of combined codecs */ |
diff --git a/include/sound/asoundef.h b/include/sound/asoundef.h index 024ce62f7d16..a6e0facf8a37 100644 --- a/include/sound/asoundef.h +++ b/include/sound/asoundef.h | |||
@@ -112,6 +112,14 @@ | |||
112 | #define IEC958_AES3_CON_CLOCK_1000PPM (0<<4) /* 1000 ppm */ | 112 | #define IEC958_AES3_CON_CLOCK_1000PPM (0<<4) /* 1000 ppm */ |
113 | #define IEC958_AES3_CON_CLOCK_50PPM (1<<4) /* 50 ppm */ | 113 | #define IEC958_AES3_CON_CLOCK_50PPM (1<<4) /* 50 ppm */ |
114 | #define IEC958_AES3_CON_CLOCK_VARIABLE (2<<4) /* variable pitch */ | 114 | #define IEC958_AES3_CON_CLOCK_VARIABLE (2<<4) /* variable pitch */ |
115 | #define IEC958_AES4_CON_MAX_WORDLEN_24 (1<<0) /* 0 = 20-bit, 1 = 24-bit */ | ||
116 | #define IEC958_AES4_CON_WORDLEN (7<<1) /* mask - sample word length */ | ||
117 | #define IEC958_AES4_CON_WORDLEN_NOTID (0<<1) /* not indicated */ | ||
118 | #define IEC958_AES4_CON_WORDLEN_20_16 (1<<1) /* 20-bit or 16-bit */ | ||
119 | #define IEC958_AES4_CON_WORDLEN_22_18 (2<<1) /* 22-bit or 18-bit */ | ||
120 | #define IEC958_AES4_CON_WORDLEN_23_19 (4<<1) /* 23-bit or 19-bit */ | ||
121 | #define IEC958_AES4_CON_WORDLEN_24_20 (5<<1) /* 24-bit or 20-bit */ | ||
122 | #define IEC958_AES4_CON_WORDLEN_21_17 (6<<1) /* 21-bit or 17-bit */ | ||
115 | 123 | ||
116 | /***************************************************************************** | 124 | /***************************************************************************** |
117 | * * | 125 | * * |
diff --git a/include/sound/control.h b/include/sound/control.h index e79baa63912f..3dc1291f52db 100644 --- a/include/sound/control.h +++ b/include/sound/control.h | |||
@@ -169,4 +169,11 @@ int snd_ctl_boolean_mono_info(struct snd_kcontrol *kcontrol, | |||
169 | int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, | 169 | int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, |
170 | struct snd_ctl_elem_info *uinfo); | 170 | struct snd_ctl_elem_info *uinfo); |
171 | 171 | ||
172 | /* | ||
173 | * virtual master control | ||
174 | */ | ||
175 | struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, | ||
176 | const unsigned int *tlv); | ||
177 | int snd_ctl_add_slave(struct snd_kcontrol *master, struct snd_kcontrol *slave); | ||
178 | |||
172 | #endif /* __SOUND_CONTROL_H */ | 179 | #endif /* __SOUND_CONTROL_H */ |
diff --git a/include/sound/core.h b/include/sound/core.h index 4fc0235ad784..695ee53488a3 100644 --- a/include/sound/core.h +++ b/include/sound/core.h | |||
@@ -277,8 +277,8 @@ int snd_minor_info_done(void); | |||
277 | int snd_minor_info_oss_init(void); | 277 | int snd_minor_info_oss_init(void); |
278 | int snd_minor_info_oss_done(void); | 278 | int snd_minor_info_oss_done(void); |
279 | #else | 279 | #else |
280 | #define snd_minor_info_oss_init() /*NOP*/ | 280 | static inline int snd_minor_info_oss_init(void) { return 0; } |
281 | #define snd_minor_info_oss_done() /*NOP*/ | 281 | static inline int snd_minor_info_oss_done(void) { return 0; } |
282 | #endif | 282 | #endif |
283 | 283 | ||
284 | /* memory.c */ | 284 | /* memory.c */ |
@@ -310,7 +310,7 @@ int snd_card_file_add(struct snd_card *card, struct file *file); | |||
310 | int snd_card_file_remove(struct snd_card *card, struct file *file); | 310 | int snd_card_file_remove(struct snd_card *card, struct file *file); |
311 | 311 | ||
312 | #ifndef snd_card_set_dev | 312 | #ifndef snd_card_set_dev |
313 | #define snd_card_set_dev(card,devptr) ((card)->dev = (devptr)) | 313 | #define snd_card_set_dev(card, devptr) ((card)->dev = (devptr)) |
314 | #endif | 314 | #endif |
315 | 315 | ||
316 | /* device.c */ | 316 | /* device.c */ |
@@ -373,7 +373,7 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
373 | * snd_printd - debug printk | 373 | * snd_printd - debug printk |
374 | * @fmt: format string | 374 | * @fmt: format string |
375 | * | 375 | * |
376 | * Compiled only when Works like snd_printk() for debugging purpose. | 376 | * Works like snd_printk() for debugging purposes. |
377 | * Ignored when CONFIG_SND_DEBUG is not set. | 377 | * Ignored when CONFIG_SND_DEBUG is not set. |
378 | */ | 378 | */ |
379 | #define snd_printd(fmt, args...) \ | 379 | #define snd_printd(fmt, args...) \ |
@@ -417,7 +417,7 @@ void snd_verbose_printd(const char *file, int line, const char *format, ...) | |||
417 | * snd_printdd - debug printk | 417 | * snd_printdd - debug printk |
418 | * @format: format string | 418 | * @format: format string |
419 | * | 419 | * |
420 | * Compiled only when Works like snd_printk() for debugging purpose. | 420 | * Works like snd_printk() for debugging purposes. |
421 | * Ignored when CONFIG_SND_DEBUG_DETECT is not set. | 421 | * Ignored when CONFIG_SND_DEBUG_DETECT is not set. |
422 | */ | 422 | */ |
423 | #define snd_printdd(format, args...) snd_printk(format, ##args) | 423 | #define snd_printdd(format, args...) snd_printk(format, ##args) |
diff --git a/include/sound/mpu401.h b/include/sound/mpu401.h index d45218b44dfe..1f1d53f8830b 100644 --- a/include/sound/mpu401.h +++ b/include/sound/mpu401.h | |||
@@ -50,6 +50,7 @@ | |||
50 | #define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */ | 50 | #define MPU401_INFO_INTEGRATED (1 << 2) /* integrated h/w port */ |
51 | #define MPU401_INFO_MMIO (1 << 3) /* MMIO access */ | 51 | #define MPU401_INFO_MMIO (1 << 3) /* MMIO access */ |
52 | #define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */ | 52 | #define MPU401_INFO_TX_IRQ (1 << 4) /* independent TX irq */ |
53 | #define MPU401_INFO_NO_ACK (1 << 6) /* No ACK cmd needed */ | ||
53 | 54 | ||
54 | #define MPU401_MODE_BIT_INPUT 0 | 55 | #define MPU401_MODE_BIT_INPUT 0 |
55 | #define MPU401_MODE_BIT_OUTPUT 1 | 56 | #define MPU401_MODE_BIT_OUTPUT 1 |
@@ -103,6 +104,21 @@ struct snd_mpu401 { | |||
103 | #define MPU401D(mpu) (mpu)->port | 104 | #define MPU401D(mpu) (mpu)->port |
104 | 105 | ||
105 | /* | 106 | /* |
107 | * control register bits | ||
108 | */ | ||
109 | /* read MPU401C() */ | ||
110 | #define MPU401_RX_EMPTY 0x80 | ||
111 | #define MPU401_TX_FULL 0x40 | ||
112 | |||
113 | /* write MPU401C() */ | ||
114 | #define MPU401_RESET 0xff | ||
115 | #define MPU401_ENTER_UART 0x3f | ||
116 | |||
117 | /* read MPU401D() */ | ||
118 | #define MPU401_ACK 0xfe | ||
119 | |||
120 | |||
121 | /* | ||
106 | 122 | ||
107 | */ | 123 | */ |
108 | 124 | ||
diff --git a/include/sound/version.h b/include/sound/version.h index fac66c49445a..ed6fb2eb1eac 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
@@ -1,3 +1,3 @@ | |||
1 | /* include/version.h. Generated by alsa/ksync script. */ | 1 | /* include/version.h. Generated by alsa/ksync script. */ |
2 | #define CONFIG_SND_VERSION "1.0.16rc2" | 2 | #define CONFIG_SND_VERSION "1.0.16" |
3 | #define CONFIG_SND_DATE " (Thu Jan 31 16:40:16 2008 UTC)" | 3 | #define CONFIG_SND_DATE "" |
diff --git a/include/video/atmel_lcdc.h b/include/video/atmel_lcdc.h index 336c20db87f8..ed64862c4e18 100644 --- a/include/video/atmel_lcdc.h +++ b/include/video/atmel_lcdc.h | |||
@@ -22,6 +22,15 @@ | |||
22 | #ifndef __ATMEL_LCDC_H__ | 22 | #ifndef __ATMEL_LCDC_H__ |
23 | #define __ATMEL_LCDC_H__ | 23 | #define __ATMEL_LCDC_H__ |
24 | 24 | ||
25 | |||
26 | /* Way LCD wires are connected to the chip: | ||
27 | * Some Atmel chips use BGR color mode (instead of standard RGB) | ||
28 | * A swapped wiring onboard can bring to RGB mode. | ||
29 | */ | ||
30 | #define ATMEL_LCDC_WIRING_BGR 0 | ||
31 | #define ATMEL_LCDC_WIRING_RGB 1 | ||
32 | |||
33 | |||
25 | /* LCD Controller info data structure, stored in device platform_data */ | 34 | /* LCD Controller info data structure, stored in device platform_data */ |
26 | struct atmel_lcdfb_info { | 35 | struct atmel_lcdfb_info { |
27 | spinlock_t lock; | 36 | spinlock_t lock; |
@@ -39,8 +48,10 @@ struct atmel_lcdfb_info { | |||
39 | u8 bl_power; | 48 | u8 bl_power; |
40 | #endif | 49 | #endif |
41 | bool lcdcon_is_backlight; | 50 | bool lcdcon_is_backlight; |
51 | u8 saved_lcdcon; | ||
42 | 52 | ||
43 | u8 default_bpp; | 53 | u8 default_bpp; |
54 | u8 lcd_wiring_mode; | ||
44 | unsigned int default_lcdcon2; | 55 | unsigned int default_lcdcon2; |
45 | unsigned int default_dmacon; | 56 | unsigned int default_dmacon; |
46 | void (*atmel_lcdfb_power_control)(int on); | 57 | void (*atmel_lcdfb_power_control)(int on); |
diff --git a/include/video/hecubafb.h b/include/video/hecubafb.h new file mode 100644 index 000000000000..7b9952339762 --- /dev/null +++ b/include/video/hecubafb.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * hecubafb.h - definitions for the hecuba framebuffer driver | ||
3 | * | ||
4 | * Copyright (C) 2008 by Jaya Kumar | ||
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 for | ||
8 | * more details. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef _LINUX_HECUBAFB_H_ | ||
13 | #define _LINUX_HECUBAFB_H_ | ||
14 | |||
15 | /* Apollo controller specific defines */ | ||
16 | #define APOLLO_START_NEW_IMG 0xA0 | ||
17 | #define APOLLO_STOP_IMG_DATA 0xA1 | ||
18 | #define APOLLO_DISPLAY_IMG 0xA2 | ||
19 | #define APOLLO_ERASE_DISPLAY 0xA3 | ||
20 | #define APOLLO_INIT_DISPLAY 0xA4 | ||
21 | |||
22 | /* Hecuba interface specific defines */ | ||
23 | #define HCB_WUP_BIT 0x01 | ||
24 | #define HCB_DS_BIT 0x02 | ||
25 | #define HCB_RW_BIT 0x04 | ||
26 | #define HCB_CD_BIT 0x08 | ||
27 | #define HCB_ACK_BIT 0x80 | ||
28 | |||
29 | /* struct used by hecuba. board specific stuff comes from *board */ | ||
30 | struct hecubafb_par { | ||
31 | struct fb_info *info; | ||
32 | struct hecuba_board *board; | ||
33 | void (*send_command)(struct hecubafb_par *, unsigned char); | ||
34 | void (*send_data)(struct hecubafb_par *, unsigned char); | ||
35 | }; | ||
36 | |||
37 | /* board specific routines | ||
38 | board drivers can implement wait_for_ack with interrupts if desired. if | ||
39 | wait_for_ack is called with clear=0, then go to sleep and return when ack | ||
40 | goes hi or if wait_for_ack with clear=1, then return when ack goes lo */ | ||
41 | struct hecuba_board { | ||
42 | struct module *owner; | ||
43 | void (*remove)(struct hecubafb_par *); | ||
44 | void (*set_ctl)(struct hecubafb_par *, unsigned char, unsigned char); | ||
45 | void (*set_data)(struct hecubafb_par *, unsigned char); | ||
46 | void (*wait_for_ack)(struct hecubafb_par *, int); | ||
47 | int (*init)(struct hecubafb_par *); | ||
48 | }; | ||
49 | |||
50 | |||
51 | #endif | ||
diff --git a/include/video/metronomefb.h b/include/video/metronomefb.h new file mode 100644 index 000000000000..dab04b4fad7f --- /dev/null +++ b/include/video/metronomefb.h | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * metronomefb.h - definitions for the metronome framebuffer driver | ||
3 | * | ||
4 | * Copyright (C) 2008 by Jaya Kumar | ||
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 for | ||
8 | * more details. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #ifndef _LINUX_METRONOMEFB_H_ | ||
13 | #define _LINUX_METRONOMEFB_H_ | ||
14 | |||
15 | /* address and control descriptors used by metronome controller */ | ||
16 | struct metromem_desc { | ||
17 | u32 mFDADR0; | ||
18 | u32 mFSADR0; | ||
19 | u32 mFIDR0; | ||
20 | u32 mLDCMD0; | ||
21 | }; | ||
22 | |||
23 | /* command structure used by metronome controller */ | ||
24 | struct metromem_cmd { | ||
25 | u16 opcode; | ||
26 | u16 args[((64-2)/2)]; | ||
27 | u16 csum; | ||
28 | }; | ||
29 | |||
30 | /* struct used by metronome. board specific stuff comes from *board */ | ||
31 | struct metronomefb_par { | ||
32 | unsigned char *metromem; | ||
33 | struct metromem_desc *metromem_desc; | ||
34 | struct metromem_cmd *metromem_cmd; | ||
35 | unsigned char *metromem_wfm; | ||
36 | unsigned char *metromem_img; | ||
37 | u16 *metromem_img_csum; | ||
38 | u16 *csum_table; | ||
39 | int metromemsize; | ||
40 | dma_addr_t metromem_dma; | ||
41 | dma_addr_t metromem_desc_dma; | ||
42 | struct fb_info *info; | ||
43 | struct metronome_board *board; | ||
44 | wait_queue_head_t waitq; | ||
45 | u8 frame_count; | ||
46 | }; | ||
47 | |||
48 | /* board specific routines */ | ||
49 | struct metronome_board { | ||
50 | struct module *owner; | ||
51 | void (*free_irq)(struct fb_info *); | ||
52 | void (*init_gpio_regs)(struct metronomefb_par *); | ||
53 | void (*init_lcdc_regs)(struct metronomefb_par *); | ||
54 | void (*post_dma_setup)(struct metronomefb_par *); | ||
55 | void (*set_rst)(struct metronomefb_par *, int); | ||
56 | void (*set_stdby)(struct metronomefb_par *, int); | ||
57 | int (*met_wait_event)(struct metronomefb_par *); | ||
58 | int (*met_wait_event_intr)(struct metronomefb_par *); | ||
59 | int (*setup_irq)(struct fb_info *); | ||
60 | }; | ||
61 | |||
62 | #endif | ||
diff --git a/include/xen/balloon.h b/include/xen/balloon.h new file mode 100644 index 000000000000..fe43b0f3c86a --- /dev/null +++ b/include/xen/balloon.h | |||
@@ -0,0 +1,61 @@ | |||
1 | /****************************************************************************** | ||
2 | * balloon.h | ||
3 | * | ||
4 | * Xen balloon driver - enables returning/claiming memory to/from Xen. | ||
5 | * | ||
6 | * Copyright (c) 2003, B Dragovic | ||
7 | * Copyright (c) 2003-2004, M Williamson, K Fraser | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License version 2 | ||
11 | * as published by the Free Software Foundation; or, when distributed | ||
12 | * separately from the Linux kernel or incorporated into other | ||
13 | * software packages, subject to the following license: | ||
14 | * | ||
15 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
16 | * of this source file (the "Software"), to deal in the Software without | ||
17 | * restriction, including without limitation the rights to use, copy, modify, | ||
18 | * merge, publish, distribute, sublicense, and/or sell copies of the Software, | ||
19 | * and to permit persons to whom the Software is furnished to do so, subject to | ||
20 | * the following conditions: | ||
21 | * | ||
22 | * The above copyright notice and this permission notice shall be included in | ||
23 | * all copies or substantial portions of the Software. | ||
24 | * | ||
25 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
26 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
27 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
28 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
29 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
30 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||
31 | * IN THE SOFTWARE. | ||
32 | */ | ||
33 | |||
34 | #ifndef __XEN_BALLOON_H__ | ||
35 | #define __XEN_BALLOON_H__ | ||
36 | |||
37 | #include <linux/spinlock.h> | ||
38 | |||
39 | #if 0 | ||
40 | /* | ||
41 | * Inform the balloon driver that it should allow some slop for device-driver | ||
42 | * memory activities. | ||
43 | */ | ||
44 | void balloon_update_driver_allowance(long delta); | ||
45 | |||
46 | /* Allocate/free a set of empty pages in low memory (i.e., no RAM mapped). */ | ||
47 | struct page **alloc_empty_pages_and_pagevec(int nr_pages); | ||
48 | void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages); | ||
49 | |||
50 | void balloon_release_driver_page(struct page *page); | ||
51 | |||
52 | /* | ||
53 | * Prevent the balloon driver from changing the memory reservation during | ||
54 | * a driver critical region. | ||
55 | */ | ||
56 | extern spinlock_t balloon_lock; | ||
57 | #define balloon_lock(__flags) spin_lock_irqsave(&balloon_lock, __flags) | ||
58 | #define balloon_unlock(__flags) spin_unlock_irqrestore(&balloon_lock, __flags) | ||
59 | #endif | ||
60 | |||
61 | #endif /* __XEN_BALLOON_H__ */ | ||
diff --git a/include/xen/events.h b/include/xen/events.h index 2bde54d29be5..acd8e062c85f 100644 --- a/include/xen/events.h +++ b/include/xen/events.h | |||
@@ -5,13 +5,7 @@ | |||
5 | 5 | ||
6 | #include <xen/interface/event_channel.h> | 6 | #include <xen/interface/event_channel.h> |
7 | #include <asm/xen/hypercall.h> | 7 | #include <asm/xen/hypercall.h> |
8 | 8 | #include <asm/xen/events.h> | |
9 | enum ipi_vector { | ||
10 | XEN_RESCHEDULE_VECTOR, | ||
11 | XEN_CALL_FUNCTION_VECTOR, | ||
12 | |||
13 | XEN_NR_IPIS, | ||
14 | }; | ||
15 | 9 | ||
16 | int bind_evtchn_to_irq(unsigned int evtchn); | 10 | int bind_evtchn_to_irq(unsigned int evtchn); |
17 | int bind_evtchn_to_irqhandler(unsigned int evtchn, | 11 | int bind_evtchn_to_irqhandler(unsigned int evtchn, |
@@ -37,6 +31,7 @@ int bind_ipi_to_irqhandler(enum ipi_vector ipi, | |||
37 | void unbind_from_irqhandler(unsigned int irq, void *dev_id); | 31 | void unbind_from_irqhandler(unsigned int irq, void *dev_id); |
38 | 32 | ||
39 | void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector); | 33 | void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector); |
34 | int resend_irq_on_evtchn(unsigned int irq); | ||
40 | 35 | ||
41 | static inline void notify_remote_via_evtchn(int port) | 36 | static inline void notify_remote_via_evtchn(int port) |
42 | { | 37 | { |
diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h index 761c83498e03..466204846121 100644 --- a/include/xen/grant_table.h +++ b/include/xen/grant_table.h | |||
@@ -39,6 +39,7 @@ | |||
39 | 39 | ||
40 | #include <asm/xen/hypervisor.h> | 40 | #include <asm/xen/hypervisor.h> |
41 | #include <xen/interface/grant_table.h> | 41 | #include <xen/interface/grant_table.h> |
42 | #include <asm/xen/grant_table.h> | ||
42 | 43 | ||
43 | /* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */ | 44 | /* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */ |
44 | #define NR_GRANT_FRAMES 4 | 45 | #define NR_GRANT_FRAMES 4 |
@@ -102,6 +103,12 @@ void gnttab_grant_foreign_access_ref(grant_ref_t ref, domid_t domid, | |||
102 | void gnttab_grant_foreign_transfer_ref(grant_ref_t, domid_t domid, | 103 | void gnttab_grant_foreign_transfer_ref(grant_ref_t, domid_t domid, |
103 | unsigned long pfn); | 104 | unsigned long pfn); |
104 | 105 | ||
106 | int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, | ||
107 | unsigned long max_nr_gframes, | ||
108 | struct grant_entry **__shared); | ||
109 | void arch_gnttab_unmap_shared(struct grant_entry *shared, | ||
110 | unsigned long nr_gframes); | ||
111 | |||
105 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) | 112 | #define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr)) |
106 | 113 | ||
107 | #endif /* __ASM_GNTTAB_H__ */ | 114 | #endif /* __ASM_GNTTAB_H__ */ |
diff --git a/include/xen/interface/callback.h b/include/xen/interface/callback.h new file mode 100644 index 000000000000..4aadcba31af9 --- /dev/null +++ b/include/xen/interface/callback.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /****************************************************************************** | ||
2 | * callback.h | ||
3 | * | ||
4 | * Register guest OS callbacks with Xen. | ||
5 | * | ||
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | * of this software and associated documentation files (the "Software"), to | ||
8 | * deal in the Software without restriction, including without limitation the | ||
9 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
10 | * sell copies of the Software, and to permit persons to whom the Software is | ||
11 | * furnished to do so, subject to the following conditions: | ||
12 | * | ||
13 | * The above copyright notice and this permission notice shall be included in | ||
14 | * all copies or substantial portions of the Software. | ||
15 | * | ||
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
21 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
22 | * DEALINGS IN THE SOFTWARE. | ||
23 | * | ||
24 | * Copyright (c) 2006, Ian Campbell | ||
25 | */ | ||
26 | |||
27 | #ifndef __XEN_PUBLIC_CALLBACK_H__ | ||
28 | #define __XEN_PUBLIC_CALLBACK_H__ | ||
29 | |||
30 | #include "xen.h" | ||
31 | |||
32 | /* | ||
33 | * Prototype for this hypercall is: | ||
34 | * long callback_op(int cmd, void *extra_args) | ||
35 | * @cmd == CALLBACKOP_??? (callback operation). | ||
36 | * @extra_args == Operation-specific extra arguments (NULL if none). | ||
37 | */ | ||
38 | |||
39 | /* ia64, x86: Callback for event delivery. */ | ||
40 | #define CALLBACKTYPE_event 0 | ||
41 | |||
42 | /* x86: Failsafe callback when guest state cannot be restored by Xen. */ | ||
43 | #define CALLBACKTYPE_failsafe 1 | ||
44 | |||
45 | /* x86/64 hypervisor: Syscall by 64-bit guest app ('64-on-64-on-64'). */ | ||
46 | #define CALLBACKTYPE_syscall 2 | ||
47 | |||
48 | /* | ||
49 | * x86/32 hypervisor: Only available on x86/32 when supervisor_mode_kernel | ||
50 | * feature is enabled. Do not use this callback type in new code. | ||
51 | */ | ||
52 | #define CALLBACKTYPE_sysenter_deprecated 3 | ||
53 | |||
54 | /* x86: Callback for NMI delivery. */ | ||
55 | #define CALLBACKTYPE_nmi 4 | ||
56 | |||
57 | /* | ||
58 | * x86: sysenter is only available as follows: | ||
59 | * - 32-bit hypervisor: with the supervisor_mode_kernel feature enabled | ||
60 | * - 64-bit hypervisor: 32-bit guest applications on Intel CPUs | ||
61 | * ('32-on-32-on-64', '32-on-64-on-64') | ||
62 | * [nb. also 64-bit guest applications on Intel CPUs | ||
63 | * ('64-on-64-on-64'), but syscall is preferred] | ||
64 | */ | ||
65 | #define CALLBACKTYPE_sysenter 5 | ||
66 | |||
67 | /* | ||
68 | * x86/64 hypervisor: Syscall by 32-bit guest app on AMD CPUs | ||
69 | * ('32-on-32-on-64', '32-on-64-on-64') | ||
70 | */ | ||
71 | #define CALLBACKTYPE_syscall32 7 | ||
72 | |||
73 | /* | ||
74 | * Disable event deliver during callback? This flag is ignored for event and | ||
75 | * NMI callbacks: event delivery is unconditionally disabled. | ||
76 | */ | ||
77 | #define _CALLBACKF_mask_events 0 | ||
78 | #define CALLBACKF_mask_events (1U << _CALLBACKF_mask_events) | ||
79 | |||
80 | /* | ||
81 | * Register a callback. | ||
82 | */ | ||
83 | #define CALLBACKOP_register 0 | ||
84 | struct callback_register { | ||
85 | uint16_t type; | ||
86 | uint16_t flags; | ||
87 | struct xen_callback address; | ||
88 | }; | ||
89 | |||
90 | /* | ||
91 | * Unregister a callback. | ||
92 | * | ||
93 | * Not all callbacks can be unregistered. -EINVAL will be returned if | ||
94 | * you attempt to unregister such a callback. | ||
95 | */ | ||
96 | #define CALLBACKOP_unregister 1 | ||
97 | struct callback_unregister { | ||
98 | uint16_t type; | ||
99 | uint16_t _unused; | ||
100 | }; | ||
101 | |||
102 | #endif /* __XEN_PUBLIC_CALLBACK_H__ */ | ||
diff --git a/include/xen/interface/grant_table.h b/include/xen/interface/grant_table.h index 219049802cf2..39da93c21de0 100644 --- a/include/xen/interface/grant_table.h +++ b/include/xen/interface/grant_table.h | |||
@@ -185,6 +185,7 @@ struct gnttab_map_grant_ref { | |||
185 | grant_handle_t handle; | 185 | grant_handle_t handle; |
186 | uint64_t dev_bus_addr; | 186 | uint64_t dev_bus_addr; |
187 | }; | 187 | }; |
188 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_map_grant_ref); | ||
188 | 189 | ||
189 | /* | 190 | /* |
190 | * GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mappings | 191 | * GNTTABOP_unmap_grant_ref: Destroy one or more grant-reference mappings |
@@ -206,6 +207,7 @@ struct gnttab_unmap_grant_ref { | |||
206 | /* OUT parameters. */ | 207 | /* OUT parameters. */ |
207 | int16_t status; /* GNTST_* */ | 208 | int16_t status; /* GNTST_* */ |
208 | }; | 209 | }; |
210 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_unmap_grant_ref); | ||
209 | 211 | ||
210 | /* | 212 | /* |
211 | * GNTTABOP_setup_table: Set up a grant table for <dom> comprising at least | 213 | * GNTTABOP_setup_table: Set up a grant table for <dom> comprising at least |
@@ -223,8 +225,9 @@ struct gnttab_setup_table { | |||
223 | uint32_t nr_frames; | 225 | uint32_t nr_frames; |
224 | /* OUT parameters. */ | 226 | /* OUT parameters. */ |
225 | int16_t status; /* GNTST_* */ | 227 | int16_t status; /* GNTST_* */ |
226 | ulong *frame_list; | 228 | GUEST_HANDLE(ulong) frame_list; |
227 | }; | 229 | }; |
230 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_setup_table); | ||
228 | 231 | ||
229 | /* | 232 | /* |
230 | * GNTTABOP_dump_table: Dump the contents of the grant table to the | 233 | * GNTTABOP_dump_table: Dump the contents of the grant table to the |
@@ -237,6 +240,7 @@ struct gnttab_dump_table { | |||
237 | /* OUT parameters. */ | 240 | /* OUT parameters. */ |
238 | int16_t status; /* GNTST_* */ | 241 | int16_t status; /* GNTST_* */ |
239 | }; | 242 | }; |
243 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_dump_table); | ||
240 | 244 | ||
241 | /* | 245 | /* |
242 | * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain. The | 246 | * GNTTABOP_transfer_grant_ref: Transfer <frame> to a foreign domain. The |
@@ -255,7 +259,7 @@ struct gnttab_transfer { | |||
255 | /* OUT parameters. */ | 259 | /* OUT parameters. */ |
256 | int16_t status; | 260 | int16_t status; |
257 | }; | 261 | }; |
258 | 262 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_transfer); | |
259 | 263 | ||
260 | /* | 264 | /* |
261 | * GNTTABOP_copy: Hypervisor based copy | 265 | * GNTTABOP_copy: Hypervisor based copy |
@@ -296,6 +300,7 @@ struct gnttab_copy { | |||
296 | /* OUT parameters. */ | 300 | /* OUT parameters. */ |
297 | int16_t status; | 301 | int16_t status; |
298 | }; | 302 | }; |
303 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_copy); | ||
299 | 304 | ||
300 | /* | 305 | /* |
301 | * GNTTABOP_query_size: Query the current and maximum sizes of the shared | 306 | * GNTTABOP_query_size: Query the current and maximum sizes of the shared |
@@ -313,7 +318,7 @@ struct gnttab_query_size { | |||
313 | uint32_t max_nr_frames; | 318 | uint32_t max_nr_frames; |
314 | int16_t status; /* GNTST_* */ | 319 | int16_t status; /* GNTST_* */ |
315 | }; | 320 | }; |
316 | 321 | DEFINE_GUEST_HANDLE_STRUCT(gnttab_query_size); | |
317 | 322 | ||
318 | /* | 323 | /* |
319 | * Bitfield values for update_pin_status.flags. | 324 | * Bitfield values for update_pin_status.flags. |
diff --git a/include/xen/interface/io/fbif.h b/include/xen/interface/io/fbif.h new file mode 100644 index 000000000000..5a934dd7796d --- /dev/null +++ b/include/xen/interface/io/fbif.h | |||
@@ -0,0 +1,124 @@ | |||
1 | /* | ||
2 | * fbif.h -- Xen virtual frame buffer device | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
5 | * of this software and associated documentation files (the "Software"), to | ||
6 | * deal in the Software without restriction, including without limitation the | ||
7 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
8 | * sell copies of the Software, and to permit persons to whom the Software is | ||
9 | * furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
20 | * DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Copyright (C) 2005 Anthony Liguori <aliguori@us.ibm.com> | ||
23 | * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <armbru@redhat.com> | ||
24 | */ | ||
25 | |||
26 | #ifndef __XEN_PUBLIC_IO_FBIF_H__ | ||
27 | #define __XEN_PUBLIC_IO_FBIF_H__ | ||
28 | |||
29 | /* Out events (frontend -> backend) */ | ||
30 | |||
31 | /* | ||
32 | * Out events may be sent only when requested by backend, and receipt | ||
33 | * of an unknown out event is an error. | ||
34 | */ | ||
35 | |||
36 | /* Event type 1 currently not used */ | ||
37 | /* | ||
38 | * Framebuffer update notification event | ||
39 | * Capable frontend sets feature-update in xenstore. | ||
40 | * Backend requests it by setting request-update in xenstore. | ||
41 | */ | ||
42 | #define XENFB_TYPE_UPDATE 2 | ||
43 | |||
44 | struct xenfb_update { | ||
45 | uint8_t type; /* XENFB_TYPE_UPDATE */ | ||
46 | int32_t x; /* source x */ | ||
47 | int32_t y; /* source y */ | ||
48 | int32_t width; /* rect width */ | ||
49 | int32_t height; /* rect height */ | ||
50 | }; | ||
51 | |||
52 | #define XENFB_OUT_EVENT_SIZE 40 | ||
53 | |||
54 | union xenfb_out_event { | ||
55 | uint8_t type; | ||
56 | struct xenfb_update update; | ||
57 | char pad[XENFB_OUT_EVENT_SIZE]; | ||
58 | }; | ||
59 | |||
60 | /* In events (backend -> frontend) */ | ||
61 | |||
62 | /* | ||
63 | * Frontends should ignore unknown in events. | ||
64 | * No in events currently defined. | ||
65 | */ | ||
66 | |||
67 | #define XENFB_IN_EVENT_SIZE 40 | ||
68 | |||
69 | union xenfb_in_event { | ||
70 | uint8_t type; | ||
71 | char pad[XENFB_IN_EVENT_SIZE]; | ||
72 | }; | ||
73 | |||
74 | /* shared page */ | ||
75 | |||
76 | #define XENFB_IN_RING_SIZE 1024 | ||
77 | #define XENFB_IN_RING_LEN (XENFB_IN_RING_SIZE / XENFB_IN_EVENT_SIZE) | ||
78 | #define XENFB_IN_RING_OFFS 1024 | ||
79 | #define XENFB_IN_RING(page) \ | ||
80 | ((union xenfb_in_event *)((char *)(page) + XENFB_IN_RING_OFFS)) | ||
81 | #define XENFB_IN_RING_REF(page, idx) \ | ||
82 | (XENFB_IN_RING((page))[(idx) % XENFB_IN_RING_LEN]) | ||
83 | |||
84 | #define XENFB_OUT_RING_SIZE 2048 | ||
85 | #define XENFB_OUT_RING_LEN (XENFB_OUT_RING_SIZE / XENFB_OUT_EVENT_SIZE) | ||
86 | #define XENFB_OUT_RING_OFFS (XENFB_IN_RING_OFFS + XENFB_IN_RING_SIZE) | ||
87 | #define XENFB_OUT_RING(page) \ | ||
88 | ((union xenfb_out_event *)((char *)(page) + XENFB_OUT_RING_OFFS)) | ||
89 | #define XENFB_OUT_RING_REF(page, idx) \ | ||
90 | (XENFB_OUT_RING((page))[(idx) % XENFB_OUT_RING_LEN]) | ||
91 | |||
92 | struct xenfb_page { | ||
93 | uint32_t in_cons, in_prod; | ||
94 | uint32_t out_cons, out_prod; | ||
95 | |||
96 | int32_t width; /* width of the framebuffer (in pixels) */ | ||
97 | int32_t height; /* height of the framebuffer (in pixels) */ | ||
98 | uint32_t line_length; /* length of a row of pixels (in bytes) */ | ||
99 | uint32_t mem_length; /* length of the framebuffer (in bytes) */ | ||
100 | uint8_t depth; /* depth of a pixel (in bits) */ | ||
101 | |||
102 | /* | ||
103 | * Framebuffer page directory | ||
104 | * | ||
105 | * Each directory page holds PAGE_SIZE / sizeof(*pd) | ||
106 | * framebuffer pages, and can thus map up to PAGE_SIZE * | ||
107 | * PAGE_SIZE / sizeof(*pd) bytes. With PAGE_SIZE == 4096 and | ||
108 | * sizeof(unsigned long) == 4, that's 4 Megs. Two directory | ||
109 | * pages should be enough for a while. | ||
110 | */ | ||
111 | unsigned long pd[2]; | ||
112 | }; | ||
113 | |||
114 | /* | ||
115 | * Wart: xenkbd needs to know resolution. Put it here until a better | ||
116 | * solution is found, but don't leak it to the backend. | ||
117 | */ | ||
118 | #ifdef __KERNEL__ | ||
119 | #define XENFB_WIDTH 800 | ||
120 | #define XENFB_HEIGHT 600 | ||
121 | #define XENFB_DEPTH 32 | ||
122 | #endif | ||
123 | |||
124 | #endif | ||
diff --git a/include/xen/interface/io/kbdif.h b/include/xen/interface/io/kbdif.h new file mode 100644 index 000000000000..fb97f4284ffd --- /dev/null +++ b/include/xen/interface/io/kbdif.h | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * kbdif.h -- Xen virtual keyboard/mouse | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
5 | * of this software and associated documentation files (the "Software"), to | ||
6 | * deal in the Software without restriction, including without limitation the | ||
7 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
8 | * sell copies of the Software, and to permit persons to whom the Software is | ||
9 | * furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
20 | * DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Copyright (C) 2005 Anthony Liguori <aliguori@us.ibm.com> | ||
23 | * Copyright (C) 2006 Red Hat, Inc., Markus Armbruster <armbru@redhat.com> | ||
24 | */ | ||
25 | |||
26 | #ifndef __XEN_PUBLIC_IO_KBDIF_H__ | ||
27 | #define __XEN_PUBLIC_IO_KBDIF_H__ | ||
28 | |||
29 | /* In events (backend -> frontend) */ | ||
30 | |||
31 | /* | ||
32 | * Frontends should ignore unknown in events. | ||
33 | */ | ||
34 | |||
35 | /* Pointer movement event */ | ||
36 | #define XENKBD_TYPE_MOTION 1 | ||
37 | /* Event type 2 currently not used */ | ||
38 | /* Key event (includes pointer buttons) */ | ||
39 | #define XENKBD_TYPE_KEY 3 | ||
40 | /* | ||
41 | * Pointer position event | ||
42 | * Capable backend sets feature-abs-pointer in xenstore. | ||
43 | * Frontend requests ot instead of XENKBD_TYPE_MOTION by setting | ||
44 | * request-abs-update in xenstore. | ||
45 | */ | ||
46 | #define XENKBD_TYPE_POS 4 | ||
47 | |||
48 | struct xenkbd_motion { | ||
49 | uint8_t type; /* XENKBD_TYPE_MOTION */ | ||
50 | int32_t rel_x; /* relative X motion */ | ||
51 | int32_t rel_y; /* relative Y motion */ | ||
52 | }; | ||
53 | |||
54 | struct xenkbd_key { | ||
55 | uint8_t type; /* XENKBD_TYPE_KEY */ | ||
56 | uint8_t pressed; /* 1 if pressed; 0 otherwise */ | ||
57 | uint32_t keycode; /* KEY_* from linux/input.h */ | ||
58 | }; | ||
59 | |||
60 | struct xenkbd_position { | ||
61 | uint8_t type; /* XENKBD_TYPE_POS */ | ||
62 | int32_t abs_x; /* absolute X position (in FB pixels) */ | ||
63 | int32_t abs_y; /* absolute Y position (in FB pixels) */ | ||
64 | }; | ||
65 | |||
66 | #define XENKBD_IN_EVENT_SIZE 40 | ||
67 | |||
68 | union xenkbd_in_event { | ||
69 | uint8_t type; | ||
70 | struct xenkbd_motion motion; | ||
71 | struct xenkbd_key key; | ||
72 | struct xenkbd_position pos; | ||
73 | char pad[XENKBD_IN_EVENT_SIZE]; | ||
74 | }; | ||
75 | |||
76 | /* Out events (frontend -> backend) */ | ||
77 | |||
78 | /* | ||
79 | * Out events may be sent only when requested by backend, and receipt | ||
80 | * of an unknown out event is an error. | ||
81 | * No out events currently defined. | ||
82 | */ | ||
83 | |||
84 | #define XENKBD_OUT_EVENT_SIZE 40 | ||
85 | |||
86 | union xenkbd_out_event { | ||
87 | uint8_t type; | ||
88 | char pad[XENKBD_OUT_EVENT_SIZE]; | ||
89 | }; | ||
90 | |||
91 | /* shared page */ | ||
92 | |||
93 | #define XENKBD_IN_RING_SIZE 2048 | ||
94 | #define XENKBD_IN_RING_LEN (XENKBD_IN_RING_SIZE / XENKBD_IN_EVENT_SIZE) | ||
95 | #define XENKBD_IN_RING_OFFS 1024 | ||
96 | #define XENKBD_IN_RING(page) \ | ||
97 | ((union xenkbd_in_event *)((char *)(page) + XENKBD_IN_RING_OFFS)) | ||
98 | #define XENKBD_IN_RING_REF(page, idx) \ | ||
99 | (XENKBD_IN_RING((page))[(idx) % XENKBD_IN_RING_LEN]) | ||
100 | |||
101 | #define XENKBD_OUT_RING_SIZE 1024 | ||
102 | #define XENKBD_OUT_RING_LEN (XENKBD_OUT_RING_SIZE / XENKBD_OUT_EVENT_SIZE) | ||
103 | #define XENKBD_OUT_RING_OFFS (XENKBD_IN_RING_OFFS + XENKBD_IN_RING_SIZE) | ||
104 | #define XENKBD_OUT_RING(page) \ | ||
105 | ((union xenkbd_out_event *)((char *)(page) + XENKBD_OUT_RING_OFFS)) | ||
106 | #define XENKBD_OUT_RING_REF(page, idx) \ | ||
107 | (XENKBD_OUT_RING((page))[(idx) % XENKBD_OUT_RING_LEN]) | ||
108 | |||
109 | struct xenkbd_page { | ||
110 | uint32_t in_cons, in_prod; | ||
111 | uint32_t out_cons, out_prod; | ||
112 | }; | ||
113 | |||
114 | #endif | ||
diff --git a/include/xen/interface/io/protocols.h b/include/xen/interface/io/protocols.h new file mode 100644 index 000000000000..01fc8ae5f0b0 --- /dev/null +++ b/include/xen/interface/io/protocols.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef __XEN_PROTOCOLS_H__ | ||
2 | #define __XEN_PROTOCOLS_H__ | ||
3 | |||
4 | #define XEN_IO_PROTO_ABI_X86_32 "x86_32-abi" | ||
5 | #define XEN_IO_PROTO_ABI_X86_64 "x86_64-abi" | ||
6 | #define XEN_IO_PROTO_ABI_IA64 "ia64-abi" | ||
7 | #define XEN_IO_PROTO_ABI_POWERPC64 "powerpc64-abi" | ||
8 | |||
9 | #if defined(__i386__) | ||
10 | # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_32 | ||
11 | #elif defined(__x86_64__) | ||
12 | # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_X86_64 | ||
13 | #elif defined(__ia64__) | ||
14 | # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_IA64 | ||
15 | #elif defined(__powerpc64__) | ||
16 | # define XEN_IO_PROTO_ABI_NATIVE XEN_IO_PROTO_ABI_POWERPC64 | ||
17 | #else | ||
18 | # error arch fixup needed here | ||
19 | #endif | ||
20 | |||
21 | #endif | ||
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index af36ead16817..da768469aa92 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h | |||
@@ -29,7 +29,7 @@ struct xen_memory_reservation { | |||
29 | * OUT: GMFN bases of extents that were allocated | 29 | * OUT: GMFN bases of extents that were allocated |
30 | * (NB. This command also updates the mach_to_phys translation table) | 30 | * (NB. This command also updates the mach_to_phys translation table) |
31 | */ | 31 | */ |
32 | GUEST_HANDLE(ulong) extent_start; | 32 | ulong extent_start; |
33 | 33 | ||
34 | /* Number of extents, and size/alignment of each (2^extent_order pages). */ | 34 | /* Number of extents, and size/alignment of each (2^extent_order pages). */ |
35 | unsigned long nr_extents; | 35 | unsigned long nr_extents; |
@@ -50,7 +50,6 @@ struct xen_memory_reservation { | |||
50 | domid_t domid; | 50 | domid_t domid; |
51 | 51 | ||
52 | }; | 52 | }; |
53 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation); | ||
54 | 53 | ||
55 | /* | 54 | /* |
56 | * Returns the maximum machine frame number of mapped RAM in this system. | 55 | * Returns the maximum machine frame number of mapped RAM in this system. |
@@ -86,7 +85,7 @@ struct xen_machphys_mfn_list { | |||
86 | * any large discontiguities in the machine address space, 2MB gaps in | 85 | * any large discontiguities in the machine address space, 2MB gaps in |
87 | * the machphys table will be represented by an MFN base of zero. | 86 | * the machphys table will be represented by an MFN base of zero. |
88 | */ | 87 | */ |
89 | GUEST_HANDLE(ulong) extent_start; | 88 | ulong extent_start; |
90 | 89 | ||
91 | /* | 90 | /* |
92 | * Number of extents written to the above array. This will be smaller | 91 | * Number of extents written to the above array. This will be smaller |
@@ -94,7 +93,6 @@ struct xen_machphys_mfn_list { | |||
94 | */ | 93 | */ |
95 | unsigned int nr_extents; | 94 | unsigned int nr_extents; |
96 | }; | 95 | }; |
97 | DEFINE_GUEST_HANDLE_STRUCT(xen_machphys_mfn_list); | ||
98 | 96 | ||
99 | /* | 97 | /* |
100 | * Sets the GPFN at which a particular page appears in the specified guest's | 98 | * Sets the GPFN at which a particular page appears in the specified guest's |
@@ -117,7 +115,6 @@ struct xen_add_to_physmap { | |||
117 | /* GPFN where the source mapping page should appear. */ | 115 | /* GPFN where the source mapping page should appear. */ |
118 | unsigned long gpfn; | 116 | unsigned long gpfn; |
119 | }; | 117 | }; |
120 | DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap); | ||
121 | 118 | ||
122 | /* | 119 | /* |
123 | * Translates a list of domain-specific GPFNs into MFNs. Returns a -ve error | 120 | * Translates a list of domain-specific GPFNs into MFNs. Returns a -ve error |
@@ -132,14 +129,13 @@ struct xen_translate_gpfn_list { | |||
132 | unsigned long nr_gpfns; | 129 | unsigned long nr_gpfns; |
133 | 130 | ||
134 | /* List of GPFNs to translate. */ | 131 | /* List of GPFNs to translate. */ |
135 | GUEST_HANDLE(ulong) gpfn_list; | 132 | ulong gpfn_list; |
136 | 133 | ||
137 | /* | 134 | /* |
138 | * Output list to contain MFN translations. May be the same as the input | 135 | * Output list to contain MFN translations. May be the same as the input |
139 | * list (in which case each input GPFN is overwritten with the output MFN). | 136 | * list (in which case each input GPFN is overwritten with the output MFN). |
140 | */ | 137 | */ |
141 | GUEST_HANDLE(ulong) mfn_list; | 138 | ulong mfn_list; |
142 | }; | 139 | }; |
143 | DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list); | ||
144 | 140 | ||
145 | #endif /* __XEN_PUBLIC_MEMORY_H__ */ | 141 | #endif /* __XEN_PUBLIC_MEMORY_H__ */ |
diff --git a/include/xen/interface/vcpu.h b/include/xen/interface/vcpu.h index b05d8a6d9143..87e6f8a48661 100644 --- a/include/xen/interface/vcpu.h +++ b/include/xen/interface/vcpu.h | |||
@@ -85,6 +85,7 @@ struct vcpu_runstate_info { | |||
85 | */ | 85 | */ |
86 | uint64_t time[4]; | 86 | uint64_t time[4]; |
87 | }; | 87 | }; |
88 | DEFINE_GUEST_HANDLE_STRUCT(vcpu_runstate_info); | ||
88 | 89 | ||
89 | /* VCPU is currently running on a physical CPU. */ | 90 | /* VCPU is currently running on a physical CPU. */ |
90 | #define RUNSTATE_running 0 | 91 | #define RUNSTATE_running 0 |
@@ -119,6 +120,7 @@ struct vcpu_runstate_info { | |||
119 | #define VCPUOP_register_runstate_memory_area 5 | 120 | #define VCPUOP_register_runstate_memory_area 5 |
120 | struct vcpu_register_runstate_memory_area { | 121 | struct vcpu_register_runstate_memory_area { |
121 | union { | 122 | union { |
123 | GUEST_HANDLE(vcpu_runstate_info) h; | ||
122 | struct vcpu_runstate_info *v; | 124 | struct vcpu_runstate_info *v; |
123 | uint64_t p; | 125 | uint64_t p; |
124 | } addr; | 126 | } addr; |
@@ -134,6 +136,7 @@ struct vcpu_register_runstate_memory_area { | |||
134 | struct vcpu_set_periodic_timer { | 136 | struct vcpu_set_periodic_timer { |
135 | uint64_t period_ns; | 137 | uint64_t period_ns; |
136 | }; | 138 | }; |
139 | DEFINE_GUEST_HANDLE_STRUCT(vcpu_set_periodic_timer); | ||
137 | 140 | ||
138 | /* | 141 | /* |
139 | * Set or stop a VCPU's single-shot timer. Every VCPU has one single-shot | 142 | * Set or stop a VCPU's single-shot timer. Every VCPU has one single-shot |
@@ -145,6 +148,7 @@ struct vcpu_set_singleshot_timer { | |||
145 | uint64_t timeout_abs_ns; | 148 | uint64_t timeout_abs_ns; |
146 | uint32_t flags; /* VCPU_SSHOTTMR_??? */ | 149 | uint32_t flags; /* VCPU_SSHOTTMR_??? */ |
147 | }; | 150 | }; |
151 | DEFINE_GUEST_HANDLE_STRUCT(vcpu_set_singleshot_timer); | ||
148 | 152 | ||
149 | /* Flags to VCPUOP_set_singleshot_timer. */ | 153 | /* Flags to VCPUOP_set_singleshot_timer. */ |
150 | /* Require the timeout to be in the future (return -ETIME if it's passed). */ | 154 | /* Require the timeout to be in the future (return -ETIME if it's passed). */ |
@@ -164,5 +168,6 @@ struct vcpu_register_vcpu_info { | |||
164 | uint32_t offset; /* offset within page */ | 168 | uint32_t offset; /* offset within page */ |
165 | uint32_t rsvd; /* unused */ | 169 | uint32_t rsvd; /* unused */ |
166 | }; | 170 | }; |
171 | DEFINE_GUEST_HANDLE_STRUCT(vcpu_register_vcpu_info); | ||
167 | 172 | ||
168 | #endif /* __XEN_PUBLIC_VCPU_H__ */ | 173 | #endif /* __XEN_PUBLIC_VCPU_H__ */ |
diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index 518a5bf79ed3..9b018da48cf3 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h | |||
@@ -58,6 +58,16 @@ | |||
58 | #define __HYPERVISOR_physdev_op 33 | 58 | #define __HYPERVISOR_physdev_op 33 |
59 | #define __HYPERVISOR_hvm_op 34 | 59 | #define __HYPERVISOR_hvm_op 34 |
60 | 60 | ||
61 | /* Architecture-specific hypercall definitions. */ | ||
62 | #define __HYPERVISOR_arch_0 48 | ||
63 | #define __HYPERVISOR_arch_1 49 | ||
64 | #define __HYPERVISOR_arch_2 50 | ||
65 | #define __HYPERVISOR_arch_3 51 | ||
66 | #define __HYPERVISOR_arch_4 52 | ||
67 | #define __HYPERVISOR_arch_5 53 | ||
68 | #define __HYPERVISOR_arch_6 54 | ||
69 | #define __HYPERVISOR_arch_7 55 | ||
70 | |||
61 | /* | 71 | /* |
62 | * VIRTUAL INTERRUPTS | 72 | * VIRTUAL INTERRUPTS |
63 | * | 73 | * |
@@ -68,8 +78,18 @@ | |||
68 | #define VIRQ_CONSOLE 2 /* (DOM0) Bytes received on emergency console. */ | 78 | #define VIRQ_CONSOLE 2 /* (DOM0) Bytes received on emergency console. */ |
69 | #define VIRQ_DOM_EXC 3 /* (DOM0) Exceptional event for some domain. */ | 79 | #define VIRQ_DOM_EXC 3 /* (DOM0) Exceptional event for some domain. */ |
70 | #define VIRQ_DEBUGGER 6 /* (DOM0) A domain has paused for debugging. */ | 80 | #define VIRQ_DEBUGGER 6 /* (DOM0) A domain has paused for debugging. */ |
71 | #define NR_VIRQS 8 | ||
72 | 81 | ||
82 | /* Architecture-specific VIRQ definitions. */ | ||
83 | #define VIRQ_ARCH_0 16 | ||
84 | #define VIRQ_ARCH_1 17 | ||
85 | #define VIRQ_ARCH_2 18 | ||
86 | #define VIRQ_ARCH_3 19 | ||
87 | #define VIRQ_ARCH_4 20 | ||
88 | #define VIRQ_ARCH_5 21 | ||
89 | #define VIRQ_ARCH_6 22 | ||
90 | #define VIRQ_ARCH_7 23 | ||
91 | |||
92 | #define NR_VIRQS 24 | ||
73 | /* | 93 | /* |
74 | * MMU-UPDATE REQUESTS | 94 | * MMU-UPDATE REQUESTS |
75 | * | 95 | * |
diff --git a/include/xen/interface/xencomm.h b/include/xen/interface/xencomm.h new file mode 100644 index 000000000000..ac45e0712afa --- /dev/null +++ b/include/xen/interface/xencomm.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
3 | * of this software and associated documentation files (the "Software"), to | ||
4 | * deal in the Software without restriction, including without limitation the | ||
5 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||
6 | * sell copies of the Software, and to permit persons to whom the Software is | ||
7 | * furnished to do so, subject to the following conditions: | ||
8 | * | ||
9 | * The above copyright notice and this permission notice shall be included in | ||
10 | * all copies or substantial portions of the Software. | ||
11 | * | ||
12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
13 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
14 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
15 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
16 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
17 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
18 | * DEALINGS IN THE SOFTWARE. | ||
19 | * | ||
20 | * Copyright (C) IBM Corp. 2006 | ||
21 | */ | ||
22 | |||
23 | #ifndef _XEN_XENCOMM_H_ | ||
24 | #define _XEN_XENCOMM_H_ | ||
25 | |||
26 | /* A xencomm descriptor is a scatter/gather list containing physical | ||
27 | * addresses corresponding to a virtually contiguous memory area. The | ||
28 | * hypervisor translates these physical addresses to machine addresses to copy | ||
29 | * to and from the virtually contiguous area. | ||
30 | */ | ||
31 | |||
32 | #define XENCOMM_MAGIC 0x58434F4D /* 'XCOM' */ | ||
33 | #define XENCOMM_INVALID (~0UL) | ||
34 | |||
35 | struct xencomm_desc { | ||
36 | uint32_t magic; | ||
37 | uint32_t nr_addrs; /* the number of entries in address[] */ | ||
38 | uint64_t address[0]; | ||
39 | }; | ||
40 | |||
41 | #endif /* _XEN_XENCOMM_H_ */ | ||
diff --git a/include/xen/page.h b/include/xen/page.h index 031ef22a971e..eaf85fab1263 100644 --- a/include/xen/page.h +++ b/include/xen/page.h | |||
@@ -1,180 +1 @@ | |||
1 | #ifndef __XEN_PAGE_H | #include <asm/xen/page.h> | |
2 | #define __XEN_PAGE_H | ||
3 | |||
4 | #include <linux/pfn.h> | ||
5 | |||
6 | #include <asm/uaccess.h> | ||
7 | #include <asm/pgtable.h> | ||
8 | |||
9 | #include <xen/features.h> | ||
10 | |||
11 | #ifdef CONFIG_X86_PAE | ||
12 | /* Xen machine address */ | ||
13 | typedef struct xmaddr { | ||
14 | unsigned long long maddr; | ||
15 | } xmaddr_t; | ||
16 | |||
17 | /* Xen pseudo-physical address */ | ||
18 | typedef struct xpaddr { | ||
19 | unsigned long long paddr; | ||
20 | } xpaddr_t; | ||
21 | #else | ||
22 | /* Xen machine address */ | ||
23 | typedef struct xmaddr { | ||
24 | unsigned long maddr; | ||
25 | } xmaddr_t; | ||
26 | |||
27 | /* Xen pseudo-physical address */ | ||
28 | typedef struct xpaddr { | ||
29 | unsigned long paddr; | ||
30 | } xpaddr_t; | ||
31 | #endif | ||
32 | |||
33 | #define XMADDR(x) ((xmaddr_t) { .maddr = (x) }) | ||
34 | #define XPADDR(x) ((xpaddr_t) { .paddr = (x) }) | ||
35 | |||
36 | /**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/ | ||
37 | #define INVALID_P2M_ENTRY (~0UL) | ||
38 | #define FOREIGN_FRAME_BIT (1UL<<31) | ||
39 | #define FOREIGN_FRAME(m) ((m) | FOREIGN_FRAME_BIT) | ||
40 | |||
41 | extern unsigned long *phys_to_machine_mapping; | ||
42 | |||
43 | static inline unsigned long pfn_to_mfn(unsigned long pfn) | ||
44 | { | ||
45 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
46 | return pfn; | ||
47 | |||
48 | return phys_to_machine_mapping[(unsigned int)(pfn)] & | ||
49 | ~FOREIGN_FRAME_BIT; | ||
50 | } | ||
51 | |||
52 | static inline int phys_to_machine_mapping_valid(unsigned long pfn) | ||
53 | { | ||
54 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
55 | return 1; | ||
56 | |||
57 | return (phys_to_machine_mapping[pfn] != INVALID_P2M_ENTRY); | ||
58 | } | ||
59 | |||
60 | static inline unsigned long mfn_to_pfn(unsigned long mfn) | ||
61 | { | ||
62 | unsigned long pfn; | ||
63 | |||
64 | if (xen_feature(XENFEAT_auto_translated_physmap)) | ||
65 | return mfn; | ||
66 | |||
67 | #if 0 | ||
68 | if (unlikely((mfn >> machine_to_phys_order) != 0)) | ||
69 | return max_mapnr; | ||
70 | #endif | ||
71 | |||
72 | pfn = 0; | ||
73 | /* | ||
74 | * The array access can fail (e.g., device space beyond end of RAM). | ||
75 | * In such cases it doesn't matter what we return (we return garbage), | ||
76 | * but we must handle the fault without crashing! | ||
77 | */ | ||
78 | __get_user(pfn, &machine_to_phys_mapping[mfn]); | ||
79 | |||
80 | return pfn; | ||
81 | } | ||
82 | |||
83 | static inline xmaddr_t phys_to_machine(xpaddr_t phys) | ||
84 | { | ||
85 | unsigned offset = phys.paddr & ~PAGE_MASK; | ||
86 | return XMADDR(PFN_PHYS((u64)pfn_to_mfn(PFN_DOWN(phys.paddr))) | offset); | ||
87 | } | ||
88 | |||
89 | static inline xpaddr_t machine_to_phys(xmaddr_t machine) | ||
90 | { | ||
91 | unsigned offset = machine.maddr & ~PAGE_MASK; | ||
92 | return XPADDR(PFN_PHYS((u64)mfn_to_pfn(PFN_DOWN(machine.maddr))) | offset); | ||
93 | } | ||
94 | |||
95 | /* | ||
96 | * We detect special mappings in one of two ways: | ||
97 | * 1. If the MFN is an I/O page then Xen will set the m2p entry | ||
98 | * to be outside our maximum possible pseudophys range. | ||
99 | * 2. If the MFN belongs to a different domain then we will certainly | ||
100 | * not have MFN in our p2m table. Conversely, if the page is ours, | ||
101 | * then we'll have p2m(m2p(MFN))==MFN. | ||
102 | * If we detect a special mapping then it doesn't have a 'struct page'. | ||
103 | * We force !pfn_valid() by returning an out-of-range pointer. | ||
104 | * | ||
105 | * NB. These checks require that, for any MFN that is not in our reservation, | ||
106 | * there is no PFN such that p2m(PFN) == MFN. Otherwise we can get confused if | ||
107 | * we are foreign-mapping the MFN, and the other domain as m2p(MFN) == PFN. | ||
108 | * Yikes! Various places must poke in INVALID_P2M_ENTRY for safety. | ||
109 | * | ||
110 | * NB2. When deliberately mapping foreign pages into the p2m table, you *must* | ||
111 | * use FOREIGN_FRAME(). This will cause pte_pfn() to choke on it, as we | ||
112 | * require. In all the cases we care about, the FOREIGN_FRAME bit is | ||
113 | * masked (e.g., pfn_to_mfn()) so behaviour there is correct. | ||
114 | */ | ||
115 | static inline unsigned long mfn_to_local_pfn(unsigned long mfn) | ||
116 | { | ||
117 | extern unsigned long max_mapnr; | ||
118 | unsigned long pfn = mfn_to_pfn(mfn); | ||
119 | if ((pfn < max_mapnr) | ||
120 | && !xen_feature(XENFEAT_auto_translated_physmap) | ||
121 | && (phys_to_machine_mapping[pfn] != mfn)) | ||
122 | return max_mapnr; /* force !pfn_valid() */ | ||
123 | return pfn; | ||
124 | } | ||
125 | |||
126 | static inline void set_phys_to_machine(unsigned long pfn, unsigned long mfn) | ||
127 | { | ||
128 | if (xen_feature(XENFEAT_auto_translated_physmap)) { | ||
129 | BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY); | ||
130 | return; | ||
131 | } | ||
132 | phys_to_machine_mapping[pfn] = mfn; | ||
133 | } | ||
134 | |||
135 | /* VIRT <-> MACHINE conversion */ | ||
136 | #define virt_to_machine(v) (phys_to_machine(XPADDR(__pa(v)))) | ||
137 | #define virt_to_mfn(v) (pfn_to_mfn(PFN_DOWN(__pa(v)))) | ||
138 | #define mfn_to_virt(m) (__va(mfn_to_pfn(m) << PAGE_SHIFT)) | ||
139 | |||
140 | #ifdef CONFIG_X86_PAE | ||
141 | #define pte_mfn(_pte) (((_pte).pte_low >> PAGE_SHIFT) | \ | ||
142 | (((_pte).pte_high & 0xfff) << (32-PAGE_SHIFT))) | ||
143 | |||
144 | static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot) | ||
145 | { | ||
146 | pte_t pte; | ||
147 | |||
148 | pte.pte_high = (page_nr >> (32 - PAGE_SHIFT)) | | ||
149 | (pgprot_val(pgprot) >> 32); | ||
150 | pte.pte_high &= (__supported_pte_mask >> 32); | ||
151 | pte.pte_low = ((page_nr << PAGE_SHIFT) | pgprot_val(pgprot)); | ||
152 | pte.pte_low &= __supported_pte_mask; | ||
153 | |||
154 | return pte; | ||
155 | } | ||
156 | |||
157 | static inline unsigned long long pte_val_ma(pte_t x) | ||
158 | { | ||
159 | return x.pte; | ||
160 | } | ||
161 | #define pmd_val_ma(v) ((v).pmd) | ||
162 | #define pud_val_ma(v) ((v).pgd.pgd) | ||
163 | #define __pte_ma(x) ((pte_t) { .pte = (x) }) | ||
164 | #define __pmd_ma(x) ((pmd_t) { (x) } ) | ||
165 | #else /* !X86_PAE */ | ||
166 | #define pte_mfn(_pte) ((_pte).pte_low >> PAGE_SHIFT) | ||
167 | #define mfn_pte(pfn, prot) __pte_ma(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) | ||
168 | #define pte_val_ma(x) ((x).pte) | ||
169 | #define pmd_val_ma(v) ((v).pud.pgd.pgd) | ||
170 | #define __pte_ma(x) ((pte_t) { (x) } ) | ||
171 | #endif /* CONFIG_X86_PAE */ | ||
172 | |||
173 | #define pgd_val_ma(x) ((x).pgd) | ||
174 | |||
175 | |||
176 | xmaddr_t arbitrary_virt_to_machine(unsigned long address); | ||
177 | void make_lowmem_page_readonly(void *vaddr); | ||
178 | void make_lowmem_page_readwrite(void *vaddr); | ||
179 | |||
180 | #endif /* __XEN_PAGE_H */ | ||
diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h new file mode 100644 index 000000000000..10ddfe0142d0 --- /dev/null +++ b/include/xen/xen-ops.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef INCLUDE_XEN_OPS_H | ||
2 | #define INCLUDE_XEN_OPS_H | ||
3 | |||
4 | #include <linux/percpu.h> | ||
5 | |||
6 | DECLARE_PER_CPU(struct vcpu_info *, xen_vcpu); | ||
7 | |||
8 | #endif /* INCLUDE_XEN_OPS_H */ | ||
diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h index 6f7c290651ae..6369d89c25d5 100644 --- a/include/xen/xenbus.h +++ b/include/xen/xenbus.h | |||
@@ -97,6 +97,7 @@ struct xenbus_driver { | |||
97 | int (*uevent)(struct xenbus_device *, char **, int, char *, int); | 97 | int (*uevent)(struct xenbus_device *, char **, int, char *, int); |
98 | struct device_driver driver; | 98 | struct device_driver driver; |
99 | int (*read_otherend_details)(struct xenbus_device *dev); | 99 | int (*read_otherend_details)(struct xenbus_device *dev); |
100 | int (*is_ready)(struct xenbus_device *dev); | ||
100 | }; | 101 | }; |
101 | 102 | ||
102 | static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv) | 103 | static inline struct xenbus_driver *to_xenbus_driver(struct device_driver *drv) |
diff --git a/include/xen/xencomm.h b/include/xen/xencomm.h new file mode 100644 index 000000000000..e43b039be112 --- /dev/null +++ b/include/xen/xencomm.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
15 | * | ||
16 | * Copyright (C) IBM Corp. 2006 | ||
17 | * | ||
18 | * Authors: Hollis Blanchard <hollisb@us.ibm.com> | ||
19 | * Jerone Young <jyoung5@us.ibm.com> | ||
20 | */ | ||
21 | |||
22 | #ifndef _LINUX_XENCOMM_H_ | ||
23 | #define _LINUX_XENCOMM_H_ | ||
24 | |||
25 | #include <xen/interface/xencomm.h> | ||
26 | |||
27 | #define XENCOMM_MINI_ADDRS 3 | ||
28 | struct xencomm_mini { | ||
29 | struct xencomm_desc _desc; | ||
30 | uint64_t address[XENCOMM_MINI_ADDRS]; | ||
31 | }; | ||
32 | |||
33 | /* To avoid additionnal virt to phys conversion, an opaque structure is | ||
34 | presented. */ | ||
35 | struct xencomm_handle; | ||
36 | |||
37 | extern void xencomm_free(struct xencomm_handle *desc); | ||
38 | extern struct xencomm_handle *xencomm_map(void *ptr, unsigned long bytes); | ||
39 | extern struct xencomm_handle *__xencomm_map_no_alloc(void *ptr, | ||
40 | unsigned long bytes, struct xencomm_mini *xc_area); | ||
41 | |||
42 | #if 0 | ||
43 | #define XENCOMM_MINI_ALIGNED(xc_desc, n) \ | ||
44 | struct xencomm_mini xc_desc ## _base[(n)] \ | ||
45 | __attribute__((__aligned__(sizeof(struct xencomm_mini)))); \ | ||
46 | struct xencomm_mini *xc_desc = &xc_desc ## _base[0]; | ||
47 | #else | ||
48 | /* | ||
49 | * gcc bug workaround: | ||
50 | * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16660 | ||
51 | * gcc doesn't handle properly stack variable with | ||
52 | * __attribute__((__align__(sizeof(struct xencomm_mini)))) | ||
53 | */ | ||
54 | #define XENCOMM_MINI_ALIGNED(xc_desc, n) \ | ||
55 | unsigned char xc_desc ## _base[((n) + 1 ) * \ | ||
56 | sizeof(struct xencomm_mini)]; \ | ||
57 | struct xencomm_mini *xc_desc = (struct xencomm_mini *) \ | ||
58 | ((unsigned long)xc_desc ## _base + \ | ||
59 | (sizeof(struct xencomm_mini) - \ | ||
60 | ((unsigned long)xc_desc ## _base) % \ | ||
61 | sizeof(struct xencomm_mini))); | ||
62 | #endif | ||
63 | #define xencomm_map_no_alloc(ptr, bytes) \ | ||
64 | ({ XENCOMM_MINI_ALIGNED(xc_desc, 1); \ | ||
65 | __xencomm_map_no_alloc(ptr, bytes, xc_desc); }) | ||
66 | |||
67 | /* provided by architecture code: */ | ||
68 | extern unsigned long xencomm_vtop(unsigned long vaddr); | ||
69 | |||
70 | static inline void *xencomm_pa(void *ptr) | ||
71 | { | ||
72 | return (void *)xencomm_vtop((unsigned long)ptr); | ||
73 | } | ||
74 | |||
75 | #define xen_guest_handle(hnd) ((hnd).p) | ||
76 | |||
77 | #endif /* _LINUX_XENCOMM_H_ */ | ||